Merge commit 'origin/charm' into scratch
[charm.git] / src / conv-ccs / conv-ccs.h
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 /*This file describes the CCS Server-side handler
9 interface.  A CCS handler is just a CMI handler,
10 but it can use the CcsSendReply function.
11 */
12
13 #ifndef CONV_CCS_H
14 #define CONV_CCS_H
15
16 #include "converse.h" /* for CMK_CCS_AVAILABLE and CmiHandler */
17 #include "sockRoutines.h"
18 #include "ccs-server.h" /*for CcsSecAttr*/
19
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23
24 /******* Converse Client Server *****/
25
26 #define CMK_CCS_VERSION "2"
27
28 extern int _ccsHandlerIdx;
29
30 #if CMK_CCS_AVAILABLE
31
32 typedef struct CcsDelayedReply_struct {
33   CcsImplHeader *hdr;
34 } CcsDelayedReply;
35
36 /**
37  * Backward compatability routine: register a regular converse-style handler
38  * to receive CCS requests.  The requests will arrive as a Converse message,
39  * with a (useless) converse header.
40  */
41 void CcsRegisterHandler(const char *ccs_handlername, CmiHandler fn);
42
43 /**
44  * Register a real Ccs handler function to receive these CCS requests. 
45  * The requests will arrive as a flat, readonly buffer.
46  */
47 typedef void (*CcsHandlerFn)(void *userPtr,int reqLen,const void *reqData);
48 void CcsRegisterHandlerFn(const char *ccs_handlername, CcsHandlerFn fn, void *userPtr);
49
50 /**
51  * Set the merging function for this CCS handler to newMerge.
52  */
53 void CcsSetMergeFn(const char *name, CmiReduceMergeFn newMerge);
54 /* A few standard functions for merging CCS messages */
55 #define SIMPLE_REDUCTION(name) void * CcsMerge_##name(int *size,void *local,void **remote,int n)
56 #define SIMPLE_POLYMORPH_REDUCTION(nameBase) \
57   SIMPLE_REDUCTION(nameBase##_int); \
58   SIMPLE_REDUCTION(nameBase##_float); \
59   SIMPLE_REDUCTION(nameBase##_double)
60 SIMPLE_REDUCTION(concat);
61 SIMPLE_REDUCTION(logical_and);
62 SIMPLE_REDUCTION(logical_or);
63 SIMPLE_REDUCTION(bitvec_and);
64 SIMPLE_REDUCTION(bitvec_and);
65 SIMPLE_POLYMORPH_REDUCTION(sum);
66 SIMPLE_POLYMORPH_REDUCTION(product);
67 SIMPLE_POLYMORPH_REDUCTION(max);
68 SIMPLE_POLYMORPH_REDUCTION(min);
69 #undef SIMPLE_REDUCTION
70 #undef SIMPLE_POLYMORPH_REDUCTION
71
72 void CcsInit(char **argv);
73 int CcsEnabled(void);
74 int CcsIsRemoteRequest(void);
75 void CcsCallerId(skt_ip_t *pip, unsigned int *pport);
76 void CcsSendReply(int replyLen, const void *replyData);
77 CcsDelayedReply CcsDelayReply(void);
78 void CcsSendDelayedReply(CcsDelayedReply d,int replyLen, const void *replyData);
79 void CcsNoReply();
80 void CcsNoDelayedReply(CcsDelayedReply d);
81
82 #else
83 typedef void *CcsDelayedReply;
84 #define CcsInit(argv) /*empty*/
85 #define CcsRegisterHandler(x,y) 0
86 #define CcsRegisterHandlerFn(x,y,p) 0
87 #define CcsSetMergeFn(x,y) 0
88 #define CcsEnabled() 0
89 #define CcsIsRemoteRequest() 0
90 #define CcsCallerId(x,y)  /*empty*/
91 #define CcsDelayReply() 0
92 #define CcsSendReply(s,r) /*empty*/
93 #define CcsSendDelayedReply(d,s,r); 
94 #define CcsNoReply() /*empty*/
95 #define CcsNoDelayedReply(d) /*empty*/
96 #endif
97
98 #ifdef __cplusplus
99 }
100 #endif
101 #endif