]> git.evergreen-ils.org Git - OpenSRF.git/blob - src/jserver/jserver-c_main.c
ff9701759e196fa5706aeaafe48474b102440933
[OpenSRF.git] / src / jserver / jserver-c_main.c
1 #include "jserver-c.h"
2 #include <signal.h>
3 #include <fcntl.h>
4
5 /* config vars */
6 jserver* js                                     = NULL;
7 int             port                            = -1;
8 char*           unix_sock_file = NULL;
9 int             log_level               = -1;
10 char*           log_file                        = NULL;
11
12 /* starts the logging and server processes */
13 void launch_server();
14
15
16 /* shut down, clean up, and restart */
17 void sig_hup_handler( int a ) { 
18         warning_handler(" +++ Re-launching server for SIGHUP");
19
20         log_free();
21         jserver_free(js);
22         unlink(unix_sock_file);
23
24         launch_server();
25         return; 
26 }
27
28 /* die gracefully */
29 void sig_int_handler( int a ) { 
30         warning_handler(" +++ Shutting down because of user signal");
31         log_free();
32         jserver_free(js);
33         unlink(unix_sock_file);
34         exit(0); 
35 }
36
37
38
39 /* loads the command line settings and launches the server */
40 int main(int argc, char* argv[]) {
41
42         signal(SIGHUP, &sig_hup_handler);
43         signal(SIGINT, &sig_int_handler);
44         signal(SIGTERM, &sig_int_handler);
45
46         char* prog                      = argv[0];
47         char* sport                     = argv[1];      
48         unix_sock_file          = argv[2];      
49         char* slog_level        = argv[3];
50         log_file                                = argv[4];
51
52         if(!sport || !unix_sock_file || !slog_level) {
53                 fprintf(stderr, 
54                         "usage: %s <port> <path_to_unix_sock_file> <log_level [1-4]"
55                         "(4 is the highest)> [log_file (optional, goes to stderr otherwise)]\n"
56                         "e.g: %s 5222 /tmp/server.sock 1 /tmp/server.log\n",
57                         prog, prog);
58                 return 99;
59         }
60
61         port                    = atoi(sport);
62         log_level       = atoi(slog_level);
63
64         if(port < 1) {
65                 warning_handler("invalid port (%d), falling back to 5222");
66                 port = 5222;
67         }
68
69         if(log_level < 1 || log_level > 4) {
70                 warning_handler("log level (%d) is not recognized, falling back to WARN", log_level);
71                 log_level = 2;
72         }
73
74         fprintf(stderr, "Launching with port %d, unix sock %s, log level %d, log file %s\n",
75                         port, unix_sock_file, log_level, log_file );
76
77         launch_server();
78         return 0;
79 }
80
81 void launch_server() {
82
83         log_init(log_level, log_file);
84         info_handler("Booting jserver-c on port %d and "
85                         "sock file %s", port, unix_sock_file);
86
87         js = jserver_init();
88         unlink(unix_sock_file);
89         if(jserver_connect(js, port, unix_sock_file) < 0)
90                 fatal_handler("Could not connect...");
91
92         jserver_wait(js);
93 }
94
95
96
97
98