/[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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 158 - (show annotations)
Sat Oct 27 22:54:51 2007 UTC (16 years, 6 months ago) by dpavlin
File size: 2834 byte(s)
 r143@llin (orig r142):  dpavlin | 2007-10-28 00:02:50 +0200
 pod fix

1 # 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 store
11 default_queue
12 background
13 debug
14
15 server
16 / );
17
18 use CWMP::Session;
19
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 store => {
34 module => 'DBMDeep',
35 path => 'var/',
36 },
37 default_queue => [ qw/GetRPCMethods GetParameterNames/ ],
38 background => 1,
39 debug => 1
40 });
41
42 Options:
43
44 =over 4
45
46 =item port
47
48 port to listen on
49
50 =item store
51
52 hash with key C<module> with value C<DBMDeep> if L<CWMP::Store::DBMDeep>
53 is used. Other parametars are optional.
54
55 =item default_queue
56
57 commands which will be issued to every CPE on connect
58
59 =back
60
61 =cut
62
63 sub new {
64 my $class = shift;
65 my $self = $class->SUPER::new( @_ );
66
67 warn "created ", __PACKAGE__, "(", dump( @_ ), ") object\n" if $self->debug;
68
69 warn "ACS waiting for request on port ", $self->port, "\n";
70
71 $self->debug( 0 ) unless $self->debug;
72 warn "## debug level: ", $self->debug, "\n" if $self->debug;
73
74 $self->server(
75 CWMP::Server::Helper->new({
76 proto => 'tcp',
77 port => $self->port,
78 default_queue => $self->default_queue,
79 store => $self->store,
80 debug => $self->debug,
81 background => $self->background,
82 })
83 );
84
85 return $self;
86 }
87
88 =head2 run
89
90 =cut
91
92 sub run {
93 my $self = shift;
94
95 $self->server->run;
96 }
97
98 package CWMP::Server::Helper;
99
100 use warnings;
101 use strict;
102
103 use base qw/Net::Server/;
104 use Carp qw/confess/;
105 use Data::Dump qw/dump/;
106
107 sub options {
108 my $self = shift;
109 my $prop = $self->{'server'};
110 my $template = shift;
111
112 ### setup options in the parent classes
113 $self->SUPER::options($template);
114
115 # new single-value options
116 foreach my $p ( qw/ store debug / ) {
117 $prop->{ $p } ||= undef;
118 $template->{ $p } = \$prop->{ $p };
119 }
120
121 # new multi-value options
122 foreach my $p ( qw/ default_queue / ) {
123 $prop->{ $p } ||= [];
124 $template->{ $p } = $prop->{ $p };
125 }
126 }
127
128
129 =head2 process_request
130
131 =cut
132
133 sub process_request {
134 my $self = shift;
135
136 my $prop = $self->{server};
137 confess "no server in ", ref( $self ) unless $prop;
138 my $sock = $prop->{client};
139 confess "no sock in ", ref( $self ) unless $sock;
140
141 warn "default CPE queue ( " . join(",",@{$prop->{default_queue}}) . " )\n" if defined($prop->{default_queue});
142
143 eval {
144 my $session = CWMP::Session->new({
145 sock => $sock,
146 queue => $prop->{default_queue},
147 store => $prop->{store},
148 debug => $prop->{debug},
149 }) || confess "can't create session";
150
151 while ( $session->process_request ) {
152 warn "...another one bites the dust...\n";
153 }
154 };
155
156 if ($@) {
157 warn $@;
158 }
159
160 warn "...returning to accepting new connections\n";
161
162 }
163
164 1;

  ViewVC Help
Powered by ViewVC 1.1.26