summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2013-12-04 18:19:59 +0100
committerAndreas Schneider <asn@cryptomilk.org>2013-12-05 13:36:23 +0100
commitfcbfac342e4bef9c4d0741f249ce395a342b6d9a (patch)
tree7ba44aa3da2c50fb947ed9e52d552022cb2f88de /src
parent883231bbf092faf298bef89f2835e335582aa98e (diff)
downloadsocket_wrapper-fcbfac342e4bef9c4d0741f249ce395a342b6d9a.tar.gz
socket_wrapper-fcbfac342e4bef9c4d0741f249ce395a342b6d9a.tar.xz
socket_wrapper-fcbfac342e4bef9c4d0741f249ce395a342b6d9a.zip
swrap: Add a swrap structure.
Diffstat (limited to 'src')
-rw-r--r--src/socket_wrapper.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index bf4828d..85cfd03 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -269,6 +269,67 @@ static void swrap_log(enum swrap_dbglvl_e dbglvl, const char *format, ...)
#include <dlfcn.h>
+struct swrap_libc_fns {
+ int (*libc_accept)(int sockfd,
+ struct sockaddr *addr,
+ socklen_t *addrlen);
+ int (*libc_bind)(int sockfd,
+ const struct sockaddr *addr,
+ socklen_t addrlen);
+ int (*libc_close)(int fd);
+ int (*libc_connect)(int sockfd,
+ const struct sockaddr *addr,
+ socklen_t addrlen);
+ int (*libc_dup)(int fd);
+ int (*libc_dup2)(int oldfd, int newfd);
+ int (*libc_getpeername)(int sockfd,
+ struct sockaddr *addr,
+ socklen_t *addrlen);
+ int (*libc_getsockname)(int sockfd,
+ struct sockaddr *addr,
+ socklen_t *addrlen);
+ int (*libc_getsockopt)(int sockfd,
+ int level,
+ int optname,
+ void *optval,
+ socklen_t *optlen);
+ int (*libc_ioctl)(int d, unsigned long int request, ...);
+ int (*libc_listen)(int sockfd, int backlog);
+ int (*libc_read)(int fd, void *buf, size_t count);
+ ssize_t (*libc_readv)(int fd, const struct iovec *iov, int iovcnt);
+ int (*libc_recv)(int sockfd, void *buf, size_t len, int flags);
+ int (*libc_recvfrom)(int sockfd,
+ void *buf,
+ size_t len,
+ int flags,
+ struct sockaddr *src_addr,
+ socklen_t *addrlen);
+ int (*libc_send)(int sockfd, const void *buf, size_t len, int flags);
+ int (*libc_sendmsg)(int sockfd, const struct msghdr *msg, int flags);
+ int (*libc_sendto)(int sockfd,
+ const void *buf,
+ size_t len,
+ int flags,
+ const struct sockaddr *dst_addr,
+ socklen_t addrlen);
+ int (*libc_setsockopt)(int sockfd,
+ int level,
+ int optname,
+ const void *optval,
+ socklen_t optlen);
+ int (*libc_socket)(int domain, int type, int protocol);
+ ssize_t (*libc_writev)(int fd, const struct iovec *iov, int iovcnt);
+};
+
+struct swrap {
+ void *libc_handle;
+ void *libsocket_handle;
+
+ struct swrap_libc_fns fns;
+};
+
+static struct swrap swrap;
+
#define LIBC_NAME "libc.so"
#ifndef HAVE_APPLE