mirror of
https://github.com/M66B/NetGuard.git
synced 2025-02-26 16:13:01 +00:00
Native refactoring
This commit is contained in:
parent
60fb4d1fd8
commit
517d79b78e
2 changed files with 34 additions and 34 deletions
|
@ -55,7 +55,7 @@
|
|||
static JavaVM *jvm;
|
||||
pthread_t thread_id;
|
||||
int signaled = 0;
|
||||
struct session *session = NULL;
|
||||
struct tcp_session *tcp_session = NULL;
|
||||
int loglevel = 0;
|
||||
char *pcap_fn = NULL;
|
||||
|
||||
|
@ -63,7 +63,7 @@ char *pcap_fn = NULL;
|
|||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_eu_faircode_netguard_SinkholeService_jni_1init(JNIEnv *env) {
|
||||
session = NULL;
|
||||
tcp_session = NULL;
|
||||
pcap_fn = NULL;
|
||||
}
|
||||
|
||||
|
@ -174,14 +174,14 @@ Java_eu_faircode_netguard_SinkholeService_jni_1pcap(JNIEnv *env, jclass type, js
|
|||
// Private functions
|
||||
|
||||
void clear_sessions() {
|
||||
struct session *s = session;
|
||||
struct tcp_session *s = tcp_session;
|
||||
while (s != NULL) {
|
||||
close(s->socket);
|
||||
struct session *p = s;
|
||||
struct tcp_session *p = s;
|
||||
s = s->next;
|
||||
free(p);
|
||||
}
|
||||
session = NULL;
|
||||
tcp_session = NULL;
|
||||
}
|
||||
|
||||
void handle_signal(int sig, siginfo_t *info, void *context) {
|
||||
|
@ -252,7 +252,7 @@ void handle_events(void *a) {
|
|||
ts.tv_nsec = 0;
|
||||
sigemptyset(&emptyset);
|
||||
int max = get_selects(args, usock, &rfds, &wfds, &efds);
|
||||
int ready = pselect(max + 1, &rfds, &wfds, &efds, session == NULL ? NULL : &ts, &emptyset);
|
||||
int ready = pselect(max + 1, &rfds, &wfds, &efds, tcp_session == NULL ? NULL : &ts, &emptyset);
|
||||
if (ready < 0) {
|
||||
if (errno == EINTR) {
|
||||
if (signaled) { ;
|
||||
|
@ -271,7 +271,7 @@ void handle_events(void *a) {
|
|||
|
||||
// Count sessions
|
||||
int sessions = 0;
|
||||
struct session *s = session;
|
||||
struct tcp_session *s = tcp_session;
|
||||
while (s != NULL) {
|
||||
sessions++;
|
||||
s = s->next;
|
||||
|
@ -353,8 +353,8 @@ int get_selects(const struct arguments *args, int usock, fd_set *rfds, fd_set *w
|
|||
max = usock;
|
||||
|
||||
// Select sockets
|
||||
struct session *last = NULL;
|
||||
struct session *cur = session;
|
||||
struct tcp_session *last = NULL;
|
||||
struct tcp_session *cur = tcp_session;
|
||||
while (cur != NULL) {
|
||||
int timeout = 0;
|
||||
if (cur->state == TCP_LISTEN || cur->state == TCP_SYN_RECV)
|
||||
|
@ -389,11 +389,11 @@ int get_selects(const struct arguments *args, int usock, fd_set *rfds, fd_set *w
|
|||
log_android(ANDROID_LOG_ERROR, "close error %d: %s", errno, strerror(errno));
|
||||
|
||||
if (last == NULL)
|
||||
session = cur->next;
|
||||
tcp_session = cur->next;
|
||||
else
|
||||
last->next = cur->next;
|
||||
|
||||
struct session *c = cur;
|
||||
struct tcp_session *c = cur;
|
||||
cur = cur->next;
|
||||
free(c);
|
||||
continue;
|
||||
|
@ -522,7 +522,7 @@ void check_udp(const struct arguments *args, int usock, fd_set *rfds, fd_set *wf
|
|||
}
|
||||
|
||||
void check_sockets(const struct arguments *args, fd_set *rfds, fd_set *wfds, fd_set *efds) {
|
||||
struct session *cur = session;
|
||||
struct tcp_session *cur = tcp_session;
|
||||
while (cur != NULL) {
|
||||
int oldstate = cur->state;
|
||||
uint32_t oldlocal = cur->local_seq;
|
||||
|
@ -864,8 +864,8 @@ jboolean handle_tcp(const struct arguments *args, const uint8_t *buffer, uint16_
|
|||
uint16_t datalen = length - dataoff;
|
||||
|
||||
// Search session
|
||||
struct session *last = NULL;
|
||||
struct session *cur = session;
|
||||
struct tcp_session *last = NULL;
|
||||
struct tcp_session *cur = tcp_session;
|
||||
while (cur != NULL && !(cur->saddr == iphdr->saddr && cur->source == tcphdr->source &&
|
||||
cur->daddr == iphdr->daddr && cur->dest == tcphdr->dest)) {
|
||||
last = cur;
|
||||
|
@ -887,7 +887,7 @@ jboolean handle_tcp(const struct arguments *args, const uint8_t *buffer, uint16_
|
|||
dest, ntohs(tcphdr->dest), uid);
|
||||
|
||||
// Register session
|
||||
struct session *syn = malloc(sizeof(struct session));
|
||||
struct tcp_session *syn = malloc(sizeof(struct tcp_session));
|
||||
syn->time = time(NULL);
|
||||
syn->uid = uid;
|
||||
syn->remote_seq = ntohl(tcphdr->seq); // ISN remote
|
||||
|
@ -917,7 +917,7 @@ jboolean handle_tcp(const struct arguments *args, const uint8_t *buffer, uint16_
|
|||
syn->lport = get_local_port(syn->socket);
|
||||
|
||||
if (last == NULL)
|
||||
session = syn;
|
||||
tcp_session = syn;
|
||||
else
|
||||
last->next = syn;
|
||||
}
|
||||
|
@ -926,8 +926,8 @@ jboolean handle_tcp(const struct arguments *args, const uint8_t *buffer, uint16_
|
|||
log_android(ANDROID_LOG_WARN, "Unknown session %s/%u uid %d",
|
||||
dest, ntohs(tcphdr->dest), uid);
|
||||
|
||||
struct session rst;
|
||||
memset(&rst, 0, sizeof(struct session));
|
||||
struct tcp_session rst;
|
||||
memset(&rst, 0, sizeof(struct tcp_session));
|
||||
rst.remote_seq = ntohl(tcphdr->seq);
|
||||
rst.saddr = iphdr->saddr;
|
||||
rst.source = tcphdr->source;
|
||||
|
@ -1145,7 +1145,7 @@ jboolean handle_tcp(const struct arguments *args, const uint8_t *buffer, uint16_
|
|||
return 1;
|
||||
}
|
||||
|
||||
int open_tcp(const struct session *cur, const struct arguments *args) {
|
||||
int open_tcp(const struct tcp_session *cur, const struct arguments *args) {
|
||||
int sock = -1;
|
||||
|
||||
// Build target address
|
||||
|
@ -1209,7 +1209,7 @@ ssize_t send_socket(int sock, uint8_t *buffer, uint16_t len) {
|
|||
return res;
|
||||
}
|
||||
|
||||
int write_syn_ack(struct session *cur, int tun) {
|
||||
int write_syn_ack(struct tcp_session *cur, int tun) {
|
||||
if (write_tcp(cur, NULL, 0, 1, 1, 1, 0, 0, tun) < 0) {
|
||||
log_android(ANDROID_LOG_ERROR, "write SYN+ACK error %d: %s",
|
||||
errno, strerror((errno)));
|
||||
|
@ -1219,7 +1219,7 @@ int write_syn_ack(struct session *cur, int tun) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int write_ack(struct session *cur, int bytes, int tun) {
|
||||
int write_ack(struct tcp_session *cur, int bytes, int tun) {
|
||||
if (write_tcp(cur, NULL, 0, bytes, 0, 1, 0, 0, tun) < 0) {
|
||||
log_android(ANDROID_LOG_ERROR, "write ACK error %d: %s",
|
||||
errno, strerror((errno)));
|
||||
|
@ -1229,7 +1229,7 @@ int write_ack(struct session *cur, int bytes, int tun) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int write_data(struct session *cur, const uint8_t *buffer, uint16_t length, int tun) {
|
||||
int write_data(struct tcp_session *cur, const uint8_t *buffer, uint16_t length, int tun) {
|
||||
if (write_tcp(cur, buffer, length, 0, 0, 1, 0, 0, tun) < 0) {
|
||||
log_android(ANDROID_LOG_ERROR, "write data ACK lport %u error %d: %s",
|
||||
cur->lport, errno, strerror((errno)));
|
||||
|
@ -1238,7 +1238,7 @@ int write_data(struct session *cur, const uint8_t *buffer, uint16_t length, int
|
|||
|
||||
}
|
||||
|
||||
int write_fin(struct session *cur, int tun) {
|
||||
int write_fin(struct tcp_session *cur, int tun) {
|
||||
if (write_tcp(cur, NULL, 0, 0, 0, 0, 1, 0, tun) < 0) {
|
||||
log_android(ANDROID_LOG_ERROR,
|
||||
"write FIN lport %u error %d: %s",
|
||||
|
@ -1249,7 +1249,7 @@ int write_fin(struct session *cur, int tun) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
void write_rst(struct session *cur, int tun) {
|
||||
void write_rst(struct tcp_session *cur, int tun) {
|
||||
log_android(ANDROID_LOG_WARN, "Sending RST");
|
||||
if (write_tcp(cur, NULL, 0, 0, 0, 0, 0, 1, tun) < 0)
|
||||
log_android(ANDROID_LOG_ERROR, "write RST error %d: %s",
|
||||
|
@ -1257,7 +1257,7 @@ void write_rst(struct session *cur, int tun) {
|
|||
cur->state = TCP_TIME_WAIT;
|
||||
}
|
||||
|
||||
int write_tcp(const struct session *cur,
|
||||
int write_tcp(const struct tcp_session *cur,
|
||||
uint8_t *data, uint16_t datalen, uint16_t confirm,
|
||||
int syn, int ack, int fin, int rst, int tun) {
|
||||
#ifdef PROFILE
|
||||
|
|
|
@ -24,7 +24,7 @@ struct arguments {
|
|||
jboolean filter;
|
||||
};
|
||||
|
||||
struct session {
|
||||
struct tcp_session {
|
||||
// TODO TCPv6
|
||||
time_t time;
|
||||
jint uid;
|
||||
|
@ -39,7 +39,7 @@ struct session {
|
|||
uint8_t state;
|
||||
jint socket;
|
||||
uint32_t lport; // host notation
|
||||
struct session *next;
|
||||
struct tcp_session *next;
|
||||
};
|
||||
|
||||
// https://wiki.wireshark.org/Development/LibpcapFileFormat
|
||||
|
@ -90,23 +90,23 @@ jboolean handle_udp(const struct arguments *args, int usock,
|
|||
|
||||
jboolean handle_tcp(const struct arguments *args, const uint8_t *buffer, uint16_t length, int uid);
|
||||
|
||||
int open_tcp(const struct session *cur, const struct arguments *args);
|
||||
int open_tcp(const struct tcp_session *cur, const struct arguments *args);
|
||||
|
||||
int get_local_port(const int sock);
|
||||
|
||||
ssize_t send_socket(int sock, uint8_t *buffer, uint16_t len);
|
||||
|
||||
int write_syn_ack(struct session *cur, int tun);
|
||||
int write_syn_ack(struct tcp_session *cur, int tun);
|
||||
|
||||
int write_ack(struct session *cur, int bytes, int tun);
|
||||
int write_ack(struct tcp_session *cur, int bytes, int tun);
|
||||
|
||||
int write_data(struct session *cur, const uint8_t *buffer, uint16_t length, int tun);
|
||||
int write_data(struct tcp_session *cur, const uint8_t *buffer, uint16_t length, int tun);
|
||||
|
||||
int write_fin(struct session *cur, int tun);
|
||||
int write_fin(struct tcp_session *cur, int tun);
|
||||
|
||||
void write_rst(struct session *cur, int tun);
|
||||
void write_rst(struct tcp_session *cur, int tun);
|
||||
|
||||
int write_tcp(const struct session *cur,
|
||||
int write_tcp(const struct tcp_session *cur,
|
||||
uint8_t *data, uint16_t datalen, uint16_t confirm,
|
||||
int syn, int ack, int fin, int rst, int tun);
|
||||
|
||||
|
|
Loading…
Reference in a new issue