1
0
Fork 0
mirror of https://github.com/M66B/NetGuard.git synced 2025-02-25 15:42:53 +00:00

Native refactoring

This commit is contained in:
M66B 2016-02-06 08:04:15 +01:00
parent 3be710c3e6
commit 73fc59828b
2 changed files with 27 additions and 27 deletions

View file

@ -284,7 +284,7 @@ void clear_sessions() {
} }
void clear_tcp_data(struct tcp_session *cur) { void clear_tcp_data(struct tcp_session *cur) {
struct segment *s = cur->data_rx; struct segment *s = cur->forward;
while (s != NULL) { while (s != NULL) {
struct segment *p = s; struct segment *p = s;
s = s->next; s = s->next;
@ -786,7 +786,7 @@ int get_selects(const struct arguments *args, fd_set *rfds, fd_set *wfds, fd_set
if (t->socket > max) if (t->socket > max)
max = t->socket; max = t->socket;
if (t->data_rx != NULL) { if (t->forward != NULL) {
FD_SET(t->socket, wfds); FD_SET(t->socket, wfds);
if (t->socket > max) if (t->socket > max)
max = t->socket; max = t->socket;
@ -1258,18 +1258,18 @@ void check_tcp_sockets(const struct arguments *args, fd_set *rfds, fd_set *wfds,
} }
// Forward data // Forward data
if (cur->data_rx != NULL && FD_ISSET(cur->socket, wfds)) { if (cur->forward != NULL && FD_ISSET(cur->socket, wfds)) {
// Forward buffered data // Forward buffered data
int fwd = 0; int fwd = 0;
int confirm = 0; int confirm = 0;
while (cur->data_rx != NULL && cur->data_rx->seq == cur->remote_seq) { while (cur->forward != NULL && cur->forward->seq == cur->remote_seq) {
log_android(ANDROID_LOG_DEBUG, "%s/%u to %s/%u fwd %u...%u", log_android(ANDROID_LOG_DEBUG, "%s/%u to %s/%u fwd %u...%u",
source, ntohs(cur->source), dest, ntohs(cur->dest), source, ntohs(cur->source), dest, ntohs(cur->dest),
cur->data_rx->seq - cur->remote_start, cur->forward->seq - cur->remote_start,
cur->data_rx->seq + cur->data_rx->len - cur->remote_start); cur->forward->seq + cur->forward->len - cur->remote_start);
unsigned int more = (cur->data_rx->psh ? 0 : MSG_MORE); unsigned int more = (cur->forward->psh ? 0 : MSG_MORE);
if (send(cur->socket, cur->data_rx->data, cur->data_rx->len, if (send(cur->socket, cur->forward->data, cur->forward->len,
MSG_NOSIGNAL | more) < 0) { MSG_NOSIGNAL | more) < 0) {
log_android(ANDROID_LOG_ERROR, log_android(ANDROID_LOG_ERROR,
"send error %d: %s", errno, strerror(errno)); "send error %d: %s", errno, strerror(errno));
@ -1283,18 +1283,18 @@ void check_tcp_sockets(const struct arguments *args, fd_set *rfds, fd_set *wfds,
} else { } else {
fwd = 1; fwd = 1;
cur->time = time(NULL); cur->time = time(NULL);
confirm += cur->data_rx->confirm; confirm += cur->forward->confirm;
cur->remote_seq = cur->data_rx->seq + cur->data_rx->len; cur->remote_seq = cur->forward->seq + cur->forward->len;
struct segment *p = cur->data_rx; struct segment *p = cur->forward;
cur->data_rx = cur->data_rx->next; cur->forward = cur->forward->next;
free(p->data); free(p->data);
free(p); free(p);
} }
} }
// Log data buffered // Log data buffered
struct segment *s = cur->data_rx; struct segment *s = cur->forward;
while (s != NULL) { while (s != NULL) {
log_android(ANDROID_LOG_WARN, log_android(ANDROID_LOG_WARN,
"%s/%u to %s/%u buffered data %u...%u seq %d state %s", "%s/%u to %s/%u buffered data %u...%u seq %d state %s",
@ -2189,19 +2189,19 @@ jboolean handle_tcp(const struct arguments *args,
syn->source = tcphdr->source; syn->source = tcphdr->source;
syn->dest = tcphdr->dest; syn->dest = tcphdr->dest;
syn->state = TCP_LISTEN; syn->state = TCP_LISTEN;
syn->data_rx = NULL; syn->forward = NULL;
syn->next = NULL; syn->next = NULL;
if (datalen) { if (datalen) {
log_android(ANDROID_LOG_WARN, "%s SYN data", packet); log_android(ANDROID_LOG_WARN, "%s SYN data", packet);
syn->data_rx = malloc(sizeof(struct segment)); syn->forward = malloc(sizeof(struct segment));
syn->data_rx->seq = syn->remote_seq; syn->forward->seq = syn->remote_seq;
syn->data_rx->len = datalen; syn->forward->len = datalen;
syn->data_rx->psh = tcphdr->psh; syn->forward->psh = tcphdr->psh;
syn->data_rx->confirm = 0; syn->forward->confirm = 0;
syn->data_rx->data = malloc(datalen); syn->forward->data = malloc(datalen);
memcpy(syn->data_rx->data, data, datalen); memcpy(syn->forward->data, data, datalen);
syn->data_rx->next = NULL; syn->forward->next = NULL;
} }
// Open socket // Open socket
@ -2276,7 +2276,7 @@ jboolean handle_tcp(const struct arguments *args,
log_android(ANDROID_LOG_WARN, "%s already forwarded", session); log_android(ANDROID_LOG_WARN, "%s already forwarded", session);
else { else {
struct segment *p = NULL; struct segment *p = NULL;
struct segment *s = cur->data_rx; struct segment *s = cur->forward;
while (s != NULL && compare_u16(s->seq, seq) < 0) { while (s != NULL && compare_u16(s->seq, seq) < 0) {
p = s; p = s;
s = s->next; s = s->next;
@ -2292,7 +2292,7 @@ jboolean handle_tcp(const struct arguments *args,
memcpy(n->data, data, datalen); memcpy(n->data, data, datalen);
n->next = s; n->next = s;
if (p == NULL) if (p == NULL)
cur->data_rx = n; cur->forward = n;
else else
p->next = n; p->next = n;
} }
@ -2335,14 +2335,14 @@ jboolean handle_tcp(const struct arguments *args,
return 0; return 0;
} }
if (cur->data_rx == NULL) { if (cur->forward == NULL) {
if (write_ack(args, cur, 1) >= 0) if (write_ack(args, cur, 1) >= 0)
cur->remote_seq += 1; // FIN cur->remote_seq += 1; // FIN
else else
return 0; return 0;
} }
else { else {
struct segment *s = cur->data_rx; struct segment *s = cur->forward;
while (s != NULL && compare_u16(s->seq, seq) < 0) { while (s != NULL && compare_u16(s->seq, seq) < 0) {
s = s->next; s = s->next;
} }

View file

@ -125,7 +125,7 @@ struct tcp_session {
uint8_t state; uint8_t state;
jint socket; jint socket;
struct segment *data_rx; struct segment *forward;
struct tcp_session *next; struct tcp_session *next;
}; };