added qse_httpd_dns_server_t and qse_httpd_urs_server_t.
deleted qse_httpd_natr_t. deleted QSE_HTTPD_DNSNOA and QSE_HTTPD_DNSNOAAAA added QSE_HTTPD_DNS_SERVER_A and QSE_HTTPD_DNS_SERVER_AAAA
This commit is contained in:
parent
3fd82c7943
commit
97c528ca1f
@ -195,7 +195,7 @@ struct loccfg_t
|
||||
qse_nwad_t urs_nwad; /* TODO: multiple urs */
|
||||
int dns_timeout;
|
||||
int dns_retries;
|
||||
int dns_query_type;
|
||||
int dns_queries;
|
||||
int urs_timeout;
|
||||
int urs_retries;
|
||||
qse_httpd_mod_t* urs_prerewrite_mod;
|
||||
@ -565,6 +565,7 @@ proxy_ok:
|
||||
root->u.proxy.dns_server.nwad = loccfg->proxy.dns_nwad;
|
||||
root->u.proxy.dns_server.tmout.sec = loccfg->proxy.dns_timeout;
|
||||
root->u.proxy.dns_server.retries = loccfg->proxy.dns_retries;
|
||||
root->u.proxy.dns_server.flags = loccfg->proxy.dns_queries;
|
||||
}
|
||||
|
||||
if (loccfg->proxy.urs_enabled)
|
||||
@ -1001,6 +1002,27 @@ static int get_integer (const qse_xli_str_t* v)
|
||||
return qse_strxtoi (v->ptr, v->len, 10);
|
||||
}
|
||||
|
||||
static int parse_dns_query_types (qse_httpd_t* httpd, const qse_xli_str_t* str)
|
||||
{
|
||||
int flags = 0;
|
||||
|
||||
while (str)
|
||||
{
|
||||
if (qse_strxcasecmp (str->ptr, str->len, QSE_T("a")) == 0) flags |= QSE_HTTPD_DNS_SERVER_A;
|
||||
else if (qse_strxcasecmp (str->ptr, str->len, QSE_T("aaaa")) == 0) flags |= QSE_HTTPD_DNS_SERVER_AAAA;
|
||||
else
|
||||
{
|
||||
qse_printf (QSE_T("ERROR: invalid dns query type for proxy dns - %s\n"), str->ptr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
str = str->next;
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
|
||||
static int load_loccfg_basic (qse_httpd_t* httpd, qse_xli_t* xli, qse_xli_list_t* list, loccfg_t* cfg)
|
||||
{
|
||||
static struct
|
||||
@ -1356,6 +1378,7 @@ static int load_loccfg_access (qse_httpd_t* httpd, qse_xli_t* xli, qse_xli_list_
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int load_loccfg_proxy (qse_httpd_t* httpd, qse_xli_t* xli, qse_xli_list_t* list, loccfg_t* cfg)
|
||||
{
|
||||
qse_xli_pair_t* pair;
|
||||
@ -1435,13 +1458,15 @@ static int load_loccfg_proxy (qse_httpd_t* httpd, qse_xli_t* xli, qse_xli_list_t
|
||||
if (pair) cfg->proxy.dns_retries = get_integer ((qse_xli_str_t*)pair->val);
|
||||
else cfg->proxy.dns_retries = -1;
|
||||
|
||||
#if 0
|
||||
pair = QSE_NULL;
|
||||
if (proxy) pair = qse_xli_findpair (xli, proxy, QSE_T("dns-query-type"));
|
||||
if (!pair && default_proxy) pair = qse_xli_findpair (xli, default_proxy, QSE_T("dns-query-type"));
|
||||
if (pair) cfg->proxy.dns_retries = parse_dns_query_type ((qse_xli_str_t*)pair->val);
|
||||
else cfg->proxy.dns_flag
|
||||
#endif
|
||||
if (proxy) pair = qse_xli_findpair (xli, proxy, QSE_T("dns-queries"));
|
||||
if (!pair && default_proxy) pair = qse_xli_findpair (xli, default_proxy, QSE_T("dns-queries"));
|
||||
if (pair)
|
||||
{
|
||||
cfg->proxy.dns_queries = parse_dns_query_types (httpd, (qse_xli_str_t*)pair->val);
|
||||
if (cfg->proxy.dns_queries <= -1) return -1;
|
||||
}
|
||||
else cfg->proxy.dns_queries = QSE_HTTPD_DNS_SERVER_A | QSE_HTTPD_DNS_SERVER_AAAA;
|
||||
|
||||
pair = QSE_NULL;
|
||||
if (proxy) pair = qse_xli_findpair (xli, proxy, QSE_T("urs-enabled"));
|
||||
@ -1855,6 +1880,7 @@ static int open_config_file (qse_httpd_t* httpd)
|
||||
{ QSE_T("server-default.proxy.dns-server"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 1, 1 } },
|
||||
{ QSE_T("server-default.proxy.dns-timeout"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 1, 1 } },
|
||||
{ QSE_T("server-default.proxy.dns-retries"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 1, 1 } },
|
||||
{ QSE_T("server-default.proxy.dns-queries"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 0, 0xFFFF } },
|
||||
{ QSE_T("server-default.proxy.urs-enabled"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 1, 1 } },
|
||||
{ QSE_T("server-default.proxy.urs-server"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 1, 1 } },
|
||||
{ QSE_T("server-default.proxy.urs-timeout"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 1, 1 } },
|
||||
@ -1908,6 +1934,7 @@ static int open_config_file (qse_httpd_t* httpd)
|
||||
{ QSE_T("server.host.location.proxy.dns-server"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 1, 1 } },
|
||||
{ QSE_T("server.host.location.proxy.dns-timeout"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 1, 1 } },
|
||||
{ QSE_T("server.host.location.proxy.dns-retries"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 1, 1 } },
|
||||
{ QSE_T("server.host.location.proxy.dns-queries"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 0, 0xFFFF } },
|
||||
{ QSE_T("server.host.location.proxy.urs-enabled"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 1, 1 } },
|
||||
{ QSE_T("server.host.location.proxy.urs-server"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 1, 1 } },
|
||||
{ QSE_T("server.host.location.proxy.urs-timeout"), { QSE_XLI_SCM_VALSTR | QSE_XLI_SCM_KEYNODUP, 1, 1 } },
|
||||
@ -2383,7 +2410,7 @@ static int httpd_main (int argc, qse_char_t* argv[])
|
||||
setup_signal_handlers ();
|
||||
|
||||
qse_httpd_getopt (httpd, QSE_HTTPD_TRAIT, &trait);
|
||||
trait |= QSE_HTTPD_CGIERRTONUL | QSE_HTTPD_LOGACT | QSE_HTTPD_DNSNOAAAA; /* TODO: make NOAAAA configurable */
|
||||
trait |= QSE_HTTPD_CGIERRTONUL | QSE_HTTPD_LOGACT;
|
||||
qse_httpd_setopt (httpd, QSE_HTTPD_TRAIT, &trait);
|
||||
|
||||
tmout.sec = 10;
|
||||
|
@ -143,7 +143,7 @@ server-default {
|
||||
#dns-server = "[::1]:53";
|
||||
#dns-timeout = 3
|
||||
#dns-retries = 2
|
||||
dns-query-type = a, aaaa;
|
||||
dns-queries = a, aaaa;
|
||||
|
||||
#urs-enabled = yes; # no, yes,
|
||||
#urs-server = "127.0.0.1:97";
|
||||
|
@ -83,9 +83,7 @@ enum qse_httpd_trait_t
|
||||
QSE_HTTPD_CGINOCLOEXEC = (1 << 2),
|
||||
QSE_HTTPD_CGINOCHUNKED = (1 << 3),
|
||||
QSE_HTTPD_PROXYNOVIA = (1 << 4),
|
||||
QSE_HTTPD_LOGACT = (1 << 5),
|
||||
QSE_HTTPD_DNSNOA = (1 << 6),
|
||||
QSE_HTTPD_DNSNOAAAA = (1 << 7)
|
||||
QSE_HTTPD_LOGACT = (1 << 5)
|
||||
};
|
||||
typedef enum qse_httpd_trait_t qse_httpd_trait_t;
|
||||
|
||||
@ -168,15 +166,36 @@ struct qse_httpd_dirent_t
|
||||
qse_httpd_stat_t stat;
|
||||
};
|
||||
|
||||
typedef struct qse_httpd_natr_t qse_httpd_natr_t;
|
||||
|
||||
struct qse_httpd_natr_t
|
||||
/* -------------------------------------------------------------------------- */
|
||||
enum qse_httpd_dns_server_flag_t
|
||||
{
|
||||
QSE_HTTPD_DNS_SERVER_A = (1 << 0), /* send A query */
|
||||
QSE_HTTPD_DNS_SERVER_AAAA = (1 << 1) /* send AAAA query */
|
||||
};
|
||||
|
||||
typedef enum qse_httpd_dns_server_flag_t qse_httpd_dns_server_flag_t;
|
||||
|
||||
|
||||
typedef struct qse_httpd_dns_server_t qse_httpd_dns_server_t;
|
||||
struct qse_httpd_dns_server_t
|
||||
{
|
||||
qse_nwad_t nwad;
|
||||
qse_ntime_t tmout;
|
||||
int retries;
|
||||
int flags; /* bitwise-ORed of qse_httpd_dns_server_flag_t enumerators */
|
||||
};
|
||||
|
||||
typedef struct qse_httpd_urs_server_t qse_httpd_urs_server_t;
|
||||
struct qse_httpd_urs_server_t
|
||||
{
|
||||
qse_nwad_t nwad;
|
||||
qse_ntime_t tmout;
|
||||
int retries;
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
typedef void (*qse_httpd_resol_t) (
|
||||
qse_httpd_t* httpd,
|
||||
const qse_mchar_t* name,
|
||||
@ -213,12 +232,12 @@ typedef int (*qse_httpd_urs_recv_t) (
|
||||
);
|
||||
|
||||
typedef int (*qse_httpd_urs_send_t) (
|
||||
qse_httpd_t* httpd,
|
||||
qse_httpd_urs_t* urs,
|
||||
const qse_mchar_t* url,
|
||||
qse_httpd_rewrite_t rewrite,
|
||||
const qse_httpd_natr_t* urs_server,
|
||||
void* ctx
|
||||
qse_httpd_t* httpd,
|
||||
qse_httpd_urs_t* urs,
|
||||
const qse_mchar_t* url,
|
||||
qse_httpd_rewrite_t rewrite,
|
||||
const qse_httpd_urs_server_t* urs_server,
|
||||
void* ctx
|
||||
);
|
||||
|
||||
/* Success is indicated by a positive return value including 0.
|
||||
@ -371,7 +390,7 @@ struct qse_httpd_scb_t
|
||||
int (*recv) (qse_httpd_t* httpd, qse_httpd_dns_t* dns, qse_ubi_t handle);
|
||||
int (*send) (qse_httpd_t* httpd, qse_httpd_dns_t* dns,
|
||||
const qse_mchar_t* name, qse_httpd_resol_t resol,
|
||||
const qse_httpd_natr_t* dns_server, void* ctx);
|
||||
const qse_httpd_dns_server_t* dns_server, void* ctx);
|
||||
} dns;
|
||||
|
||||
struct
|
||||
@ -716,8 +735,8 @@ struct qse_httpd_rsrc_proxy_t
|
||||
const qse_mchar_t* str;
|
||||
} dst; /* remote destination address to connect to */
|
||||
|
||||
qse_httpd_natr_t dns_server;
|
||||
qse_httpd_natr_t urs_server;
|
||||
qse_httpd_dns_server_t dns_server;
|
||||
qse_httpd_urs_server_t urs_server;
|
||||
qse_httpd_mod_t* urs_prerewrite_mod;
|
||||
|
||||
/* optional pseudonym to use for Via: */
|
||||
@ -1147,22 +1166,21 @@ QSE_EXPORT qse_mchar_t* qse_httpd_escapehtml (
|
||||
);
|
||||
|
||||
QSE_EXPORT int qse_httpd_resolname (
|
||||
qse_httpd_t* httpd,
|
||||
const qse_mchar_t* name,
|
||||
qse_httpd_resol_t resol,
|
||||
const qse_httpd_natr_t* dns_server,
|
||||
void* ctx
|
||||
qse_httpd_t* httpd,
|
||||
const qse_mchar_t* name,
|
||||
qse_httpd_resol_t resol,
|
||||
const qse_httpd_dns_server_t* dns_server,
|
||||
void* ctx
|
||||
);
|
||||
|
||||
QSE_EXPORT int qse_httpd_rewriteurl (
|
||||
qse_httpd_t* httpd,
|
||||
const qse_mchar_t* url,
|
||||
qse_httpd_rewrite_t rewrite,
|
||||
const qse_httpd_natr_t* urs_server,
|
||||
void* ctx
|
||||
qse_httpd_t* httpd,
|
||||
const qse_mchar_t* url,
|
||||
qse_httpd_rewrite_t rewrite,
|
||||
const qse_httpd_urs_server_t* urs_server,
|
||||
void* ctx
|
||||
);
|
||||
|
||||
|
||||
QSE_EXPORT int qse_httpd_loadmod (
|
||||
qse_httpd_t* httpd,
|
||||
const qse_char_t* name
|
||||
|
@ -67,8 +67,8 @@ struct task_proxy_t
|
||||
qse_size_t qpath_pos_in_reqfwdbuf; /* position where qpath begins */
|
||||
qse_size_t qpath_len_in_reqfwdbuf; /* length of qpath + qparams */
|
||||
|
||||
qse_httpd_natr_t dns_server;
|
||||
qse_httpd_natr_t urs_server;
|
||||
qse_httpd_dns_server_t dns_server;
|
||||
qse_httpd_urs_server_t urs_server;
|
||||
qse_mchar_t* pseudonym;
|
||||
qse_htrd_t* peer_htrd;
|
||||
|
||||
|
@ -795,7 +795,7 @@ printf (">>tmr_dns_tmout_handle req->>%p\n", req);
|
||||
dc->req_count--;
|
||||
}
|
||||
|
||||
static int dns_send (qse_httpd_t* httpd, qse_httpd_dns_t* dns, const qse_mchar_t* name, qse_httpd_resol_t resol, const qse_httpd_natr_t* dns_server, void* ctx)
|
||||
static int dns_send (qse_httpd_t* httpd, qse_httpd_dns_t* dns, const qse_mchar_t* name, qse_httpd_resol_t resol, const qse_httpd_dns_server_t* dns_server, void* ctx)
|
||||
{
|
||||
dns_ctx_t* dc = (dns_ctx_t*)dns->ctx;
|
||||
httpd_xtn_t* httpd_xtn;
|
||||
@ -857,12 +857,13 @@ printf ("DNS REALLY SENING>>>>>>>>>>>>>>>>>>>>>>>\n");
|
||||
req->resol = resol;
|
||||
req->ctx = ctx;
|
||||
|
||||
if (!(httpd->opt.trait & QSE_HTTPD_DNSNOA))
|
||||
|
||||
if (dns_server->flags & QSE_HTTPD_DNS_SERVER_A)
|
||||
req->qalen = init_dns_query (req->qa, QSE_SIZEOF(req->qa), name, DNS_QTYPE_A, req->seqa);
|
||||
else
|
||||
req->flags |= DNS_REQ_A_NX;
|
||||
|
||||
if (!(httpd->opt.trait & QSE_HTTPD_DNSNOAAAA))
|
||||
if (dns_server->flags & QSE_HTTPD_DNS_SERVER_AAAA)
|
||||
req->qaaaalen = init_dns_query (req->qaaaa, QSE_SIZEOF(req->qaaaa), name, DNS_QTYPE_AAAA, req->seqaaaa);
|
||||
else
|
||||
req->flags |= DNS_REQ_AAAA_NX;
|
||||
|
@ -348,7 +348,7 @@ printf ("urs timed out....\n");
|
||||
dc->req_count--;
|
||||
}
|
||||
|
||||
static int urs_send (qse_httpd_t* httpd, qse_httpd_urs_t* urs, const qse_mchar_t* url, qse_httpd_rewrite_t rewrite, const qse_httpd_natr_t* urs_server, void* ctx)
|
||||
static int urs_send (qse_httpd_t* httpd, qse_httpd_urs_t* urs, const qse_mchar_t* url, qse_httpd_rewrite_t rewrite, const qse_httpd_urs_server_t* urs_server, void* ctx)
|
||||
{
|
||||
urs_ctx_t* dc = (urs_ctx_t*)urs->ctx;
|
||||
httpd_xtn_t* httpd_xtn;
|
||||
|
@ -1831,11 +1831,8 @@ qse_mchar_t* qse_httpd_escapehtml (qse_httpd_t* httpd, const qse_mchar_t* str)
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
int qse_httpd_resolname (qse_httpd_t* httpd, const qse_mchar_t* name, qse_httpd_resol_t resol, const qse_httpd_natr_t* dns_server, void* ctx)
|
||||
int qse_httpd_resolname (qse_httpd_t* httpd, const qse_mchar_t* name, qse_httpd_resol_t resol, const qse_httpd_dns_server_t* dns_server, void* ctx)
|
||||
{
|
||||
/* TODO: find the name in cache */
|
||||
|
||||
/* not found in the cache */
|
||||
printf ("DNS_SEND.........................\n");
|
||||
if (!httpd->dnsactive)
|
||||
{
|
||||
@ -1847,7 +1844,7 @@ printf ("DNS_SEND.........................\n");
|
||||
return httpd->opt.scb.dns.send (httpd, &httpd->dns, name, resol, dns_server, ctx);
|
||||
}
|
||||
|
||||
int qse_httpd_rewriteurl (qse_httpd_t* httpd, const qse_mchar_t* url, qse_httpd_rewrite_t rewrite, const qse_httpd_natr_t* urs_server, void* ctx)
|
||||
int qse_httpd_rewriteurl (qse_httpd_t* httpd, const qse_mchar_t* url, qse_httpd_rewrite_t rewrite, const qse_httpd_urs_server_t* urs_server, void* ctx)
|
||||
{
|
||||
if (!httpd->ursactive)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user