fixed Content-Length handling for protocol upgrade
This commit is contained in:
parent
0ae76bd5ed
commit
0cee2a3614
@ -796,6 +796,13 @@ static int proxy_htrd_peek_peer_output (qse_htrd_t* htrd, qse_htre_t* res)
|
|||||||
|
|
||||||
if (qse_htre_getscodeval(res) == 101)
|
if (qse_htre_getscodeval(res) == 101)
|
||||||
{
|
{
|
||||||
|
if (proxy->resflags & PROXY_RES_PEER_LENGTH)
|
||||||
|
{
|
||||||
|
/* the response to 'Upgrade' must not contain contents */
|
||||||
|
if (proxy->peer_output_length > 0) goto no_upgrade;
|
||||||
|
else proxy->resflags &= ~PROXY_RES_PEER_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
/* Unlike raw proxying entasked for CONNECT for which disconnection
|
/* Unlike raw proxying entasked for CONNECT for which disconnection
|
||||||
* is supposed to be scheduled by the caller, protocol upgrade
|
* is supposed to be scheduled by the caller, protocol upgrade
|
||||||
* can be requested over a normal http stream. A stream whose
|
* can be requested over a normal http stream. A stream whose
|
||||||
@ -806,6 +813,7 @@ static int proxy_htrd_peek_peer_output (qse_htrd_t* htrd, qse_htre_t* res)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
no_upgrade:
|
||||||
/* the update request is not granted. restore the reader
|
/* the update request is not granted. restore the reader
|
||||||
* to the original state so that HTTP packets can be handled
|
* to the original state so that HTTP packets can be handled
|
||||||
* later on. */
|
* later on. */
|
||||||
@ -1518,7 +1526,7 @@ printf ("task_main_proxy_4 trigger[0].mask=%d trigger[1].mask=%d trigger.cmask=%
|
|||||||
proxy->buflen += n;
|
proxy->buflen += n;
|
||||||
proxy->peer_output_received += n;
|
proxy->peer_output_received += n;
|
||||||
|
|
||||||
if (proxy->resflags & PROXY_RES_PEER_LENGTH)
|
if (proxy->resflags & PROXY_RES_PEER_LENGTH)
|
||||||
{
|
{
|
||||||
QSE_ASSERT (!(proxy->flags & PROXY_RAW));
|
QSE_ASSERT (!(proxy->flags & PROXY_RAW));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user