GNUnet  0.20.0
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
51 extern "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 
104 struct GNUNET_SERVICE_Handle;
105 
106 
110 struct GNUNET_SERVICE_Client;
111 
112 
120 typedef void
121 (*GNUNET_SERVICE_InitCallback)(void *cls,
122  const struct GNUNET_CONFIGURATION_Handle *cfg,
123  struct GNUNET_SERVICE_Handle *sh);
124 
125 
134 typedef void *
135 (*GNUNET_SERVICE_ConnectHandler)(void *cls,
136  struct GNUNET_SERVICE_Client *c,
137  struct GNUNET_MQ_Handle *mq);
138 
139 
147 typedef void
149  struct GNUNET_SERVICE_Client *c,
150  void *internal_cls);
151 
152 
189 struct GNUNET_SERVICE_Handle *
191  const struct GNUNET_CONFIGURATION_Handle *cfg,
194  void *cls,
195  const struct GNUNET_MQ_MessageHandler *handlers);
196 
197 
203 void
205 
206 
248 int
249 GNUNET_SERVICE_run_ (int argc,
250  char *const *argv,
251  const char *service_name,
256  void *cls,
257  const struct GNUNET_MQ_MessageHandler *handlers);
258 
259 
317 #ifndef HAVE_GNUNET_MONOLITH
318 #define GNUNET_SERVICE_MAIN(service_name, service_options, init_cb, connect_cb, \
319  disconnect_cb, cls, ...) \
320  int \
321  main (int argc, \
322  char *const *argv) \
323  { \
324  struct GNUNET_MQ_MessageHandler mh[] = { \
325  __VA_ARGS__ \
326  }; \
327  return GNUNET_SERVICE_run_ (argc, \
328  argv, \
329  service_name, \
330  service_options, \
331  init_cb, \
332  connect_cb, \
333  disconnect_cb, \
334  cls, \
335  mh); \
336  }
337 #else
338 #define GNUNET_SERVICE_MAIN(service_name, service_options, init_cb, connect_cb, \
339  disconnect_cb, cls, ...)
340 #endif
341 
348 void
350 
351 
357 void
359 
360 
367 void
369 
370 
377 struct GNUNET_MQ_Handle *
379 
380 
389 void
392 
393 
409 void
411 
412 
418 void
420 
421 
434 void
436 
437 
445 void
447 
448 
449 #if 0 /* keep Emacsens' auto-indent happy */
450 {
451 #endif
452 #ifdef __cplusplus
453 }
454 #endif
455 
456 /* ifndef GNUNET_SERVICE_LIB_H */
457 #endif
458  /* end of group service */
460  /* end of group addition to networking*/
462  /* end of group addition to libgnunetutil */
464 
465 /* end of gnunet_service_lib.h */
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
struct GNUNET_MQ_Handle * mq
Definition: 003.c:5
static const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration we are using.
Definition: gnunet-abd.c:36
static struct SolverHandle * sh
static struct GNUNET_CADET_MessageHandler handlers[]
Handlers, for diverse services.
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:2188
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:2389
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:2413
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_ConnectHandler)(void *cls, struct GNUNET_SERVICE_Client *c, struct GNUNET_MQ_Handle *mq)
Callback to be called when a client connects to the service.
void GNUNET_SERVICE_client_drop(struct GNUNET_SERVICE_Client *c)
Ask the server to disconnect from the given client.
Definition: service.c:2330
struct GNUNET_MQ_Handle * GNUNET_SERVICE_client_get_mq(struct GNUNET_SERVICE_Client *c)
Obtain the message queue of c.
Definition: service.c:2443
void GNUNET_SERVICE_client_persist(struct GNUNET_SERVICE_Client *c)
Set the persist option on this client.
Definition: service.c:2430
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:2273
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_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_client_continue(struct GNUNET_SERVICE_Client *c)
Continue receiving further messages from the given client.
Definition: service.c:2249
void GNUNET_SERVICE_resume(struct GNUNET_SERVICE_Handle *sh)
Resume accepting connections from the listen socket.
Definition: service.c:2200
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:1968
@ 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