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 @@
-
-
-
+
+
+
- generateAllDebugSources
+ generateDebugSources
@@ -23,78 +23,48 @@
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
@@ -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