summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
63119d0)
- complete api
- add a client/server example
Swift s = socketSwift(1);
struct sockSwiftaddr my_addr;
char buf[100];
Swift s = socketSwift(1);
struct sockSwiftaddr my_addr;
char buf[100];
+ struct listsockaddr lsa;
// populate sockSwiftaddr
my_addr.sin_family = AF_INET;
// populate sockSwiftaddr
my_addr.sin_family = AF_INET;
recvfromSwift(s, buf, 100, 0, &my_addr, sizeof(my_addr));
recvfromSwift(s, buf, 100, 0, &my_addr, sizeof(my_addr));
- struct listsockaddr lsa = transformFromSwiftToAddr(my_addr);
+ transformFromSwiftToAddr(&lsa, my_addr);
printf("Received packet from %s:%d\nData: %s\n\n", inet_ntoa(lsa.sa[0].sin_addr), ntohs(my_addr.sin_port), buf);
closeSwift(s);
printf("Received packet from %s:%d\nData: %s\n\n", inet_ntoa(lsa.sa[0].sin_addr), ntohs(my_addr.sin_port), buf);
closeSwift(s);
#define DEBUG
#include "lib_swift.h"
#define DEBUG
#include "lib_swift.h"
-struct sockSwiftaddr transformFromAddrToSwift(struct listsockaddr lsa)
+void transformFromAddrToSwift(struct sockSwiftaddr *ssa, struct listsockaddr lsa)
- struct sockSwiftaddr ssa;
+ Dprintf("transform in %d address\n", lsa.N);
+ ssa->sin_addr.N = lsa.N;
+ if (lsa.N > 0) {
+ ssa->sin_family = lsa.sa[0].sin_family;
+ ssa->sin_port = lsa.sa[0].sin_port;
+ }
+
for (i = 0; i < lsa.N; i++)
{
for (i = 0; i < lsa.N; i++)
{
- ssa.sin_addr.s_addr[i] = lsa.sa[i].sin_addr.s_addr;
+ ssa->sin_addr.s_addr[i] = lsa.sa[i].sin_addr.s_addr;
-struct listsockaddr transformFromSwiftToAddr(struct sockSwiftaddr ssa)
+void transformFromSwiftToAddr(struct listsockaddr *lsa, struct sockSwiftaddr ssa)
- struct listsockaddr lsa;
- lsa.N = ssa.sin_addr.N;
+ Dprintf("transform %d address\n", ssa.sin_addr.N);
+ 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];
+ 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];
}
// Function to receive a message
}
// Function to receive a message
socklen_t slen=sizeof(s_other);
ssize_t rec = -1, send;
char *command = "test";
socklen_t slen=sizeof(s_other);
ssize_t rec = -1, send;
char *command = "test";
- struct listsockaddr lsa = transformFromSwiftToAddr(*from);
+ struct listsockaddr lsa;
+ transformFromSwiftToAddr(&lsa, *from);
Dprintf("create recv channel\n");
// TODO make pool
if (s->usedChannels < s->maxChannels)
Dprintf("create recv channel\n");
// TODO make pool
if (s->usedChannels < s->maxChannels)
for ( i = 0 ; i < lsa.N ; i++)
{
for ( i = 0 ; i < lsa.N ; i++)
{
- Dprintf("send information to %s\n", inet_ntoa(lsa.sa[0].sin_addr));
- send = sendto(s->recvChannel[channel], command, strlen(command), 0, (const struct sockaddr *)&lsa.sa[i], sizeof(lsa.sa[i]));
+ Dprintf("send information to %s:%d\n", inet_ntoa(lsa.sa[i].sin_addr), ntohs(lsa.sa[i].sin_port));
+ send = sendto(s->recvChannel[channel], command, 4, 0, (const struct sockaddr *)&lsa.sa[i], sizeof(lsa.sa[i]));
}
Dprintf("receive data\n");
}
Dprintf("receive data\n");
+ // TODO make a non-blocant select
// I'm waiting for response
rec = recvfrom(s->recvChannel[channel], buf, len, flags, (struct sockaddr * __restrict__)&s_other, &slen);
// I'm waiting for response
rec = recvfrom(s->recvChannel[channel], buf, len, flags, (struct sockaddr * __restrict__)&s_other, &slen);
ssize_t sendToSwift(Swift s, const void *buf, size_t len, int flags,
const struct sockSwiftaddr *to, socklen_t tolen)
{
ssize_t sendToSwift(Swift s, const void *buf, size_t len, int flags,
const struct sockSwiftaddr *to, socklen_t tolen)
{
- struct listsockaddr lsa = transformFromSwiftToAddr(*to);
+ struct listsockaddr lsa;
int i;
ssize_t send = -1;
int i;
ssize_t send = -1;
- Dprintf("send data\n");
+ transformFromSwiftToAddr(&lsa, *to);
+
for ( i = 0 ; i < lsa.N ; i++)
{
for ( i = 0 ; i < lsa.N ; i++)
{
+ Dprintf("send data to %s:%d\n", inet_ntoa(lsa.sa[i].sin_addr), ntohs(lsa.sa[i].sin_port));
send = sendto(s->sendChannel, buf, len, flags, (const struct sockaddr *)&lsa.sa[i], sizeof(lsa.sa[i]));
}
send = sendto(s->sendChannel, buf, len, flags, (const struct sockaddr *)&lsa.sa[i], sizeof(lsa.sa[i]));
}
}
// Function to listen to a port
int listenfromSwift (Swift s, void *buf, size_t len, int flags,
}
// Function to listen to a port
int listenfromSwift (Swift s, void *buf, size_t len, int flags,
- struct sockSwiftaddr * __restrict__ from, socklen_t *fromlen)
+ struct sockSwiftaddr * from, socklen_t *fromlen)
{
struct sockaddr s_other;
struct listsockaddr lsa;
{
struct sockaddr s_other;
struct listsockaddr lsa;
memcpy(&lsa.sa[0], &s_other, sizeof(s_other));
lsa.N = 1;
memcpy(&lsa.sa[0], &s_other, sizeof(s_other));
lsa.N = 1;
- *from = transformFromAddrToSwift(lsa);
+ transformFromAddrToSwift(from, lsa);
int bindSwift(Swift s, const struct sockSwiftaddr *my_addr, socklen_t addrlen)
{
Dprintf("bind swift socket\n");
int bindSwift(Swift s, const struct sockSwiftaddr *my_addr, socklen_t addrlen)
{
Dprintf("bind swift socket\n");
- struct listsockaddr lsa = transformFromSwiftToAddr(*my_addr);
+ struct listsockaddr lsa;
+ transformFromSwiftToAddr(&lsa, *my_addr);
return bind(s->socketListener, (const struct sockaddr *)&lsa.sa[0], sizeof(lsa.sa[0]));
}
return bind(s->socketListener, (const struct sockaddr *)&lsa.sa[0], sizeof(lsa.sa[0]));
}
Dprintf("create swift send channel\n");
CHECK(s->sendChannel = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP));
Dprintf("create swift send channel\n");
CHECK(s->sendChannel = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP));
+ Dprintf("create swift send channel\n");
+ CHECK(s->recvChannel = calloc(100,sizeof(SOCKET)));
+
+ s->usedChannels = 0;
+ s->maxChannels = maxChannels;
+
#define Dprintf(msg,...) /* do nothing */
#endif
#define Dprintf(msg,...) /* do nothing */
#endif
// swift interface
typedef struct swift {
// swift interface
typedef struct swift {
- int socketListener;
- int sendChannel;
- int *recvChannel;
+ SOCKET socketListener;
+ SOCKET sendChannel;
+ SOCKET *recvChannel;
int usedChannels;
int maxChannels;
int usedChannels;
int maxChannels;
// test function -- don't commit
// test function -- don't commit
-struct sockSwiftaddr transformFromAddrToSwift(struct listsockaddr lsa);
-struct listsockaddr transformFromSwiftToAddr(struct sockSwiftaddr ssa);
+void transformFromAddrToSwift(struct sockSwiftaddr *ssa, struct listsockaddr lsa);
+void transformFromSwiftToAddr(struct listsockaddr *lsa, struct sockSwiftaddr ssa);
char buf[100];
socklen_t slen;
struct listsockaddr lsa;
char buf[100];
socklen_t slen;
struct listsockaddr lsa;
// populate sockSwiftaddr
my_addr.sin_family = AF_INET;
// populate sockSwiftaddr
my_addr.sin_family = AF_INET;
//recvfromSwift(s, buf, 100, 0, (struct sockaddr *)&si_other, &slen);
bindSwift(s, &my_addr, sizeof(my_addr));
//recvfromSwift(s, buf, 100, 0, (struct sockaddr *)&si_other, &slen);
bindSwift(s, &my_addr, sizeof(my_addr));
- listenfromSwift(s, buf, 100, 0, &from, &slen);
-
- lsa = transformFromSwiftToAddr(from);
- printf("Received packet from %s:%d with data: %s\n", inet_ntoa(lsa.sa[0].sin_addr), ntohs(lsa.sa[0].sin_port), buf);
+ len = listenfromSwift(s, buf, 100, 0, &from, &slen);
+ transformFromSwiftToAddr(&lsa, from);
+ printf("Received packet from %s:%d with data: %s %d\n", inet_ntoa(lsa.sa[0].sin_addr), ntohs(lsa.sa[0].sin_port), buf, (int)len);
+ sendToSwift(s, buf, len, 0, &from, slen);