This is the CCS request receiver code. It was originally
[charm.git] / src / conv-ccs / ccs-server.h
1 /*
2 Converse Client/Server: Server-side interface
3 Orion Sky Lawlor, 9/13/2000, olawlor@acm.org
4
5 CcsServer routines handle the CCS Server socket,
6 translate CCS requests and replies into the final
7 network format, and send/recv the actual requests
8 and replies.
9
10 Depending on the situation, this code is called from
11 conv-host.c, or conv-core.c/conv-ccs.c (for 
12 NODE_0_IS_CONVHOST).  All the routines in this file
13 should be called from within only one machine&program-- 
14 the CCS server.  That is, you can't receive a request
15 on one machine, send the request to another machine,
16 and send the response from the new machine (because
17 the reply socket is for the original machine).
18 */
19
20 #ifndef CCS_SERVER_H
21 #define CCS_SERVER_H
22
23 #include "sockRoutines.h"
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29 #if CMK_CCS_AVAILABLE
30
31 /*Used within CCS implementation to identify requestor*/
32 #define CCS_MAXHANDLER 32 /*Longest possible handler name*/
33 typedef struct {
34   char handler[CCS_MAXHANDLER];/*Handler name for message to follow*/
35   ChMessageInt_t pe;/*Dest. processor # (global numbering)*/
36   ChMessageInt_t ip,port;/*Requestor's IP and port (for caller ID)*/
37   ChMessageInt_t replyFd;/*Send reply back here*/
38   ChMessageInt_t len;/*Bytes of message data to follow*/
39 } CcsImplHeader;
40 void CcsImplHeader_new(char *handler,
41                        int pe,int ip,int port,
42                        SOCKET replyFd,int userBytes,
43                        CcsImplHeader *imp);
44 /********* CCS Implementation (not in ccs-server.c) ********/
45 /*Deliver this request data to the appropriate PE. */
46 void CcsImpl_netRequest(CcsImplHeader *hdr,const char *reqData);
47
48 /*Deliver this reply data to this reply socket.
49   The data will have to be forwarded to CCS server.
50 */
51 void CcsImpl_reply(SOCKET replFd,int repLen,const char *repData);
52
53 /*Send any registered clients kill messages before we exit*/
54 void CcsImpl_kill(void);
55
56 void CcsInit(void);
57 /*Convert CCS header & message data into a converse message to handler*/
58 char *CcsImpl_ccs2converse(const CcsImplHeader *hdr,const char *data,int *ret_len);
59
60 /******************* ccs-server.c routines ***************/
61 /*Make a new Ccs Server socket, on the given port.
62 Returns the actual port and IP address.
63 */
64 void CcsServer_new(int *ret_ip,int *use_port);
65
66 /*Get the Ccs Server socket.  This socket can
67 be added to the rdfs list for calling select().
68 */
69 SOCKET CcsServer_fd(void);
70
71 /*Connect to the Ccs Server socket, and 
72 receive a ccs request from the network.
73 Returns 1 if a request was successfully received;
74 0 otherwise.
75 reqData is allocated with malloc(hdr->len).
76 */
77 int CcsServer_recvRequest(CcsImplHeader *hdr,char **reqData);
78
79 /*Send a Ccs reply down the given socket.
80 Closes the socket afterwards.
81 */
82 void CcsServer_sendReply(SOCKET fd,int repBytes,const char *repData);
83
84 #else /*CCS not available*/
85
86 #define CcsServer_new(i,p) /*empty*/
87 #define CcsServer_fd() SOCKET_ERROR
88 #define CcsServer_recvReq(h,b) 0
89 #define CcsServer_sendReply(f,l,d) /*empty*/
90 #define CcsImpl_kill() /*empty*/
91 #define CcsInit() /*empty*/
92 #endif /*CCS available*/
93
94 #ifdef __cplusplus
95 }
96 #endif
97 #endif