|
From: Jeroen H. <vex...@gm...> - 2010-02-11 22:00:50
|
Hi,
On Thu, Feb 11, 2010 at 17:50, Dean Michael Berris
<mik...@gm...> wrote:
> On Fri, Feb 12, 2010 at 12:27 AM, Jeroen Habraken <vex...@gm...> wrote:
>> Hi guys,
>>
>> On Thu, Feb 11, 2010 at 15:25, Dean Michael Berris
>> <mik...@gm...> wrote:
>>> I was thinking about this a little and thought it would be cool to
>>> have a collection of utilities of commonly-performed actions that
>>> others might find useful in the library. Off the top of my head I find
>>> that these would be cool functions/mini-libraries to have:
>>
>> This would be very nice indeed. Also, in my opinion, we need a few
>> more code examples as I've generally found them to be a good way to
>> familiarize yourself with a library. Something like a simple HTTP
>> proxy might even fall in both categories, showing off both the client
>> and server side of the library.
>>
>
> Code examples are definitely good to have. I'm a little afraid though
> that we'd ruffle a few feathers if we implemented something like this.
> I've been meaning to do a wicked fast static HTTP server that competes
> with lighttpd/nginx in simplicity and performance. My worry would be
> that it would be a project that would have its own demons. ;)
>
>>
>> The query parser is indeed one of the things currently on the TODO
>> list for the URI part of the library. Design-wise I was thinking of
>> something like:
>>
>> template <class Tag>
>> bool parse_query(basic_uri<Tag> const & uri, typename query_list<Tag>::type &) {
>> // TODO Parse using Spirit
>>
>> return true; // Return whether it was successful.
>> }
>>
>> with
>>
>> template <class Tag>
>> struct query_list {
>> typedef typename string<Tag>::type string_type;
>>
>> typedef typename std::list<std::pair<string_type, string_type> > type;
>> }
>>
>> and something along the same lines for query_map for a std::map. This
>> is off the top of my head, and your thoughts would be very much
>> appreciated. As I've said before, most of the grunt work has already
>> been done by Hartmunt in this brilliant article:
>> http://boost-spirit.com/home/articles/qi-example/parsing-a-list-of-key-value-pairs-using-spirit-qi/
>> thus with some luck this is actually rather easy.
>>
>
> Sure, but it just assumes the "canonical" form of "key=value&foo=bar".
> There's a lot more to query strings than just this form (some use
> different delimeters, instead of &, some use |, there's also list and
> multi-form notation like "form1[field]=value&form2[field]=value" and
> all sorts of funky things). That in itself sounds like a pretty
> useful/powerful set of parsers that would definitely make for an
> interesting project.
I know, and worse, as far as I know there is no official specification
on how this is done. At least, it's not in any RFC that I know, and I
couldn't find anything from W3C either. If I'm wrong, and might well
be, a link to the specs would be very much appreciated.
> Now I'm seriously considering applying for a Google Summer of Code
> thing to get support for the project. :D Maybe after BoostCon and once
> more people get to use the library more. ;)
+1
>> Secondly, I have the basis of a dispatcher I wrote for libevent
>> bindings some time ago, which I've attached. There seem to be a few
>> things which need to be abstracted from though:
>> - The comparison function
>> - The type you're comparing to
>> and quite probably a few more things, as ultimately I'd be very useful
>> if you could stick in boost::starts_with, something from the regex
>> library or from the xpressive library to find a match. If anyone finds
>> this code is of any use for cpp-netlib, I'll stick a boost license on
>> it.
>>
>
> I haven't looked at it yet, but I have a somewhat dormant header-only
> library on SourceForge that does pretty much something similar (It's
> called the Runtime Dynamic Dispatch Library). I'm looking for
> something more flexible though, something that allows me to map a
> boost::regex string that contains sub-groups (or named groups) to a
> function that has the signature: void(request const &, response &).
>
> Does your implementation do roughly that?
>
> I might come up with a simple implementation and place it in
> boost/network/utils -- when I get time to do so that is. ;)
No, my code is trivial in every way (it was written before I learned
most techniques on writing generic code, and it was written
specifically for one application), but it might offer a starting
point.
>>> Any takers? It would be cool if we had these in the library before May
>>> where I will be presenting the library and the techniques used in the
>>> library at a high level. ;)
>>
>> This is where things get tricky, considering I've just got an
>> apartment this month and will be moving, I'm quite limited when it
>> comes to free time unfortunately.
>>
>
> I can understand that completely, having been in that situation
> before. May is still a ways away -- you've got time in between now and
> then. :D
Yeah, it's just that I can't plan anything. I've been thinking about
what I'd like to add to 0.7 etcetera, but this is kind of hard not
knowing how much time I can spend on it.
>>> Hope this helps and I hope to hear from you guys soon too!
>>>
>>
>> Hope this is of any use,
>
> I'll take a look and I encourage others in the list to do the same. :)
>
> --
> Dean Michael Berris
> cplusplus-soup.com | twitter.com/deanberris
> linkedin.com/in/mikhailberis | facebook.com/dean.berris | deanberris.com
>
Jeroen
|