enum GNUNET_SERVICE_Options
{
/**
- * Use defaults.
+ * Use defaults. Terminates all client connections and the listen
+ * sockets immediately upon receiving the shutdown signal.
*/
GNUNET_SERVICE_OPTION_NONE = 0,
/**
- * Do not trigger server shutdown on signals, allow for the user
- * to terminate the server explicitly when needed.
+ * Do not trigger server shutdown on signal at all; instead, allow
+ * for the user to terminate the server explicitly when needed
+ * by calling #GNUNET_SERVICE_shutdown().
*/
GNUNET_SERVICE_OPTION_MANUAL_SHUTDOWN = 1,
* @param connect_cb function to call whenever a client connects
* @param disconnect_cb function to call whenever a client disconnects
* @param cls closure argument for @a service_init_cb, @a connect_cb and @a disconnect_cb
- * @param handlers NULL-terminated array of message handlers for the service,
+ * @param ... array of message handlers for the service, terminated
+ * by #GNUNET_MQ_handler_end();
* the closure will be set to the value returned by
* the @a connect_cb for the respective connection
* @return 0 on success, non-zero on error
+ *
+ * Sample invocation:
+ * <code>
+ * GNUNET_SERVICE_MAIN
+ * ("resolver",
+ * GNUNET_SERVICE_OPTION_NONE,
+ * &init_cb,
+ * &connect_cb,
+ * &disconnect_cb,
+ * closure_for_cb,
+ * GNUNET_MQ_hd_var_size (get,
+ * GNUNET_MESSAGE_TYPE_RESOLVER_REQUEST,
+ * struct GNUNET_RESOLVER_GetMessage,
+ * NULL),
+ * GNUNET_MQ_handler_end ());
+ * </code>
*/
-#define GNUNET_SERVICE_MAIN(service_name,service_options,init_cb,connect_cb,disconnect_cb,cls,handlers) \
+#define GNUNET_SERVICE_MAIN(service_name,service_options,init_cb,connect_cb,disconnect_cb,cls,...) \
int \
main (int argc,\
char *const *argv)\
{ \
+ struct GNUNET_MQ_MessageHandler mh[] = { \
+ __VA_ARGS__ \
+ }; \
return GNUNET_SERVICE_ruN_ (argc, \
argv, \
service_name, \
connect_cb, \
disconnect_cb, \
cls, \
- handlers); \
+ mh); \
}
GNUNET_SERVICE_client_continue (struct GNUNET_SERVICE_Client *c);
+/**
+ * Obtain the message queue of @a c. Convenience function.
+ *
+ * @param c the client to continue receiving from
+ * @return the message queue of @a c
+ */
+struct GNUNET_MQ_Handle *
+GNUNET_SERVICE_client_get_mq (struct GNUNET_SERVICE_Client *c);
+
+
/**
* Disable the warning the server issues if a message is not
* acknowledged in a timely fashion. Use this call if a client is
/**
- * Stop the listen socket and get ready to shutdown the server once
- * only clients marked using #GNUNET_SERVER_client_mark_monitor are
- * left.
+ * Explicitly stops the service.
*
- * @param sh server to stop listening on
+ * @param sh server to shutdown
*/
void
-GNUNET_SERVICE_stop_listening (struct GNUNET_SERVICE_Handle *sh);
+GNUNET_SERVICE_shutdown (struct GNUNET_SERVICE_Handle *sh);
/**