roxen.lists.roxen.general

Subject Author Date
Re: A few new latest bugfixes relative to Roxen 5.0 Jonas Wallden <jonasw[at]roxen[dot]com> 12-01-2009
On 11 jan 2009, at 18.41, Martin Stjernholm wrote:

> I'm cc'ing Jonas on this one, since he in roxen.pike rev 1.1001
> introduced the Standards.URI stuff that started stripping the standard
> port numbers.

True, but to be honest I didn't introduce Standards.URI aside from a  
single place; it was already used in existing code, but not in a way  
that preserved the IPv6 parsing capabilities that I was aiming for.  
I'm fairly sure I recognized the dropping of port numbers for standard  
ports but I may have forgotten to consider the calls in http.pike.

> To recap, what Stephen does in this patch is to use Standards.URI to
> canonicalize the incoming urls in the http protocol, so that they can
> match the Standards.URI-normalized urls registered for the port:
>
> --- a/server/protocols/http.pike
> +++ b/server/protocols/http.pike
> @@ -2516,8 +2516,8 @@ void got_data(mixed fooid, string s, void|int  
> chained)
>
>       if (misc->host) {
>        conf =
> -         port_obj->find_configuration_for_url(port_obj->url_prefix +
> -                                              misc->host + raw_url,
> +         port_obj->find_configuration_for_url(
> +           (string)Standards.URI(port_obj->url_prefix + misc->host  
> + raw_url),
>                                               this_object());
>        if (conf->query("default_server")) {
>          cache_key = port_obj->name+"://"+misc->host+raw_url;
> @@ -2525,7 +2525,8 @@ void got_data(mixed fooid, string s, void|int  
> chained)
>       } else {
>        conf =
>          port_obj->find_configuration_for_url(port_obj->url_prefix +  
> "*:" +
> -                                              port_obj->port +  
> raw_url,
> +           (string)Standards.URI(port_obj->url_prefix +
> +              "*:" + port_obj->port + raw_url),
>                                               this_object());
>       }
>     }
>
> I don't think we want the overhead of fiddling with Standards.URI
> objects there - that code is among the hottest sections in the whole
> server. I think it's better to reinstate the old behavior where the
> port always is included in the urls registered in the Protocol
> objects.
>
> So a partial revert appears necessary, at least in register_url
> (normalize_url is afaik mostly used for viewing, so that one can
> probably continue to strip the standard port). Jonas' fix seems to
> have a wider scope though, so he better speak his mind on this one, in
> case there is an intentional design change to drop the port numbers.


Maybe an option in Standards.URI to coerce to a string form including  
port numbers? Reverting my changes will likely break IPv6 adresses.  
Otherwise dropping the port number when constructing the parameter to  
find_configuration_for_url() could be good enough? I don't know if the  
overhead in Standards.URI is significant or if IPv6 support requires  
it in this particular place anyway.

-- Jonas