///|
fn url_proxy_query_byte_is_safe(byte : Byte) -> Bool {
let value = byte.to_int()
(value >= 0x41 && value <= 0x5A) ||
(value >= 0x61 && value <= 0x7A) ||
(value >= 0x30 && value <= 0x39) ||
value == 0x2D ||
value == 0x2E ||
value == 0x5F ||
value == 0x7E
}
///|
fn percent_encode_url_proxy_param(value : StringView) -> String {
let bytes = @utf8.encode(value)
let out = StringBuilder::new(size_hint=bytes.length())
for index in 0.. UrlProxy? {
match rule.proxy {
Some(proxy) => Some(proxy)
None => self.proxy
}
}
///|
fn proxy_url_value(proxy : UrlProxy, value : String) -> String? {
if proxy.url == "" {
None
} else {
let sep = if string_view_contains(proxy.url, "?") { "&" } else { "?" }
Some(
proxy.url +
sep +
proxy.param +
"=" +
percent_encode_url_proxy_param(value),
)
}
}
///|
fn apply_url_handling(
policy : UrlPolicy,
rule : UrlRule,
handling : UrlHandling,
value : String,
) -> String? {
match handling {
UrlAllow => Some(value)
UrlStrip => None
UrlProxy =>
match policy.effective_proxy(rule) {
Some(proxy) => proxy_url_value(proxy, value)
None => None
}
}
}