[PATCH 1/4] base/query_handler: Implement a simple help handler

Andreas Ericsson ae at op5.se
Wed Nov 28 13:21:24 CET 2012


On 11/27/2012 05:41 PM, robin.sonefors at op5.com wrote:
> From: Robin Sonefors <robin.sonefors at op5.com>
> 
> Because the query handlers are plentiful and nifty, they're something I
> should be using, but because I'm bad at remembering things and tired of
> reading the source to find out how things work, I need help.
> 
> The way I can think of to get help is to try to exercise peer pressure
> on whoever writes the query handler, by telling users that there should
> be a help text, and then giving them errors error messages when the
> query handler doesn't have any help text.
> 
> The protocol I've invented for asking for help text is the "--help"
> command to the query handler - a fairly universal convention in
> unixland, and also unlikely to clash with something else.
> 

Good idea. Thanks. And thanks for submitting such exemplary patches.

> Signed-off-by: Robin Sonefors <robin.sonefors at op5.com>
> ---
>   base/query-handler.c | 28 ++++++++++++++++++++++++++++
>   1 file changed, 28 insertions(+)
> 
> diff --git a/base/query-handler.c b/base/query-handler.c
> index 8d3cfe3..f9c0604 100644
> --- a/base/query-handler.c
> +++ b/base/query-handler.c
> @@ -257,6 +257,31 @@ void qh_deinit(const char *path)
>   	unlink(path);
>   }
>   
> +static int qh_help(int sd, char *buf, unsigned int len)
> +{
> +	struct query_handler *qh;
> +	if (!strcmp(buf, "list")) {
> +		int i = 0;
> +		for (qh = qhandlers; qh; qh = qh->next_qh) {
> +			nsock_printf(sd, "%s\n", qh->name);
> +		}
> +		nsock_printf(sd, 0);
> +		return 0;
> +	}
> +	if ((qh = qh_find_handler(buf)) != FALSE) {
> +		int res = qh->handler(sd, "--help", 6);
> +		if (res > 200) {
> +			nsock_printf_nul(sd, "The handler %s doesn't have any help yet.", buf);
> +		}
> +		return 0;
> +	}
> +
> +	nsock_printf_nul(sd, "This is the help query handler.\n"
> +		"Try \"#help list\" to see all registered handlers, or\n"
> +		"\"#help <handler>\" to get help on a specific handler.");
> +	return 0;
> +}
> +
>   static int qh_core(int sd, char *buf, unsigned int len)
>   {
>   	char *space;
> @@ -342,5 +367,8 @@ int qh_init(const char *path)
>   	if(!qh_register_handler("core", 0, qh_core))
>   		logit(NSLOG_INFO_MESSAGE, FALSE, "qh: core query handler registered\n");
>   
> +	if(!qh_register_handler("help", 0, qh_help))
> +		logit(NSLOG_INFO_MESSAGE, FALSE, "qh: help query handler registered\n");
> +
>   	return 0;
>   }
> 


-- 
Andreas Ericsson                   andreas.ericsson at op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

Considering the successes of the wars on alcohol, poverty, drugs and
terror, I think we should give some serious thought to declaring war
on peace.

------------------------------------------------------------------------------
Keep yourself connected to Go Parallel: 
INSIGHTS What's next for parallel hardware, programming and related areas?
Interviews and blogs by thought leaders keep you ahead of the curve.
http://goparallel.sourceforge.net




More information about the Developers mailing list