GNUnet 0.21.1
gnunet_service_lib.h
Go to the documentation of this file.
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2009-2013, 2016, 2017 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21
22#if ! defined (__GNUNET_UTIL_LIB_H_INSIDE__)
23#error "Only <gnunet_util_lib.h> can be included directly."
24#endif
25
47#ifndef GNUNET_SERVICE_LIB_H
48#define GNUNET_SERVICE_LIB_H
49
50#ifdef __cplusplus
51extern "C"
52{
53#if 0 /* keep Emacsens' auto-indent happy */
54}
55#endif
56#endif
57
58#include "gnunet_util_lib.h"
60
61
66{
72
79
85
90
96};
97
98
99/* **************** NEW SERVICE API ********************** */
100
105
106
111
112
120typedef void
121(*GNUNET_SERVICE_InitCallback)(void *cls,
122 const struct GNUNET_CONFIGURATION_Handle *cfg,
123 struct GNUNET_SERVICE_Handle *sh);
124
125
134typedef void *
135(*GNUNET_SERVICE_ConnectHandler)(void *cls,
136 struct GNUNET_SERVICE_Client *c,
137 struct GNUNET_MQ_Handle *mq);
138
139
147typedef void
149 struct GNUNET_SERVICE_Client *c,
150 void *internal_cls);
151
152
191 const struct GNUNET_CONFIGURATION_Handle *cfg,
194 void *cls,
195 const struct GNUNET_MQ_MessageHandler *handlers);
196
197
203void
205
247int
248GNUNET_SERVICE_run_ (int argc,
249 char *const *argv,
250 const char *service_name,
255 void *cls,
256 const struct GNUNET_MQ_MessageHandler *handlers);
257
258
298int
300 const char *service_name,
305 void *cls,
306 const struct GNUNET_MQ_MessageHandler *handlers);
307
308
366#ifndef HAVE_GNUNET_MONOLITH
367#define GNUNET_SERVICE_MAIN(service_name, service_options, init_cb, connect_cb, \
368 disconnect_cb, cls, ...) \
369 int \
370 main (int argc, \
371 char *const *argv) \
372 { \
373 struct GNUNET_MQ_MessageHandler mh[] = { \
374 __VA_ARGS__ \
375 }; \
376 return GNUNET_SERVICE_run_ (argc, \
377 argv, \
378 service_name, \
379 service_options, \
380 init_cb, \
381 connect_cb, \
382 disconnect_cb, \
383 cls, \
384 mh); \
385 }
386#else
387#define GNUNET_SERVICE_MAIN(service_name, service_options, init_cb, connect_cb, \
388 disconnect_cb, cls, ...) \
389 static int __attribute__ ((constructor)) \
390 init (void) \
391 { \
392 struct GNUNET_MQ_MessageHandler mh[] = { \
393 __VA_ARGS__ \
394 }; \
395 return GNUNET_SERVICE_register_ (service_name, \
396 service_options, \
397 init_cb, \
398 connect_cb, \
399 disconnect_cb, \
400 cls, \
401 mh); \
402 }
403#endif
404
409void
410GNUNET_SERVICE_main (int argc, char *const *argv);
411
418void
420
421
427void
429
430
437void
439
440
447struct GNUNET_MQ_Handle *
449
450
459void
462
463
479void
481
482
488void
490
491
504void
506
507
515void
517
518
519#if 0 /* keep Emacsens' auto-indent happy */
520{
521#endif
522#ifdef __cplusplus
523}
524#endif
525
526/* ifndef GNUNET_SERVICE_LIB_H */
527#endif
528 /* end of group service */
530 /* end of group addition to networking*/
532 /* end of group addition to libgnunetutil */
534
535/* end of gnunet_service_lib.h */
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
struct GNUNET_MQ_MessageHandlers handlers[]
Definition: 003.c:1
struct GNUNET_MQ_Handle * mq
Definition: 003.c:5
static struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
Definition: gnunet-arm.c:109
static struct GNUNET_IDENTITY_Handle * sh
Handle to IDENTITY service.
static void disconnect_cb(void *cls, const struct GNUNET_CADET_Channel *channel)
Function called by cadet when a client disconnects.
static void * connect_cb(void *cls, struct GNUNET_CADET_Channel *channel, const struct GNUNET_PeerIdentity *initiator)
Functions of this type are called upon new cadet connection from other peers.
static char * service_name
Option -s: service name (hash to get service descriptor)
Definition: gnunet-vpn.c:50
Configuration API.
void GNUNET_SERVICE_suspend(struct GNUNET_SERVICE_Handle *sh)
Suspend accepting connections from the listen socket temporarily.
Definition: service.c:2347
void GNUNET_SERVICE_stop(struct GNUNET_SERVICE_Handle *srv)
Stops a service that was started with GNUNET_SERVICE_start().
Definition: service.c:1913
void GNUNET_SERVICE_shutdown(struct GNUNET_SERVICE_Handle *sh)
Explicitly stops the service.
Definition: service.c:2548
GNUNET_SERVICE_Options
Options for the service (bitmask).
void GNUNET_SERVICE_client_mark_monitor(struct GNUNET_SERVICE_Client *c)
Set the 'monitor' flag on this client.
Definition: service.c:2572
struct GNUNET_SERVICE_Handle * GNUNET_SERVICE_start(const char *service_name, const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_SERVICE_ConnectHandler connect_cb, GNUNET_SERVICE_DisconnectHandler disconnect_cb, void *cls, const struct GNUNET_MQ_MessageHandler *handlers)
Low-level function to start a service if the scheduler is already running.
Definition: service.c:1880
void(* GNUNET_SERVICE_DisconnectHandler)(void *cls, struct GNUNET_SERVICE_Client *c, void *internal_cls)
Callback to be called when a client disconnected from the service.
void GNUNET_SERVICE_client_drop(struct GNUNET_SERVICE_Client *c)
Ask the server to disconnect from the given client.
Definition: service.c:2489
void GNUNET_SERVICE_client_persist(struct GNUNET_SERVICE_Client *c)
Set the persist option on this client.
Definition: service.c:2589
void GNUNET_SERVICE_client_disable_continue_warning(struct GNUNET_SERVICE_Client *c)
Disable the warning the server issues if a message is not acknowledged in a timely fashion.
Definition: service.c:2432
void(* GNUNET_SERVICE_InitCallback)(void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg, struct GNUNET_SERVICE_Handle *sh)
Callback to initialize a service, called exactly once when the service is run.
void *(* GNUNET_SERVICE_ConnectHandler)(void *cls, struct GNUNET_SERVICE_Client *c, struct GNUNET_MQ_Handle *mq)
Callback to be called when a client connects to the service.
int GNUNET_SERVICE_register_(const char *service_name, enum GNUNET_SERVICE_Options options, GNUNET_SERVICE_InitCallback service_init_cb, GNUNET_SERVICE_ConnectHandler connect_cb, GNUNET_SERVICE_DisconnectHandler disconnect_cb, void *cls, const struct GNUNET_MQ_MessageHandler *handlers)
Registers the GNUnet service to be scheduled as part of a monilithic libgnunet.
Definition: service.c:2162
struct GNUNET_MQ_Handle * GNUNET_SERVICE_client_get_mq(struct GNUNET_SERVICE_Client *c)
Obtain the message queue of c.
Definition: service.c:2602
void GNUNET_SERVICE_client_continue(struct GNUNET_SERVICE_Client *c)
Continue receiving further messages from the given client.
Definition: service.c:2408
void GNUNET_SERVICE_main(int argc, char *const *argv)
Run the mainloop in a monolithic libgnunet.
Definition: service.c:2237
void GNUNET_SERVICE_resume(struct GNUNET_SERVICE_Handle *sh)
Resume accepting connections from the listen socket.
Definition: service.c:2359
int GNUNET_SERVICE_run_(int argc, char *const *argv, const char *service_name, enum GNUNET_SERVICE_Options options, GNUNET_SERVICE_InitCallback service_init_cb, GNUNET_SERVICE_ConnectHandler connect_cb, GNUNET_SERVICE_DisconnectHandler disconnect_cb, void *cls, const struct GNUNET_MQ_MessageHandler *handlers)
Creates the "main" function for a GNUnet service.
Definition: service.c:1927
@ GNUNET_SERVICE_OPTION_MANUAL_SHUTDOWN
Do not trigger server shutdown on signal at all; instead, allow for the user to terminate the server ...
@ GNUNET_SERVICE_OPTION_SHUTDOWN_BITMASK
Bitmask over the shutdown options.
@ GNUNET_SERVICE_OPTION_CLOSE_LSOCKS
Instead of listening on lsocks passed by the parent, close them after opening our own listen socket(s...
@ GNUNET_SERVICE_OPTION_NONE
Use defaults.
@ GNUNET_SERVICE_OPTION_SOFT_SHUTDOWN
Trigger a SOFT server shutdown on signals, allowing active non-monitor clients to complete their tran...
Handle to a message queue.
Definition: mq.c:87
Message handler for a specific message type.
Handle to a client that is connected to a service.
Definition: service.c:252
Handle to a service.
Definition: service.c:118
GNUNET_SERVICE_InitCallback service_init_cb
Main service-specific task to run.
Definition: service.c:132