File Coverage

File:blib/lib/OpenSRF/Transport/SlimJabber/Client.pm
Coverage:31.2%

linestmtbrancondsubpodtimecode
1package OpenSRF::Transport::SlimJabber::Client;
2
3
9
9
9
49
52
51
use strict;
4
9
9
9
59
35
59
use warnings;
5
6
9
9
9
69
35
59
use OpenSRF::EX;
7
9
9
9
64
37
79
use OpenSRF::Utils::Config;
8
9
9
9
58
36
55
use OpenSRF::Utils::Logger qw/$logger/;
9
9
9
9
113
41
142
use OpenSRF::Transport::SlimJabber::XMPPReader;
10
9
9
9
71
34
51
use OpenSRF::Transport::SlimJabber::XMPPMessage;
11
9
9
9
118
40
73
use IO::Socket::UNIX;
12
9
9
9
131
40
148
use FreezeThaw qw/freeze/;
13
14sub DESTROY{
15
0
    shift()->disconnect;
16}
17
18 - 30
=head1 NAME

OpenSRF::Transport::SlimJabber::Client

=head1 SYNOPSIS



=head1 DESCRIPTION



=cut
31
32 - 36
=head1 METHODS

=head2 new

=cut
37
38sub new {
39
0
1
        my( $class, %params ) = @_;
40
0
    my $self = bless({}, ref($class) || $class);
41
0
    $self->params(\%params);
42
0
        return $self;
43}
44
45 - 47
=head2 reader

=cut
48
49sub reader {
50
0
1
    my($self, $reader) = @_;
51
0
    $self->{reader} = $reader if $reader;
52
0
    return $self->{reader};
53}
54
55 - 57
=head2 params

=cut
58
59sub params {
60
0
1
    my($self, $params) = @_;
61
0
    $self->{params} = $params if $params;
62
0
    return $self->{params};
63}
64
65 - 67
=head2 socket

=cut
68
69sub socket {
70
0
1
    my($self, $socket) = @_;
71
0
    $self->{socket} = $socket if $socket;
72
0
    return $self->{socket};
73}
74
75 - 77
=head2 disconnect

=cut
78
79sub disconnect {
80
0
1
    my $self = shift;
81
0
        $self->reader->disconnect if $self->reader;
82}
83
84
85 - 87
=head2 gather

=cut
88
89sub gather {
90
0
1
    my $self = shift;
91
0
    $self->process( 0 );
92}
93
94# -------------------------------------------------
95
96 - 98
=head2 tcp_connected

=cut
99
100sub tcp_connected {
101
0
1
        my $self = shift;
102
0
    return $self->reader->tcp_connected if $self->reader;
103
0
    return 0;
104}
105
106
107
108 - 110
=head2 send

=cut
111
112sub send {
113
0
1
        my $self = shift;
114
0
    my $msg = OpenSRF::Transport::SlimJabber::XMPPMessage->new(@_);
115
0
    $msg->osrf_xid($logger->get_osrf_xid);
116
0
    $msg->from($self->xmpp_id);
117
0
    $self->reader->send($msg->to_xml);
118}
119
120 - 122
=head2 initialize

=cut
123
124sub initialize {
125
126
0
1
        my $self = shift;
127
128
0
        my $host = $self->params->{host};
129
0
        my $port = $self->params->{port};
130
0
        my $username = $self->params->{username};
131
0
        my $resource = $self->params->{resource};
132
0
        my $password = $self->params->{password};
133
134
0
        my $conf = OpenSRF::Utils::Config->current;
135
136
0
        my $tail = "_$$";
137
0
        $tail = "" if !$conf->bootstrap->router_name and $username eq "router";
138
0
    $resource = "$resource$tail";
139
140
0
    my $socket = IO::Socket::INET->new(
141        PeerHost => $host,
142        PeerPort => int($port),
143        Proto => 'tcp' );
144
145
0
    throw OpenSRF::EX::Jabber("Could not open TCP socket to Jabber server: $@")
146            unless ( $socket and $socket->connected );
147
148
0
    $self->socket($socket);
149
0
    $self->reader(OpenSRF::Transport::SlimJabber::XMPPReader->new($socket));
150
0
    $self->reader->connect($host, $username, $password, $resource);
151
152
0
    throw OpenSRF::EX::Jabber("Could not authenticate with Jabber server: $@")
153            unless ( $self->reader->connected );
154
155
0
    $self->xmpp_id("$username\@$host/$resource");
156
0
        return $self;
157}
158
159
160# Our full login: username@host/resource
161sub xmpp_id {
162
0
0
    my($self, $xmpp_id) = @_;
163
0
    $self->{xmpp_id} = $xmpp_id if $xmpp_id;
164
0
    return $self->{xmpp_id};
165}
166
167
168 - 170
=head2 construct

=cut
171
172sub construct {
173
0
1
        my( $class, $app ) = @_;
174
0
        $class->peer_handle($class->new( $app )->initialize());
175}
176
177
178 - 180
=head2 process

=cut
181
182sub process {
183
0
1
        my($self, $timeout) = @_;
184
185
0
        $timeout ||= 0;
186
0
    $timeout = int($timeout);
187
188
0
        unless( $self->reader and $self->reader->connected ) {
189
0
        throw OpenSRF::EX::JabberDisconnected
190            ("This JabberClient instance is no longer connected to the server ");
191        }
192
193
0
    return $self->reader->wait_msg($timeout);
194}
195
196
197 - 203
=head2 flush_socket

Sets the socket to O_NONBLOCK, reads all of the data off of the
socket, the restores the sockets flags.  Returns 1 on success, 0 if
the socket isn't connected.

=cut
204
205sub flush_socket {
206
0
1
        my $self = shift;
207
0
    return $self->reader->flush_socket;
208}
209
2101;
211
212