Added support for UPSTREAM directive.

Included the basic grammar and handler functions for the "upstream" and
"no upstream" directives.  I still need to update the grammar to match
_all_ the possibilities documented in the tinyproxy.conf file, but at
least it now does as much as the old config parser.
This commit is contained in:
Robert James Kaes 2005-11-04 05:15:47 +00:00
parent 72e1731092
commit 2f5118046d

View File

@ -1,4 +1,4 @@
/* $Id: conffile.c,v 1.8 2005-11-04 01:31:41 rjkaes Exp $
/* $Id: conffile.c,v 1.9 2005-11-04 05:15:47 rjkaes Exp $
*
* Parses the configuration file and sets up the config_s structure for
* use by the application. This file replaces the old grammar.y and
@ -124,11 +124,15 @@ static HANDLE_FUNC(handle_stathost);
static HANDLE_FUNC(handle_syslog);
static HANDLE_FUNC(handle_timeout);
//static HANDLE_FUNC(handle_upstream);
static HANDLE_FUNC(handle_user);
static HANDLE_FUNC(handle_viaproxyname);
static HANDLE_FUNC(handle_xtinyproxy);
#ifdef UPSTREAM_SUPPORT
static HANDLE_FUNC(handle_upstream);
static HANDLE_FUNC(handle_upstream_no);
#endif
/*
* This macro can be used to make standard directives in the form:
* directive arguments [arguments ...]
@ -213,9 +217,11 @@ struct {
STDCONF("reversepath", STR WS "(" STR ")?", handle_reversepath),
#endif
#ifdef UPSTREAM_SUPPORT
/* upstream is rather complicated */
// { BEGIN "no" WS "upstream" WS STR END, handle_no_upstream },
// { BEGIN "upstream" WS IP ":" INT "(" WS STR ")" END, handle_upstream },
{ BEGIN "(no" WS "upstream)" WS STR END, handle_upstream_no },
{ BEGIN "(upstream)" WS "(" IP "|" ALNUM ")" ":" INT "(" WS STR ")?" END, handle_upstream },
#endif
/* loglevel */
STDCONF("loglevel", "(critical|error|warning|notice|connect|info)",
@ -740,3 +746,45 @@ HANDLE_FUNC(handle_reversepath)
return 0;
}
#endif
#ifdef UPSTREAM_SUPPORT
static
HANDLE_FUNC(handle_upstream)
{
char *ip;
int port;
char *domain;
ip = get_string_arg(line, &match[2]);
if (!ip) return -1;
port = get_int_arg(line, &match[7]);
if (match[9].rm_so != -1) {
domain = get_string_arg(line, &match[9]);
if (domain) {
upstream_add(ip, port, domain);
safefree(domain);
}
} else {
upstream_add(ip, port, NULL);
}
safefree(ip);
return 0;
}
static
HANDLE_FUNC(handle_upstream_no)
{
char *domain;
domain = get_string_arg(line, &match[2]);
if (!domain) return -1;
upstream_add(NULL, 0, domain);
safefree(domain);
return 0;
}
#endif