+ void gras_msg_handle(double timeOut);
+
+/** @} */
+/** @defgroup GRAS_msg_exchangeadv Message exchange (advanced interface)
+ * @ingroup GRAS_msg
+ *
+ */
+/** @{ */
+
+/** @brief Message kind (internal enum) */
+typedef enum {
+ e_gras_msg_kind_unknown = 0,
+
+ e_gras_msg_kind_oneway=1, /**< good old regular messages */
+
+ e_gras_msg_kind_rpccall=2, /**< RPC request */
+ /* HACK: e_gras_msg_kind_rpccall also designate RPC message *type* in
+ msgtype_t, not only in msg_t*/
+ e_gras_msg_kind_rpcanswer=3, /**< RPC successful answer */
+ e_gras_msg_kind_rpcerror=4, /**< RPC failure on server (payload=exception); should not leak to user-space */
+
+ /* future:
+ call cancel, and others
+ even after:
+ forwarding request and other application level routing stuff
+ group communication
+ */
+
+ e_gras_msg_kind_count=5 /* sentinel, dont mess with */
+} e_gras_msg_kind_t;
+
+
+/** @brief Message instance (internal struct) */
+typedef struct {
+ gras_socket_t expe;
+ e_gras_msg_kind_t kind;
+ gras_msgtype_t type;
+ unsigned long int ID;
+ void *payl;
+ int payl_size;
+} s_gras_msg_t, *gras_msg_t;
+
+typedef int (*gras_msg_filter_t)(gras_msg_t msg,void *ctx);
+