1 package OpenSRF::System;
2 use strict; use warnings;
5 use OpenSRF::Utils::Logger qw(:level);
6 use OpenSRF::Transport::Listener;
7 use OpenSRF::Transport;
8 use OpenSRF::UnixServer;
10 use OpenSRF::EX qw/:try/;
11 use POSIX qw/setsid :sys_wait_h/;
12 use OpenSRF::Utils::Config;
13 use OpenSRF::Utils::SettingsParser;
14 use OpenSRF::Utils::SettingsClient;
15 use OpenSRF::Application;
16 use Net::Server::PreFork;
18 my $bootstrap_config_file;
20 my( $self, $config ) = @_;
21 $bootstrap_config_file = $config;
28 sub load_bootstrap_config {
29 return if OpenSRF::Utils::Config->current;
31 die "Please provide a bootstrap config file to OpenSRF::System\n"
32 unless $bootstrap_config_file;
34 OpenSRF::Utils::Config->load(config_file => $bootstrap_config_file);
35 OpenSRF::Utils::JSON->register_class_hint(name => "OpenSRF::Application", hint => "method", type => "hash");
36 OpenSRF::Transport->message_envelope("OpenSRF::Transport::SlimJabber::MessageWrapper");
37 OpenSRF::Transport::PeerHandle->set_peer_client("OpenSRF::Transport::SlimJabber::PeerConnection");
38 OpenSRF::Transport::Listener->set_listener("OpenSRF::Transport::SlimJabber::Inbound");
39 OpenSRF::Application->server_class('client');
42 # ----------------------------------------------
43 # Bootstraps a single client connection.
44 # named params are 'config_file' and 'client_name'
45 sub bootstrap_client {
48 my $con = OpenSRF::Transport::PeerHandle->retrieve;
49 return if $con and $con->tcp_connected;
53 $bootstrap_config_file =
54 $params{config_file} || $bootstrap_config_file;
56 my $app = $params{client_name} || "client";
58 load_bootstrap_config();
59 OpenSRF::Utils::Logger::set_config();
60 OpenSRF::Transport::PeerHandle->construct($app);
64 if (my $con = OpenSRF::Transport::PeerHandle->retrieve) {
65 return 1 if $con->tcp_connected;