mirror of
https://github.com/warmcat/libwebsockets.git
synced 2025-03-09 00:00:04 +01:00
ws client: apply tokenize to upgrade header
Switches to use lws_hdr_copy() for the case the header is fragmented See also https://github.com/warmcat/libwebsockets/issues/1435
This commit is contained in:
parent
a5b2248e72
commit
14764ccbe2
3 changed files with 33 additions and 18 deletions
|
@ -204,10 +204,12 @@ lws_generate_client_ws_handshake(struct lws *wsi, char *p, const char *conn1)
|
|||
int
|
||||
lws_client_ws_upgrade(struct lws *wsi, const char **cce)
|
||||
{
|
||||
int n, len, okay = 0;
|
||||
struct lws_context *context = wsi->context;
|
||||
struct lws_tokenize ts;
|
||||
int n, len, okay = 0;
|
||||
lws_tokenize_elem e;
|
||||
char *p, buf[64];
|
||||
const char *pc;
|
||||
char *p;
|
||||
#if !defined(LWS_WITHOUT_EXTENSIONS)
|
||||
struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi];
|
||||
char *sb = (char *)&pt->serv_buf[0];
|
||||
|
@ -262,18 +264,31 @@ lws_client_ws_upgrade(struct lws *wsi, const char **cce)
|
|||
goto bail3;
|
||||
}
|
||||
|
||||
p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_CONNECTION);
|
||||
if (!p) {
|
||||
lwsl_info("no Connection hdr\n");
|
||||
*cce = "HS: CONNECTION missing";
|
||||
goto bail3;
|
||||
}
|
||||
strtolower(p);
|
||||
if (strcmp(p, "upgrade")) {
|
||||
lwsl_warn("lws_client_int_s_hs: bad header %s\n", p);
|
||||
*cce = "HS: UPGRADE malformed";
|
||||
goto bail3;
|
||||
}
|
||||
/* connection: must have "upgrade" */
|
||||
|
||||
lws_tokenize_init(&ts, buf, LWS_TOKENIZE_F_COMMA_SEP_LIST |
|
||||
LWS_TOKENIZE_F_MINUS_NONTERM);
|
||||
ts.len = lws_hdr_copy(wsi, buf, sizeof(buf) - 1, WSI_TOKEN_CONNECTION);
|
||||
if (ts.len <= 0) /* won't fit, or absent */
|
||||
goto bad_conn_format;
|
||||
|
||||
do {
|
||||
e = lws_tokenize(&ts);
|
||||
switch (e) {
|
||||
case LWS_TOKZE_TOKEN:
|
||||
if (!strcasecmp(ts.token, "upgrade"))
|
||||
e = LWS_TOKZE_ENDED;
|
||||
break;
|
||||
|
||||
case LWS_TOKZE_DELIMITER:
|
||||
break;
|
||||
|
||||
default: /* includes ENDED */
|
||||
bad_conn_format:
|
||||
*cce = "HS: UPGRADE malformed";
|
||||
goto bail3;
|
||||
}
|
||||
} while (e > 0);
|
||||
|
||||
pc = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS);
|
||||
if (!pc) {
|
||||
|
|
|
@ -304,10 +304,9 @@ lws_process_ws_upgrade(struct lws *wsi)
|
|||
break;
|
||||
|
||||
case LWS_TOKZE_DELIMITER:
|
||||
case LWS_TOKZE_ENDED:
|
||||
break;
|
||||
|
||||
default:
|
||||
default: /* includes ENDED */
|
||||
bad_conn_format:
|
||||
lwsl_err("%s: malformed or absent connection hdr\n",
|
||||
__func__);
|
||||
|
@ -334,7 +333,8 @@ check_protocol:
|
|||
*/
|
||||
|
||||
lws_tokenize_init(&ts, buf, LWS_TOKENIZE_F_COMMA_SEP_LIST |
|
||||
LWS_TOKENIZE_F_MINUS_NONTERM);
|
||||
LWS_TOKENIZE_F_MINUS_NONTERM |
|
||||
LWS_TOKENIZE_F_RFC7230_DELIMS);
|
||||
ts.len = lws_hdr_copy(wsi, buf, sizeof(buf) - 1, WSI_TOKEN_PROTOCOL);
|
||||
if (ts.len < 0) {
|
||||
lwsl_err("%s: protocol list too long\n", __func__);
|
||||
|
|
|
@ -259,7 +259,7 @@ bail:
|
|||
static int
|
||||
remote_method_call(struct lws_dbus_ctx_wsproxy_client *dcwc)
|
||||
{
|
||||
const char *uri = "wss://libwebsockets.org/";
|
||||
const char *uri = "wss://libwebsockets.org/?mirror=dbt";
|
||||
const char *subprotocol = "lws-mirror-protocol";
|
||||
DBusMessage *msg;
|
||||
int ret = 1;
|
||||
|
|
Loading…
Add table
Reference in a new issue