extern const char *e_gras_msg_kind_names[e_gras_msg_kind_count];
/* declare either regular messages or RPC or whatever */
-void
+XBT_PUBLIC void
gras_msgtype_declare_ext(const char *name,
short int version,
e_gras_msg_kind_t kind,
/* functions to extract msg from socket or put it on wire (depend RL vs SG) */
-void gras_msg_recv(gras_socket_t sock,
+XBT_PUBLIC void gras_msg_recv(gras_socket_t sock,
gras_msg_t msg/*OUT*/);
-void gras_msg_send_ext(gras_socket_t sock,
+XBT_PUBLIC void gras_msg_send_ext(gras_socket_t sock,
e_gras_msg_kind_t kind,
unsigned long int ID,
gras_msgtype_t msgtype,
};
typedef struct s_gras_cblist gras_cblist_t;
-void gras_cbl_free(void *); /* used to free the memory at the end */
-void gras_cblist_free(void *cbl);
+XBT_PUBLIC void gras_cbl_free(void *); /* used to free the memory at the end */
+XBT_PUBLIC void gras_cblist_free(void *cbl);
/**
* gras_msg_cb_ctx_t:
gras_msgtype_t msgtype;
unsigned long int ID;
double timeout;
+ int answer_due; /* Whether the callback is expected to return a result (for sanity checks) */
};
typedef struct s_gras_msg_cb_ctx s_gras_msg_cb_ctx_t;
} s_gras_timer_t, *gras_timer_t;
/* returns 0 if it handled a timer, or the delay until next timer, or -1 if no armed timer */
-double gras_msg_timer_handle(void);
+XBT_PUBLIC double gras_msg_timer_handle(void);
+XBT_PUBLIC gras_msg_cb_ctx_t gras_msg_cb_ctx_new(gras_socket_t expe,
+ gras_msgtype_t msgtype,
+ unsigned long int ID,
+ int answer_due,
+ double timeout);
#endif /* GRAS_MESSAGE_PRIVATE_H */