raw: Add library macro for struct sockaddr in function arguments.
[swifty.git] / src / lib_swift.h
index 47967ad..666cc3b 100644 (file)
@@ -3,6 +3,7 @@
 
 #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