]> git.evergreen-ils.org Git - OpenSRF.git/blob - src/jserver/jserver-c_main.c
move the log_free to after the cleanup is done so we don't see
[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         jserver_free(js);
21         log_free();
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         jserver_free(js);
32         log_free();
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         char* prog                      = argv[0];
43         char* sport                     = argv[1];      
44         unix_sock_file          = argv[2];      
45         char* slog_level        = argv[3];
46         log_file                                = argv[4];
47
48         if(!sport || !unix_sock_file || !slog_level) {
49                 fprintf(stderr, 
50                         "usage: %s <port> <path_to_unix_sock_file> <log_level [1-4]"
51                         "(4 is the highest)> [log_file (optional, goes to stderr otherwise)]\n"
52                         "e.g: %s 5222 /tmp/server.sock 1 /tmp/server.log\n",
53                         prog, prog);
54                 return 99;
55         }
56
57         port                    = atoi(sport);
58         log_level       = atoi(slog_level);
59
60         if(port < 1) {
61                 warning_handler("invalid port (%d), falling back to 5222");
62                 port = 5222;
63         }
64
65         if(log_level < 1 || log_level > 4) {
66                 warning_handler("log level (%d) is not recognized, falling back to WARN", log_level);
67                 log_level = 2;
68         }
69
70         fprintf(stderr, "Launching with port %d, unix sock %s, log level %d, log file %s\n",
71                         port, unix_sock_file, log_level, log_file );
72
73         if (daemonize() == -1) {
74                 fprintf(stderr, "!!! Error forking the daemon!  Going away now... :(\n");
75                 exit(2);
76         }
77
78         signal(SIGHUP, &sig_hup_handler);
79         signal(SIGINT, &sig_int_handler);
80         signal(SIGTERM, &sig_int_handler);
81
82         launch_server();
83         return 0;
84 }
85
86 void launch_server() {
87
88         log_init(log_level, log_file);
89         info_handler("Booting jserver-c on port %d and "
90                         "sock file %s", port, unix_sock_file);
91
92         js = jserver_init();
93         unlink(unix_sock_file);
94         if(jserver_connect(js, port, unix_sock_file) < 0)
95                 fatal_handler("Could not connect...");
96
97         jserver_wait(js);
98 }
99
100
101
102
103