1 package OpenSRF::Transport::SlimJabber::Client;
2 use strict; use warnings;
4 use OpenSRF::Utils::Config;
5 use OpenSRF::Utils::Logger qw/$logger/;
6 use OpenSRF::Transport::SlimJabber::XMPPReader;
7 use OpenSRF::Transport::SlimJabber::XMPPMessage;
9 use FreezeThaw qw/freeze/;
16 my( $class, %params ) = @_;
17 my $self = bless({}, ref($class) || $class);
18 $self->params(\%params);
24 my($self, $reader) = @_;
25 $self->{reader} = $reader if $reader;
26 return $self->{reader};
30 my($self, $params) = @_;
31 $self->{params} = $params if $params;
32 return $self->{params};
36 my($self, $socket) = @_;
37 $self->{socket} = $socket if $socket;
38 return $self->{socket};
43 $self->reader->disconnect if $self->reader;
52 # -------------------------------------------------
56 return $self->reader->tcp_connected if $self->reader;
64 my $msg = OpenSRF::Transport::SlimJabber::XMPPMessage->new(@_);
65 $self->reader->send($msg->to_xml);
72 my $host = $self->params->{host};
73 my $port = $self->params->{port};
74 my $username = $self->params->{username};
75 my $resource = $self->params->{resource};
76 my $password = $self->params->{password};
78 my $jid = "$username\@$host/$resource";
80 my $conf = OpenSRF::Utils::Config->current;
83 $tail = "" if !$conf->bootstrap->router_name and $username eq "router";
84 $resource = "$resource$tail";
86 my $socket = IO::Socket::INET->new(
92 throw OpenSRF::EX::Jabber("Could not open TCP socket to Jabber server: $!")
93 unless ( $socket and $socket->connected );
95 $self->socket($socket);
96 $self->reader(OpenSRF::Transport::SlimJabber::XMPPReader->new($socket));
97 $self->reader->connect($host, $username, $password, $resource);
99 throw OpenSRF::EX::Jabber("Could not authenticate with Jabber server: $!")
100 unless ( $self->reader->connected );
107 my( $class, $app ) = @_;
108 $class->peer_handle($class->new( $app )->initialize());
113 my($self, $timeout) = @_;
116 $timeout = int($timeout);
118 unless( $self->reader and $self->reader->connected ) {
119 throw OpenSRF::EX::JabberDisconnected
120 ("This JabberClient instance is no longer connected to the server ");
123 return $self->reader->wait_msg($timeout);
127 # --------------------------------------------------------------
128 # Sets the socket to O_NONBLOCK, reads all of the data off of
129 # the socket, the restores the sockets flags
130 # Returns 1 on success, 0 if the socket isn't connected
131 # --------------------------------------------------------------
134 return $self->reader->flush_socket;