doc: Add serial to list of ci file reserved words
[charm.git] / src / conv-ccs / conv-ccs.h
1 /*This file describes the CCS Server-side handler
2 interface.  A CCS handler is just a CMI handler,
3 but it can use the CcsSendReply function.
4 */
5
6 #ifndef CONV_CCS_H
7 #define CONV_CCS_H
8
9 #include "converse.h" /* for CMK_CCS_AVAILABLE and CmiHandler */
10 #include "sockRoutines.h"
11 #include "ccs-server.h" /*for CcsSecAttr*/
12
13 #include "ckhashtable.h"
14
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18
19 /******* Converse Client Server *****/
20
21 #define CMK_CCS_VERSION "2"
22
23 extern int _ccsHandlerIdx;
24
25 #if CMK_CCS_AVAILABLE
26
27 typedef CkHashtable_c CcsHandlerTable;
28 CpvExtern(CcsHandlerTable, ccsTab);
29
30 typedef struct CcsDelayedReply_struct {
31   CcsImplHeader *hdr;
32 } CcsDelayedReply;
33
34 typedef void (*CcsHandlerFn)(void *userPtr,int reqLen,const void *reqData);
35
36 /* Includes all information stored about a single CCS handler. */
37 typedef struct CcsHandlerRec {
38     const char *name; /*Name passed over socket*/
39     CmiHandler fnOld; /*Old converse-style handler, or NULL if new-style*/
40     CcsHandlerFn fn; /*New-style handler function, or NULL if old-style*/
41     void *userPtr;
42     CmiReduceMergeFn mergeFn; /*Merge function used for bcast requests*/
43     int nCalls; /* Number of times handler has been executed*/
44     CmiUInt2 redID; /*Reduction ID to be used with CmiListReduce*/
45 } CcsHandlerRec;
46
47 /**
48  * Backward compatability routine: register a regular converse-style handler
49  * to receive CCS requests.  The requests will arrive as a Converse message,
50  * with a (useless) converse header.
51  */
52 void CcsRegisterHandler(const char *ccs_handlername, CmiHandler fn);
53
54 CcsHandlerRec *CcsGetHandler(const char *name);
55
56 /**
57  * Register a real Ccs handler function to receive these CCS requests. 
58  * The requests will arrive as a flat, readonly buffer.
59  */
60 void CcsRegisterHandlerFn(const char *ccs_handlername, CcsHandlerFn fn, void *userPtr);
61
62 /**
63  * Set the merging function for this CCS handler to newMerge.
64  */
65 void CcsSetMergeFn(const char *name, CmiReduceMergeFn newMerge);
66 /* A few standard functions for merging CCS messages */
67 #define SIMPLE_REDUCTION(name) void * CcsMerge_##name(int *size,void *local,void **remote,int n)
68 #define SIMPLE_POLYMORPH_REDUCTION(nameBase) \
69   SIMPLE_REDUCTION(nameBase##_int); \
70   SIMPLE_REDUCTION(nameBase##_float); \
71   SIMPLE_REDUCTION(nameBase##_double)
72 SIMPLE_REDUCTION(concat);
73 SIMPLE_REDUCTION(logical_and);
74 SIMPLE_REDUCTION(logical_or);
75 SIMPLE_REDUCTION(bitvec_and);
76 SIMPLE_REDUCTION(bitvec_and);
77 SIMPLE_POLYMORPH_REDUCTION(sum);
78 SIMPLE_POLYMORPH_REDUCTION(product);
79 SIMPLE_POLYMORPH_REDUCTION(max);
80 SIMPLE_POLYMORPH_REDUCTION(min);
81 #undef SIMPLE_REDUCTION
82 #undef SIMPLE_POLYMORPH_REDUCTION
83
84 void CcsReleaseMessages();
85 void CcsInit(char **argv);
86 int CcsEnabled(void);
87 int CcsIsRemoteRequest(void);
88 void CcsCallerId(skt_ip_t *pip, unsigned int *pport);
89 void CcsSendReply(int replyLen, const void *replyData);
90 void CcsSendReplyNoError(int replyLen, const void *replyData);
91 CcsDelayedReply CcsDelayReply(void);
92 void CcsSendDelayedReply(CcsDelayedReply d,int replyLen, const void *replyData);
93 void CcsNoReply();
94 void CcsNoDelayedReply(CcsDelayedReply d);
95
96 #else
97 typedef void *CcsDelayedReply;
98 #define CcsReleaseMessages() /*empty*/
99 #define CcsInit(argv) /*empty*/
100 #define CcsRegisterHandler(x,y) 0
101 #define CcsRegisterHandlerFn(x,y,p) 0
102 #define CcsSetMergeFn(x,y) 0
103 #define CcsEnabled() 0
104 #define CcsIsRemoteRequest() 0
105 #define CcsCallerId(x,y)  /*empty*/
106 #define CcsDelayReply() 0
107 #define CcsSendReply(s,r) /*empty*/
108 #define CcsSendReplyNoError(s,r) /*empty*/
109 #define CcsSendDelayedReply(d,s,r); 
110 #define CcsNoReply() /*empty*/
111 #define CcsNoDelayedReply(d) /*empty*/
112 #endif
113
114 #ifdef __cplusplus
115 }
116 #endif
117 #endif