--- /dev/null
+#!/bin/bash
+# --------------------------------------------------------------------
+# Copyright (C) 2005 Georgia Public Library Service
+# Bill Erickson <highfalutin@gmail.com>
+
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+# --------------------------------------------------------------------
+
+
+# --------------------------------------------------------------------------
+# Utility script for starting the jserver (the opensrf jabber server), the
+# opensrf router, and opensrf proper.
+# see vars below for ways to alter the behavior and directory locations
+# --------------------------------------------------------------------------
+
+
+
+# --------------------------------------------------------------------------
+# Change to suit
+# --------------------------------------------------------------------------
+PREFIX=/openils;
+ETCDIR="$PREFIX/conf"; # config files are found here
+LOGDIR="$PREFIX/var/log"; # logs go here
+BINDIR="$PREFIX/bin"; # executables are found here
+BOOTSTRAP="$ETCDIR/bootstrap.conf"; # opensrf config is here
+
+# should these be started? set to "" or nothing to disable them
+JSERVER="1";
+ROUTER="1";
+OPENSRF="1";
+
+JSERVERSOCK="$PREFIX/var/sock/jserver.sock"; # jabber server socket file
+JSERVERLOG="$LOGDIR/jserver.log" # jabber server log
+JSERVERPORT=5222; # jabber server port
+JSERVERLEVEL=4; # can be 1-4, 4 is the highest
+ROUTERLOG="$LOGDIR/router.log" # jabber router log
+# --------------------------------------------------------------------------
+# --------------------------------------------------------------------------
+
+JSERVERBIN="jserver-c"
+export LD_LIBRARY_PATH="$PREFIX/lib:$LD_LIBRARY_PATH";
+export PERL5LIB="$PREFIX/lib/perl5:$PERL5LIB";
+export PATH="$PREFIX/bin:$PATH";
+
+
+function fail { echo "$0 exited: $*"; exit 99; }
+
+
+function startJserver {
+
+ ACTIVE=$(netstat -an | grep $JSERVERPORT);
+
+ if [ ! -z "$ACTIVE" ]; then
+
+ echo "Port $JSERVERPORT is busy. Waiting 60 seconds for the port to clear up..."
+
+ for ((i=0; i!= 60; i++)) {
+ ACTIVE=$(netstat -an | grep $JSERVERPORT);
+ [ -z "$ACTIVE" ] && break;
+ echo -n "+";
+ sleep 1;
+ }
+ echo "";
+ ACTIVE=$(netstat -an | grep $JSERVERPORT);
+ [ ! -z "$ACTIVE" ] && fail "Port $JSERVERPORT is busy...exiting";
+ fi;
+
+ rm -f "$JSERVERSOCK";
+ nohup "$BINDIR/$JSERVERBIN" $JSERVERPORT "$JSERVERSOCK" "$JSERVERLEVEL" "$JSERVERLOG" &
+}
+
+
+function startRouter {
+ nohup "$BINDIR/router" "$ETCDIR/router_config.xml" &
+}
+
+function startOpenSRF {
+ "$BINDIR/opensrf_ctl" start "$BOOTSTRAP";
+}
+
+
+
+function makeMeGo {
+
+ if [ ! -z "$JSERVER" ]; then
+ echo "Starting Chop Chop, Jabber (jserver-c)...";
+ startJserver;
+ echo "Chop Chop started OK";
+ fi
+
+ sleep 1;
+
+ if [ ! -z "$ROUTER" ]; then
+ echo "Starting router...";
+ startRouter;
+ echo "Router started OK";
+ fi
+
+ sleep 1;
+
+ if [ ! -z "$OPENSRF" ]; then
+ echo "Starting OpenSRF...";
+ startOpenSRF;
+ echo "OpenSRF started OK";
+ fi
+
+}
+
+
+function stopMe {
+
+ echo "Stopping OpenSRF...";
+ "$BINDIR/opensrf_ctl" stop;
+ sleep 2;
+
+ echo "Stopping The Router...";
+ killall router;
+
+ sleep 2;
+
+ echo "Stopping Chop Chop...";
+ killall jserver-c;
+}
+
+
+
+[ "$1" = "stop" ] && stopMe && exit;
+[ "$1" = "restart" ] && stopMe && makeMeGo && exit;
+
+makeMeGo;
+
+
# ----------------------------------------------------------
[bootstrap]
+# location of the opensrf.xml config file
settings_config = /path/to/opensrf.xml
+
+# log files directory
log_dir = /path/to/log
+# log level
debug = ERROR
#debug = INFO
#debug = DEBUG
#debug = INTERNAL
+# the jabber login of the router (changing this will likely cause problems)
router_name = router
+
+# all jabber domains we want our app to connect to
list:domains = router1.domain.com, router2.domain.com
+
+# jabber login
username = jabber_username
+
+# jabber password
passwd = jabber_password
+
+# if port is non-numeric (e.g. /tmp/mysock.sock) then we will attempt to
+# connect to the specified string as a unix socket file
+# This works with Chop Chop jabber only (opensrf custom jabber server)
port = 5222
# --------------------------------------
+# log file names
[logs]
debug = debug.log
error = error.log
cp -r perlmods/* $(PERLDIR)/
cp ../examples/bootstrap.conf.example $(ETCDIR)
cp ../bin/opensrf_ctl $(BINDIR)
+ cp ../bin/opensrf_all $(BINDIR)
cp ../examples/opensrf.xml.example $(ETCDIR)
<!-- Bootstrap config file for the C opensrf_stack library -->
<config>
<bootstrap>
- <settings_config>/path/to/opensrf.xml</settings_config>
+ <!-- log level (WARN, INFO, DEBUG) -->
<debug>INFO</debug>
+
+ <!-- best to leave this untouched if possible -->
<router_name>router</router_name>
+ <!-- jabber domains to connect to (domain1, domain2, ...) -->
<domains>
<domain1>host.example.com</domain1>
</domains>
+ <!-- jabber connection information. Note that unix socket connectes are
+ not yet implemented with any of the C libraries so port will
+ have to be a port number -->
<username>my_jabber_login</username>
<passwd>my_jabber_password</passwd>
<port>5222</port>
</bootstrap>
+
+ <!-- log file location -->
<logs>
<client>/path/to/log/gateway.log</client>
</logs>
jclient_node* node = js->client;
+ debug_handler("Searching for jclient to remove with id %d", id);
+ debug_handler("First node in list has id %d", node->id );
+
if(node->id == id) {
js->client = node->next;
debug_handler("Removing the first jserver client");
return;
}
- debug_handler("Searching for jclient to remove");
jclient_node* tail_node = node;
node = node->next;
while(node) {
+ debug_handler("Checking node %d to remove", node->id);
if(node->id == id) {
tail_node->next = node->next;
debug_handler("Removing a jserver client");
my $apps = $client->config_value("activeapps", "appname");
if(!ref($apps) eq "ARRAY") { $apps = [$apps]; }
- if(@$apps == 0) {
+ if(!defined($apps) || @$apps == 0) {
print "No apps to load, exiting...";
return;
}
my $apps = $client->config_value("activeapps", "appname" );
if(!ref($apps)) { $apps = [$apps]; }
- if(@$apps == 0) {
+ if(!defined($apps) || @$apps == 0) {
print "No apps to load, exiting...";
return;
}
</trusted_domains>
+
+ <!-- jabber connection information. Note that unix socket connectes are
+ not yet implemented with any of the C libraries so port will
+ have to be a port number -->
+
<transport>
<server>jabber_server.domain.com</server>
<port>5222</port>
<max_reconnect_attempts>5</max_reconnect_attempts>
</transport>
+
<log>
<file>/pines/log/router.log</file>
if(mgr == NULL) return -1;
+ int last_failed_id = -1;
+
/* come back here if someone yanks a socket_node from beneath us */
while(1) {
while(node && (handled < num_active)) {
int sock_fd = node->sock_fd;
+
+ if(last_failed_id != -1) {
+ /* in case it was not removed by our overlords */
+ debug_handler("Attempting to remove last_failed_id of %d", last_failed_id);
+ socket_remove_node( mgr, last_failed_id );
+ last_failed_id = -1;
+ status = -1;
+ break;
+ }
+
/* does this socket have data? */
if( FD_ISSET( sock_fd, read_set ) ) {
+
debug_handler("Socket %d active", sock_fd);
handled++;
/* someone may have yanked a socket_node out from under
us...start over with the first socket */
if(status == -1) {
+ last_failed_id = sock_fd;
debug_handler("Backtracking back to start of loop because "
"of -1 return code from _socket_handle_client_data()");
}