testbed service build system
[oweals/gnunet.git] / src / testbed / gnunet-service-testbed.c
1 /*
2   This file is part of GNUnet.
3   (C) 2012 Christian Grothoff (and other contributing authors)
4
5   GNUnet is free software; you can redistribute it and/or modify
6   it under the terms of the GNU General Public License as published
7   by the Free Software Foundation; either version 2, or (at your
8   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   General Public License for more details.
14
15   You should have received a copy of the GNU General Public License
16   along with GNUnet; see the file COPYING.  If not, write to the
17   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18   Boston, MA 02111-1307, USA.
19 */
20
21 /**
22  * @file testbed/gnunet-service-testbed.c
23  * @brief implementation of the TESTBED service
24  * @author Sree Harsha Totakura
25  */
26
27 #include "platform.h"
28 #include "gnunet_service_lib.h"
29 #include "gnunet_server_lib.h"
30
31 #include "testbed.h"
32
33
34 #define LOG(kind,...)                           \
35   GNUNET_log (kind, __VA_ARGS__)
36
37
38 /**
39  * Message handler for GNUNET_MESSAGE_TYPE_TESTBED_INIT messages
40  *
41  * @param cls NULL
42  * @param client identification of the client
43  * @param message the actual message
44  */
45 static void 
46 handle_init (void *cls,
47              struct GNUNET_SERVER_Client *client,
48              const struct GNUNET_MessageHeader *message)
49 {
50   GNUNET_break (0);
51 }
52
53
54 /**
55  * Callback for client disconnect
56  *
57  * @param cls NULL
58  * @param client the client which has disconnected
59  */
60 static void
61 client_disconnect_cb (void *cls, struct GNUNET_SERVER_Client *client)
62 {
63   GNUNET_break (0);
64 }
65
66
67 /**
68  * Task to clean up and shutdown nicely
69  *
70  * @param cls NULL
71  * @param tc the TaskContext from scheduler
72  */
73 static void
74 shutdown_task (void *cls,
75                const struct GNUNET_SCHEDULER_TaskContext *tc)
76 {
77   GNUNET_break (0);
78 }
79
80
81 /**
82  * Testbed setup
83  *
84  * @param cls closure
85  * @param server the initialized server
86  * @param cfg configuration to use
87  */
88 static void 
89 testbed_run (void *cls,
90              struct GNUNET_SERVER_Handle * server,
91              const struct GNUNET_CONFIGURATION_Handle *cfg)
92 {
93   static const struct GNUNET_SERVER_MessageHandler message_handlers[] =
94     {
95       {&handle_init, NULL, GNUNET_MESSAGE_TYPE_TESTBED_INIT, 0},
96       {NULL}
97     };
98   GNUNET_SERVER_add_handlers (server,
99                               message_handlers);
100   GNUNET_SERVER_disconnect_notify (server,
101                                    &client_disconnect_cb,
102                                    NULL);
103   GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
104                                 &shutdown_task,
105                                 NULL);
106 }
107
108
109 /**
110  * The starting point of execution
111  */
112 int main (int argc, char *const *argv)
113 {
114   return
115     (GNUNET_OK ==
116      GNUNET_SERVICE_run (argc,
117                          argv,
118                          "testbed",
119                          GNUNET_SERVICE_OPTION_NONE,
120                          &testbed_run,
121                          NULL)) ? 0 : 1;
122 }