added QSE_HTTPD_SERVERSTD_PSEUDONYM
This commit is contained in:
@ -51,6 +51,7 @@ struct task_proxy_t
|
||||
int keepalive; /* taken from the request */
|
||||
int raw;
|
||||
|
||||
qse_mchar_t* pseudonym;
|
||||
qse_htrd_t* peer_htrd;
|
||||
|
||||
qse_mchar_t* peer_name;
|
||||
@ -180,16 +181,26 @@ static int proxy_capture_peer_header (qse_htre_t* req, const qse_mchar_t* key, c
|
||||
if (qse_mbscasecmp (key, QSE_MT("Via")) == 0)
|
||||
{
|
||||
qse_mchar_t extra[128];
|
||||
const qse_mchar_t* pseudonym;
|
||||
|
||||
proxy->flags |= PROXY_VIA_RETURNING;
|
||||
qse_nwadtombs (&proxy->client->local_addr, extra, QSE_COUNTOF(extra), QSE_NWADTOMBS_ALL);
|
||||
|
||||
if (proxy->pseudonym[0])
|
||||
{
|
||||
pseudonym = proxy->pseudonym;
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_nwadtombs (&proxy->client->local_addr, extra, QSE_COUNTOF(extra), QSE_NWADTOMBS_ALL);
|
||||
pseudonym = extra;
|
||||
}
|
||||
|
||||
return proxy_add_header_to_buffer_with_extra_data (
|
||||
proxy, proxy->res, key, val,
|
||||
QSE_MT(", %d.%d %hs (%hs)"),
|
||||
(int)proxy->version.major,
|
||||
(int)proxy->version.minor,
|
||||
extra,
|
||||
pseudonym,
|
||||
qse_httpd_getname(proxy->httpd));
|
||||
}
|
||||
}
|
||||
@ -245,16 +256,25 @@ static int proxy_capture_client_header (qse_htre_t* req, const qse_mchar_t* key,
|
||||
if (qse_mbscasecmp (key, QSE_MT("Via")) == 0)
|
||||
{
|
||||
qse_mchar_t extra[128];
|
||||
const qse_mchar_t* pseudonym;
|
||||
|
||||
proxy->flags |= PROXY_VIA;
|
||||
qse_nwadtombs (&proxy->client->local_addr, extra, QSE_COUNTOF(extra), QSE_NWADTOMBS_ALL);
|
||||
if (proxy->pseudonym[0])
|
||||
{
|
||||
pseudonym = proxy->pseudonym;
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_nwadtombs (&proxy->client->local_addr, extra, QSE_COUNTOF(extra), QSE_NWADTOMBS_ALL);
|
||||
pseudonym = extra;
|
||||
}
|
||||
|
||||
return proxy_add_header_to_buffer_with_extra_data (
|
||||
proxy, proxy->reqfwdbuf, key, val,
|
||||
QSE_MT(", %d.%d %hs (%hs)"),
|
||||
(int)proxy->version.major,
|
||||
(int)proxy->version.minor,
|
||||
extra,
|
||||
pseudonym,
|
||||
qse_httpd_getname(proxy->httpd));
|
||||
}
|
||||
}
|
||||
@ -673,16 +693,26 @@ static int proxy_htrd_peek_peer_output (qse_htrd_t* htrd, qse_htre_t* res)
|
||||
/* add the Via: header into the response if it is not 100. */
|
||||
qse_size_t tmp;
|
||||
qse_mchar_t extra[128];
|
||||
const qse_mchar_t* pseudonym;
|
||||
qse_http_version_t v;
|
||||
|
||||
proxy->flags |= PROXY_VIA_RETURNING;
|
||||
|
||||
v = *qse_htre_getversion(res);
|
||||
qse_nwadtombs (&proxy->client->local_addr, extra, QSE_COUNTOF(extra), QSE_NWADTOMBS_ALL);
|
||||
if (proxy->pseudonym[0])
|
||||
{
|
||||
pseudonym = proxy->pseudonym;
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_nwadtombs (&proxy->client->local_addr, extra, QSE_COUNTOF(extra), QSE_NWADTOMBS_ALL);
|
||||
pseudonym = extra;
|
||||
}
|
||||
|
||||
tmp = qse_mbs_fcat (
|
||||
proxy->res, QSE_MT("Via: %d.%d %hs (%hs)\r\n"),
|
||||
(int)v.major, (int)v.minor,
|
||||
extra, qse_httpd_getname(httpd));
|
||||
pseudonym, qse_httpd_getname(httpd));
|
||||
if (tmp == (qse_size_t)-1)
|
||||
{
|
||||
httpd->errnum = QSE_HTTPD_ENOMEM;
|
||||
@ -860,6 +890,17 @@ static int task_init_proxy (
|
||||
proxy->version = *qse_htre_getversion(arg->req);
|
||||
proxy->keepalive = (arg->req->attr.flags & QSE_HTRE_ATTR_KEEPALIVE);
|
||||
|
||||
proxy->pseudonym = (qse_mchar_t*)(proxy + 1);
|
||||
if (arg->rsrc->pseudonym)
|
||||
{
|
||||
len = qse_mbscpy (proxy->pseudonym, arg->rsrc->pseudonym);
|
||||
}
|
||||
else
|
||||
{
|
||||
proxy->pseudonym[0] = QSE_MT('\0');
|
||||
len = 0;
|
||||
}
|
||||
|
||||
if (arg->rsrc->flags & QSE_HTTPD_RSRC_PROXY_RAW) proxy->flags |= PROXY_RAW;
|
||||
proxy->peer.local = arg->rsrc->src.nwad;
|
||||
if (arg->rsrc->flags & QSE_HTTPD_RSRC_PROXY_DST_STR)
|
||||
@ -867,7 +908,7 @@ static int task_init_proxy (
|
||||
qse_mchar_t* colon;
|
||||
|
||||
proxy->flags |= PROXY_RESOL_PEER_NAME;
|
||||
proxy->peer_name = (qse_mchar_t*)(proxy + 1);
|
||||
proxy->peer_name = proxy->pseudonym + len + 1;
|
||||
qse_mbscpy (proxy->peer_name, arg->rsrc->dst.str);
|
||||
|
||||
colon = qse_mbschr (proxy->peer_name, QSE_MT(':'));
|
||||
@ -970,14 +1011,23 @@ static int task_init_proxy (
|
||||
/* add the Via: header into the request */
|
||||
qse_size_t tmp;
|
||||
qse_mchar_t extra[128];
|
||||
const qse_mchar_t* pseudonym;
|
||||
|
||||
proxy->flags |= PROXY_VIA;
|
||||
|
||||
qse_nwadtombs (&proxy->client->local_addr, extra, QSE_COUNTOF(extra), QSE_NWADTOMBS_ALL);
|
||||
if (proxy->pseudonym[0])
|
||||
{
|
||||
pseudonym = proxy->pseudonym;
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_nwadtombs (&proxy->client->local_addr, extra, QSE_COUNTOF(extra), QSE_NWADTOMBS_ALL);
|
||||
pseudonym = extra;
|
||||
}
|
||||
tmp = qse_mbs_fcat (
|
||||
proxy->reqfwdbuf, QSE_MT("Via: %d.%d %hs (%hs)\r\n"),
|
||||
(int)proxy->version.major, (int)proxy->version.minor,
|
||||
extra, qse_httpd_getname(httpd));
|
||||
pseudonym, qse_httpd_getname(httpd));
|
||||
if (tmp == (qse_size_t)-1) goto oops;
|
||||
|
||||
}
|
||||
@ -1931,8 +1981,14 @@ qse_httpd_task_t* qse_httpd_entaskproxy (
|
||||
arg.rsrc = proxy;
|
||||
arg.req = req;
|
||||
|
||||
if (proxy->pseudonym)
|
||||
xtnsize += qse_mbslen (proxy->pseudonym) + 1;
|
||||
else
|
||||
xtnsize += 1;
|
||||
|
||||
if (proxy->flags & QSE_HTTPD_RSRC_PROXY_DST_STR)
|
||||
xtnsize = qse_mbslen (proxy->dst.str) + 1;
|
||||
xtnsize += qse_mbslen (proxy->dst.str) + 1;
|
||||
|
||||
|
||||
QSE_MEMSET (&task, 0, QSE_SIZEOF(task));
|
||||
task.init = task_init_proxy;
|
||||
|
@ -3354,6 +3354,10 @@ static int make_resource (
|
||||
target->u.proxy.src.nwad.type = target->u.proxy.dst.nwad.type;
|
||||
}
|
||||
|
||||
/* pseudonym for raw proxying should not be useful. set it for consistency */
|
||||
if (server_xtn->query (httpd, client->server, QSE_NULL, QSE_NULL, QSE_HTTPD_SERVERSTD_PSEUDONYM, &target->u.proxy.pseudonym) <= -1)
|
||||
target->u.proxy.pseudonym = QSE_NULL;
|
||||
|
||||
/* mark that this request is going to be proxied. */
|
||||
req->attr.flags |= QSE_HTRE_ATTR_PROXIED;
|
||||
return 0;
|
||||
@ -3394,6 +3398,9 @@ static int make_resource (
|
||||
target->u.proxy.src.nwad.type = target->u.proxy.dst.nwad.type;
|
||||
}
|
||||
|
||||
if (server_xtn->query (httpd, client->server, QSE_NULL, QSE_NULL, QSE_HTTPD_SERVERSTD_PSEUDONYM, &target->u.proxy.pseudonym) <= -1)
|
||||
target->u.proxy.pseudonym = QSE_NULL;
|
||||
|
||||
/* TODO: refrain from manipulating the request like this */
|
||||
req->u.q.path = slash; /* TODO: use setqpath or something... */
|
||||
|
||||
@ -3418,6 +3425,9 @@ static int make_resource (
|
||||
target->u.proxy.dst.nwad = tmp.root.u.nwad;
|
||||
target->u.proxy.src.nwad.type = target->u.proxy.dst.nwad.type;
|
||||
|
||||
if (server_xtn->query (httpd, client->server, QSE_NULL, QSE_NULL, QSE_HTTPD_SERVERSTD_PSEUDONYM, &target->u.proxy.pseudonym) <= -1)
|
||||
target->u.proxy.pseudonym = QSE_NULL;
|
||||
|
||||
/* mark that this request is going to be proxied. */
|
||||
req->attr.flags |= QSE_HTRE_ATTR_PROXIED;
|
||||
return 0;
|
||||
@ -3809,6 +3819,10 @@ static int query_server (
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
case QSE_HTTPD_SERVERSTD_PSEUDONYM:
|
||||
*(const qse_mchar_t**)result = QSE_NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
qse_httpd_seterrnum (httpd, QSE_HTTPD_EINVAL);
|
||||
|
Reference in New Issue
Block a user