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