changed router binary to opensrf_router to prevent opensrf_all from destroying
[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 char*   listen_ip               = NULL;
12
13 /* starts the logging and server processes */
14 void launch_server();
15
16
17 /* shut down, clean up, and restart */
18 void sig_hup_handler( int a ) { 
19         warning_handler(" +++ Re-launching server for SIGHUP");
20
21         jserver_free(js);
22         log_free();
23         unlink(unix_sock_file);
24
25         launch_server();
26         return; 
27 }
28
29 /* die gracefully */
30 void sig_int_handler( int a ) { 
31         warning_handler(" +++ Shutting down because of user signal");
32         jserver_free(js);
33         log_free();
34         unlink(unix_sock_file);
35         exit(0); 
36 }
37
38
39
40 /* loads the command line settings and launches the server */
41 int main(int argc, char* argv[]) {
42
43         char* prog                      = argv[0];
44         char* sport                     = argv[1];      
45         listen_ip                       = argv[2];
46         unix_sock_file          = argv[3];      
47         char* slog_level        = argv[4];
48         log_file                                = argv[5];
49
50         if(!sport || !unix_sock_file || !slog_level) {
51                 fprintf(stderr, 
52                         "usage: %s <port> <listen_ip> <path_to_unix_sock_file> <log_level [1-4]"
53                         "(4 is the highest)> [log_file (optional, goes to stderr otherwise)]\n"
54                         "e.g: %s 5222 10.0.0.100 /tmp/server.sock 1 /tmp/server.log\n"
55                         "if listen_ip is '*', then we will listen on all addresses",
56                         prog, prog);
57                 return 99;
58         }
59
60         port                    = atoi(sport);
61         log_level       = atoi(slog_level);
62
63         if(port < 1) {
64                 warning_handler("invalid port (%d), falling back to 5222");
65                 port = 5222;
66         }
67
68         if(log_level < 1 || log_level > 4) {
69                 warning_handler("log level (%d) is not recognized, falling back to WARN", log_level);
70                 log_level = 2;
71         }
72
73         fprintf(stderr, "Launching with port %d, unix sock %s, log level %d, log file %s\n",
74                         port, unix_sock_file, log_level, log_file );
75
76         if (daemonize() == -1) {
77                 fprintf(stderr, "!!! Error forking the daemon!  Going away now... :(\n");
78                 exit(2);
79         }
80
81         signal(SIGHUP, &sig_hup_handler);
82         signal(SIGINT, &sig_int_handler);
83         signal(SIGTERM, &sig_int_handler);
84
85         //init_proc_title( argc, argv );
86         //set_proc_title( "opensrf jabber" );
87
88         launch_server();
89         return 0;
90 }
91
92 void launch_server() {
93
94         log_init(log_level, log_file);
95         info_handler("Booting jserver-c on port %d and "
96                         "sock file %s", port, unix_sock_file);
97
98         if(!strcmp(listen_ip,"*")) listen_ip = NULL;
99
100         js = jserver_init();
101         unlink(unix_sock_file);
102         if(jserver_connect(js, port, listen_ip, unix_sock_file) < 0)
103                 fatal_handler("Could not connect...");
104
105         jserver_wait(js);
106 }
107
108
109
110
111