Re: [RFC] helper API

From: Alex Rousskov <rousskov_at_measurement-factory.com>
Date: Thu, 16 Sep 2010 16:18:23 -0600

On 09/16/2010 02:46 AM, Amos Jeffries wrote:
> After the helper C++ build migration we have a partial API for the
> helper tools. Some of them even make use of the #defined macros.
>
> I managed to bungle and put the old-style debug() definition for helpers
> into the libcompat. It's now clear that this would be better suited in
> the API for helpers and non-squid tools.
>
>
> What I'm looking at right now for the helpers is:
> * some wrapper for main() that calls out to user functions for handling
> a line received and processing command line options.
> * some definition of the user functions required to do the above.

If I understand what a helper is, and helper API should not wrap main or
standardize command line options processing. Main should be left for the
helper to control and there are probably enough libraries out there for
options parsing.

We can standardize a subset of common command line options, of course.

If you want to offer a helper development framework with such things as
built-in I/O and reconfiguration handling, then things change. You may
indeed take main() ownership and just leave some places for users to
plug their code into. I would not classify that as API though because it
restricts the implementation way beyond a common API needs.

And if we are doing a framework, we can remove current limitations
related to handling helper's standard input/output. We can just use
sockets...

> * some macros (as now) for performing OK/ERR etc feedback to squid.
> These take a char* parameter for additional key-pairs or messages.

By "performing feedback", do you mean actually writing bytes to the
stdout stream? Or just formatting the output for the helper to write. Do
you want to support helpers that want to manage I/O on their own? Do you
want to support embedded low-overhead helpers, eCAP-style?

> * the debug() call doing printf-style output as now but with automatic
> prefixing of helper name and PID (matching the kidN for cache.log)

Printf() is far from ideal for C++ helpers. I do not know whether we
have or expect any though.

> * standardizing the -d (debug on) and -h (help) parameters for all
> helpers compiled.

> Does anyone have any advice about good ways to make a formal public API
> that the existing bundled helpers, and potentially third-parties could
> use when building C/C++ helpers for Squid?
>
> ie things that must be one for versioning alterations over time.

I would start with defining what a helper is, and what you want to
provide helper authors/code with: A simple API/library their programs
would use, a framework where they can just plugin their custom stuff and
that would do I/O and process management for them, eCAP-like integration
API for embedded helpers, something else? You probably know all these
answers, but they are not obvious to some of us :-).

> Can we do it without a built library? ie only inlines, templates and
> macros?

Yes, most likely, especially if you just want a simple API. Boost
manages to do a lot with just headers. Doing a good API for both C and
C++ helpers may be impossible though. You will probably need to focus on
one and then optionally provide a wrapper for another.

HTH,

Alex.
Received on Thu Sep 16 2010 - 22:18:49 MDT

This archive was generated by hypermail 2.2.0 : Fri Sep 17 2010 - 12:00:06 MDT