# File lib/puppet/network/xmlrpc/webrick_servlet.rb, line 42
42:     def service(request, response)
43:       if @valid_ip
44:         raise WEBrick::HTTPStatus::Forbidden unless @valid_ip.any? { |ip| request.peeraddr[3] =~ ip }
45:       end
46: 
47:       if request.request_method != "POST"
48:         raise WEBrick::HTTPStatus::MethodNotAllowed,
49:           "unsupported method `#{request.request_method}'."
50:       end
51: 
52:       raise WEBrick::HTTPStatus::BadRequest if parse_content_type(request['Content-type']).first != "text/xml"
53: 
54:       length = (request['Content-length'] || 0).to_i
55: 
56:       raise WEBrick::HTTPStatus::LengthRequired unless length > 0
57: 
58:       data = request.body
59: 
60:       raise WEBrick::HTTPStatus::BadRequest if data.nil? or data.size != length
61: 
62:       resp = process(data, client_request(request))
63:       raise WEBrick::HTTPStatus::InternalServerError if resp.nil? or resp.size <= 0
64: 
65:       response.status = 200
66:       response['Content-Length'] = resp.size
67:       response['Content-Type']   = "text/xml; charset=utf-8"
68:       response.body = resp
69:     end