prior to refactoring for WSF_ROUTED_SKELETON_SERVICE
This commit is contained in:
76
library/server/wsf/router/wsf_proxy_use_policy.e
Normal file
76
library/server/wsf/router/wsf_proxy_use_policy.e
Normal file
@@ -0,0 +1,76 @@
|
||||
note
|
||||
|
||||
description: "[
|
||||
Policies that determine if the client must use a proxy server
|
||||
to access the resource.
|
||||
|
||||
The default policy implemented here is to require
|
||||
use of the proxy for HTTP/1.0 clients (only) for all requests.
|
||||
]"
|
||||
|
||||
date: "$Date$"
|
||||
revision: "$Revision$"
|
||||
|
||||
deferred class WSF_PROXY_USE_POLICY
|
||||
|
||||
feature -- Access
|
||||
|
||||
requires_proxy (req: WSF_REQUEST): BOOLEAN
|
||||
-- Does `req' require use of `proxy_server'?
|
||||
require
|
||||
req_attached: req /= Void
|
||||
do
|
||||
if is_http_1_0 (req) then
|
||||
Result := True
|
||||
end
|
||||
end
|
||||
|
||||
proxy_server (req: WSF_REQUEST): READABLE_STRING_8 -- We can't currently use UT_URI
|
||||
-- Absolute URI of proxy server which `req' must use
|
||||
--| An alternative design would allow a relative URI (relative to the server host),
|
||||
--| which will only work if both the server and the proxy use the default ports.
|
||||
require
|
||||
req_attached: req /= Void
|
||||
proxy_required: requires_proxy (req)
|
||||
deferred
|
||||
ensure
|
||||
absolute_uri: True -- We can't currently use UT_URI to check this. Have we got another class?
|
||||
end
|
||||
|
||||
is_http_1_0 (req: WSF_REQUEST): BOOLEAN
|
||||
-- Does `req' come from an HTTP/1.0 client?
|
||||
require
|
||||
req_attached: req /= Void
|
||||
local
|
||||
l_protocol: READABLE_STRING_8
|
||||
l_tokens: LIST [READABLE_STRING_8]
|
||||
l_protocol_name, l_protocol_version, l_major, l_minor: STRING_8
|
||||
do
|
||||
l_protocol := req.server_protocol
|
||||
l_tokens := l_protocol.split ('/')
|
||||
if l_tokens.count = 2 then
|
||||
l_protocol_name := l_tokens [1].as_string_8
|
||||
l_protocol_name.left_adjust
|
||||
l_protocol_name.right_adjust
|
||||
if l_protocol_name.is_case_insensitive_equal ({HTTP_CONSTANTS}.http_version_1_0.substring (1, 4)) then
|
||||
l_protocol_version := l_tokens [2].as_string_8
|
||||
l_protocol_version.left_adjust
|
||||
l_protocol_version.right_adjust
|
||||
l_tokens := l_protocol_version.split ('.')
|
||||
if l_tokens.count = 2 then
|
||||
l_major := l_tokens [1].as_string_8
|
||||
l_major.left_adjust
|
||||
l_major.right_adjust
|
||||
l_minor := l_tokens [2].as_string_8
|
||||
l_minor.left_adjust
|
||||
l_minor.right_adjust
|
||||
if l_major.is_integer and then l_major.to_integer = 1 and then
|
||||
l_minor.is_integer and then l_minor.to_integer = 0 then
|
||||
Result := True
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user