1 package OpenSRF::Transport::SlimJabber::Client;
7 use OpenSRF::Utils::Config;
8 use OpenSRF::Utils::Logger qw/$logger/;
9 use OpenSRF::Transport::SlimJabber::XMPPReader;
10 use OpenSRF::Transport::SlimJabber::XMPPMessage;
15 OpenSRF::Transport::SlimJabber::Client
34 my( $class, %params ) = @_;
35 my $self = bless({}, ref($class) || $class);
36 $self->params(\%params);
45 my($self, $reader) = @_;
46 $self->{reader} = $reader if $reader;
47 return $self->{reader};
55 my($self, $params) = @_;
56 $self->{params} = $params if $params;
57 return $self->{params};
65 my($self, $socket) = @_;
66 $self->{socket} = $socket if $socket;
67 return $self->{socket};
76 $self->reader->disconnect if $self->reader;
89 # -------------------------------------------------
97 return $self->reader->tcp_connected if $self->reader;
103 return $self->reader->connected if $self->reader;
114 my $msg = OpenSRF::Transport::SlimJabber::XMPPMessage->new(@_);
115 $msg->osrf_xid($logger->get_osrf_xid);
116 $msg->from($self->xmpp_id);
117 my $xml = $msg->to_xml;
120 my $len = length($xml);
121 if ($len >= $self->{msg_size_warn}) {
122 $logger->warn("Sending large message of $len bytes to " . $msg->to)
125 $self->reader->send($xml);
136 my $host = $self->params->{host};
137 my $port = $self->params->{port};
138 my $username = $self->params->{username};
139 my $resource = $self->params->{resource};
140 my $password = $self->params->{password};
142 my $conf = OpenSRF::Utils::Config->current;
144 $self->{msg_size_warn} = $conf->bootstrap->msg_size_warn || 1800000;
147 $tail = "" if !$conf->bootstrap->router_name and $username eq "router";
148 $resource = "$resource$tail";
150 my $socket = IO::Socket::INET->new(
152 PeerPort => int($port),
155 throw OpenSRF::EX::Jabber("Could not open TCP socket to Jabber server: $@")
156 unless ( $socket and $socket->connected );
158 $self->socket($socket);
159 $self->reader(OpenSRF::Transport::SlimJabber::XMPPReader->new($socket));
160 $self->reader->connect($host, $username, $password, $resource);
162 throw OpenSRF::EX::Jabber("Could not authenticate with Jabber server: $@")
163 unless ( $self->reader->connected );
165 $self->xmpp_id("$username\@$host/$resource");
166 $logger->debug("Created XMPP connection " . $self->xmpp_id);
171 # Our full login: username@host/resource
173 my($self, $xmpp_id) = @_;
174 $self->{xmpp_id} = $xmpp_id if $xmpp_id;
175 return $self->{xmpp_id};
184 my( $class, $app ) = @_;
185 $class->peer_handle($class->new( $app )->initialize());
194 my($self, $timeout) = @_;
197 $timeout = int($timeout);
199 unless( $self->reader and $self->reader->connected ) {
200 throw OpenSRF::EX::JabberDisconnected
201 ("This JabberClient instance is no longer connected to the server ");
204 return $self->reader->wait_msg($timeout);
210 Sets the socket to O_NONBLOCK, reads all of the data off of the
211 socket, the restores the sockets flags. Returns 1 on success, 0 if
212 the socket isn't connected.
218 return 0 unless $self->reader;
219 return $self->reader->flush_socket;