1 #include "osrf_router.h"
2 #include "opensrf/osrfConfig.h"
3 #include "opensrf/utils.h"
4 #include "opensrf/log.h"
7 static osrfRouter* router = NULL;
9 void routerSignalHandler( int signo ) {
10 osrfLogWarning( OSRF_LOG_MARK, "Received signal [%d], cleaning up...", signo );
12 osrfRouterFree(router);
15 // Exit by re-raising the signal so that the parent
16 // process can detect it
18 signal( signo, SIG_DFL );
22 static int setupRouter( char* config, char* context );
25 int main( int argc, char* argv[] ) {
28 osrfLogError( OSRF_LOG_MARK, "Usage: %s <path_to_config_file> <config_context>", argv[0] );
32 char* config = strdup( argv[1] );
33 char* context = strdup( argv[2] );
34 init_proc_title( argc, argv );
35 set_proc_title( "OpenSRF Router" );
37 int rc = setupRouter( config, context );
40 return rc ? EXIT_FAILURE : EXIT_SUCCESS;
43 int setupRouter( char* config, char* context ) {
45 osrfConfig* cfg = osrfConfigInit( config, context );
46 osrfConfigSetDefaultConfig(cfg);
48 char* server = osrfConfigGetValue(NULL, "/transport/server");
49 char* port = osrfConfigGetValue(NULL, "/transport/port");
50 char* username = osrfConfigGetValue(NULL, "/transport/username");
51 char* password = osrfConfigGetValue(NULL, "/transport/password");
52 char* resource = osrfConfigGetValue(NULL, "/transport/resource");
54 /* set up the logger */
55 char* level = osrfConfigGetValue(NULL, "/loglevel");
56 char* log_file = osrfConfigGetValue(NULL, "/logfile");
57 char* facility = osrfConfigGetValue(NULL, "/syslog");
60 if(level) llevel = atoi(level);
62 if(!log_file) { fprintf(stderr, "Log file name not specified\n"); return -1; }
64 if(!strcmp(log_file, "syslog")) {
65 osrfLogInit( OSRF_LOG_TYPE_SYSLOG, "router", llevel );
66 osrfLogSetSyslogFacility(osrfLogFacilityToInt(facility));
69 osrfLogInit( OSRF_LOG_TYPE_FILE, "router", llevel );
70 osrfLogSetFile( log_file );
77 osrfLogInfo( OSRF_LOG_MARK, "Router connecting as: server: %s port: %s "
78 "user: %s resource: %s", server, port, username, resource );
81 if(port) iport = atoi( port );
83 osrfStringArray* tclients = osrfNewStringArray(4);
84 osrfStringArray* tservers = osrfNewStringArray(4);
85 osrfConfigGetValueList(NULL, tservers, "/trusted_domains/server" );
86 osrfConfigGetValueList(NULL, tclients, "/trusted_domains/client" );
89 for( i = 0; i != tservers->size; i++ )
90 osrfLogInfo( OSRF_LOG_MARK, "Router adding trusted server: %s", osrfStringArrayGetString( tservers, i ) );
92 for( i = 0; i != tclients->size; i++ )
93 osrfLogInfo( OSRF_LOG_MARK, "Router adding trusted client: %s", osrfStringArrayGetString( tclients, i ) );
95 if( tclients->size == 0 || tservers->size == 0 ) {
96 osrfLogError( OSRF_LOG_MARK, "We need trusted servers and trusted client to run the router...");
97 osrfStringArrayFree( tservers );
98 osrfStringArrayFree( tclients );
102 router = osrfNewRouter( server,
103 username, resource, password, iport, tclients, tservers );
105 signal(SIGHUP,routerSignalHandler);
106 signal(SIGINT,routerSignalHandler);
107 signal(SIGTERM,routerSignalHandler);
109 if( (osrfRouterConnect(router)) != 0 ) {
110 fprintf(stderr, "!!!! Unable to connect router to jabber server %s... exiting", server );
111 osrfRouterFree(router);
115 free(server); free(port);
116 free(username); free(password);
120 osrfRouterRun( router );
122 // Shouldn't get here, since osrfRouterRun()
123 // should go into an infinite loop
125 osrfRouterFree(router);