... and do sizeof() on the defines to use constants better.
Closes #8389
#define H2BUGF(x) do { } while(0)
#endif
+#define H2_PSEUDO_METHOD ":method"
+#define H2_PSEUDO_SCHEME ":scheme"
+#define H2_PSEUDO_AUTHORITY ":authority"
+#define H2_PSEUDO_PATH ":path"
+#define H2_PSEUDO_STATUS ":status"
static ssize_t http2_recv(struct Curl_easy *data, int sockindex,
char *mem, size_t len, CURLcode *err);
if(!u)
return 5;
- v = curl_pushheader_byname(hp, ":scheme");
+ v = curl_pushheader_byname(hp, H2_PSEUDO_SCHEME);
if(v) {
uc = curl_url_set(u, CURLUPART_SCHEME, v, 0);
if(uc) {
}
}
- v = curl_pushheader_byname(hp, ":authority");
+ v = curl_pushheader_byname(hp, H2_PSEUDO_AUTHORITY);
if(v) {
uc = curl_url_set(u, CURLUPART_HOST, v, 0);
if(uc) {
}
}
- v = curl_pushheader_byname(hp, ":path");
+ v = curl_pushheader_byname(hp, H2_PSEUDO_PATH);
if(v) {
uc = curl_url_set(u, CURLUPART_PATH, v, 0);
if(uc) {
if(frame->hd.type == NGHTTP2_PUSH_PROMISE) {
char *h;
- if(!strcmp(":authority", (const char *)name)) {
+ if(!strcmp(H2_PSEUDO_AUTHORITY, (const char *)name)) {
/* pseudo headers are lower case */
int rc = 0;
char *check = aprintf("%s:%d", conn->host.name, conn->remote_port);
return 0;
}
- if(namelen == sizeof(":status") - 1 &&
- memcmp(":status", name, namelen) == 0) {
+ if(namelen == sizeof(H2_PSEUDO_STATUS) - 1 &&
+ memcmp(H2_PSEUDO_STATUS, name, namelen) == 0) {
/* nghttp2 guarantees :status is received first and only once, and
value is 3 digits status code, and decode_status_code always
succeeds. */
end = memchr(hdbuf, ' ', line_end - hdbuf);
if(!end || end == hdbuf)
goto fail;
- nva[0].name = (unsigned char *)":method";
- nva[0].namelen = strlen((char *)nva[0].name);
+ nva[0].name = (unsigned char *)H2_PSEUDO_METHOD;
+ nva[0].namelen = sizeof(H2_PSEUDO_METHOD) - 1;
nva[0].value = (unsigned char *)hdbuf;
nva[0].valuelen = (size_t)(end - hdbuf);
nva[0].flags = NGHTTP2_NV_FLAG_NONE;
}
if(!end || end == hdbuf)
goto fail;
- nva[1].name = (unsigned char *)":path";
- nva[1].namelen = strlen((char *)nva[1].name);
+ nva[1].name = (unsigned char *)H2_PSEUDO_PATH;
+ nva[1].namelen = sizeof(H2_PSEUDO_PATH) - 1;
nva[1].value = (unsigned char *)hdbuf;
nva[1].valuelen = (size_t)(end - hdbuf);
nva[1].flags = NGHTTP2_NV_FLAG_NONE;
goto fail;
}
- nva[2].name = (unsigned char *)":scheme";
- nva[2].namelen = strlen((char *)nva[2].name);
+ nva[2].name = (unsigned char *) H2_PSEUDO_SCHEME;
+ nva[2].namelen = sizeof(H2_PSEUDO_SCHEME) - 1;
if(conn->handler->flags & PROTOPT_SSL)
nva[2].value = (unsigned char *)"https";
else
if(hlen == 4 && strncasecompare("host", hdbuf, 4)) {
authority_idx = i;
- nva[i].name = (unsigned char *)":authority";
- nva[i].namelen = strlen((char *)nva[i].name);
+ nva[i].name = (unsigned char *)H2_PSEUDO_AUTHORITY;
+ nva[i].namelen = sizeof(H2_PSEUDO_AUTHORITY) - 1;
}
else {
nva[i].namelen = (size_t)(end - hdbuf);
(void)flags;
(void)user_data;
- if(h3name.len == sizeof(":status") - 1 &&
- !memcmp(":status", h3name.base, h3name.len)) {
+ if(h3name.len == sizeof(H3_PSEUDO_STATUS) - 1 &&
+ !memcmp(H3_PSEUDO_STATUS, h3name.base, h3name.len)) {
char line[14]; /* status line is always 13 characters long */
size_t ncopy;
int status = decode_status_code(h3val.base, h3val.len);
end = memchr(hdbuf, ' ', line_end - hdbuf);
if(!end || end == hdbuf)
goto fail;
- nva[0].name = (unsigned char *)":method";
- nva[0].namelen = strlen((char *)nva[0].name);
+ nva[0].name = (unsigned char *)H3_PSEUDO_METHOD;
+ nva[0].namelen = sizeof(H3_PSEUDO_METHOD) - 1;
nva[0].value = (unsigned char *)hdbuf;
nva[0].valuelen = (size_t)(end - hdbuf);
nva[0].flags = NGHTTP3_NV_FLAG_NONE;
}
if(!end || end == hdbuf)
goto fail;
- nva[1].name = (unsigned char *)":path";
- nva[1].namelen = strlen((char *)nva[1].name);
+ nva[1].name = (unsigned char *)H3_PSEUDO_PATH;
+ nva[1].namelen = sizeof(H3_PSEUDO_PATH) - 1;
nva[1].value = (unsigned char *)hdbuf;
nva[1].valuelen = (size_t)(end - hdbuf);
nva[1].flags = NGHTTP3_NV_FLAG_NONE;
- nva[2].name = (unsigned char *)":scheme";
- nva[2].namelen = strlen((char *)nva[2].name);
+ nva[2].name = (unsigned char *)H3_PSEUDO_SCHEME;
+ nva[2].namelen = sizeof(H3_PSEUDO_SCHEME) - 1;
if(conn->handler->flags & PROTOPT_SSL)
nva[2].value = (unsigned char *)"https";
else
if(hlen == 4 && strncasecompare("host", hdbuf, 4)) {
authority_idx = i;
- nva[i].name = (unsigned char *)":authority";
- nva[i].namelen = strlen((char *)nva[i].name);
+ nva[i].name = (unsigned char *)H3_PSEUDO_AUTHORITY;
+ nva[i].namelen = sizeof(H3_PSEUDO_AUTHORITY) - 1;
}
else {
nva[i].namelen = (size_t)(end - hdbuf);
struct h3h1header *headers = (struct h3h1header *)argp;
size_t olen = 0;
- if((name_len == 7) && !strncmp(":status", (char *)name, 7)) {
+ if((name_len == 7) && !strncmp(H3_PSEUDO_STATUS, (char *)name, 7)) {
msnprintf(headers->dest,
headers->destlen, "HTTP/3 %.*s\n",
(int) value_len, value);
end = memchr(hdbuf, ' ', line_end - hdbuf);
if(!end || end == hdbuf)
goto fail;
- nva[0].name = (unsigned char *)":method";
- nva[0].name_len = strlen((char *)nva[0].name);
+ nva[0].name = (unsigned char *)H3_PSEUDO_METHOD;
+ nva[0].name_len = sizeof(H3_PSEUDO_METHOD) - 1;
nva[0].value = (unsigned char *)hdbuf;
nva[0].value_len = (size_t)(end - hdbuf);
}
if(!end || end == hdbuf)
goto fail;
- nva[1].name = (unsigned char *)":path";
- nva[1].name_len = strlen((char *)nva[1].name);
+ nva[1].name = (unsigned char *)H3_PSEUDO_PATH;
+ nva[1].name_len = sizeof(H3_PSEUDO_PATH) - 1;
nva[1].value = (unsigned char *)hdbuf;
nva[1].value_len = (size_t)(end - hdbuf);
- nva[2].name = (unsigned char *)":scheme";
- nva[2].name_len = strlen((char *)nva[2].name);
+ nva[2].name = (unsigned char *)H3_PSEUDO_SCHEME;
+ nva[2].name_len = sizeof(H3_PSEUDO_SCHEME) - 1;
if(conn->handler->flags & PROTOPT_SSL)
nva[2].value = (unsigned char *)"https";
else
if(hlen == 4 && strncasecompare("host", hdbuf, 4)) {
authority_idx = i;
- nva[i].name = (unsigned char *)":authority";
- nva[i].name_len = strlen((char *)nva[i].name);
+ nva[i].name = (unsigned char *)H3_PSEUDO_AUTHORITY;
+ nva[i].name_len = sizeof(H3_PSEUDO_AUTHORITY) - 1;
}
else {
nva[i].name_len = (size_t)(end - hdbuf);
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
#include "curl_setup.h"
+#define H3_PSEUDO_METHOD ":method"
+#define H3_PSEUDO_SCHEME ":scheme"
+#define H3_PSEUDO_AUTHORITY ":authority"
+#define H3_PSEUDO_PATH ":path"
+#define H3_PSEUDO_STATUS ":status"
+
#ifdef ENABLE_QUIC
CURLcode Curl_qlogdir(struct Curl_easy *data,
unsigned char *scid,