On Mon, 14 Mar 2011 10:46:21 -0600, Alex Rousskov wrote:
> On 03/14/2011 10:05 AM, Kinkie wrote:
>>> You could handle encodings in the low-level value parser as well if
>>> you
>>> make them explicit:
>>>
>>> name="string with some documented quoting rules"
>>> name=base64:base64encodedvalue
>>> name=rawvalueterminatedbythefirstwhitespace
>>>
>>> The latter assumes no raw value can start with "base64:". Other
>>> quoting/encoding mechanisms are possible, of course.
>>
>> Why put that in the message, if we can do it in the label, and avoid
>> all quoting issues altogether?
>
> Not sure what you mean by "label", but it is easier to write parsers
> and
> extend functionality when parsers and packers do not rely on name
> semantics to properly handle the message.
>
> If you meant moving value "base64:" prefix to the "name" suffix, that
> is
> possible, of course, but keeping the encoding of the value closer to
> the
> value itself is more "natural", and it would be a little easier to
> write
> value encoders that way, IMO. I do agree that using name suffix will
> help avoid encoding specs/value clashes.
I did't really want it to get that complicated just yet. Once the
receiving parsers in squid are unified they can be extended to do all
this. FWIW there is base-64, RFC-1738, shell, quoted, raw binary and
two-way crypto encodings which ALL might appear here.
>
>>>> The parameter message= is added with a quoted string value to
>>>> allow
>>>> other parameters on the same result line when an error
>>>> reason/message is
>>>> sent back.
>>>>
>>>> The parameter user= is added to hold the username whenever
>>>> relevant for
>>>> any reply.
>>>>
>>>> Other parameters are on the planning board for addition after the
>>>> changes. So far I have: ttl= for setting a desired
>>>> credentials-TTL,
>>>> group= for associating a group name with the user=, tag= extended
>>>> from
>>>> external ACL to auth.
>>>>
>>>>
>>>> Opinions? problems? other ideas?
>>>
>>> I do not know much about existing helpers, but I would recommend
>>> using
>>> the same set of basic syntax rules for _all_ messages:
Agreed. That was the plan. My description for the semantics of several
name= tokens has no bearing on the underlying receiver parser. That is
purely semantics in the end helper and handling components.
The line receiver only needs to care if:
* is it "" around something containing whitespaces?
* is it a single series of bytes with guaranteed no space characters?
There is no low-level differential between token=<base-64_blob> and
user=<username>
There is between message="raw text with possible binary" and
message=<base-64 encoded blob>
>>>
>>> <responsecodeterminatedbywhitespace> [name=value]*
>>> where the value syntax is as discussed above. This approach would
>>> make
>>> writing a general response-buffer-to-response-structure parser easy
>>> and
>>> simplify addition of new fields or extensions.
>>
>> I agree, with a proposed modification (pseudo-regex syntax):
>>
>> <responsecodeterminatedbywhitespace> (name(:enc)?=value " ")*
>>
>> Where :enc, if specified may be ":b" (base64-encode), further codes
>> to
>> be added as needed. As a separator we could use something different
>> from space to further reduce the risk of clashes.
I like. Though this does make the low-level user-facing parts a bit
more complicated.
Amos
Received on Mon Mar 14 2011 - 22:22:45 MDT
This archive was generated by hypermail 2.2.0 : Tue Mar 15 2011 - 12:00:03 MDT