diff --git a/.gitignore b/.gitignore index 528834c8..ac33841e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.iml .gradle /local.properties /.idea @@ -7,3 +8,4 @@ /build /captures /tools/config.sh +app/.externalNativeBuild diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt new file mode 100644 index 00000000..ff27ce06 --- /dev/null +++ b/app/CMakeLists.txt @@ -0,0 +1,23 @@ + +cmake_minimum_required(VERSION 3.4.1) + +add_library( netguard + SHARED + src/main/jni/netguard/netguard.c + src/main/jni/netguard/session.c + src/main/jni/netguard/ip.c + src/main/jni/netguard/tcp.c + src/main/jni/netguard/udp.c + src/main/jni/netguard/icmp.c + src/main/jni/netguard/dns.c + src/main/jni/netguard/dhcp.c + src/main/jni/netguard/pcap.c + src/main/jni/netguard/util.c ) + +include_directories( src/main/jni/netguard/ ) + +find_library( log-lib + log ) + +target_link_libraries( netguard + ${log-lib} ) diff --git a/app/app.iml b/app/app.iml index c3ad3401..6621aace 100644 --- a/app/app.iml +++ b/app/app.iml @@ -8,11 +8,11 @@ - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + + + + + + + + + + @@ -108,39 +78,43 @@ - + + - - - - - - - - - + + + + + + + + + - + + + - + - - + + + @@ -148,42 +122,42 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 619a937a..c3e8ea87 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,101 +1,66 @@ -apply plugin: 'com.android.model.application' +apply plugin: 'com.android.application' -model { - android { - compileSdkVersion = 26 - buildToolsVersion = "26.0.2" +android { + compileSdkVersion = 26 + buildToolsVersion = "26.0.2" - defaultConfig { - applicationId = "eu.faircode.netguard" - } + defaultConfig { + applicationId = "eu.faircode.netguard" + versionName = "2.142" + minSdkVersion 14 + targetSdkVersion 26 + versionCode = 2017102301 + archivesBaseName = "NetGuard-v$versionName" - compileOptions.with { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + externalNativeBuild { + cmake { + cppFlags "" + arguments "-DANDROID_PLATFORM=android-14" + // https://developer.android.com/ndk/guides/cmake.html + } } ndk { - platformVersion = "14" - moduleName = "netguard" - toolchain = "clang" - ldLibs.add("log") + abiFilters 'armeabi', 'x86' } + } - sources { - main { - jni { - source { - srcDirs.removeAll() - srcDirs.add('src/main/jni/netguard') - } - exportedHeaders { - } - } - } + externalNativeBuild { + cmake { + path "CMakeLists.txt" } + } - buildTypes { - release { - minifyEnabled = true - useProguard = true - proguardFiles.add(file('proguard-rules.pro')) - ndk.with { - debuggable = false - } - } - debug { - minifyEnabled = true - useProguard = true - proguardFiles.add(file('proguard-rules.pro')) - ndk.with { - debuggable = false - } - } + buildTypes { + release { + minifyEnabled = true + useProguard = true + proguardFiles.add(file('proguard-rules.pro')) } - - productFlavors { - create("all") { - versionName = "2.141" - minSdkVersion.apiLevel = 14 - targetSdkVersion.apiLevel = 26 - versionCode = 2017102202 - archivesBaseName = "NetGuard-v$versionName" - } - create("lollipop-and-later") { - versionName = "2.141" - minSdkVersion.apiLevel = 20 - targetSdkVersion.apiLevel = 26 - versionCode = 2017102212 - archivesBaseName = "NetGuard-v$versionName" - } - create("kitkat-and-earlier") { - versionName = "2.141" - minSdkVersion.apiLevel = 14 - maxSdkVersion = 19 - targetSdkVersion.apiLevel = 26 - versionCode = 2017102222 - archivesBaseName = "NetGuard-v$versionName" - } + debug { + minifyEnabled = true + useProguard = true + proguardFiles.add(file('proguard-rules.pro')) } } } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.jar']) // https://developer.android.com/topic/libraries/support-library/revisions.html - compile 'com.android.support:appcompat-v7:26.1.+' - compile 'com.android.support:recyclerview-v7:26.1.+' + implementation 'com.android.support:appcompat-v7:26.1.+' + implementation 'com.android.support:recyclerview-v7:26.1.+' // https://developers.google.com/android/guides/setup - compile 'com.google.android.gms:play-services-base:11.4.+' + implementation 'com.google.android.gms:play-services-base:11.4.+' // https://firebase.google.com/docs/android/setup - compile 'com.google.firebase:firebase-core:11.4.+' - compile 'com.google.firebase:firebase-ads:11.4.+' + implementation 'com.google.firebase:firebase-core:11.4.+' + implementation 'com.google.firebase:firebase-ads:11.4.+' // https://mvnrepository.com/artifact/com.squareup.picasso/picasso - compile 'com.squareup.picasso:picasso:2.5.+' + implementation 'com.squareup.picasso:picasso:2.5.+' } apply plugin: 'com.google.gms.google-services' diff --git a/app/src/all/AndroidManifest.xml b/app/src/all/AndroidManifest.xml deleted file mode 100644 index 078e5474..00000000 --- a/app/src/all/AndroidManifest.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/app/src/kitkat-and-earlier/AndroidManifest.xml b/app/src/kitkat-and-earlier/AndroidManifest.xml deleted file mode 100644 index 078e5474..00000000 --- a/app/src/kitkat-and-earlier/AndroidManifest.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cff4943e..00720053 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ + saddr); + inet_pton(AF_INET, "10.1.10.1", (void *) &u->saddr); /* Discover: diff --git a/app/src/main/jni/netguard/dns.c b/app/src/main/jni/netguard/dns.c index f3b14d1c..ac71238b 100644 --- a/app/src/main/jni/netguard/dns.c +++ b/app/src/main/jni/netguard/dns.c @@ -35,16 +35,14 @@ int32_t get_qname(const uint8_t *data, const size_t datalen, uint16_t off, char c = 1; off += 2; } - } - else if (ptr + 1 + len <= datalen && noff + len <= DNS_QNAME_MAX) { + } else if (ptr + 1 + len <= datalen && noff + len <= DNS_QNAME_MAX) { memcpy(qname + noff, data + ptr + 1, len); *(qname + noff + len) = '.'; noff += (len + 1); ptr += (len + 1); len = *(data + ptr); - } - else + } else break; } ptr++; @@ -98,8 +96,7 @@ void parse_dns_response(const struct arguments *args, const struct udp_session * q, qtype, qclass, qname); } off += 4; - } - else { + } else { log_android(ANDROID_LOG_WARN, "DNS response Q invalid off %d datalen %d", off, *datalen); return; @@ -131,22 +128,19 @@ void parse_dns_response(const struct arguments *args, const struct udp_session * "DNS answer %d qname %s qtype %d ttl %d data %s", a, name, qtype, ttl, rd); - } - else + } else log_android(ANDROID_LOG_DEBUG, "DNS answer %d qname %s qclass %d qtype %d ttl %d length %d", a, name, qclass, qtype, ttl, rdlength); off += rdlength; - } - else { + } else { log_android(ANDROID_LOG_WARN, "DNS response A invalid off %d rdlength %d datalen %d", off, rdlength, *datalen); return; } - } - else { + } else { log_android(ANDROID_LOG_WARN, "DNS response A invalid off %d datalen %d", off, *datalen); return; @@ -173,8 +167,7 @@ void parse_dns_response(const struct arguments *args, const struct udp_session * if (u->version == 4) { inet_ntop(AF_INET, &u->saddr.ip4, source, sizeof(source)); inet_ntop(AF_INET, &u->daddr.ip4, dest, sizeof(dest)); - } - else { + } else { inet_ntop(AF_INET6, &u->saddr.ip6, source, sizeof(source)); inet_ntop(AF_INET6, &u->daddr.ip6, dest, sizeof(dest)); } @@ -188,8 +181,7 @@ void parse_dns_response(const struct arguments *args, const struct udp_session * name, 0, 0); log_packet(args, objPacket); } - } - else if (acount > 0) + } else if (acount > 0) log_android(ANDROID_LOG_WARN, "DNS response qr %d opcode %d qcount %d acount %d", dns->qr, dns->opcode, qcount, acount); @@ -217,8 +209,7 @@ int get_dns_query(const struct arguments *args, const struct udp_session *u, *qtype = ntohs(*((uint16_t *) (data + off))); *qclass = ntohs(*((uint16_t *) (data + off + 2))); return 0; - } - else + } else log_android(ANDROID_LOG_WARN, "DNS query invalid off %d datalen %d", off, datalen); } diff --git a/app/src/main/jni/netguard/icmp.c b/app/src/main/jni/netguard/icmp.c index 4d8a810f..6d0f4ebf 100644 --- a/app/src/main/jni/netguard/icmp.c +++ b/app/src/main/jni/netguard/icmp.c @@ -42,8 +42,7 @@ int check_icmp_session(const struct arguments *args, struct ng_session *s, if (s->icmp.version == 4) { inet_ntop(AF_INET, &s->icmp.saddr.ip4, source, sizeof(source)); inet_ntop(AF_INET, &s->icmp.daddr.ip4, dest, sizeof(dest)); - } - else { + } else { inet_ntop(AF_INET6, &s->icmp.saddr.ip6, source, sizeof(source)); inet_ntop(AF_INET6, &s->icmp.daddr.ip6, dest, sizeof(dest)); } @@ -79,8 +78,7 @@ void check_icmp_socket(const struct arguments *args, const struct epoll_event *e serr, strerror(serr)); s->icmp.stop = 1; - } - else { + } else { // Check socket read if (ev->events & EPOLLIN) { s->icmp.time = time(NULL); @@ -95,13 +93,11 @@ void check_icmp_socket(const struct arguments *args, const struct epoll_event *e if (errno != EINTR && errno != EAGAIN) s->icmp.stop = 1; - } - else if (bytes == 0) { + } else if (bytes == 0) { log_android(ANDROID_LOG_WARN, "ICMP recv eof"); s->icmp.stop = 1; - } - else { + } else { // Socket read data char dest[INET6_ADDRSTRLEN + 1]; if (s->icmp.version == 4) @@ -163,8 +159,7 @@ jboolean handle_icmp(const struct arguments *args, if (version == 4) { inet_ntop(AF_INET, &ip4->saddr, source, sizeof(source)); inet_ntop(AF_INET, &ip4->daddr, dest, sizeof(dest)); - } - else { + } else { inet_ntop(AF_INET6, &ip6->ip6_src, source, sizeof(source)); inet_ntop(AF_INET6, &ip6->ip6_dst, dest, sizeof(dest)); } @@ -201,8 +196,7 @@ jboolean handle_icmp(const struct arguments *args, if (version == 4) { s->icmp.saddr.ip4 = (__be32) ip4->saddr; s->icmp.daddr.ip4 = (__be32) ip4->daddr; - } - else { + } else { memcpy(&s->icmp.saddr.ip6, &ip6->ip6_src, 16); memcpy(&s->icmp.daddr.ip6, &ip6->ip6_dst, 16); } @@ -264,8 +258,7 @@ jboolean handle_icmp(const struct arguments *args, server4.sin_family = AF_INET; server4.sin_addr.s_addr = (__be32) ip4->daddr; server4.sin_port = 0; - } - else { + } else { server6.sin6_family = AF_INET6; memcpy(&server6.sin6_addr, &ip6->ip6_dst, 16); server6.sin6_port = 0; @@ -273,7 +266,8 @@ jboolean handle_icmp(const struct arguments *args, // Send raw ICMP message if (sendto(cur->socket, icmp, (socklen_t) icmplen, MSG_NOSIGNAL, - (const struct sockaddr *) (version == 4 ? &server4 : &server6), + (version == 4 ? (const struct sockaddr *) &server4 + : (const struct sockaddr *) &server6), (socklen_t) (version == 4 ? sizeof(server4) : sizeof(server6))) != icmplen) { log_android(ANDROID_LOG_ERROR, "ICMP sendto error %d: %s", errno, strerror(errno)); if (errno != EINTR && errno != EAGAIN) { @@ -330,8 +324,7 @@ ssize_t write_icmp(const struct arguments *args, const struct icmp_session *cur, // Calculate IP4 checksum ip4->check = ~calc_checksum(0, (uint8_t *) ip4, sizeof(struct iphdr)); - } - else { + } else { len = sizeof(struct ip6_hdr) + datalen; buffer = malloc(len); struct ip6_hdr *ip6 = (struct ip6_hdr *) buffer; @@ -350,9 +343,11 @@ ssize_t write_icmp(const struct arguments *args, const struct icmp_session *cur, } inet_ntop(cur->version == 4 ? AF_INET : AF_INET6, - cur->version == 4 ? &cur->saddr.ip4 : &cur->saddr.ip6, source, sizeof(source)); + cur->version == 4 ? (const void *) &cur->saddr.ip4 : (const void *) &cur->saddr.ip6, + source, sizeof(source)); inet_ntop(cur->version == 4 ? AF_INET : AF_INET6, - cur->version == 4 ? &cur->daddr.ip4 : &cur->daddr.ip6, dest, sizeof(dest)); + cur->version == 4 ? (const void *) &cur->daddr.ip4 : (const void *) &cur->daddr.ip6, + dest, sizeof(dest)); // Send raw ICMP message log_android(ANDROID_LOG_WARN, @@ -366,8 +361,7 @@ ssize_t write_icmp(const struct arguments *args, const struct icmp_session *cur, if (res >= 0) { if (pcap_file != NULL) write_pcap_rec(buffer, (size_t) res); - } - else + } else log_android(ANDROID_LOG_WARN, "ICMP write error %d: %s", errno, strerror(errno)); free(buffer); diff --git a/app/src/main/jni/netguard/ip.c b/app/src/main/jni/netguard/ip.c index f018e59b..6d8fd199 100644 --- a/app/src/main/jni/netguard/ip.c +++ b/app/src/main/jni/netguard/ip.c @@ -46,8 +46,7 @@ int check_tun(const struct arguments *args, args->tun, errno, strerror(errno)); report_exit(args, "fcntl tun %d F_GETFL error %d: %s", args->tun, errno, strerror(errno)); - } - else + } else report_exit(args, "tun %d exception", args->tun); return -1; } @@ -69,8 +68,7 @@ int check_tun(const struct arguments *args, args->tun, errno, strerror(errno)); return -1; } - } - else if (length > 0) { + } else if (length > 0) { // Write pcap record if (pcap_file != NULL) write_pcap_rec(buffer, (size_t) length); @@ -84,8 +82,7 @@ int check_tun(const struct arguments *args, handle_ip(args, buffer, (size_t) length, epoll_fd, sessions, maxsessions); free(buffer); - } - else { + } else { // tun eof free(buffer); @@ -167,8 +164,7 @@ void handle_ip(const struct arguments *args, return; } } - } - else if (version == 6) { + } else if (version == 6) { if (length < sizeof(struct ip6_hdr)) { log_android(ANDROID_LOG_WARN, "IP6 packet too short length %d", length); return; @@ -203,8 +199,7 @@ void handle_ip(const struct arguments *args, payload = (uint8_t *) (pkt + sizeof(struct ip6_hdr) + off); // TODO checksum - } - else { + } else { log_android(ANDROID_LOG_ERROR, "Unknown version %d", version); return; } @@ -228,8 +223,7 @@ void handle_ip(const struct arguments *args, sport = ntohs(icmp->icmp_id); dport = ntohs(icmp->icmp_id); - } - else if (protocol == IPPROTO_UDP) { + } else if (protocol == IPPROTO_UDP) { if (length - (payload - pkt) < sizeof(struct udphdr)) { log_android(ANDROID_LOG_WARN, "UDP packet too short"); return; @@ -241,8 +235,7 @@ void handle_ip(const struct arguments *args, dport = ntohs(udp->dest); // TODO checksum (IPv6) - } - else if (protocol == IPPROTO_TCP) { + } else if (protocol == IPPROTO_TCP) { if (length - (payload - pkt) < sizeof(struct tcphdr)) { log_android(ANDROID_LOG_WARN, "TCP packet too short"); return; @@ -267,8 +260,7 @@ void handle_ip(const struct arguments *args, flags[flen++] = 'R'; // TODO checksum - } - else if (protocol != IPPROTO_HOPOPTS && protocol != IPPROTO_IGMP && protocol != IPPROTO_ESP) + } else if (protocol != IPPROTO_HOPOPTS && protocol != IPPROTO_IGMP && protocol != IPPROTO_ESP) log_android(ANDROID_LOG_WARN, "Unknown protocol %d", protocol); flags[flen] = 0; @@ -320,8 +312,7 @@ void handle_ip(const struct arguments *args, handle_udp(args, pkt, length, payload, uid, redirect, epoll_fd); else if (protocol == IPPROTO_TCP) handle_tcp(args, pkt, length, payload, uid, allowed, redirect, epoll_fd); - } - else { + } else { if (protocol == IPPROTO_UDP) block_udp(args, pkt, length, payload, uid); if (protocol == IPPROTO_TCP) @@ -442,8 +433,7 @@ jint get_uid_sub(const int version, const int protocol, break; } } - } - else + } else log_android(ANDROID_LOG_ERROR, "Invalid field #%d: %s", fields, line); } } diff --git a/app/src/main/jni/netguard/netguard.c b/app/src/main/jni/netguard/netguard.c index 42cc2f73..5ee2aa08 100644 --- a/app/src/main/jni/netguard/netguard.c +++ b/app/src/main/jni/netguard/netguard.c @@ -242,7 +242,7 @@ Java_eu_faircode_netguard_ServiceSinkhole_jni_1get_1stats(JNIEnv *env, jobject i getrlimit(RLIMIT_NOFILE, &rlim); jcount[4] = (jint) rlim.rlim_cur; - (*env)->ReleaseIntArrayElements(env, jarray, jcount, NULL); + (*env)->ReleaseIntArrayElements(env, jarray, jcount, 0); return jarray; } @@ -418,7 +418,7 @@ void report_error(const struct arguments *args, jint error, const char *fmt, ... static jmethodID midProtect = NULL; int protect_socket(const struct arguments *args, int socket) { - if (args->sdk >= 21) + if (args->sdk >= 23) return 0; jclass cls = (*args->env)->GetObjectClass(args->env, args->instance); diff --git a/app/src/main/jni/netguard/netguard.h b/app/src/main/jni/netguard/netguard.h index 970439e7..ca099354 100644 --- a/app/src/main/jni/netguard/netguard.h +++ b/app/src/main/jni/netguard/netguard.h @@ -20,6 +20,8 @@ #include #include +#include +#include #include #include #include @@ -212,14 +214,14 @@ typedef struct pcap_hdr_s { guint32_t sigfigs; guint32_t snaplen; guint32_t network; -} __packed; +} __packed pcap_hdr_s; typedef struct pcaprec_hdr_s { guint32_t ts_sec; guint32_t ts_usec; guint32_t incl_len; guint32_t orig_len; -} __packed; +} __packed pcaprec_hdr_s; #define LINKTYPE_RAW 101 @@ -271,7 +273,7 @@ typedef struct dns_rr { __be16 qclass; __be32 ttl; __be16 rdlength; -} __packed; +} __packed dns_rr; // DHCP @@ -293,12 +295,12 @@ typedef struct dhcp_packet { uint8_t sname[64]; uint8_t file[128]; uint32_t option_format; -} __packed; +} __packed dhcp_packet; typedef struct dhcp_option { uint8_t code; uint8_t length; -} __packed; +} __packed dhcp_option; // Prototypes diff --git a/app/src/main/jni/netguard/session.c b/app/src/main/jni/netguard/session.c index d014383d..07bb91fa 100644 --- a/app/src/main/jni/netguard/session.c +++ b/app/src/main/jni/netguard/session.c @@ -49,6 +49,7 @@ sighandler_t old_handler; sigjmp_buf jump; void handle_sigabrt(int sig) { + log_android(ANDROID_LOG_ERROR, "sigabrt"); old_handler(sig); siglongjmp(jump, 1); } diff --git a/app/src/main/jni/netguard/tcp.c b/app/src/main/jni/netguard/tcp.c index 9a8a6ede..1fc51a28 100644 --- a/app/src/main/jni/netguard/tcp.c +++ b/app/src/main/jni/netguard/tcp.c @@ -61,8 +61,7 @@ int check_tcp_session(const struct arguments *args, struct ng_session *s, if (s->tcp.version == 4) { inet_ntop(AF_INET, &s->tcp.saddr.ip4, source, sizeof(source)); inet_ntop(AF_INET, &s->tcp.daddr.ip4, dest, sizeof(dest)); - } - else { + } else { inet_ntop(AF_INET6, &s->tcp.saddr.ip6, source, sizeof(source)); inet_ntop(AF_INET6, &s->tcp.daddr.ip6, dest, sizeof(dest)); } @@ -126,8 +125,7 @@ int monitor_tcp_session(const struct arguments *args, struct ng_session *s, int events = events | EPOLLOUT; else events = events | EPOLLIN; - } - else if (s->tcp.state == TCP_ESTABLISHED || s->tcp.state == TCP_CLOSE_WAIT) { + } else if (s->tcp.state == TCP_ESTABLISHED || s->tcp.state == TCP_CLOSE_WAIT) { // Check for incoming data if (get_send_window(&s->tcp) > 0) @@ -161,8 +159,7 @@ int monitor_tcp_session(const struct arguments *args, struct ng_session *s, int if (epoll_ctl(epoll_fd, EPOLL_CTL_MOD, s->socket, &s->ev)) { s->tcp.state = TCP_CLOSING; log_android(ANDROID_LOG_ERROR, "epoll mod tcp error %d: %s", errno, strerror(errno)); - } - else + } else log_android(ANDROID_LOG_DEBUG, "epoll mod tcp socket %d in %d out %d", s->socket, (events & EPOLLIN) != 0, (events & EPOLLOUT) != 0); } @@ -235,8 +232,7 @@ void check_tcp_socket(const struct arguments *args, if (s->tcp.version == 4) { inet_ntop(AF_INET, &s->tcp.saddr.ip4, source, sizeof(source)); inet_ntop(AF_INET, &s->tcp.daddr.ip4, dest, sizeof(dest)); - } - else { + } else { inet_ntop(AF_INET6, &s->tcp.saddr.ip6, source, sizeof(source)); inet_ntop(AF_INET6, &s->tcp.daddr.ip6, dest, sizeof(dest)); } @@ -274,7 +270,7 @@ void check_tcp_socket(const struct arguments *args, else icmp.icmp_code = ICMP_UNREACH_HOST; icmp.icmp_cksum = 0; - icmp.icmp_cksum = ~calc_checksum(0, &icmp, 4); + icmp.icmp_cksum = ~calc_checksum(0, (const uint8_t *) &icmp, 4); struct icmp_session sicmp; memset(&sicmp, 0, sizeof(struct icmp_session)); @@ -282,16 +278,14 @@ void check_tcp_socket(const struct arguments *args, if (s->tcp.version == 4) { sicmp.saddr.ip4 = (__be32) s->tcp.saddr.ip4; sicmp.daddr.ip4 = (__be32) s->tcp.daddr.ip4; - } - else { + } else { memcpy(&sicmp.saddr.ip6, &s->tcp.saddr.ip6, 16); memcpy(&sicmp.daddr.ip6, &s->tcp.daddr.ip6, 16); } - write_icmp(args, &sicmp, &icmp, 8); + write_icmp(args, &sicmp, (uint8_t *) &icmp, 8); } - } - else { + } else { // Assume socket okay if (s->tcp.state == TCP_LISTEN) { // Check socket connect @@ -307,8 +301,7 @@ void check_tcp_socket(const struct arguments *args, else s->tcp.socks5 = SOCKS5_CONNECTED; } - } - else { + } else { if (ev->events & EPOLLIN) { uint8_t buffer[32]; ssize_t bytes = recv(s->socket, buffer, sizeof(buffer), 0); @@ -316,8 +309,7 @@ void check_tcp_socket(const struct arguments *args, log_android(ANDROID_LOG_ERROR, "%s recv SOCKS5 error %d: %s", session, errno, strerror(errno)); write_rst(args, &s->tcp); - } - else { + } else { char *h = hex(buffer, (const size_t) bytes); log_android(ANDROID_LOG_INFO, "%s recv SOCKS5 %s", session, h); free(h); @@ -335,30 +327,26 @@ void check_tcp_socket(const struct arguments *args, write_rst(args, &s->tcp); } - } - else if (s->tcp.socks5 == SOCKS5_AUTH && - bytes == 2 && - (buffer[0] == 1 || buffer[0] == 5)) { + } else if (s->tcp.socks5 == SOCKS5_AUTH && + bytes == 2 && + (buffer[0] == 1 || buffer[0] == 5)) { if (buffer[1] == 0) { s->tcp.socks5 = SOCKS5_CONNECT; log_android(ANDROID_LOG_WARN, "%s SOCKS5 auth OK", session); - } - else { + } else { s->tcp.socks5 = 0; log_android(ANDROID_LOG_ERROR, "%s SOCKS5 auth error %d", session, buffer[1]); write_rst(args, &s->tcp); } - } - else if (s->tcp.socks5 == SOCKS5_CONNECT && - bytes == 6 + (s->tcp.version == 4 ? 4 : 16) && - buffer[0] == 5) { + } else if (s->tcp.socks5 == SOCKS5_CONNECT && + bytes == 6 + (s->tcp.version == 4 ? 4 : 16) && + buffer[0] == 5) { if (buffer[1] == 0) { s->tcp.socks5 = SOCKS5_CONNECTED; log_android(ANDROID_LOG_WARN, "%s SOCKS5 connected", session); - } - else { + } else { s->tcp.socks5 = 0; log_android(ANDROID_LOG_ERROR, "%s SOCKS5 connect error %d", session, buffer[1]); @@ -376,8 +364,7 @@ void check_tcp_socket(const struct arguments *args, */ } - } - else { + } else { s->tcp.socks5 = 0; log_android(ANDROID_LOG_ERROR, "%s recv SOCKS5 state %d", session, s->tcp.socks5); @@ -400,8 +387,7 @@ void check_tcp_socket(const struct arguments *args, write_rst(args, &s->tcp); } - } - else if (s->tcp.socks5 == SOCKS5_AUTH) { + } else if (s->tcp.socks5 == SOCKS5_AUTH) { uint8_t ulen = strlen(socks5_username); uint8_t plen = strlen(socks5_password); uint8_t buffer[512]; @@ -425,8 +411,7 @@ void check_tcp_socket(const struct arguments *args, write_rst(args, &s->tcp); } - } - else if (s->tcp.socks5 == SOCKS5_CONNECT) { + } else if (s->tcp.socks5 == SOCKS5_CONNECT) { uint8_t buffer[22]; *(buffer + 0) = 5; // version *(buffer + 1) = 1; // TCP/IP stream connection @@ -435,8 +420,7 @@ void check_tcp_socket(const struct arguments *args, if (s->tcp.version == 4) { memcpy(buffer + 4, &s->tcp.daddr.ip4, 4); *((__be16 *) (buffer + 4 + 4)) = s->tcp.dest; - } - else { + } else { memcpy(buffer + 4, &s->tcp.daddr.ip6, 16); *((__be16 *) (buffer + 4 + 16)) = s->tcp.dest; } @@ -455,8 +439,7 @@ void check_tcp_socket(const struct arguments *args, write_rst(args, &s->tcp); } - } - else if (s->tcp.socks5 == SOCKS5_CONNECTED) { + } else if (s->tcp.socks5 == SOCKS5_CONNECTED) { s->tcp.remote_seq++; // remote SYN if (write_syn_ack(args, &s->tcp) >= 0) { s->tcp.time = time(NULL); @@ -464,8 +447,7 @@ void check_tcp_socket(const struct arguments *args, s->tcp.state = TCP_SYN_RECV; } } - } - else { + } else { // Always forward data int fwd = 0; @@ -493,13 +475,11 @@ void check_tcp_socket(const struct arguments *args, if (errno == EINTR || errno == EAGAIN) { // Retry later break; - } - else { + } else { write_rst(args, &s->tcp); break; } - } - else { + } else { fwd = 1; buffer_size -= sent; s->tcp.sent += sent; @@ -511,8 +491,7 @@ void check_tcp_socket(const struct arguments *args, s->tcp.forward = s->tcp.forward->next; free(p->data); free(p); - } - else { + } else { log_android(ANDROID_LOG_WARN, "%s partial send %u/%u", session, s->tcp.forward->sent, s->tcp.forward->len); @@ -570,8 +549,7 @@ void check_tcp_socket(const struct arguments *args, if (errno != EINTR && errno != EAGAIN) write_rst(args, &s->tcp); - } - else if (bytes == 0) { + } else if (bytes == 0) { log_android(ANDROID_LOG_WARN, "%s recv eof", session); if (s->tcp.forward == NULL) { @@ -586,8 +564,7 @@ void check_tcp_socket(const struct arguments *args, s->tcp.state = TCP_LAST_ACK; else log_android(ANDROID_LOG_ERROR, "%s invalid close", session); - } - else { + } else { // There was still data to send log_android(ANDROID_LOG_ERROR, "%s close with queue", session); write_rst(args, &s->tcp); @@ -598,8 +575,7 @@ void check_tcp_socket(const struct arguments *args, session, errno, strerror(errno)); s->socket = -1; - } - else { + } else { // Socket read data log_android(ANDROID_LOG_DEBUG, "%s recv bytes %d", session, bytes); s->tcp.received += bytes; @@ -652,8 +628,7 @@ jboolean handle_tcp(const struct arguments *args, if (version == 4) { inet_ntop(AF_INET, &ip4->saddr, source, sizeof(source)); inet_ntop(AF_INET, &ip4->daddr, dest, sizeof(dest)); - } - else { + } else { inet_ntop(AF_INET6, &ip6->ip6_src, source, sizeof(source)); inet_ntop(AF_INET6, &ip6->ip6_dst, dest, sizeof(dest)); } @@ -697,7 +672,7 @@ jboolean handle_tcp(const struct arguments *args, uint16_t mss = get_default_mss(version); uint8_t ws = 0; int optlen = tcpoptlen; - uint8_t *options = tcpoptions; + uint8_t *options = (uint8_t *) tcpoptions; while (optlen > 0) { uint8_t kind = *options; uint8_t len = *(options + 1); @@ -713,8 +688,7 @@ jboolean handle_tcp(const struct arguments *args, if (kind == 1) { optlen--; options++; - } - else { + } else { optlen -= len; options += len; } @@ -746,8 +720,7 @@ jboolean handle_tcp(const struct arguments *args, if (version == 4) { s->tcp.saddr.ip4 = (__be32) ip4->saddr; s->tcp.daddr.ip4 = (__be32) ip4->daddr; - } - else { + } else { memcpy(&s->tcp.saddr.ip6, &ip6->ip6_src, 16); memcpy(&s->tcp.daddr.ip6, &ip6->ip6_dst, 16); } @@ -799,8 +772,7 @@ jboolean handle_tcp(const struct arguments *args, log_android(ANDROID_LOG_WARN, "%s resetting blocked session", packet); write_rst(args, &s->tcp); } - } - else { + } else { log_android(ANDROID_LOG_WARN, "%s unknown session", packet); struct tcp_session rst; @@ -812,8 +784,7 @@ jboolean handle_tcp(const struct arguments *args, if (version == 4) { rst.saddr.ip4 = (__be32) ip4->saddr; rst.daddr.ip4 = (__be32) ip4->daddr; - } - else { + } else { memcpy(&rst.saddr.ip6, &ip6->ip6_src, 16); memcpy(&rst.daddr.ip6, &ip6->ip6_dst, 16); } @@ -824,8 +795,7 @@ jboolean handle_tcp(const struct arguments *args, write_rst(args, &rst); return 0; } - } - else { + } else { char session[250]; sprintf(session, "%s %s loc %u rem %u acked %u", @@ -840,8 +810,7 @@ jboolean handle_tcp(const struct arguments *args, log_android(ANDROID_LOG_WARN, "%s was closed", session); write_rst(args, &cur->tcp); return 0; - } - else { + } else { int oldstate = cur->tcp.state; uint32_t oldlocal = cur->tcp.local_seq; uint32_t oldremote = cur->tcp.remote_seq; @@ -874,45 +843,35 @@ jboolean handle_tcp(const struct arguments *args, log_android(ANDROID_LOG_WARN, "%s received reset", session); cur->tcp.state = TCP_CLOSING; return 0; - } - else { + } else { if (!tcphdr->ack || ntohl(tcphdr->ack_seq) == cur->tcp.local_seq) { if (tcphdr->syn) { log_android(ANDROID_LOG_WARN, "%s repeated SYN", session); // The socket is probably not opened yet - } - else if (tcphdr->fin /* +ACK */) { + } else if (tcphdr->fin /* +ACK */) { if (cur->tcp.state == TCP_ESTABLISHED) { log_android(ANDROID_LOG_WARN, "%s FIN received", session); if (cur->tcp.forward == NULL) { cur->tcp.remote_seq++; // remote FIN if (write_ack(args, &cur->tcp) >= 0) cur->tcp.state = TCP_CLOSE_WAIT; - } - else + } else cur->tcp.state = TCP_CLOSE_WAIT; - } - - else if (cur->tcp.state == TCP_CLOSE_WAIT) { + } else if (cur->tcp.state == TCP_CLOSE_WAIT) { log_android(ANDROID_LOG_WARN, "%s repeated FIN", session); // The socket is probably not closed yet - } - - else if (cur->tcp.state == TCP_FIN_WAIT1) { + } else if (cur->tcp.state == TCP_FIN_WAIT1) { log_android(ANDROID_LOG_WARN, "%s last ACK", session); cur->tcp.remote_seq++; // remote FIN if (write_ack(args, &cur->tcp) >= 0) cur->tcp.state = TCP_CLOSE; - } - - else { + } else { log_android(ANDROID_LOG_ERROR, "%s invalid FIN", session); return 0; } - } - else if (tcphdr->ack) { + } else if (tcphdr->ack) { cur->tcp.acked = ntohl(tcphdr->ack_seq); if (cur->tcp.state == TCP_SYN_RECV) @@ -920,31 +879,22 @@ jboolean handle_tcp(const struct arguments *args, else if (cur->tcp.state == TCP_ESTABLISHED) { // Do nothing - } - - else if (cur->tcp.state == TCP_LAST_ACK) + } else if (cur->tcp.state == TCP_LAST_ACK) cur->tcp.state = TCP_CLOSING; else if (cur->tcp.state == TCP_CLOSE_WAIT) { // ACK after FIN/ACK - } - - else if (cur->tcp.state == TCP_FIN_WAIT1) { + } else if (cur->tcp.state == TCP_FIN_WAIT1) { // Do nothing - } - - else { + } else { log_android(ANDROID_LOG_ERROR, "%s invalid state", session); return 0; } - } - - else { + } else { log_android(ANDROID_LOG_ERROR, "%s unknown packet", session); return 0; } - } - else { + } else { uint32_t ack = ntohl(tcphdr->ack_seq); if ((uint32_t) (ack + 1) == cur->tcp.local_seq) { // Keep alive @@ -956,12 +906,10 @@ jboolean handle_tcp(const struct arguments *args, session, errno, strerror(errno)); else log_android(ANDROID_LOG_WARN, "%s enabled keep alive", session); - } - else + } else log_android(ANDROID_LOG_WARN, "%s keep alive", session); - } - else if (compare_u32(ack, cur->tcp.local_seq) < 0) { + } else if (compare_u32(ack, cur->tcp.local_seq) < 0) { if (compare_u32(ack, cur->tcp.acked) <= 0) log_android( ack == cur->tcp.acked ? ANDROID_LOG_WARN : ANDROID_LOG_ERROR, @@ -976,8 +924,7 @@ jboolean handle_tcp(const struct arguments *args, } return 1; - } - else { + } else { log_android(ANDROID_LOG_ERROR, "%s future ACK", session); write_rst(args, &cur->tcp); return 0; @@ -1032,8 +979,7 @@ void queue_tcp(const struct arguments *args, cur->forward = n; else p->next = n; - } - else if (s != NULL && s->seq == seq) { + } else if (s != NULL && s->seq == seq) { if (s->len == datalen) log_android(ANDROID_LOG_WARN, "%s segment already queued %u..%u", session, @@ -1046,8 +992,7 @@ void queue_tcp(const struct arguments *args, free(s->data); s->data = malloc(datalen); memcpy(s->data, data, datalen); - } - else + } else log_android(ANDROID_LOG_ERROR, "%s segment larger %u..%u < %u", session, s->seq - cur->remote_start, s->seq + s->len - cur->remote_start, @@ -1065,8 +1010,7 @@ int open_tcp_socket(const struct arguments *args, version = (strstr(socks5_addr, ":") == NULL ? 4 : 6); else version = cur->version; - } - else + } else version = (strstr(redirect->raddr, ":") == NULL ? 4 : 6); // Get TCP socket @@ -1099,27 +1043,23 @@ int open_tcp_socket(const struct arguments *args, addr4.sin_family = AF_INET; inet_pton(AF_INET, socks5_addr, &addr4.sin_addr); addr4.sin_port = htons(socks5_port); - } - else { + } else { addr6.sin6_family = AF_INET6; inet_pton(AF_INET6, socks5_addr, &addr6.sin6_addr); addr6.sin6_port = htons(socks5_port); } - } - else { + } else { if (version == 4) { addr4.sin_family = AF_INET; addr4.sin_addr.s_addr = (__be32) cur->daddr.ip4; addr4.sin_port = cur->dest; - } - else { + } else { addr6.sin6_family = AF_INET6; memcpy(&addr6.sin6_addr, &cur->daddr.ip6, 16); addr6.sin6_port = cur->dest; } } - } - else { + } else { log_android(ANDROID_LOG_WARN, "TCP%d redirect to %s/%u", version, redirect->raddr, redirect->rport); @@ -1127,8 +1067,7 @@ int open_tcp_socket(const struct arguments *args, addr4.sin_family = AF_INET; inet_pton(AF_INET, redirect->raddr, &addr4.sin_addr); addr4.sin_port = htons(redirect->rport); - } - else { + } else { addr6.sin6_family = AF_INET6; inet_pton(AF_INET6, redirect->raddr, &addr6.sin6_addr); addr6.sin6_port = htons(redirect->rport); @@ -1137,7 +1076,8 @@ int open_tcp_socket(const struct arguments *args, // Initiate connect int err = connect(sock, - (const struct sockaddr *) (version == 4 ? &addr4 : &addr6), + (version == 4 ? (const struct sockaddr *) &addr4 + : (const struct sockaddr *) &addr6), (socklen_t) (version == 4 ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6))); @@ -1238,8 +1178,7 @@ ssize_t write_tcp(const struct arguments *args, const struct tcp_session *cur, pseudo.ippseudo_len = htons(sizeof(struct tcphdr) + optlen + datalen); csum = calc_checksum(0, (uint8_t *) &pseudo, sizeof(struct ippseudo)); - } - else { + } else { len = sizeof(struct ip6_hdr) + sizeof(struct tcphdr) + optlen + datalen; buffer = malloc(len); struct ip6_hdr *ip6 = (struct ip6_hdr *) buffer; @@ -1305,9 +1244,11 @@ ssize_t write_tcp(const struct arguments *args, const struct tcp_session *cur, tcp->check = ~csum; inet_ntop(cur->version == 4 ? AF_INET : AF_INET6, - cur->version == 4 ? &cur->saddr.ip4 : &cur->saddr.ip6, source, sizeof(source)); + cur->version == 4 ? (const void *) &cur->saddr.ip4 : (const void *) &cur->saddr.ip6, + source, sizeof(source)); inet_ntop(cur->version == 4 ? AF_INET : AF_INET6, - cur->version == 4 ? &cur->daddr.ip4 : &cur->daddr.ip6, dest, sizeof(dest)); + cur->version == 4 ? (const void *) &cur->daddr.ip4 : (const void *) &cur->daddr.ip6, + dest, sizeof(dest)); // Send packet log_android(ANDROID_LOG_DEBUG, @@ -1327,8 +1268,7 @@ ssize_t write_tcp(const struct arguments *args, const struct tcp_session *cur, if (res >= 0) { if (pcap_file != NULL) write_pcap_rec(buffer, (size_t) res); - } - else + } else log_android(ANDROID_LOG_ERROR, "TCP write%s%s%s%s data %d error %d: %s", (tcp->syn ? " SYN" : ""), (tcp->ack ? " ACK" : ""), diff --git a/app/src/main/jni/netguard/udp.c b/app/src/main/jni/netguard/udp.c index 76939930..be3a7b0e 100644 --- a/app/src/main/jni/netguard/udp.c +++ b/app/src/main/jni/netguard/udp.c @@ -40,8 +40,7 @@ int check_udp_session(const struct arguments *args, struct ng_session *s, if (s->udp.version == 4) { inet_ntop(AF_INET, &s->udp.saddr.ip4, source, sizeof(source)); inet_ntop(AF_INET, &s->udp.daddr.ip4, dest, sizeof(dest)); - } - else { + } else { inet_ntop(AF_INET6, &s->udp.saddr.ip6, source, sizeof(source)); inet_ntop(AF_INET6, &s->udp.daddr.ip6, dest, sizeof(dest)); } @@ -101,8 +100,7 @@ void check_udp_socket(const struct arguments *args, const struct epoll_event *ev log_android(ANDROID_LOG_ERROR, "UDP SO_ERROR %d: %s", serr, strerror(serr)); s->udp.state = UDP_FINISHING; - } - else { + } else { // Check socket read if (ev->events & EPOLLIN) { s->udp.time = time(NULL); @@ -116,13 +114,11 @@ void check_udp_socket(const struct arguments *args, const struct epoll_event *ev if (errno != EINTR && errno != EAGAIN) s->udp.state = UDP_FINISHING; - } - else if (bytes == 0) { + } else if (bytes == 0) { log_android(ANDROID_LOG_WARN, "UDP recv eof"); s->udp.state = UDP_FINISHING; - } - else { + } else { // Socket read data char dest[INET6_ADDRSTRLEN + 1]; if (s->udp.version == 4) @@ -192,8 +188,7 @@ void block_udp(const struct arguments *args, if (version == 4) { inet_ntop(AF_INET, &ip4->saddr, source, sizeof(source)); inet_ntop(AF_INET, &ip4->daddr, dest, sizeof(dest)); - } - else { + } else { inet_ntop(AF_INET6, &ip6->ip6_src, source, sizeof(source)); inet_ntop(AF_INET6, &ip6->ip6_dst, dest, sizeof(dest)); } @@ -212,8 +207,7 @@ void block_udp(const struct arguments *args, if (version == 4) { s->udp.saddr.ip4 = (__be32) ip4->saddr; s->udp.daddr.ip4 = (__be32) ip4->daddr; - } - else { + } else { memcpy(&s->udp.saddr.ip6, &ip6->ip6_src, 16); memcpy(&s->udp.daddr.ip6, &ip6->ip6_dst, 16); } @@ -257,8 +251,7 @@ jboolean handle_udp(const struct arguments *args, if (version == 4) { inet_ntop(AF_INET, &ip4->saddr, source, sizeof(source)); inet_ntop(AF_INET, &ip4->daddr, dest, sizeof(dest)); - } - else { + } else { inet_ntop(AF_INET6, &ip6->ip6_src, source, sizeof(source)); inet_ntop(AF_INET6, &ip6->ip6_dst, dest, sizeof(dest)); } @@ -295,8 +288,7 @@ jboolean handle_udp(const struct arguments *args, if (version == 4) { s->udp.saddr.ip4 = (__be32) ip4->saddr; s->udp.daddr.ip4 = (__be32) ip4->daddr; - } - else { + } else { memcpy(&s->udp.saddr.ip6, &ip6->ip6_src, 16); memcpy(&s->udp.daddr.ip6, &ip6->ip6_dst, 16); } @@ -376,14 +368,12 @@ jboolean handle_udp(const struct arguments *args, addr4.sin_family = AF_INET; addr4.sin_addr.s_addr = (__be32) cur->udp.daddr.ip4; addr4.sin_port = cur->udp.dest; - } - else { + } else { addr6.sin6_family = AF_INET6; memcpy(&addr6.sin6_addr, &cur->udp.daddr.ip6, 16); addr6.sin6_port = cur->udp.dest; } - } - else { + } else { rversion = (strstr(redirect->raddr, ":") == NULL ? 4 : 6); log_android(ANDROID_LOG_WARN, "UDP%d redirect to %s/%u", rversion, redirect->raddr, redirect->rport); @@ -392,8 +382,7 @@ jboolean handle_udp(const struct arguments *args, addr4.sin_family = AF_INET; inet_pton(AF_INET, redirect->raddr, &addr4.sin_addr); addr4.sin_port = htons(redirect->rport); - } - else { + } else { addr6.sin6_family = AF_INET6; inet_pton(AF_INET6, redirect->raddr, &addr6.sin6_addr); addr6.sin6_port = htons(redirect->rport); @@ -401,15 +390,15 @@ jboolean handle_udp(const struct arguments *args, } if (sendto(cur->socket, data, (socklen_t) datalen, MSG_NOSIGNAL, - (const struct sockaddr *) (rversion == 4 ? &addr4 : &addr6), + (rversion == 4 ? (const struct sockaddr *) &addr4 + : (const struct sockaddr *) &addr6), (socklen_t) (rversion == 4 ? sizeof(addr4) : sizeof(addr6))) != datalen) { log_android(ANDROID_LOG_ERROR, "UDP sendto error %d: %s", errno, strerror(errno)); if (errno != EINTR && errno != EAGAIN) { cur->udp.state = UDP_FINISHING; return 0; } - } - else + } else cur->udp.sent += datalen; return 1; @@ -445,8 +434,7 @@ int open_udp_socket(const struct arguments *args, log_android(ANDROID_LOG_ERROR, "UDP setsockopt SO_BROADCAST error %d: %s", errno, strerror(errno)); } - } - else { + } else { // http://man7.org/linux/man-pages/man7/ipv6.7.html if (*((uint8_t *) &cur->daddr.ip6) == 0xFF) { log_android(ANDROID_LOG_WARN, "UDP6 broadcast"); @@ -516,8 +504,7 @@ ssize_t write_udp(const struct arguments *args, const struct udp_session *cur, pseudo.ippseudo_len = htons(sizeof(struct udphdr) + datalen); csum = calc_checksum(0, (uint8_t *) &pseudo, sizeof(struct ippseudo)); - } - else { + } else { len = sizeof(struct ip6_hdr) + sizeof(struct udphdr) + datalen; buffer = malloc(len); struct ip6_hdr *ip6 = (struct ip6_hdr *) buffer; @@ -558,9 +545,13 @@ ssize_t write_udp(const struct arguments *args, const struct udp_session *cur, udp->check = ~csum; inet_ntop(cur->version == 4 ? AF_INET : AF_INET6, - cur->version == 4 ? &cur->saddr.ip4 : &cur->saddr.ip6, source, sizeof(source)); + (cur->version == 4 ? (const void *) &cur->saddr.ip4 : (const void *) &cur->saddr.ip6), + source, + sizeof(source)); inet_ntop(cur->version == 4 ? AF_INET : AF_INET6, - cur->version == 4 ? &cur->daddr.ip4 : &cur->daddr.ip6, dest, sizeof(dest)); + (cur->version == 4 ? (const void *) &cur->daddr.ip4 : (const void *) &cur->daddr.ip6), + dest, + sizeof(dest)); // Send packet log_android(ANDROID_LOG_DEBUG, @@ -573,8 +564,7 @@ ssize_t write_udp(const struct arguments *args, const struct udp_session *cur, if (res >= 0) { if (pcap_file != NULL) write_pcap_rec(buffer, (size_t) res); - } - else + } else log_android(ANDROID_LOG_WARN, "UDP write error %d: %s", errno, strerror(errno)); free(buffer); diff --git a/app/src/main/jni/netguard/util.c b/app/src/main/jni/netguard/util.c index d2c1f030..8024fa83 100644 --- a/app/src/main/jni/netguard/util.c +++ b/app/src/main/jni/netguard/util.c @@ -66,7 +66,7 @@ void log_android(int prio, const char *fmt, ...) { va_list argptr; va_start(argptr, fmt); vsprintf(line, fmt, argptr); - __android_log_print(prio, TAG, line); + __android_log_print(prio, TAG, "%s", line); va_end(argptr); } } @@ -148,8 +148,7 @@ int32_t get_local_port(const int sock) { if (getsockname(sock, (struct sockaddr *) &sin, &len) < 0) { log_android(ANDROID_LOG_ERROR, "getsockname error %d: %s", errno, strerror(errno)); return -1; - } - else + } else return ntohs(sin.sin_port); } @@ -162,8 +161,7 @@ int is_event(int fd, short event) { if (r < 0) { log_android(ANDROID_LOG_ERROR, "poll readable error %d: %s", errno, strerror(errno)); return 0; - } - else if (r == 0) + } else if (r == 0) return 0; else return (p.revents & event); diff --git a/build.gradle b/build.gradle index 6112a23e..328f439f 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { // http://tools.android.com/tech-docs/new-build-system/gradle-experimental // https://bintray.com/android/android-tools/com.android.tools.build.gradle-experimental/view // https://bintray.com/android/android-tools/com.google.gms.google-services/view - classpath 'com.android.tools.build:gradle-experimental:0.9.3' + classpath 'com.android.tools.build:gradle:3.0.0-rc2' classpath 'com.google.gms:google-services:3.1.0' // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d6262ad1..93a6448e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Sep 12 16:15:29 CEST 2016 +#Mon Oct 23 20:40:54 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip