Skip to content

Commit

Permalink
provide definitions for lwip's socket structs
Browse files Browse the repository at this point in the history
previously, this only worked if they were identical to the ones provided
by the local system
  • Loading branch information
brian-armstrong committed Jul 22, 2016
1 parent bfa0742 commit 3bc05a0
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 18 deletions.
4 changes: 2 additions & 2 deletions examples/src/proxy_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@ int open_send(const char *addr) {
return -1;
}

struct sockaddr_in remote;
struct lwip_sockaddr_in remote;
remote.sin_family = AF_INET;
remote.sin_addr.s_addr = inet_addr(addr);
remote.sin_port = htons(remote_port);
int res = lwip_connect(socket_fd, (struct sockaddr*)&remote, sizeof(remote));
int res = lwip_connect(socket_fd, (struct lwip_sockaddr*)&remote, sizeof(remote));

if (res < 0) {
printf("connect failed\n");
Expand Down
17 changes: 10 additions & 7 deletions examples/src/proxy_server.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,12 +249,12 @@ int open_recv(const char *addr) {
return -1;
}

struct sockaddr_in *local_addr = calloc(1, sizeof(struct sockaddr_in));
struct lwip_sockaddr_in *local_addr = calloc(1, sizeof(struct lwip_sockaddr_in));
local_addr->sin_family = AF_INET;
local_addr->sin_addr.s_addr = inet_addr(addr);
local_addr->sin_port = htons(local_port);

int res = lwip_bind(socket_fd, (struct sockaddr *)local_addr, sizeof(struct sockaddr_in));
int res = lwip_bind(socket_fd, (struct lwip_sockaddr *)local_addr, sizeof(struct lwip_sockaddr_in));
free(local_addr);

if (res < 0) {
Expand All @@ -272,9 +272,9 @@ int open_recv(const char *addr) {
return socket_fd;
}

int recv_connection(int socket_fd, struct sockaddr_in *recv_from) {
socklen_t recv_from_len = sizeof(recv_from);
return lwip_accept(socket_fd, (struct sockaddr *)recv_from, &recv_from_len);
int recv_connection(int socket_fd, struct lwip_sockaddr_in *recv_from) {
lwip_socklen_t recv_from_len = sizeof(recv_from);
return lwip_accept(socket_fd, (struct lwip_sockaddr *)recv_from, &recv_from_len);
}

int main(int argc, char **argv) {
Expand Down Expand Up @@ -358,13 +358,16 @@ int main(int argc, char **argv) {
uint8_t *buf = calloc(buf_len, sizeof(uint8_t));

for (;;) {
struct sockaddr_in recv_from;
struct lwip_sockaddr_in recv_from;
int conn_fd = recv_connection(recv_socket, &recv_from);
if (conn_fd < 0) {
continue;
}

printf("received connection from %s\n", inet_ntoa(recv_from.sin_addr));
struct in_addr local_domain;
local_domain.s_addr = recv_from.sin_addr.s_addr;

printf("received connection from %s\n", inet_ntoa(local_domain));

int res = socks_auth(conn_fd, buf, buf_len);

Expand Down
42 changes: 33 additions & 9 deletions include/quiet-lwip/lwip-socket.h
Original file line number Diff line number Diff line change
@@ -1,25 +1,49 @@
#ifndef QUIET_LWIP_SOCKET_H
#define QUIET_LWIP_SOCKET_H
#include <stdint.h>
#include <netinet/in.h>

int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
int lwip_bind(int s, const struct sockaddr *name, socklen_t namelen);
struct lwip_in_addr {
uint32_t s_addr;
};

struct lwip_sockaddr_in {
uint8_t sin_len;
uint8_t sin_family;
uint16_t sin_port;
struct lwip_in_addr sin_addr;
char sin_zero[8];
};

struct lwip_sockaddr {
uint8_t sa_len;
uint8_t sa_family;
char sa_data[14];
};

typedef uint32_t lwip_socklen_t;

int lwip_accept(int s, struct lwip_sockaddr *addr, lwip_socklen_t *addrlen);
int lwip_bind(int s, const struct lwip_sockaddr *name, lwip_socklen_t namelen);
int lwip_shutdown(int s, int how);
int lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen);
int lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen);
int lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen);
int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen);
int lwip_getpeername (int s, struct lwip_sockaddr *name, lwip_socklen_t *namelen);
int lwip_getsockname (int s, struct lwip_sockaddr *name, lwip_socklen_t *namelen);
int lwip_getsockopt (int s, int level, int optname, void *optval, lwip_socklen_t *optlen);
int lwip_setsockopt (int s, int level, int optname, const void *optval, lwip_socklen_t optlen);
int lwip_close(int s);
int lwip_connect(int s, const struct sockaddr *name, socklen_t namelen);
int lwip_connect(int s, const struct lwip_sockaddr *name, lwip_socklen_t namelen);
int lwip_listen(int s, int backlog);
int lwip_recv(int s, void *mem, size_t len, int flags);
int lwip_read(int s, void *mem, size_t len);
int lwip_recvfrom(int s, void *mem, size_t len, int flags,
struct sockaddr *from, socklen_t *fromlen);
struct lwip_sockaddr *from, lwip_socklen_t *fromlen);
int lwip_send(int s, const void *dataptr, size_t size, int flags);
int lwip_sendto(int s, const void *dataptr, size_t size, int flags,
const struct sockaddr *to, socklen_t tolen);
const struct lwip_sockaddr *to, lwip_socklen_t tolen);
int lwip_socket(int domain, int type, int protocol);
int lwip_write(int s, const void *dataptr, size_t size);
int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,
struct timeval *timeout);
int lwip_ioctl(int s, long cmd, void *argp);
int lwip_fcntl(int s, int cmd, int val);
#endif

0 comments on commit 3bc05a0

Please sign in to comment.