webfs: bracket literal ipv6 host in "Host:" header
This commit is contained in:
parent
1e97adc86b
commit
151039caf0
4 changed files with 14 additions and 3 deletions
|
@ -15,10 +15,12 @@ char* unquote(char *s, char **ps);
|
||||||
#pragma varargck type "U" Url*
|
#pragma varargck type "U" Url*
|
||||||
#pragma varargck type "E" Str2
|
#pragma varargck type "E" Str2
|
||||||
#pragma varargck type "N" char*
|
#pragma varargck type "N" char*
|
||||||
|
#pragma varargck type "]" char*
|
||||||
|
|
||||||
int Efmt(Fmt*);
|
int Efmt(Fmt*);
|
||||||
int Nfmt(Fmt*);
|
int Nfmt(Fmt*);
|
||||||
int Ufmt(Fmt*);
|
int Ufmt(Fmt*);
|
||||||
|
int Mfmt(Fmt*);
|
||||||
char* Upath(Url *);
|
char* Upath(Url *);
|
||||||
Url* url(char *s, Url *b);
|
Url* url(char *s, Url *b);
|
||||||
Url* saneurl(Url *u);
|
Url* saneurl(Url *u);
|
||||||
|
|
|
@ -766,6 +766,7 @@ main(int argc, char *argv[])
|
||||||
quotefmtinstall();
|
quotefmtinstall();
|
||||||
fmtinstall('U', Ufmt);
|
fmtinstall('U', Ufmt);
|
||||||
fmtinstall('N', Nfmt);
|
fmtinstall('N', Nfmt);
|
||||||
|
fmtinstall(']', Mfmt);
|
||||||
fmtinstall('E', Efmt);
|
fmtinstall('E', Efmt);
|
||||||
fmtinstall('[', encodefmt);
|
fmtinstall('[', encodefmt);
|
||||||
fmtinstall('H', encodefmt);
|
fmtinstall('H', encodefmt);
|
||||||
|
|
|
@ -637,7 +637,7 @@ http(char *m, Url *u, Key *shdr, Buq *qbody, Buq *qpost)
|
||||||
ru.path = Upath(u);
|
ru.path = Upath(u);
|
||||||
ru.query = u->query;
|
ru.query = u->query;
|
||||||
}
|
}
|
||||||
n = snprint(buf, sizeof(buf), "%s %U HTTP/1.1\r\nHost: %s%s%s\r\n",
|
n = snprint(buf, sizeof(buf), "%s %U HTTP/1.1\r\nHost: %]%s%s\r\n",
|
||||||
method, &ru, host, u->port ? ":" : "", u->port ? u->port : "");
|
method, &ru, host, u->port ? ":" : "", u->port ? u->port : "");
|
||||||
if(n >= sizeof(buf)-64){
|
if(n >= sizeof(buf)-64){
|
||||||
werrstr("request too large");
|
werrstr("request too large");
|
||||||
|
@ -649,7 +649,7 @@ http(char *m, Url *u, Key *shdr, Buq *qbody, Buq *qpost)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(h->tunnel){
|
if(h->tunnel){
|
||||||
n = snprint(buf, sizeof(buf), "CONNECT %s:%s HTTP/1.1\r\nHost: %s:%s\r\n",
|
n = snprint(buf, sizeof(buf), "CONNECT %]:%s HTTP/1.1\r\nHost: %]:%s\r\n",
|
||||||
host, u->port ? u->port : "443",
|
host, u->port ? u->port : "443",
|
||||||
host, u->port ? u->port : "443");
|
host, u->port ? u->port : "443");
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,6 +82,14 @@ Nfmt(Fmt *f)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
Mfmt(Fmt *f)
|
||||||
|
{
|
||||||
|
char *s = va_arg(f->args, char*);
|
||||||
|
fmtprint(f, (*s != '[' && strchr(s, ':') != nil)? "[%s]" : "%s", s);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
Ufmt(Fmt *f)
|
Ufmt(Fmt *f)
|
||||||
{
|
{
|
||||||
|
@ -101,7 +109,7 @@ Ufmt(Fmt *f)
|
||||||
fmtprint(f, "@");
|
fmtprint(f, "@");
|
||||||
}
|
}
|
||||||
if(u->host){
|
if(u->host){
|
||||||
fmtprint(f, strchr(u->host, ':') ? "[%s]" : "%s", u->host);
|
fmtprint(f, "%]", u->host);
|
||||||
if(u->port)
|
if(u->port)
|
||||||
fmtprint(f, ":%s", u->port);
|
fmtprint(f, ":%s", u->port);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue