Changeset a56903


Ignore:
Timestamp:
04/23/11 20:55:59 (13 months ago)
Author:
Marcel Bokhorst <marcel@…>
Branches:
master
Children:
85be9b
Parents:
66d942
git-author:
Marcel Bokhorst <marcel@…> (04/23/11 20:55:59)
git-committer:
Erik Ekman <erik@…> (02/04/12 20:34:05)
Message:

Android support (#105) patch from Marcel Bokhorst

Files:
2 added
10 edited

Legend:

Unmodified
Added
Removed
  • src/client.c

    rb22e3d ra56903  
    3232#include <winsock2.h> 
    3333#else 
     34#ifdef ANDROID 
     35#include "android_dns.h" 
     36#endif 
    3437#include <arpa/nameser.h> 
    3538#ifdef DARWIN 
     
    149152client_set_nameserver(const char *cp, int port)  
    150153{ 
     154#ifdef ANDROID 
     155        struct addrinfo hints, *result, *p; 
     156        memset(&hints, 0, sizeof(hints)); 
     157        hints.ai_family = AF_INET; 
     158 
     159        char sport[10]; 
     160        sprintf(sport, "%d", port); 
     161 
     162        getaddrinfo(cp, sport, &hints, &result); 
     163        if (result == NULL) 
     164                errx(1, "Cannot resolve %s:%s (no network?)",  cp, sport); 
     165        else { 
     166                for (p = result;p != NULL; p = p->ai_next) { 
     167                        if (p->ai_family == AF_INET) { /* IPv4 */ 
     168                                struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr; 
     169                                memset(&nameserv, 0, sizeof(nameserv)); 
     170                                nameserv.sin_family = AF_INET; 
     171                                nameserv.sin_port = htons(port); 
     172                                nameserv.sin_addr = ipv4->sin_addr; 
     173                                freeaddrinfo(result); 
     174                                return; 
     175                        } 
     176                } 
     177                freeaddrinfo(result); 
     178        } 
     179#endif 
    151180        struct in_addr addr; 
    152181 
  • src/common.c

    r9c3343 ra56903  
    5555 
    5656/* daemon(3) exists only in 4.4BSD or later, and in GNU libc */ 
    57 #if !defined(WINDOWS32) && !(defined(BSD) && (BSD >= 199306)) && !defined(__GLIBC__) 
     57#if !defined(ANDROID) && !defined(WINDOWS32) && !(defined(BSD) && (BSD >= 199306)) && !defined(__GLIBC__) 
    5858static int daemon(int nochdir, int noclose) 
    5959{ 
     
    277277} 
    278278 
    279 #ifdef WINDOWS32 
     279#if defined(WINDOWS32) || defined(ANDROID) 
     280#ifndef ANDROID 
    280281int 
    281282inet_aton(const char *cp, struct in_addr *inp) 
     
    284285 return inp->s_addr != INADDR_ANY; 
    285286} 
     287#endif 
    286288 
    287289void 
     
    292294        va_start(list, fmt); 
    293295        if (fmt) fprintf(stderr, fmt, list); 
     296#ifndef ANDROID 
    294297        if (errno == 0) { 
    295298                fprintf(stderr, ": WSA error %d\n", WSAGetLastError());  
     
    297300                fprintf(stderr, ": %s\n", strerror(errno)); 
    298301        } 
     302#endif 
    299303        va_end(list); 
    300304} 
  • src/common.h

    rb17790 ra56903  
    120120int check_topdomain(char *); 
    121121 
    122 #ifdef WINDOWS32 
     122#if defined(WINDOWS32) || defined(ANDROID) 
     123#ifndef ANDROID 
    123124int inet_aton(const char *cp, struct in_addr *inp); 
     125#endif 
    124126 
    125127void err(int eval, const char *fmt, ...); 
  • src/dns.c

    rb17790 ra56903  
    2626#include "windows.h" 
    2727#else 
     28#ifdef ANDROID 
     29#include "android_dns.h" 
     30#endif 
    2831#include <arpa/nameser.h> 
    2932#ifdef DARWIN 
  • src/iodined.c

    r0a968a ra56903  
    16561656                   20msec: ~8 packs every 1/50sec = ~400 DNSreq/sec, 
    16571657                   or ~1200bytes every 1/50sec = ~0.5 Mbit/sec upstream */ 
    1658                 for (userid = 0; userid < USERS; userid++) { 
     1658                for (userid = 0; userid < created_users; userid++) { 
    16591659                        if (users[userid].active && !users[userid].disabled && 
    16601660                            users[userid].last_pkt + 60 > time(NULL)) { 
     
    17081708 
    17091709                /* Send realsoon's if tun or dns didn't already */ 
    1710                 for (userid = 0; userid < USERS; userid++) 
     1710                for (userid = 0; userid < created_users; userid++) 
    17111711                        if (users[userid].active && !users[userid].disabled && 
    17121712                            users[userid].last_pkt + 60 > time(NULL) && 
  • src/tun.c

    r0be433 ra56903  
    2525#include <fcntl.h> 
    2626 
     27#ifndef IFCONFIGPATH 
     28#define IFCONFIGPATH "/sbin/" 
     29#endif 
     30 
    2731#ifdef WINDOWS32 
    2832#include <winsock2.h> 
     
    7276        int tun_fd; 
    7377        struct ifreq ifreq; 
     78#ifdef ANDROID 
     79        char *tunnel = "/dev/tun"; 
     80#else 
    7481        char *tunnel = "/dev/net/tun"; 
     82#endif 
    7583 
    7684        if ((tun_fd = open(tunnel, O_RDWR)) < 0) { 
     
    456464#ifndef WINDOWS32 
    457465        snprintf(cmdline, sizeof(cmdline),  
    458                         "/sbin/ifconfig %s %s %s netmask %s", 
     466                        IFCONFIGPATH "ifconfig %s %s %s netmask %s", 
    459467                        if_name, 
    460468                        ip, 
     
    523531        if (mtu > 200 && mtu <= 1500) { 
    524532                snprintf(cmdline, sizeof(cmdline),  
    525                                 "/sbin/ifconfig %s mtu %u", 
     533                                IFCONFIGPATH "ifconfig %s mtu %u", 
    526534                                if_name, 
    527535                                mtu); 
  • src/user.c

    r0be433 ra56903  
    3434#include "user.h" 
    3535 
    36 struct user users[USERS]; 
     36struct user *users; 
     37unsigned usercount; 
    3738 
    3839int 
     
    4243        int skip = 0; 
    4344        char newip[16]; 
    44         int created_users = 0; 
    4545 
    4646        int maxusers; 
     
    5858 
    5959        maxusers = (1 << (32-netbits)) - 3; /* 3: Net addr, broadcast addr, iodined addr */ 
    60          
    61         memset(users, 0, USERS * sizeof(struct user)); 
    62         for (i = 0; i < USERS; i++) { 
     60        usercount = MIN(maxusers, USERS); 
     61         
     62        users = calloc(usercount, sizeof(struct user)); 
     63        for (i = 0; i < usercount; i++) { 
    6364                in_addr_t ip; 
    6465                users[i].id = i; 
     
    7374                users[i].tun_ip = ip; 
    7475                net.s_addr = ip; 
    75                 if (maxusers--  < 1) { 
    76                         users[i].disabled = 1; 
    77                 } else { 
    78                         users[i].disabled = 0; 
    79                         created_users++; 
    80                 } 
     76                users[i].disabled = 0; 
    8177                users[i].active = 0; 
    8278                /* Rest is reset on login ('V' packet) */ 
    8379        } 
    8480 
    85         return created_users; 
     81        return usercount; 
    8682} 
    8783 
     
    10197 
    10298        ret = 0; 
    103         for (i = 0; i < USERS; i++) { 
     99        for (i = 0; i < usercount; i++) { 
    104100                if (users[i].active && !users[i].disabled &&  
    105101                        users[i].last_pkt + 60 > time(NULL) && 
     
    119115 
    120116        ret = -1; 
    121         for (i = 0; i < USERS; i++) { 
     117        for (i = 0; i < usercount; i++) { 
    122118                if (users[i].active && !users[i].disabled && 
    123119                        users[i].last_pkt + 60 > time(NULL) && 
     
    144140        ret = 1; 
    145141        now = time(NULL); 
    146         for (i = 0; i < USERS; i++) { 
     142        for (i = 0; i < usercount; i++) { 
    147143                if (users[i].active && !users[i].disabled && 
    148144                        users[i].last_pkt + 60 > now && 
     
    168164        int ret = -1; 
    169165        int i; 
    170         for (i = 0; i < USERS; i++) { 
     166        for (i = 0; i < usercount; i++) { 
    171167                /* Not used at all or not used in one minute */ 
    172168                if ((!users[i].active || users[i].last_pkt + 60 < time(NULL)) && !users[i].disabled) { 
     
    185181user_switch_codec(int userid, struct encoder *enc) 
    186182{ 
    187         if (userid < 0 || userid >= USERS) 
     183        if (userid < 0 || userid >= usercount) 
    188184                return; 
    189185         
     
    194190user_set_conn_type(int userid, enum connection c) 
    195191{ 
    196         if (userid < 0 || userid >= USERS) 
     192        if (userid < 0 || userid >= usercount) 
    197193                return; 
    198194 
  • src/user.h

    rb22e3d ra56903  
    7474}; 
    7575 
    76 extern struct user users[USERS]; 
     76extern struct user *users; 
    7777 
    7878int init_users(in_addr_t, int); 
  • src/util.c

    r66d942 ra56903  
    2626        char buf[80]; 
    2727        FILE *fp; 
     28#ifdef ANDROID 
     29        fp = popen("getprop net.dns1", "r"); 
     30        if (fp == NULL) 
     31                err(1, "getprop net.dns1 failed"); 
     32        if (fgets(buf, sizeof(buf), fp) == NULL) 
     33                err(1, "read getprop net.dns1 failed"); 
     34        if (sscanf(buf, "%15s", addr) == 1) 
     35                rv = addr; 
     36        pclose(fp); 
     37#else 
    2838         
    2939        rv = NULL; 
     
    4252         
    4353        fclose(fp); 
     54#endif 
    4455#else /* !WINDOWS32 */ 
    4556        FIXED_INFO  *fixed_info; 
  • tests/user.c

    r85104a ra56903  
    3333        char givenip[16]; 
    3434        int i; 
    35  
    36         ip = inet_addr("127.0.0.1"); 
    37         init_users(ip, 27); 
    38         for (i = 0; i < USERS; i++) { 
     35        int count; 
     36 
     37        ip = inet_addr("127.0.0.1"); 
     38        count = init_users(ip, 27); 
     39        for (i = 0; i < count; i++) { 
    3940                fail_unless(users[i].id == i); 
    4041                fail_unless(users[i].q.id == 0); 
Note: See TracChangeset for help on using the changeset viewer.