/[cwmp]/google/trunk/lib/CWMP/Server.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /google/trunk/lib/CWMP/Server.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 197 - (hide annotations)
Mon Nov 12 22:03:01 2007 UTC (16 years, 6 months ago) by dpavlin
File size: 2463 byte(s)
 r206@brr:  dpavlin | 2007-11-12 23:02:21 +0100
 - move protocol dump to new cpe-queue.pl command
 - queue now stores data in YAML to preserve perl structures intact
 - queue jobs are now finished correctly
 - remove all traces of default_queue

1 dpavlin 83 # Dobrica Pavlinusic, <dpavlin@rot13.org> 06/22/07 14:35:38 CEST
2     package CWMP::Server;
3    
4     use strict;
5     use warnings;
6    
7     use base qw/Class::Accessor/;
8     __PACKAGE__->mk_accessors( qw/
9     port
10 dpavlin 150 store
11 dpavlin 84 background
12 dpavlin 83 debug
13 dpavlin 84
14     server
15 dpavlin 83 / );
16    
17     use CWMP::Session;
18 dpavlin 197 use CWMP::Queue;
19 dpavlin 83
20     use Carp qw/confess/;
21     use Data::Dump qw/dump/;
22    
23     =head1 NAME
24    
25     CWMP::Server - description
26    
27     =head1 METHODS
28    
29     =head2 new
30    
31     my $server = CWMP::Server->new({
32     port => 3333,
33 dpavlin 158 store => {
34     module => 'DBMDeep',
35     path => 'var/',
36     },
37 dpavlin 84 background => 1,
38 dpavlin 83 debug => 1
39     });
40    
41     Options:
42    
43     =over 4
44    
45     =item port
46    
47     port to listen on
48    
49 dpavlin 150 =item store
50 dpavlin 83
51 dpavlin 150 hash with key C<module> with value C<DBMDeep> if L<CWMP::Store::DBMDeep>
52     is used. Other parametars are optional.
53 dpavlin 83
54     =back
55    
56     =cut
57    
58     sub new {
59     my $class = shift;
60     my $self = $class->SUPER::new( @_ );
61    
62     warn "created ", __PACKAGE__, "(", dump( @_ ), ") object\n" if $self->debug;
63    
64 dpavlin 84 warn "ACS waiting for request on port ", $self->port, "\n";
65    
66     $self->debug( 0 ) unless $self->debug;
67     warn "## debug level: ", $self->debug, "\n" if $self->debug;
68    
69     $self->server(
70     CWMP::Server::Helper->new({
71     proto => 'tcp',
72     port => $self->port,
73 dpavlin 150 store => $self->store,
74 dpavlin 84 debug => $self->debug,
75     background => $self->background,
76     })
77     );
78    
79 dpavlin 83 return $self;
80     }
81    
82     =head2 run
83    
84     =cut
85    
86     sub run {
87     my $self = shift;
88    
89 dpavlin 84 $self->server->run;
90     }
91 dpavlin 83
92 dpavlin 84 package CWMP::Server::Helper;
93 dpavlin 83
94 dpavlin 84 use warnings;
95     use strict;
96 dpavlin 83
97 dpavlin 84 use base qw/Net::Server/;
98     use Carp qw/confess/;
99     use Data::Dump qw/dump/;
100 dpavlin 83
101 dpavlin 84 sub options {
102     my $self = shift;
103     my $prop = $self->{'server'};
104     my $template = shift;
105 dpavlin 83
106 dpavlin 84 ### setup options in the parent classes
107     $self->SUPER::options($template);
108 dpavlin 83
109 dpavlin 84 # new single-value options
110 dpavlin 150 foreach my $p ( qw/ store debug / ) {
111 dpavlin 84 $prop->{ $p } ||= undef;
112     $template->{ $p } = \$prop->{ $p };
113     }
114 dpavlin 83
115 dpavlin 84 # new multi-value options
116 dpavlin 197 # foreach my $p ( qw/ default_queue / ) {
117     # $prop->{ $p } ||= [];
118     # $template->{ $p } = $prop->{ $p };
119     # }
120 dpavlin 83 }
121    
122 dpavlin 84
123     =head2 process_request
124    
125     =cut
126    
127     sub process_request {
128     my $self = shift;
129    
130     my $prop = $self->{server};
131     confess "no server in ", ref( $self ) unless $prop;
132     my $sock = $prop->{client};
133     confess "no sock in ", ref( $self ) unless $sock;
134    
135 oleide 141 eval {
136     my $session = CWMP::Session->new({
137     sock => $sock,
138 dpavlin 150 store => $prop->{store},
139 oleide 141 debug => $prop->{debug},
140     }) || confess "can't create session";
141 dpavlin 84
142 oleide 141 while ( $session->process_request ) {
143 dpavlin 176 warn "...waiting for next request from CPE...\n";
144 oleide 141 }
145     };
146    
147     if ($@) {
148     warn $@;
149 dpavlin 84 }
150    
151     warn "...returning to accepting new connections\n";
152    
153     }
154    
155 dpavlin 83 1;

  ViewVC Help
Powered by ViewVC 1.1.26