Added SILC Server library.
[silc.git] / lib / silcserver / tests / test_silcserver.c
1 #include "silc.h"
2 #include "silcserver.h"
3
4 SilcSchedule schedule;
5
6 static void running(SilcServer server, void *context)
7 {
8   SILC_LOG_DEBUG(("***** RUNNING"));
9 }
10
11 static void stopped(SilcServer server, void *context)
12 {
13   SILC_LOG_DEBUG(("***** STOPPED"));
14   silc_schedule_stop(schedule);
15 }
16
17 int main(int argc, char **argv)
18 {
19   SilcBool success = FALSE;
20   SilcServer server;
21   SilcServerParams params;
22   SilcServerParamServerInfo info;
23   SilcServerParamInterface iface;
24   SilcServerParamClient client_all;
25
26   if (argc > 1 && !strcmp(argv[1], "-d")) {
27     silc_log_debug(TRUE);
28     silc_log_debug_hexdump(TRUE);
29     silc_log_set_debug_string("*server*,*skr*,*ske*,*connauth*,*packet*,*stream*,*net*");
30   }
31
32   SILC_LOG_DEBUG(("Allocating scheduler"));
33   schedule = silc_schedule_init(0, NULL);
34
35   silc_cipher_register_default();
36   silc_pkcs_register_default();
37   silc_hash_register_default();
38   silc_hmac_register_default();
39
40   SILC_LOG_DEBUG(("Allocating server params context"));
41   params = silc_server_params_alloc();
42   if (!params)
43     goto err;
44
45   SILC_LOG_DEBUG(("Creating server params"));
46
47   info = silc_server_params_serverinfo_alloc();
48   if (!info)
49     goto err;
50   info->server_name = strdup("test server");
51
52   if (!silc_load_key_pair("test.pub", "test.prv", "", NULL,
53                           &info->public_key,
54                           &info->private_key)) {
55     if (!silc_create_key_pair("rsa", 2048, "test.pub", "test.prv", NULL, "",
56                               NULL,
57                               &info->public_key,
58                               &info->private_key, FALSE)) {
59       goto err;
60     }
61   }
62
63   iface = silc_calloc(1, sizeof(*iface));
64   if (!iface)
65     goto err;
66   iface->ip = strdup("127.0.0.1");
67   iface->port = 1334;
68   silc_server_params_serverinfo_add_iface(info, iface);
69   silc_server_params_set_serverinfo(params, info);
70
71   client_all = silc_calloc(1, sizeof(*client_all));
72   if (!client_all)
73     goto err;
74   silc_server_params_add_client(params, client_all);
75
76   params->use_threads = TRUE;
77
78   SILC_LOG_DEBUG(("Allocating server context"));
79   server = silc_server_alloc(NULL, params, schedule);
80   if (!server) {
81     SILC_LOG_DEBUG(("Error allocating server"));
82     goto err;
83   }
84
85   SILC_LOG_DEBUG(("Running server"));
86   silc_server_run(server, running, NULL);
87
88   SILC_LOG_DEBUG(("Running scheduler"));
89   silc_schedule(schedule);
90
91   silc_server_free(server);
92   silc_server_params_free(params);
93   silc_schedule_uninit(schedule);
94
95   success = TRUE;
96
97  err:
98   SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
99   fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
100
101   return success;
102 }