From 00a73199f9dc156af9d6872404d38cf3724adc8f Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 5 Sep 2010 17:07:29 +0000 Subject: [PATCH] Implemented VPN_recv() --- data/VPN.interface | 3 ++- src/vpn.c | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/data/VPN.interface b/data/VPN.interface index 48c1a34..dfa2abd 100644 --- a/data/VPN.interface +++ b/data/VPN.interface @@ -15,7 +15,8 @@ arg2=STRING,name ret=INT32 arg1=INT32,fd arg2=BUFFER_IN,buf -arg3=UINT32,flags +arg3=UINT32,size +arg4=UINT32,flags [send] ret=INT32 diff --git a/src/vpn.c b/src/vpn.c index 9d86d30..2a7d12e 100644 --- a/src/vpn.c +++ b/src/vpn.c @@ -124,6 +124,33 @@ int32_t VPN_connect(uint32_t protocol, String const * uri) } +/* VPN_recv */ +int32_t VPN_recv(int32_t fd, Buffer * buffer, uint32_t size, uint32_t flags) +{ + int32_t ret; + + if(_client_check(NULL, fd) == NULL) + return -1; +#ifdef DEBUG + fprintf(stderr, "DEBUG: %s(%d, buf, %u)\n", __func__, fd, flags); +#endif + if(buffer_set_size(buffer, size) != 0) + return -1; + /* FIXME implement flags */ + ret = recv(fd, buffer_get_data(buffer), size, 0); +#ifdef DEBUG + fprintf(stderr, "DEBUG: %s(%d, buf, %u) => %d\n", __func__, fd, flags, + ret); +#endif + if(buffer_set_size(buffer, (ret < 0) ? 0 : ret) != 0) + { + memset(buffer_get_data(buffer), 0, size); + return -1; + } + return ret; +} + + /* private */ /* functions */ /* accessors */