File Coverage

blib/lib/POE/Component/Client/MSN/Command.pm
Criterion Covered Total %
statement 7 9 77.7
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 10 12 83.3


line stmt bran cond sub pod time code
1             package POE::Component::Client::MSN::Command;
2 1     1   1008 use strict;
  1         2  
  1         33  
3 1     1   836 use URI::Escape;
  1         1490  
  1         80  
4 1     1   495 use Mail::Internet;
  0            
  0            
5              
6             # XXX Validation should be done
7             # Transaction ID: 4294967295
8             # Friendly Name: 129 characters
9             # Messages: 1664 characters
10             # Forward List: 150 buddies
11             # Number of groups: 30
12              
13             my %errors = (
14             200 => 'INVALID_SYNTAX',
15             201 => 'INVALID_PARAMETER',
16             205 => 'INVALID_USER',
17             206 => 'FQDN_MISSING',
18             207 => 'ALREADY_LOGGED_IN',
19             208 => 'INVALID_USERNAME',
20             209 => 'INVALID_FRIENDLY_NAME',
21             210 => 'USER_LIST_FULL',
22             215 => 'USER_ALREADY_THERE',
23             216 => 'USER_NOT_ON_LIST',
24             217 => 'USER_NOT_ONLINE',
25             218 => 'ALREADY_IN_MODE',
26             219 => 'ALREADY_IN_OPPOSITE_LIST',
27             224 => 'INVALID_GROUP',
28             225 => 'USER_NOT_IN_GROUP',
29             229 => 'GROUP_NAME_TOO_LONG',
30             230 => 'CANNOT_REMOVE_GROUP_0',
31             231 => 'INVALID_GROUP',
32             280 => 'SWITCHBOARD_FAILED',
33             281 => 'XFR_SWITCHBOARD_FAILED',
34             300 => 'REQUIRED_FIELDS_MISSING',
35             301 => 'TOO_MANY_RESULTS',
36             302 => 'NOT_LOGGED_IN',
37             500 => 'INTERNAL_SERVER',
38             501 => 'DB_ERROR',
39             502 => 'COMMAND_DISABLED',
40             510 => 'FILE_OPERATION_FAILED',
41             520 => 'MEMORY_ALLOC_FAILED',
42             540 => 'CHL_RESPONSE_FAILED',
43             600 => 'SERVER_BUSY',
44             601 => 'SERVER_UNAVAILABLE',
45             602 => 'PEER_NS_DOWN',
46             603 => 'DB_CONNECT_FAILED',
47             604 => 'SERVER_GOING_DOWN',
48             707 => 'CREATE_CONNECTION',
49             710 => 'BAD_CVR_LCID',
50             711 => 'BLOCKING_WRITE',
51             712 => 'SESSION_OVERLOAD',
52             713 => 'TOO_MANY_ACTIVE_USERS',
53             714 => 'TOO_MANY_SESSIONS',
54             715 => 'NOT_EXPECTED',
55             717 => 'BAD_FRIEND_FILE',
56             731 => 'BAD_CVR_NOT_EXPECTED',
57             800 => 'TOO_RAPID_NAME_CHANGE',
58             910 => 'SERVER_TOO_BUSY',
59             911 => 'AUTHENTICATION_FAILED',
60             912 => 'SERVER_TOO_BUSY',
61             913 => 'NOT_ALLOWED_WHEN_OFFLINE',
62             914 => 'SERVER_UNAVAILABLE',
63             915 => 'SERVER_UNAVAILABLE',
64             916 => 'SERVER_UNAVAILABLE',
65             917 => 'AUTHENTICATION_FAILED',
66             918 => 'SERVER_TOO_BUSY',
67             919 => 'SERVER_TOO_BUSY',
68             920 => 'NOT_ACCEPTING_NEW_USERS',
69             921 => 'SERVER_TOO_BUSY',
70             922 => 'SERVER_TOO_BUSY',
71             923 => 'NO_PARENTAL_CONSENT',
72             924 => 'ACCOUNT_NOT_VERIFIED',
73             );
74              
75             sub new {
76             my($class, $name, $data, $stuff, $no_newline) = @_;
77             my $transaction = ref($stuff) eq 'HASH' # heap?
78             ? $stuff->{transaction}++ : $stuff;
79              
80             # error is in \d\d\d
81             my ($errcode, $errname);
82             if ($name =~ /^\d{3}$/) {
83             $errcode = $name;
84             if (exists($errors{$errcode})) {
85             $errname = $errors{$errcode};
86             } else {
87             $errname = 'UNKNOWN';
88             }
89             }
90              
91             bless {
92             name => $name,
93             data => $data,
94             errcode => $errcode,
95             errname => $errname,
96             transaction => $transaction,
97             message => undef,
98             _args => undef,
99             no_newline => $no_newline,
100             }, $class;
101             }
102              
103             sub name { shift->{name} }
104             sub data { shift->{data} }
105             sub errcode { shift->{errcode} }
106             sub errname { shift->{errname} }
107             sub transaction { shift->{transaction} }
108             sub no_newline { shift->{no_newline} }
109              
110             sub message {
111             my $self = shift;
112             if (@_) {
113             $self->{message} = Mail::Internet->new([ split /\r\n/, shift ]);
114             }
115             return $self->{message};
116             }
117              
118             sub body {
119             my $self = shift;
120             return join '', map "$_\n", @{$self->message->body};
121             }
122              
123             sub header {
124             my($self, $key) = @_;
125             my $value = $self->message->head->get($key);
126             chomp($value);
127             return $value;
128             }
129              
130             sub args {
131             my $self = shift;
132             $self->{_args} ||= [ map URI::Escape::uri_unescape($_), split / /, $self->data ];
133             return wantarray ? @{$self->{_args}} : $self->{_args};
134             }
135              
136             1;