7 use base qw/Class::Accessor/;
8 __PACKAGE__->mk_accessors( qw/debug/ );
12 use Data::Dump qw/dump/;
16 CWMP::Methods - generate SOAP meesages for CPE
22 my $method = CWMP::Methods->new({ debug => 1 });
28 my $self = $class->SUPER::new( @_ );
30 warn "created XML::Generator object\n" if $self->debug;
37 Used to implement methods which modify just body of soap message.
38 For examples, see source of this module.
42 my $cwmp = [ cwmp => 'urn:dslforum-org:cwmp-1-0' ];
43 my $soap = [ soap => 'http://schemas.xmlsoap.org/soap/envelope/' ];
44 my $xsd = [ xsd => 'http://www.w3.org/2001/XMLSchema-instance' ];
49 my ( $state, $closure ) = @_;
51 confess "no state?" unless ($state);
52 confess "no body closure" unless ( $closure );
54 #warn "state used to generate xml = ", dump( $state ) if $self->debug;
56 my $X = XML::Generator->new(':pretty');
59 push( @header, $X->ID( $cwmp, { mustUnderstand => 1 }, $state->{ID} )) if $state->{ID};
60 push( @header, $X->NoMoreRequests( $cwmp, $state->{NoMoreRequests} || 0 ));
62 return $X->Envelope( $soap, { 'soap:encodingStyle' => "http://schemas.xmlsoap.org/soap/encoding/" },
63 $X->Header( $soap, @header ),
64 $X->Body( $soap, $closure->( $X, $state ) ),
72 $method->GetRPCMethods( $state );
77 my ( $self, $state ) = @_;
78 $self->xml( $state, sub {
79 my ( $X, $state ) = @_;
80 $X->GetRPCMethods( $cwmp, '' );
84 =head2 SetParameterValues
86 $method->SetParameterValues( $state, {
92 It doesn't support base64 encoding of values yet.
94 To preserve data, it does support repeatable parametar names.
95 Behaviour on this is not defined in protocol.
99 sub SetParameterValues {
103 confess "SetParameterValues needs parameters" unless @_;
105 my $params = shift || return;
107 warn "# SetParameterValues = ", dump( $params ), "\n" if $self->debug;
109 $self->xml( $state, sub {
110 my ( $X, $state ) = @_;
112 $X->SetParameterValues( $cwmp,
113 $X->ParameterList( [],
115 $X->ParameterValueStruct( [],
117 $X->Value( [], $params->{$_} )
121 $X->ParameterKey( '' ),
127 =head2 GetParameterValues
129 $method->GetParameterValues( $state, [ 'ParameterName', ... ] );
135 confess "array_mandatory(",dump($v),") isn't ARRAY" unless ref($v) eq 'ARRAY';
139 sub GetParameterValues {
142 my @ParameterNames = _array_param(shift);
143 warn "# GetParameterValues", dump( @ParameterNames ), "\n" if $self->debug;
145 $self->xml( $state, sub {
146 my ( $X, $state ) = @_;
148 $X->GetParameterValues( $cwmp,
149 $X->ParameterNames( $cwmp,
151 $X->string( $xsd, $_ )
158 =head2 GetParameterNames
160 $method->GetParameterNames( $state, [ $ParameterPath, $NextLevel ] );
164 sub GetParameterNames {
165 my ( $self, $state, $param ) = @_;
167 my ( $ParameterPath, $NextLevel ) = _array_param( $param );
168 $ParameterPath ||= '';
170 warn "# GetParameterNames( '$ParameterPath', $NextLevel )\n" if $self->debug;
171 $self->xml( $state, sub {
172 my ( $X, $state ) = @_;
174 $X->GetParameterNames( $cwmp,
175 $X->ParameterPath( $cwmp, $ParameterPath ),
176 $X->NextLevel( $cwmp, $NextLevel ),
181 =head2 GetParameterAttributes
183 $method->GetParameterAttributes( $state, [ $ParametarNames, ... ] );
187 sub GetParameterAttributes {
188 my ( $self, $state, $param ) = @_;
189 my @ParameterNames = _array_param($param);
191 warn "# GetParameterAttributes", dump( @ParameterNames ), "\n" if $self->debug;
193 $self->xml( $state, sub {
194 my ( $X, $state ) = @_;
196 $X->GetParameterAttributes( $cwmp,
197 $X->ParameterNames( $cwmp,
199 $X->string( $xsd, $_ )
208 $method->Reboot( $state );
213 my ( $self, $state ) = @_;
214 $self->xml( $state, sub {
215 my ( $X, $state ) = @_;
222 $method->FactoryReset( $state );
227 my ( $self, $state ) = @_;
228 $self->xml( $state, sub {
229 my ( $X, $state ) = @_;
235 =head1 Server methods
238 =head2 InformResponse
240 $method->InformResponse( $state );
245 my ( $self, $state ) = @_;
246 $self->xml( $state, sub {
247 my ( $X, $state ) = @_;
248 $X->InformResponse( $cwmp,
249 $X->MaxEnvelopes( $cwmp, 1 )
256 All other methods are unimplemented.