From: Bogdan Drutu Date: Thu, 30 Dec 2010 08:43:12 +0000 (+0200) Subject: Modify sockaddr -> sockSwiftaddr X-Git-Url: http://p2p-next.cs.pub.ro/gitweb/?a=commitdiff_plain;h=6a94f439c0ae4b994ebc3f152a5aa2c7c5aefce7;p=swifty.git Modify sockaddr -> sockSwiftaddr --- diff --git a/src/lib_swift.c b/src/lib_swift.c index 1ddd024..01a838b 100644 --- a/src/lib_swift.c +++ b/src/lib_swift.c @@ -10,21 +10,57 @@ #include "lib_swift.h" -ssize_t recvfrom(int s, void *buf, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen); +struct sockSwiftaddr transformFromAddrToSwift(struct listsockaddr lsa) +{ + struct sockSwiftaddr ssa; + int i; + + for (i = 0; i < lsa.N; i++) + { + ssa.sin_addr.s_addr[i] = lsa.sa[i].sin_addr.s_addr; + } + + return ssa; +} + +struct listsockaddr transformFromSwiftToAddr(struct sockSwiftaddr ssa) +{ + struct listsockaddr lsa; + int i; + + lsa.N = ssa.sin_addr.N; + + for ( i = 0; i < lsa.N; i++) { + lsa.sa[i].sin_family = ssa.sin_family; + lsa.sa[i].sin_port = ssa.sin_port; + lsa.sa[i].sin_addr.s_addr = ssa.sin_addr.s_addr[i]; + } + + return lsa; +} -int recvfromSwift (Swift s, void *buf, size_t len, int flags, - struct sockaddr * __restrict__ from, socklen_t *fromlen) +int listenfromSwift (Swift s, void *buf, size_t len, int flags, + struct sockSwiftaddr * __restrict__ from, socklen_t *fromlen) { - struct sockaddr_in si_other; - socklen_t slen=sizeof(si_other); + struct sockaddr s_other; + struct listsockaddr lsa; + socklen_t slen=sizeof(s_other); Dprintf("wait to receive messages"); - return recvfrom(s->socketListener, buf, len, flags, - from, &slen); + + int rec = recvfrom(s->socketListener, buf, len, flags, + (struct sockaddr * __restrict__)&s_other, &slen); + + // fill listsockaddr + memcpy(&lsa.sa[0], &s_other, sizeof(s_other)); + lsa.N = 1; + + *from = transformFromAddrToSwift(lsa); + + return rec; } -int bindSwift(Swift s, const struct sockaddr *my_addr, socklen_t addrlen) +int bindSwift(Swift s, const struct sockSwiftaddr *my_addr, socklen_t addrlen) { Dprintf("bind swift socket"); return bind(s->socketListener, diff --git a/src/lib_swift.h b/src/lib_swift.h index 47967ad..8611c80 100644 --- a/src/lib_swift.h +++ b/src/lib_swift.h @@ -3,6 +3,7 @@ #define SWIFT_PORT 8080 #define PACKET_SIZE 4*1024 +#define MAX_IPs 10 #define DIE(s) \ do { \ @@ -31,11 +32,27 @@ typedef struct swift { struct sockaddr_in socketListenerAddr; } *Swift; +struct swift_addr { + unsigned short N; // e.g. number of s_addr + unsigned long s_addr[MAX_IPs]; // i.p. ip list +}; + +typedef struct sockSwiftaddr { + short sin_family; // e.g. AF_INET + unsigned short sin_port; // e.g. htons(3490) + struct swift_addr sin_addr; // see struct swift_addr, below +} *SockSwiftaddr; + +struct listsockaddr { + unsigned short N; + struct sockaddr_in sa[MAX_IPs]; +}; + Swift socketSwift(); void closeSwift(Swift); -int recvfromSwift (Swift, void *, size_t, int, struct sockaddr *, socklen_t *); -int bindSwift(Swift, const struct sockaddr *, socklen_t); +int recvfromSwift (Swift, void *, size_t, int, struct sockSwiftaddr *, socklen_t *); +int bindSwift(Swift, const struct sockSwiftaddr *, socklen_t); #endif