150 |
|
|
151 |
my $response = CWMP::Response->new({ debug => $self->debug }); |
my $response = CWMP::Response->new({ debug => $self->debug }); |
152 |
|
|
153 |
$sock->send(join("", |
$sock->send(join("\r\n", |
154 |
$self->status(200,'OK'), |
'HTTP/1.1 200 OK', |
155 |
$self->content_type('text/xml; charset="utf-8"'), |
'Content-Type: text/xml; charset="utf-8"', |
156 |
"Server: AcmeCWMP/42\r\n", |
'Server: AcmeCWMP/42', |
157 |
"SOAPServer: AcmeCWMP/42\r\n" |
'SOAPServer: AcmeCWMP/42', |
158 |
)); |
)); |
159 |
|
|
160 |
$sock->send( "Set-Cookie: ID=" . $state->{ID} . "; path=/\r\n" ) if ( $state->{ID} ); |
$sock->send( "Set-Cookie: ID=" . $state->{ID} . "; path=/\r\n" ) if ( $state->{ID} ); |
174 |
} |
} |
175 |
|
|
176 |
$sock->send( "Content-Length: " . length( $xml ) . "\r\n\r\n" ); |
$sock->send( "Content-Length: " . length( $xml ) . "\r\n\r\n" ); |
177 |
$sock->send( "$xml\r\n\r\n" ) or die "can't send response"; |
$sock->send( $xml ) or die "can't send response"; |
178 |
|
|
179 |
warn "### request over"; |
warn "### request over"; |
180 |
|
|
207 |
} |
} |
208 |
} |
} |
209 |
|
|
210 |
sub content_type { |
sub error { |
|
my ($self, $type) = @_; |
|
|
$self->http_header; |
|
|
return "Content-type: $type\r\n"; |
|
|
} |
|
|
|
|
|
sub error{ |
|
211 |
my ($self, $number, $msg) = @_; |
my ($self, $number, $msg) = @_; |
212 |
$self->sock->send( $self->status($number, $msg) . "\r\n" ); |
$msg ||= 'ERROR'; |
213 |
|
$self->sock->send( "HTTP/1.1 $number $msg\r\n" ); |
214 |
warn "Error - $number - $msg\n"; |
warn "Error - $number - $msg\n"; |
215 |
} |
} |
216 |
|
|
|
sub status { |
|
|
my ($self, $number, $msg) = @_; |
|
|
$msg = '' if ! defined $msg; |
|
|
return if $self->http_header($number); |
|
|
return "Status $number: $msg\r\n"; |
|
|
} |
|
|
|
|
|
sub http_header { |
|
|
my $self = shift; |
|
|
my $number = shift || 200; |
|
|
return if ! delete $self->{needs_header}; |
|
|
$self->sock->send("HTTP/1.1 $number\r\n"); |
|
|
return 1; |
|
|
} |
|
|
|
|
217 |
1; |
1; |