Fixed CpdIsBdCharmDebugMessage with Gengbin
[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 /*Security attributes for a CCS request*/
32 typedef struct {
33   skt_ip_t ip;/*Source machine (or firewall)*/
34   ChMessageInt_t port;
35   ChMessageInt_t replySalt;/*Salt value for reply hash*/
36   unsigned char auth;/*1-- message authenticated; 0-- no authentication*/
37   unsigned char level;/*Security level-- 0 to 255*/
38 } CcsSecAttr;
39
40 /*Used within CCS implementation to identify requestor*/
41 #define CCS_MAXHANDLER 32 /*Longest possible handler name*/
42 typedef struct {
43   CcsSecAttr     attr; /*Source information*/
44   char handler[CCS_MAXHANDLER];/*Handler name for message to follow*/
45   ChMessageInt_t pe;/*Dest. processor # (global numbering)*/
46   ChMessageInt_t replyFd;/*Send reply back here*/
47   ChMessageInt_t len;/*Bytes of message data to follow*/
48 } CcsImplHeader;
49
50 /********* CCS Implementation (not in ccs-server.c) ********/
51 /*Deliver this request data to the appropriate PE. */
52 void CcsImpl_netRequest(CcsImplHeader *hdr,const void *reqData);
53
54 /*Deliver this reply data to this reply socket.
55   The data will eventually be sent to the CCS server.
56 */
57 void CcsImpl_reply(CcsImplHeader *hdr,int repLen,const void *repData);
58
59 /*Send any registered clients kill messages before we exit*/
60 void CcsImpl_kill(void);
61
62 /*Convert CCS header & message data into a converse message to handler*/
63 char *CcsImpl_ccs2converse(const CcsImplHeader *hdr,const void *data,int *ret_len);
64
65 /******************* ccs-server.c routines ***************/
66 /*Make a new Ccs Server socket, on the given port.
67 Returns the actual port and IP address.
68 */
69 void CcsServer_new(skt_ip_t *ret_ip,int *use_port,const char *securityFile);
70
71 /*Get the Ccs Server socket.  This socket can
72 be added to the rdfs list for calling select().
73 */
74 SOCKET CcsServer_fd(void);
75
76 /*Connect to the Ccs Server socket, and 
77 receive a ccs request from the network.
78 Returns 1 if a request was successfully received;
79 0 otherwise.
80 reqData is allocated with malloc(hdr->len).
81 */
82 int CcsServer_recvRequest(CcsImplHeader *hdr,void **reqData);
83
84 /*Send a Ccs reply down the given socket.
85 Closes the socket afterwards.
86 */
87 void CcsServer_sendReply(CcsImplHeader *hdr,int repBytes,const void *repData);
88
89 /*No request will be sent through this socket.
90 Closes it.
91 */
92 void CcsServer_noReply(CcsImplHeader *hdr);
93
94 #else /*CCS not available*/
95
96 #define CcsServer_new(i,p) /*empty*/
97 #define CcsServer_fd() SOCKET_ERROR
98 #define CcsServer_recvReq(h,b) 0
99 #define CcsServer_sendReply(f,l,d) /*empty*/
100 #define CcsServer_noReply(f) /*empty*/
101 #define CcsImpl_kill() /*empty*/
102 #endif /*CCS available*/
103
104 #ifdef __cplusplus
105 }
106 #endif
107 #endif