Browse Source

64bit compatibility

pull/1/head
clowwindy 12 years ago
parent
commit
5b3415e056
4 changed files with 35 additions and 25 deletions
  1. 26
      configure
  2. 1
      local.c
  3. 29
      server.c
  4. 4
      socks5.h

26
configure

@ -2078,7 +2078,7 @@ $as_echo "$as_me: loading site script $ac_site_file" >&6;}
|| { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5 ; }
See \`config.log' for more details" "$LINENO" 5; }
fi
done
@ -2306,11 +2306,11 @@ am_lf='
'
case `pwd` in
*[\\\"\#\$\&\'\`$am_lf]*)
as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
esac
case $srcdir in
*[\\\"\#\$\&\'\`$am_lf\ \ ]*)
as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
esac
# Do `set' in a subshell so we don't clobber the current shell's
@ -2981,7 +2981,7 @@ fi
test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
See \`config.log' for more details" "$LINENO" 5 ; }
See \`config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@ -3096,7 +3096,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C compiler cannot create executables
See \`config.log' for more details" "$LINENO" 5 ; }
See \`config.log' for more details" "$LINENO" 5; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
@ -3139,7 +3139,7 @@ else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details" "$LINENO" 5 ; }
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest conftest$ac_cv_exeext
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
@ -3198,7 +3198,7 @@ $as_echo "$ac_try_echo"; } >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details" "$LINENO" 5 ; }
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
@ -3250,7 +3250,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
See \`config.log' for more details" "$LINENO" 5 ; }
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
@ -3910,7 +3910,7 @@ else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
See \`config.log' for more details" "$LINENO" 5 ; }
See \`config.log' for more details" "$LINENO" 5; }
fi
ac_ext=c
@ -5064,7 +5064,7 @@ do
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
done
@ -5382,7 +5382,7 @@ do
esac
case $ac_mode$ac_tag in
:[FHL]*:*);;
:L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
:L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
:[FH]-) ac_tag=-:-;;
:[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
esac
@ -5410,7 +5410,7 @@ do
[\\/$]*) false;;
*) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
@ -5437,7 +5437,7 @@ $as_echo "$as_me: creating $ac_file" >&6;}
case $ac_tag in
*:-:* | *:-) cat >"$ac_tmp/stdin" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
esac
;;
esac

1
local.c

@ -399,6 +399,7 @@ static void accept_cb (EV_P_ ev_io *w, int revents)
perror("accept");
break;
}
setnonblocking(serverfd);
struct server *server = new_server(serverfd);
struct addrinfo hints, *res;
int sockfd;

29
server.c

@ -177,7 +177,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) {
response.rsv = 0;
response.atyp = 1;
char *send_buf = (char *)&response;
send_encrypt(server->fd, send_buf, sizeof(response), MSG_NOSIGNAL);
send_encrypt(server->fd, send_buf, 4, MSG_NOSIGNAL);
close_and_free_server(EV_A_ server);
return;
}
@ -191,20 +191,20 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) {
// IP V4
struct sockaddr_in *addrp = (struct sockaddr_in *)&remote_sockaddr;
struct in_addr *in_addr;
in_addr = (struct in_addr *)(server->buf + sizeof(request));
in_addr = (struct in_addr *)(server->buf + 4);
addrp->sin_addr = *in_addr;
// get port
addrp->sin_port = *(unsigned short *)(server->buf + sizeof(request) + 4);
addrp->sin_port = *(unsigned short *)(server->buf + 4 + 4);
} else if (request->atyp == 3) {
struct addrinfo hints, *res;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
char name_buf[256];
unsigned char name_len = *(unsigned char *)(server->buf + sizeof(request));
memcpy(name_buf, server->buf + sizeof(request) + 1, name_len);
unsigned char name_len = *(unsigned char *)(server->buf + 4);
memcpy(name_buf, server->buf + 4 + 1, name_len);
name_buf[name_len] = 0; // append NUL
fprintf(stderr, "%s\n", name_buf);
fprintf(stderr, "connecting: %s\n", name_buf);
if ((rv = getaddrinfo(name_buf, "80", &hints, &res)) != 0) {
perror("getaddrinfo");
// TODO send reply
@ -217,7 +217,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) {
// get port
struct sockaddr_in *addrp = (struct sockaddr_in *)&remote_sockaddr;
addrp->sin_port = *(unsigned short *)(server->buf + sizeof(request) + 1 + name_len);
addrp->sin_port = *(unsigned short *)(server->buf + 4 + 1 + name_len);
freeaddrinfo(res);
} else {
fprintf(stderr, "unsupported addrtype: %d\n", request->atyp);
@ -358,8 +358,10 @@ static void remote_send_cb (EV_P_ ev_io *w, int revents) {
struct remote_ctx *remote_send_ctx = (struct remote_ctx *)w;
struct remote *remote = remote_send_ctx->remote;
struct server *server = remote->server;
printf("remote_send_cb\n");
if (!remote_send_ctx->connected) {
printf("not connected\n");
socklen_t len;
struct sockaddr_storage addr;
char ipstr[INET6_ADDRSTRLEN];
@ -369,6 +371,7 @@ static void remote_send_cb (EV_P_ ev_io *w, int revents) {
if (r == 0) {
remote_send_ctx->connected = 1;
printf("send reply\n");
// send reply
struct sockaddr_in sockaddr;
socklen_t sockaddrlen = sizeof(sockaddr);
@ -385,15 +388,15 @@ static void remote_send_cb (EV_P_ ev_io *w, int revents) {
response.rsv = 0;
response.atyp = 1;
memcpy(server->buf, &response, sizeof(response));
memcpy(server->buf + sizeof(response), &sockaddr.sin_addr, sizeof(struct in_addr));
memcpy(server->buf + sizeof(response) + sizeof(struct in_addr), &sockaddr.sin_port,
memcpy(server->buf, &response, 4);
memcpy(server->buf + 4, &sockaddr.sin_addr, sizeof(struct in_addr));
memcpy(server->buf + 4 + sizeof(struct in_addr), &sockaddr.sin_port,
sizeof(struct in_addr));
fprintf(stderr, "send reply\n");
int r = send_encrypt(server->fd, server->buf, sizeof(response) + sizeof(struct in_addr) +
int r = send_encrypt(server->fd, server->buf, 4 + sizeof(struct in_addr) +
sizeof(unsigned short), 0);
if (r < sizeof(response) + sizeof(struct in_addr) + sizeof(unsigned short)) {
if (r < 4 + sizeof(struct in_addr) + sizeof(unsigned short)) {
fprintf(stderr, "header not complete sent\n");
close_and_free_remote(EV_A_ remote);
close_and_free_server(EV_A_ server);
@ -411,6 +414,7 @@ static void remote_send_cb (EV_P_ ev_io *w, int revents) {
return;
}
} else {
printf("is connected\n");
if (remote->buf_len == 0) {
// close and free
close_and_free_remote(EV_A_ remote);
@ -537,6 +541,7 @@ static void accept_cb (EV_P_ ev_io *w, int revents)
perror("accept");
break;
}
setnonblocking(serverfd);
struct server *server = new_server(serverfd);
// struct addrinfo hints, *res;
// int sockfd;

4
socks5.h

@ -7,6 +7,8 @@
#define IPV6 0x04
#define CMD_NOT_SUPPORTED 0x07
#pragma pack(1)
struct method_select_request
{
char ver;
@ -36,3 +38,5 @@ struct socks5_response
char atyp;
};
#pragma pack()
Loading…
Cancel
Save