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