Update:
[swifty.git] / src / lib_swift.h
1 #ifndef _LIB_SWIFT_
2 #define _LIB_SWIFT_
3
4 #define SWIFT_PORT              8080
5 #define PACKET_SIZE             4*1024
6 #define MAX_IPs                 10
7
8 #define DIE(s) \
9         do { \
10                 printf("%s:%d: ", __func__, __LINE__); \
11                 perror(s); \
12                 exit(EXIT_FAILURE); \
13         } while (0) \
14
15 #define CHECK(x) \
16         do { \
17                 if (!(x)) { \
18                         printf("%s:%d: ", __func__, __LINE__); \
19                         perror(#x); \
20                         exit(EXIT_FAILURE); \
21                 } \
22         } while (0) \
23
24 #ifdef DEBUG
25 #define Dprintf(msg,...) printf("[%s]:%d " msg, __FILE__, __LINE__, ##__VA_ARGS__)
26 #else
27 #define Dprintf(msg,...)                /* do nothing */
28 #endif
29
30 typedef int SOCKET;
31
32 // swift interface
33 typedef struct swift {
34         SOCKET socketListener;
35         SOCKET sendChannel;
36         SOCKET *recvChannel;
37         
38         int usedChannels;
39         int maxChannels;
40 } *Swift;
41
42 // swift_addr structure similar with in_addr 
43 struct swift_addr {
44         unsigned short N;                                       // e.g. number of s_addr
45         unsigned long s_addr[MAX_IPs];          // i.p. ip list
46 };
47
48 // swift struct similar with sock_addr
49 typedef struct sockSwiftaddr {
50         short                           sin_family;             // e.g. AF_INET
51     unsigned short              sin_port;               // e.g. htons(3490)
52     struct swift_addr   sin_addr;               // see struct swift_addr, below
53 } *SockSwiftaddr;
54
55 // list of swift_addr
56 struct listsockaddr {
57         unsigned short N;
58         struct sockaddr_in sa[MAX_IPs];
59 };      
60
61 // Function to create a Swift socket
62 Swift socketSwift(int maxChannels);
63
64 // Function to close a Swift socket
65 void closeSwift(Swift);
66
67 // Function to listen to a port
68 int listenfromSwift (Swift s, void *buf, size_t len, int flags,
69                  struct sockSwiftaddr * __restrict__ from, socklen_t *fromlen);
70
71 // Function to bind a port for swift socket
72 int bindSwift(Swift s, const struct sockSwiftaddr *my_addr, socklen_t addrlen);
73
74 // Function to receive a message
75 ssize_t recvfromSwift(Swift s, void *buf, size_t len, int flags,
76                  struct sockSwiftaddr *from, socklen_t fromlen);
77                  
78 // Function to send a message
79 ssize_t sendToSwift(Swift s, const void *buf, size_t len, int flags, 
80                                         const struct sockSwiftaddr *to, socklen_t tolen);
81
82
83 // test function -- don't commit
84 void transformFromAddrToSwift(struct sockSwiftaddr *ssa, struct listsockaddr lsa);
85 void transformFromSwiftToAddr(struct listsockaddr *lsa, struct sockSwiftaddr ssa);
86
87 #endif