(int)sizeof(worker->s->secret));
}
}
+ else if (!strcasecmp(key, "upgrade")) {
+ if (PROXY_STRNCPY(worker->s->upgrade, val) != APR_SUCCESS) {
+ return apr_psprintf(p, "upgrade protocol length must be < %d characters",
+ (int)sizeof(worker->s->upgrade));
+ }
+ }
else {
if (set_worker_hc_param_f) {
return set_worker_hc_param_f(p, s, worker, key, val, NULL);
ws_baton_t *baton = apr_pcalloc(r->pool, sizeof(ws_baton_t));
int status;
proxyws_dir_conf *dconf = ap_get_module_config(r->per_dir_config, &proxy_wstunnel_module);
+ const char *upgrade_method = *worker->s->upgrade ? worker->s->upgrade : "WebSocket";
header_brigade = apr_brigade_create(p, backconn->bucket_alloc);
return rv;
}
- buf = apr_pstrdup(p, "Upgrade: WebSocket" CRLF "Connection: Upgrade" CRLF CRLF);
+ if (ap_cstr_casecmp(upgrade_method, "NONE") == 0) {
+ buf = apr_pstrdup(p, "Upgrade: WebSocket" CRLF "Connection: Upgrade" CRLF CRLF);
+ } else {
+ buf = apr_pstrcat(p, "Upgrade: ", upgrade_method, CRLF "Connection: Upgrade" CRLF CRLF, NULL);
+ }
ap_xlate_proto_to_ascii(buf, strlen(buf));
e = apr_bucket_pool_create(buf, strlen(buf), p, c->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(header_brigade, e);
int status;
char server_portstr[32];
proxy_conn_rec *backend = NULL;
- const char *upgrade;
char *scheme;
apr_pool_t *p = r->pool;
char *locurl = url;
apr_uri_t *uri;
int is_ssl = 0;
+ const char *upgrade_method = *worker->s->upgrade ? worker->s->upgrade : "WebSocket";
if (ap_cstr_casecmpn(url, "wss:", 4) == 0) {
scheme = "WSS";
return DECLINED;
}
- upgrade = apr_table_get(r->headers_in, "Upgrade");
- if (!upgrade || ap_cstr_casecmp(upgrade, "WebSocket") != 0) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02900)
- "declining URL %s (not WebSocket, Upgrade: header is %s)",
- url, upgrade ? upgrade : "missing");
- return DECLINED;
+ if (ap_cstr_casecmp(upgrade_method, "NONE") != 0) {
+ const char *upgrade;
+ upgrade = apr_table_get(r->headers_in, "Upgrade");
+ if (!upgrade || ap_cstr_casecmp(upgrade, upgrade_method) != 0) {
+ ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02900)
+ "declining URL %s (not %s, Upgrade: header is %s)",
+ url, upgrade_method, upgrade ? upgrade : "missing");
+ return DECLINED;
+ }
}
uri = apr_palloc(p, sizeof(*uri));