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