mirror of
https://codeberg.org/scip/udpxd.git
synced 2025-12-16 19:40:58 +01:00
-O2 broke udpxd, for some unknown reasons, revert back
This commit is contained in:
4
Makefile
4
Makefile
@@ -18,8 +18,8 @@
|
|||||||
#
|
#
|
||||||
# You can contact me by mail: <tom AT vondein DOT org>.
|
# You can contact me by mail: <tom AT vondein DOT org>.
|
||||||
|
|
||||||
|
# warning: do not set -O to 2, see TODO
|
||||||
CFLAGS = -Wall -Wextra -Werror -O2 -g
|
CFLAGS = -Wall -Wextra -Werror -O1 -g
|
||||||
LDFLAGS=
|
LDFLAGS=
|
||||||
OBJS = client.o net.o udpxd.o
|
OBJS = client.o net.o udpxd.o
|
||||||
DST = udpxd
|
DST = udpxd
|
||||||
|
|||||||
1
TODO
1
TODO
@@ -2,6 +2,7 @@ MUST:
|
|||||||
- support ipv6
|
- support ipv6
|
||||||
- daemonize
|
- daemonize
|
||||||
- syslog
|
- syslog
|
||||||
|
- if compiled with -O2, gcc mangles the dst sockaddr_in pointers in some weird ways
|
||||||
|
|
||||||
MAYBE:
|
MAYBE:
|
||||||
- ctrl client to view current "sessions", refresh etc
|
- ctrl client to view current "sessions", refresh etc
|
||||||
|
|||||||
25
net.c
25
net.c
@@ -24,8 +24,8 @@
|
|||||||
|
|
||||||
|
|
||||||
char *ntoa(struct sockaddr_in *src) {
|
char *ntoa(struct sockaddr_in *src) {
|
||||||
char *ip;
|
char *ip = malloc(32);
|
||||||
ip = inet_ntoa(src->sin_addr);
|
inet_ntop(AF_INET, (struct in_addr *)&src->sin_addr, ip, 32);
|
||||||
return ip;
|
return ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,11 +85,10 @@ void handle_inside(int inside, char *bindip, struct sockaddr_in *dst) {
|
|||||||
int output;
|
int output;
|
||||||
char *srcip;
|
char *srcip;
|
||||||
char *dstip = ntoa(dst);
|
char *dstip = ntoa(dst);
|
||||||
socklen_t size;
|
size_t size = sizeof(struct sockaddr_in);
|
||||||
src = malloc(sizeof(struct sockaddr_in));
|
src = malloc(size);
|
||||||
|
|
||||||
len = recvfrom( inside, buffer, sizeof( buffer ), 0,
|
len = recvfrom( inside, buffer, sizeof( buffer ), 0, (struct sockaddr*)src, (socklen_t *)&size );
|
||||||
(struct sockaddr*)src, &size );
|
|
||||||
srcip = ntoa(src);
|
srcip = ntoa(src);
|
||||||
|
|
||||||
if(VERBOSE) {
|
if(VERBOSE) {
|
||||||
@@ -109,7 +108,7 @@ void handle_inside(int inside, char *bindip, struct sockaddr_in *dst) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
if(sendto(client->socket, buffer, len, 0, (struct sockaddr*)dst, size) < 0) {
|
if(sendto(client->socket, buffer, len, 0, (struct sockaddr*)dst, size) < 0) {
|
||||||
fprintf(stderr, "unable to forward to %s%d", dstip, ntohs(dst->sin_port));
|
fprintf(stderr, "unable to forward to %s:%d\n", dstip, ntohs(dst->sin_port));
|
||||||
perror(NULL);
|
perror(NULL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -131,7 +130,7 @@ void handle_inside(int inside, char *bindip, struct sockaddr_in *dst) {
|
|||||||
|
|
||||||
/* send req out */
|
/* send req out */
|
||||||
if(sendto(output, buffer, len, 0, (struct sockaddr*)dst, size) < 0) {
|
if(sendto(output, buffer, len, 0, (struct sockaddr*)dst, size) < 0) {
|
||||||
fprintf(stderr, "unable to forward to %s%d", dstip, ntohs(dst->sin_port));
|
fprintf(stderr, "unable to forward to %s:%d\n", dstip, ntohs(dst->sin_port));
|
||||||
perror(NULL);
|
perror(NULL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -151,6 +150,9 @@ void handle_inside(int inside, char *bindip, struct sockaddr_in *dst) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(dstip);
|
||||||
|
free(srcip);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* handle answer from the outside */
|
/* handle answer from the outside */
|
||||||
@@ -159,12 +161,11 @@ void handle_outside(int inside, int outside) {
|
|||||||
unsigned char buffer[MAX_BUFFER_SIZE];
|
unsigned char buffer[MAX_BUFFER_SIZE];
|
||||||
struct sockaddr_in *src;
|
struct sockaddr_in *src;
|
||||||
client_t *client;
|
client_t *client;
|
||||||
socklen_t size;
|
|
||||||
|
|
||||||
src = malloc(sizeof(struct sockaddr_in));
|
size_t size = sizeof(struct sockaddr_in);
|
||||||
|
src = malloc(size);
|
||||||
|
|
||||||
len = recvfrom( outside, buffer, sizeof( buffer ), 0,
|
len = recvfrom( outside, buffer, sizeof( buffer ), 0, (struct sockaddr*)src, (socklen_t *)&size );
|
||||||
(struct sockaddr*)src, &size );
|
|
||||||
|
|
||||||
if(len > 0) {
|
if(len > 0) {
|
||||||
/* do we know it? */
|
/* do we know it? */
|
||||||
|
|||||||
Reference in New Issue
Block a user