File: | blib/lib/OpenSRF/Transport/SlimJabber/XMPPMessage.pm |
Coverage: | 18.7% |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | package OpenSRF::Transport::SlimJabber::XMPPMessage; | ||||||
2 | 9 9 9 9 9 9 | 52 32 76 64 31 84 | use strict; use warnings; | ||||
3 | 9 9 9 | 58 35 84 | use OpenSRF::Utils::Logger qw/$logger/; | ||||
4 | 9 9 9 | 63 37 82 | use OpenSRF::EX qw/:try/; | ||||
5 | 9 9 9 9 9 9 | 65 31 51 62 31 51 | use strict; use warnings; | ||||
6 | 9 9 9 | 60 33 89 | use XML::LibXML; | ||||
7 | |||||||
8 | 9 | 87 | use constant JABBER_MESSAGE => | ||||
9 | "<message to='%s' from='%s' router_command='%s' router_class='%s' osrf_xid='%s'>". | ||||||
10 | 9 9 | 72 31 | "<thread>%s</thread><body>%s</body></message>"; | ||||
11 | |||||||
12 | sub new { | ||||||
13 | 0 | 0 | my $class = shift; | ||||
14 | 0 | my %args = @_; | |||||
15 | 0 | my $self = bless({}, $class); | |||||
16 | |||||||
17 | 0 | if($args{xml}) { | |||||
18 | 0 | $self->parse_xml($args{xml}); | |||||
19 | |||||||
20 | } else { | ||||||
21 | 0 | $self->{to} = $args{to} || ''; | |||||
22 | 0 | $self->{from} = $args{from} || ''; | |||||
23 | 0 | $self->{thread} = $args{thread} || ''; | |||||
24 | 0 | $self->{body} = $args{body} || ''; | |||||
25 | 0 | $self->{osrf_xid} = $args{osrf_xid} || ''; | |||||
26 | 0 | $self->{router_command} = $args{router_command} || ''; | |||||
27 | 0 | $self->{router_class} = $args{router_class} || ''; | |||||
28 | } | ||||||
29 | |||||||
30 | 0 | return $self; | |||||
31 | } | ||||||
32 | |||||||
33 | sub to { | ||||||
34 | 0 | 0 | my($self, $to) = @_; | ||||
35 | 0 | $self->{to} = $to if defined $to; | |||||
36 | 0 | return $self->{to}; | |||||
37 | } | ||||||
38 | sub from { | ||||||
39 | 0 | 0 | my($self, $from) = @_; | ||||
40 | 0 | $self->{from} = $from if defined $from; | |||||
41 | 0 | return $self->{from}; | |||||
42 | } | ||||||
43 | sub thread { | ||||||
44 | 0 | 0 | my($self, $thread) = @_; | ||||
45 | 0 | $self->{thread} = $thread if defined $thread; | |||||
46 | 0 | return $self->{thread}; | |||||
47 | } | ||||||
48 | sub body { | ||||||
49 | 0 | 0 | my($self, $body) = @_; | ||||
50 | 0 | $self->{body} = $body if defined $body; | |||||
51 | 0 | return $self->{body}; | |||||
52 | } | ||||||
53 | sub status { | ||||||
54 | 0 | 0 | my($self, $status) = @_; | ||||
55 | 0 | $self->{status} = $status if defined $status; | |||||
56 | 0 | return $self->{status}; | |||||
57 | } | ||||||
58 | sub type { | ||||||
59 | 0 | 0 | my($self, $type) = @_; | ||||
60 | 0 | $self->{type} = $type if defined $type; | |||||
61 | 0 | return $self->{type}; | |||||
62 | } | ||||||
63 | sub err_type { | ||||||
64 | 0 | 0 | my($self, $err_type) = @_; | ||||
65 | 0 | $self->{err_type} = $err_type if defined $err_type; | |||||
66 | 0 | return $self->{err_type}; | |||||
67 | } | ||||||
68 | sub err_code { | ||||||
69 | 0 | 0 | my($self, $err_code) = @_; | ||||
70 | 0 | $self->{err_code} = $err_code if defined $err_code; | |||||
71 | 0 | return $self->{err_code}; | |||||
72 | } | ||||||
73 | sub osrf_xid { | ||||||
74 | 0 | 0 | my($self, $osrf_xid) = @_; | ||||
75 | 0 | $self->{osrf_xid} = $osrf_xid if defined $osrf_xid; | |||||
76 | 0 | return $self->{osrf_xid}; | |||||
77 | } | ||||||
78 | sub router_command { | ||||||
79 | 0 | 0 | my($self, $router_command) = @_; | ||||
80 | 0 | $self->{router_command} = $router_command if defined $router_command; | |||||
81 | 0 | return $self->{router_command}; | |||||
82 | } | ||||||
83 | sub router_class { | ||||||
84 | 0 | 0 | my($self, $router_class) = @_; | ||||
85 | 0 | $self->{router_class} = $router_class if defined $router_class; | |||||
86 | 0 | return $self->{router_class}; | |||||
87 | } | ||||||
88 | |||||||
89 | |||||||
90 | sub to_xml { | ||||||
91 | 0 | 0 | my $self = shift; | ||||
92 | |||||||
93 | 0 | my $body = $self->{body}; | |||||
94 | 0 | $body =~ s/&/&/sog; | |||||
95 | 0 | $body =~ s/</</sog; | |||||
96 | 0 | $body =~ s/>/>/sog; | |||||
97 | |||||||
98 | 0 | return sprintf( | |||||
99 | JABBER_MESSAGE, | ||||||
100 | $self->{to}, | ||||||
101 | $self->{from}, | ||||||
102 | $self->{router_command}, | ||||||
103 | $self->{router_class}, | ||||||
104 | $self->{osrf_xid}, | ||||||
105 | $self->{thread}, | ||||||
106 | $body | ||||||
107 | ); | ||||||
108 | } | ||||||
109 | |||||||
110 | sub parse_xml { | ||||||
111 | 0 | 0 | my($self, $xml) = @_; | ||||
112 | 0 | my($doc, $err); | |||||
113 | |||||||
114 | try { | ||||||
115 | 0 | $doc = XML::LibXML->new->parse_string($xml); | |||||
116 | } catch Error with { | ||||||
117 | 0 | my $err = shift; | |||||
118 | 0 | $logger->error("Error parsing message xml: $xml --- $err"); | |||||
119 | 0 | }; | |||||
120 | 0 | throw $err if $err; | |||||
121 | |||||||
122 | 0 | my $root = $doc->documentElement; | |||||
123 | |||||||
124 | 0 | $self->{body} = $root->findnodes('/message/body').''; | |||||
125 | 0 | $self->{thread} = $root->findnodes('/message/thread').''; | |||||
126 | 0 | $self->{from} = $root->getAttribute('router_from'); | |||||
127 | 0 | $self->{from} = $root->getAttribute('from') unless $self->{from}; | |||||
128 | 0 | $self->{to} = $root->getAttribute('to'); | |||||
129 | 0 | $self->{type} = $root->getAttribute('type'); | |||||
130 | 0 | $self->{osrf_xid} = $root->getAttribute('osrf_xid'); | |||||
131 | } | ||||||
132 | |||||||
133 | |||||||
134 | 1; |