#define SWIFT_PORT 8080
#define PACKET_SIZE 4*1024
+#define MAX_IPs 10
#define DIE(s) \
do { \
} while (0) \
#ifdef DEBUG
-#define Dprintf(msg,...) printf("[%s]:%d" msg, __FILE__, __LINE__, ##__VA_ARGS__)
+#define Dprintf(msg,...) printf("[%s]:%d " msg, __FILE__, __LINE__, ##__VA_ARGS__)
#else
#define Dprintf(msg,...) /* do nothing */
#endif
+typedef int SOCKET;
+
+// swift interface
typedef struct swift {
- int socketListener;
- struct sockaddr_in socketListenerAddr;
+ SOCKET socketListener;
+ SOCKET sendChannel;
+ SOCKET *recvChannel;
+
+ int usedChannels;
+ int maxChannels;
} *Swift;
-Swift socketSwift();
+/*
+ * TODO: uniform structure names
+ */
+
+// swift_addr structure similar with in_addr
+struct swift_addr {
+ unsigned short N; // e.g. number of s_addr
+ unsigned long s_addr[MAX_IPs]; // i.p. ip list
+};
+
+// swift struct similar with sock_addr
+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;
+
+// list of swift_addr
+struct listsockaddr {
+ unsigned short N;
+ struct sockaddr_in sa[MAX_IPs];
+};
+
+// Function to create a Swift socket
+Swift socketSwift(int maxChannels);
+
+// Function to close a Swift socket
void closeSwift(Swift);
+// Function to listen to a port
+int listenfromSwift (Swift s, void *buf, size_t len, int flags,
+ struct sockSwiftaddr * __restrict__ from, socklen_t *fromlen);
+
+// Function to bind a port for swift socket
+int bindSwift(Swift s, const struct sockSwiftaddr *my_addr, socklen_t addrlen);
+
+// Function to receive a message
+ssize_t recvfromSwift(Swift s, void *buf, size_t len, int flags,
+ struct sockSwiftaddr *from, socklen_t fromlen);
+
+// Function to send a message
+ssize_t sendToSwift(Swift s, const void *buf, size_t len, int flags,
+ const struct sockSwiftaddr *to, socklen_t tolen);
+
-int recvfromSwift (Swift, void *, size_t, int, struct sockaddr *, socklen_t *);
-int bindSwift(Swift, const struct sockaddr *, socklen_t);
+// test function -- don't commit
+void transformFromAddrToSwift(struct sockSwiftaddr *ssa, struct listsockaddr lsa);
+void transformFromSwiftToAddr(struct listsockaddr *lsa, struct sockSwiftaddr ssa);
#endif