GNUnet  0.10.x
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 
35 #ifndef GNUNET_SERVICE_LIB_H
36 #define GNUNET_SERVICE_LIB_H
37 
38 #ifdef __cplusplus
39 extern "C"
40 {
41 #if 0 /* keep Emacsens' auto-indent happy */
42 }
43 #endif
44 #endif
45 
47 #include "gnunet_mq_lib.h"
48 
49 
54 {
60 
67 
73 };
74 
75 
76 
77 /* **************** NEW SERVICE API ********************** */
78 
83 
84 
89 
90 
98 typedef void
100  const struct GNUNET_CONFIGURATION_Handle *cfg,
101  struct GNUNET_SERVICE_Handle *sh);
102 
103 
112 typedef void *
113 (*GNUNET_SERVICE_ConnectHandler)(void *cls,
114  struct GNUNET_SERVICE_Client *c,
115  struct GNUNET_MQ_Handle *mq);
116 
117 
125 typedef void
127  struct GNUNET_SERVICE_Client *c,
128  void *internal_cls);
129 
130 
167 struct GNUNET_SERVICE_Handle *
169  const struct GNUNET_CONFIGURATION_Handle *cfg,
172  void *cls,
173  const struct GNUNET_MQ_MessageHandler *handlers);
174 
175 
181 void
183 
184 
226 int
227 GNUNET_SERVICE_run_ (int argc,
228  char *const *argv,
229  const char *service_name,
234  void *cls,
235  const struct GNUNET_MQ_MessageHandler *handlers);
236 
237 
295 #define GNUNET_SERVICE_MAIN(service_name,service_options,init_cb,connect_cb,disconnect_cb,cls,...) \
296  int \
297  main (int argc,\
298  char *const *argv)\
299  { \
300  struct GNUNET_MQ_MessageHandler mh[] = { \
301  __VA_ARGS__ \
302  }; \
303  return GNUNET_SERVICE_run_ (argc, \
304  argv, \
305  service_name, \
306  service_options, \
307  init_cb, \
308  connect_cb, \
309  disconnect_cb, \
310  cls, \
311  mh); \
312  }
313 
314 
321 void
323 
324 
330 void
332 
333 
340 void
342 
343 
350 struct GNUNET_MQ_Handle *
352 
353 
362 void
364 
365 
381 void
383 
384 
390 void
392 
393 
406 void
408 
409 
417 void
419 
420 
421 #if 0 /* keep Emacsens' auto-indent happy */
422 {
423 #endif
424 #ifdef __cplusplus
425 }
426 #endif
427 
428 /* ifndef GNUNET_SERVICE_LIB_H */
429 #endif
430  /* end of group service */
432 
433 /* end of gnunet_service_lib.h */
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.
GNUNET_SERVICE_InitCallback service_init_cb
Main service-specific task to run.
Definition: service.c:131
void GNUNET_SERVICE_resume(struct GNUNET_SERVICE_Handle *sh)
Resume accepting connections from the listen socket.
Definition: service.c:2481
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
Handle to a service.
Definition: service.c:116
struct GNUNET_MQ_Handle * GNUNET_SERVICE_client_get_mq(struct GNUNET_SERVICE_Client *c)
Obtain the message queue of c.
Definition: service.c:2734
GNUNET_SERVICE_Options
Options for the service (bitmask).
static void disconnect_cb(void *cls, const struct GNUNET_CADET_Channel *channel)
Function called by cadet when a client disconnects.
Do not trigger server shutdown on signal at all; instead, allow for the user to terminate the server ...
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:2157
Handle to a client that is connected to a service.
Definition: service.c:249
static struct GNUNET_CADET_MessageHandler handlers[]
Handlers, for diverse services.
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_DisconnectHandler)(void *cls, struct GNUNET_SERVICE_Client *c, void *internal_cls)
Callback to be called when a client disconnected from the service.
Trigger a SOFT server shutdown on signals, allowing active non-monitor clients to complete their tran...
static struct SolverHandle * sh
static char * service_name
Option -s: service name (hash to get service descriptor)
Definition: gnunet-vpn.c:51
void GNUNET_SERVICE_client_mark_monitor(struct GNUNET_SERVICE_Client *c)
Set the &#39;monitor&#39; flag on this client.
Definition: service.c:2704
void GNUNET_SERVICE_stop(struct GNUNET_SERVICE_Handle *srv)
Stops a service that was started with GNUNET_SERVICE_start().
Definition: service.c:2193
void GNUNET_SERVICE_client_drop(struct GNUNET_SERVICE_Client *c)
Ask the server to disconnect from the given client.
Definition: service.c:2618
Message handler for a specific message type.
static struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
Definition: gnunet-arm.c:104
Handle to a message queue.
Definition: mq.c:85
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:2248
configuration data
Definition: configuration.c:85
struct GNUNET_MQ_Handle * mq
Definition: 003.c:5
void GNUNET_SERVICE_suspend(struct GNUNET_SERVICE_Handle *sh)
Suspend accepting connections from the listen socket temporarily.
Definition: service.c:2468
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:2559
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:2533
void GNUNET_SERVICE_client_persist(struct GNUNET_SERVICE_Client *c)
Set the persist option on this client.
Definition: service.c:2721
void GNUNET_SERVICE_shutdown(struct GNUNET_SERVICE_Handle *sh)
Explicitly stops the service.
Definition: service.c:2679