File Coverage

blib/lib/Net/Wireless/802_11/WPA/CLI/Helper.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             package Net::Wireless::802_11::WPA::CLI::Helper;
2              
3 1     1   24261 use warnings;
  1         3  
  1         35  
4 1     1   6 use strict;
  1         2  
  1         55  
5 1     1   7 use base 'Error::Helper';
  1         5  
  1         988  
6 1     1   1587 use Net::Wireless::802_11::AP;
  0            
  0            
7             use Net::Wireless::802_11::WPA::CLI;
8              
9             =head1 NAME
10              
11             Net::Wireless::802_11::WPA::CLI::Helper - Provides various helper functions for working with Net::Wireless::802_11::WPA::CLI.
12              
13             =head1 VERSION
14              
15             Version 0.0.0
16              
17             =cut
18              
19             our $VERSION = '0.0.0';
20              
21              
22             =head1 SYNOPSIS
23              
24             use Net::Wireless::802_11::WPA::CLI::Helper;
25             use Net::Wireless::802_11::WPA::CLI;
26              
27             my $cli=Net::Wireless::802_11::WPA::CLI->new;
28              
29             my $foo = Net::Wireless::802_11::WPA::CLI::Helper->new($cli);
30             ...
31              
32             =head1 METHODS
33              
34             =head2 new
35              
36             This initializes the object.
37              
38             There is one argument taken and that is a Net::Wireless::802_11::WPA::CLI object.
39             If not specified, a Net::Wireless::802_11::WPA::CLI object is initiated
40             with the defaults.
41              
42             my $foo=Net::Wireless::802_11::WPA::CLI::Helper->new($cli);
43             if ( $foo->error ){
44             warn('Error:'.$foo->error.': '.$foo->errorString);
45             }
46              
47             =cut
48              
49             sub new{
50             my $cli=$_[1];
51              
52             my $self={
53             error=>undef,
54             errorString=>'',
55             perror=>undef,
56             };
57             bless $self;
58              
59             if( !defined( $cli ) ){
60             $cli=Net::Wireless::802_11::WPA::CLI->new;
61             if( $cli->error ){
62             $self->{perror}=1;
63             $self->{error}=1;
64             $self->{errorString}='No object specified and failed to initiate one. '.
65             'error="'.$cli->error.'" '.
66             'errorString="'.$cli->errorString.'"';
67             $self->warn;
68             return $self;
69             }
70             }
71              
72             #make sure a valid cli object is specified
73             if ( ref($cli) ne 'Net::Wireless::802_11::WPA::CLI' ){
74             $self->{perror}=1;
75             $self->{error}=1;
76             $self->{errorString}='No Net::Wireless::802_11::WPA::CLI specified';
77             $self->warn;
78             return $self;
79             }
80              
81             $self->{cli}=$cli;
82              
83             return $self;
84             }
85              
86             =head2 apObj2network
87              
88             This writes a Net::Wireless::802_11::AP to a network ID.
89              
90             One argument is taken and that is the Net::Wireless::802_11::AP
91             object. It requires the variable 'networkID' to be specified. This
92             is the network ID that it will be writen to.
93              
94             $foo->apObj2network($ap);
95             if ($foo->error){
96             warn('Error:'.$foo->error.': '.$foo->errorString);
97             }
98              
99             =cut
100              
101             sub apObj2network{
102             my $self=$_[0];
103             my $ap=$_[1];
104              
105             if(!$self->errorblank){
106             return undef;
107             }
108              
109             if(!defined( $ap )){
110             $self->{error}=2;
111             $self->{errorString}='No Net::Wireless::802_11::AP defined';
112             $self->warn;
113             return undef;
114             }
115              
116             if( ref($ap) ne 'Net::Wireless::802_11::AP' ){
117             $self->{error}=2;
118             $self->{errorString}='The passed object is not a Net::Wireless::802_11::AP';
119             $self->warn;
120             return undef;
121             }
122              
123             #figure out what the network ID is
124             my $nid=$ap->getKey('networkID');
125             if(defined( $nid )){
126             if( ! $self->NIDexists($nid) ){
127             $self->{error}=4;
128             $self->{errorString}='The network ID, "'.$nid.'", does not exist';
129             $self->warn;
130             return undef;
131             }
132             }else{
133             $self->{error}=6;
134             $self->{errorString}='The variable "networkID" is not present in the Net::Wireless::802_11::AP object';
135             $self->warn;
136             return undef;
137             }
138              
139             my @WPAkeys=$ap->listWPAkeys;
140             my $int=0;
141             while( defined( $WPAkeys[$int] ) ){
142             my $value=$ap->getKey( $WPAkeys[$int] );
143              
144             if( defined( $value ) ){
145             $self->{cli}->set_network( $nid, $WPAkeys[$int], $value );
146             }
147              
148             $int++;
149             }
150            
151             return 1;
152             }
153              
154             =head2 network2APobj
155              
156             This converts a specified configured network to a
157             Net::Wireless::802_11::AP object.
158              
159             One agrument is required and it is a network ID.
160              
161             my %APobj=$foo->network2APobj('0');
162             if ($foo->error){
163             warn('Error:'.$foo->error.': '.$foo->errorString);
164             }
165              
166             =cut
167              
168             sub network2APobj{
169             my $self=$_[0];
170             my $nid=$_[1];
171              
172             if(!$self->errorblank){
173             return undef;
174             }
175              
176             if(!defined($nid)){
177             $self->{error}=2;
178             $self->{errorString}='No network ID specified';
179             $self->warn;
180             return undef;
181             }
182              
183             if( $nid !~ /^[0123456789]*$/ ){
184             $self->{error}=2;
185             $self->{errorString}='The network ID is not specified';
186             $self->warn;
187             return undef;
188             }
189              
190             if(!$self->NIDexists($nid)){
191             $self->{error}=4;
192             $self->{errorString}='The network ID, "'.$nid.'", does not exist';
193             $self->warn;
194             return undef;
195             }
196            
197             my $ssid=$self->{cli}->get_network($nid, 'ssid');
198             if(!defined( $ssid )){
199             $self->{error}=5;
200             $self->{errorString}='Unable to get the SSID for "'.$nid.'"';
201             $self->warn;
202             return undef;
203             }
204              
205             my $ap=Net::Wireless::802_11::AP->new({ ssid=>$ssid, networkID=>$nid });
206              
207             $ap->setKey('networkID', $nid);
208            
209             my @WPAkeys=$ap->listWPAkeys;
210             my $int=0;
211             while( defined( $WPAkeys[$int] ) ){
212             my $value=$self->{cli}->get_network($nid, $WPAkeys[$int]);
213              
214             if(defined($value)){
215             $ap->setKey($WPAkeys[$int], $value);
216             }
217              
218             $int++;
219             }
220              
221             return $ap;
222             }
223              
224             =head2 networks2APobjs
225              
226             This converts all configured networks to a hash of
227             Net::Wireless::802_11::AP objects. The keys used is
228             the network ID.
229              
230             my %APobj=$foo->networks2APobj;
231             if ($foo->error){
232             warn('Error:'.$foo->error.': '.$foo->errorString);
233             }
234              
235             =cut
236              
237             sub networks2APobjs{
238             my $self=$_[0];
239              
240             if(!$self->errorblank){
241             return undef;
242             }
243              
244             my %networks=$self->{cli}->list_networks;
245             if($self->{cli}->error){
246             $self->{error}=3;
247             $self->{errorString}='Net::Wireless::802_11::WPA::CLI errored. '.
248             'error="'.$self->{cli}->error.'" '.
249             'errorString="'.$self->{cli}->errorString.'"';
250             $self->warn;
251             return undef;
252             }
253              
254             my @NIDs=keys(%networks);
255              
256             my $int=0;
257             my %toreturn;
258             while( defined($NIDs[$int]) ){
259             my $ap=$self->network2APobj($NIDs[$int]);
260              
261             if( ! $self->error ){
262             $toreturn{$NIDs[$int]}=$ap;
263             }
264              
265             $int++;
266             }
267            
268             return %toreturn;
269             }
270              
271             =head2 NIDexists
272              
273             This verifies a that a network ID exists.
274              
275             One argument is taken and it is the numeric network ID.
276              
277             The returned value is boolean.
278              
279             my $exists=$foo->NIDexists('0');
280             if( $foo->error ){
281             warn('Error:'.$foo->error.': '.$foo->errorString);
282             }
283              
284             =cut
285              
286             sub NIDexists{
287             my $self=$_[0];
288             my $nid=$_[1];
289              
290             if(!$self->errorblank){
291             return undef;
292             }
293              
294             if(!defined($nid)){
295             $self->{error}=2;
296             $self->{errorString}='No network ID specified';
297             $self->warn;
298             return undef;
299             }
300              
301             if( $nid !~ /^[0123456789]*$/ ){
302             $self->{error}=2;
303             $self->{errorString}='The network ID is not specified';
304             $self->warn;
305             return undef;
306             }
307              
308             my %networks=$self->{cli}->list_networks;
309             if( $self->{cli}->error ){
310             $self->{error}=3;
311             $self->{errorString}='Net::Wireless::802_11::WPA::CLI errored. '.
312             'error="'.$self->{cli}->error.'" '.
313             'errorString="'.$self->{cli}->errorString.'"';
314             $self->warn;
315             return undef;
316             }
317              
318             return defined( $networks{$nid} );
319             }
320              
321             =head1 ERROR CODES
322              
323             =head2 1
324              
325             No Net::Wireless::802_11::WPA::CLI::Helper specified or initialize a new instance.
326              
327             This is a permanent error.
328              
329             =head2 2
330              
331             There was an error with the argument.
332              
333             =head2 3
334              
335             Net::Wireless::802_11::WPA::CLI errored.
336              
337             =head2 4
338              
339             The network ID does not exist.
340              
341             =head2 5
342              
343             Unable to fetch a SSID for a network ID.
344              
345             =head2 6
346              
347             The Net::Wireless::802_11::AP does not have a the variable 'networkID' specified.
348              
349             =head1 AUTHOR
350              
351             Zane C. Bowers-Hadley, C<< >>
352              
353             =head1 BUGS
354             "
355             Please report any bugs or feature requests to C, or through
356             the web interface at L. I will be notified, and then you'll
357             automatically be notified of progress on your bug as I make changes.
358              
359              
360              
361              
362             =head1 SUPPORT
363              
364             You can find documentation for this module with the perldoc command.
365              
366             perldoc Net::Wireless::802_11::WPA::CLI::Helper
367              
368              
369             You can also look for information at:
370              
371             =over 4
372              
373             =item * RT: CPAN's request tracker
374              
375             L
376              
377             =item * AnnoCPAN: Annotated CPAN documentation
378              
379             L
380              
381             =item * CPAN Ratings
382              
383             L
384              
385             =item * Search CPAN
386              
387             L
388              
389             =back
390              
391              
392             =head1 ACKNOWLEDGEMENTS
393              
394              
395             =head1 LICENSE AND COPYRIGHT
396              
397             Copyright 2011 Zane C. Bowers-Hadley.
398              
399             This program is free software; you can redistribute it and/or modify it
400             under the terms of either: the GNU General Public License as published
401             by the Free Software Foundation; or the Artistic License.
402              
403             See http://dev.perl.org/licenses/ for more information.
404              
405              
406             =cut
407              
408             1; # End of Net::Wireless::802_11::WPA::CLI::Helper