mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
net and http: more consistent error messages
This commit is contained in:
parent
35741b46bd
commit
32473eeafe
@ -56,7 +56,7 @@ pub fn post(url, data string) ?Response {
|
||||
|
||||
pub fn new_request(typ, _url, _data string) ?Request {
|
||||
if _url == '' {
|
||||
return error('bad url')
|
||||
return error('http.new_request: empty url')
|
||||
}
|
||||
mut url := _url
|
||||
mut data := _data
|
||||
@ -125,7 +125,7 @@ pub fn (req &Request) do() ?Response {
|
||||
for key, val in req.headers {
|
||||
//h := '$key: $val'
|
||||
}
|
||||
url := urllib.parse(req.url) or { return error('http.request.do: invalid URL $req.url') }
|
||||
url := urllib.parse(req.url) or { return error('http.request.do: invalid URL "$req.url"') }
|
||||
mut rurl := url
|
||||
mut resp := Response{}
|
||||
mut no_redirects := 0
|
||||
@ -136,7 +136,7 @@ pub fn (req &Request) do() ?Response {
|
||||
if ! (resp.status_code in [301, 302, 303, 307, 308]) { break }
|
||||
// follow any redirects
|
||||
redirect_url := resp.headers['Location']
|
||||
qrurl := urllib.parse( redirect_url ) or { return error('http.request.do: invalid URL in redirect $redirect_url') }
|
||||
qrurl := urllib.parse( redirect_url ) or { return error('http.request.do: invalid URL in redirect "$redirect_url"') }
|
||||
rurl = qrurl
|
||||
no_redirects++
|
||||
}
|
||||
@ -167,7 +167,7 @@ fn (req &Request) method_and_url_to_response(method string, url net_dot_urllib.U
|
||||
}
|
||||
return res
|
||||
}
|
||||
return error('http.request.do: unsupported scheme: $scheme')
|
||||
return error('http.request.method_and_url_to_response: unsupported scheme: "$scheme"')
|
||||
}
|
||||
|
||||
fn parse_response(resp string) Response {
|
||||
|
@ -13,7 +13,7 @@ fn (req &Request) http_do(port int, method, host_name, path string) ?Response {
|
||||
client.send( s.str, s.len ) or {}
|
||||
for {
|
||||
readbytes := client.crecv( rbuffer, bufsize )
|
||||
if readbytes < 0 { return error('http_do error reading response. readbytes: $readbytes') }
|
||||
if readbytes < 0 { return error('http.request.http_do: error reading response. readbytes=$readbytes') }
|
||||
if readbytes == 0 { break }
|
||||
sb.write( tos(rbuffer, readbytes) )
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ pub fn hostname() ?string {
|
||||
// The host name is returned as a null-terminated string.
|
||||
res := C.gethostname(&name, 256)
|
||||
if res != 0 {
|
||||
return error('net.hostname() cannot get the host name')
|
||||
return error('net.hostname: failed with $res')
|
||||
}
|
||||
return tos_clone(name)
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ pub fn socket(family int, _type int, proto int) ?Socket {
|
||||
// same port after the application exits.
|
||||
C.setsockopt(sockfd, C.SOL_SOCKET, C.SO_REUSEADDR, &one, sizeof(int))
|
||||
if sockfd == 0 {
|
||||
return error('socket: init failed')
|
||||
return error('net.socket: failed')
|
||||
}
|
||||
s := Socket {
|
||||
sockfd: sockfd
|
||||
@ -65,7 +65,7 @@ pub fn socket_udp() ?Socket {
|
||||
pub fn (s Socket) setsockopt(level int, optname int, optvalue &int) ?int {
|
||||
res := C.setsockopt(s.sockfd, level, optname, optvalue, C.sizeof(optvalue))
|
||||
if res < 0 {
|
||||
return error('socket: setsockopt failed')
|
||||
return error('net.setsocketopt: failed with $res')
|
||||
}
|
||||
return int(res)
|
||||
}
|
||||
@ -79,7 +79,7 @@ pub fn (s Socket) bind(port int) ?int {
|
||||
size := 16 // sizeof(C.sockaddr_in)
|
||||
res := int(C.bind(s.sockfd, &addr, size))
|
||||
if res < 0 {
|
||||
return error('socket: bind failed')
|
||||
return error('net.bind: failed with $res')
|
||||
}
|
||||
return res
|
||||
}
|
||||
@ -89,7 +89,7 @@ pub fn (s Socket) listen() ?int {
|
||||
backlog := 128
|
||||
res := int(C.listen(s.sockfd, backlog))
|
||||
if res < 0 {
|
||||
return error('socket: listen failed')
|
||||
return error('net.listen: failed with $res')
|
||||
}
|
||||
$if debug {
|
||||
println('listen res = $res')
|
||||
@ -105,7 +105,7 @@ pub fn (s Socket) listen_backlog(backlog int) ?int {
|
||||
}
|
||||
res := C.listen(s.sockfd, n)
|
||||
if res < 0 {
|
||||
return error('socket: listen_backlog failed')
|
||||
return error('net.listen_backlog: failed with $res')
|
||||
}
|
||||
return int(res)
|
||||
}
|
||||
@ -136,7 +136,7 @@ pub fn (s Socket) accept() ?Socket {
|
||||
size := 128 // sizeof(sockaddr_storage)
|
||||
sockfd := C.accept(s.sockfd, &addr, &size)
|
||||
if sockfd < 0 {
|
||||
return error('socket: accept failed')
|
||||
return error('net.accept: failed with $sockfd')
|
||||
}
|
||||
c := Socket {
|
||||
sockfd: sockfd
|
||||
@ -165,12 +165,12 @@ pub fn (s Socket) connect(address string, port int) ?int {
|
||||
info_res := C.getaddrinfo(address.str, sport.str, &hints, &info)
|
||||
if info_res != 0 {
|
||||
error_message := os.get_error_msg(net.error_code())
|
||||
return error('socket: getaddrinfo failed ($error_message)')
|
||||
return error('net.connect: getaddrinfo failed "$error_message"')
|
||||
}
|
||||
res := int(C.connect(s.sockfd, info.ai_addr, info.ai_addrlen))
|
||||
if res < 0 {
|
||||
error_message := os.get_error_msg(net.error_code())
|
||||
return error('socket: connect failed ($error_message)')
|
||||
return error('net.connect: connect failed "$error_message"')
|
||||
}
|
||||
return int(res)
|
||||
}
|
||||
@ -190,7 +190,7 @@ pub fn dial(address string, port int) ?Socket {
|
||||
pub fn (s Socket) send(buf byteptr, len int) ?int {
|
||||
res := int( C.send(s.sockfd, buf, len, 0) )
|
||||
if res < 0 {
|
||||
return error('socket: send failed')
|
||||
return error('net.send: failed with $res')
|
||||
}
|
||||
return res
|
||||
}
|
||||
@ -224,7 +224,7 @@ pub fn (s Socket) close() ?int {
|
||||
// TODO: should shutdown throw an error? close will
|
||||
// continue even if shutdown failed
|
||||
// if shutdown_res < 0 {
|
||||
// return error('socket: shutdown failed')
|
||||
// return error('net.close: shutdown failed with $shutdown_res')
|
||||
// }
|
||||
|
||||
mut res := 0
|
||||
@ -235,7 +235,7 @@ pub fn (s Socket) close() ?int {
|
||||
res = C.close(s.sockfd)
|
||||
}
|
||||
if res < 0 {
|
||||
return error('socket: close failed')
|
||||
return error('net.close: failed with $res')
|
||||
}
|
||||
|
||||
return 0
|
||||
|
@ -24,12 +24,12 @@ enum EncodingMode {
|
||||
}
|
||||
|
||||
const (
|
||||
err_msg_escape = 'invalid URL escape'
|
||||
err_msg_parse = 'error parsing url'
|
||||
err_msg_escape = 'unescape: invalid URL escape'
|
||||
err_msg_parse = 'parse: failed parsing url'
|
||||
)
|
||||
|
||||
fn error_msg(message, val string) string {
|
||||
mut msg := 'net.urllib: $message'
|
||||
mut msg := 'net.urllib.$message'
|
||||
if val != '' { msg = '$msg ($val)' }
|
||||
return msg
|
||||
}
|
||||
@ -196,7 +196,7 @@ fn unescape(s_ string, mode EncodingMode) ?string {
|
||||
i++
|
||||
} else {
|
||||
if (mode == .encode_host || mode == .encode_zone) && s[i] < 0x80 && should_escape(s[i], mode) {
|
||||
error(error_msg('invalid character in host name', s[i..i+1]))
|
||||
error(error_msg('unescape: invalid character in host name', s[i..i+1]))
|
||||
}
|
||||
i++
|
||||
}
|
||||
@ -397,7 +397,7 @@ fn split_by_scheme(rawurl string) ?[]string {
|
||||
}
|
||||
else if c == `:` {
|
||||
if i == 0 {
|
||||
return error(error_msg('missing protocol scheme', ''))
|
||||
return error(error_msg('split_by_scheme: missing protocol scheme', ''))
|
||||
}
|
||||
return [rawurl[..i], rawurl[i+1..]]
|
||||
}
|
||||
@ -468,11 +468,11 @@ fn parse_request_uri(rawurl string) ?URL {
|
||||
// If via_request is false, all forms of relative URLs are allowed.
|
||||
fn parse_url(rawurl string, via_request bool) ?URL {
|
||||
if string_contains_ctl_byte(rawurl) {
|
||||
return error(error_msg('invalid control character in URL', rawurl))
|
||||
return error(error_msg('parse_url: invalid control character in URL', rawurl))
|
||||
}
|
||||
|
||||
if rawurl == '' && via_request {
|
||||
return error(error_msg('empty URL', ''))
|
||||
return error(error_msg('parse_url: empty URL', rawurl))
|
||||
}
|
||||
mut url := URL{}
|
||||
|
||||
@ -507,7 +507,7 @@ fn parse_url(rawurl string, via_request bool) ?URL {
|
||||
return url
|
||||
}
|
||||
if via_request {
|
||||
return error(error_msg('invalid URI for request', ''))
|
||||
return error(error_msg('parse_url: invalid URI for request', ''))
|
||||
}
|
||||
|
||||
// Avoid confusion with malformed schemes, like cache_object:foo/bar.
|
||||
@ -520,7 +520,7 @@ fn parse_url(rawurl string, via_request bool) ?URL {
|
||||
slash := rest.index('/')
|
||||
if colon >= 0 && (slash < 0 || colon < slash) {
|
||||
// First path segment has colon. Not allowed in relative URL.
|
||||
return error(error_msg('first path segment in URL cannot contain colon', ''))
|
||||
return error(error_msg('parse_url: first path segment in URL cannot contain colon', ''))
|
||||
}
|
||||
}
|
||||
|
||||
@ -568,7 +568,7 @@ fn parse_authority(authority string) ?ParseAuthorityRes {
|
||||
}
|
||||
mut userinfo := authority[..i]
|
||||
if !valid_userinfo(userinfo) {
|
||||
return error(error_msg('invalid userinfo', ''))
|
||||
return error(error_msg('parse_authority: invalid userinfo', ''))
|
||||
}
|
||||
if !userinfo.contains(':') {
|
||||
u := unescape(userinfo, .encode_user_password) or {
|
||||
@ -602,11 +602,11 @@ fn parse_host(host string) ?string {
|
||||
// E.g., '[fe80::1]', '[fe80::1%25en0]', '[fe80::1]:80'.
|
||||
mut i := host.last_index(']')
|
||||
if i < 0 {
|
||||
return error(error_msg('missing \']\' in host', ''))
|
||||
return error(error_msg('parse_host: missing \']\' in host', ''))
|
||||
}
|
||||
mut colon_port := host[i+1..]
|
||||
if !valid_optional_port(colon_port) {
|
||||
return error(error_msg('invalid port $colon_port after host ', ''))
|
||||
return error(error_msg('parse_host: invalid port $colon_port after host ', ''))
|
||||
}
|
||||
|
||||
// RFC 6874 defines that %25 (%-encoded percent) introduces
|
||||
@ -632,7 +632,7 @@ fn parse_host(host string) ?string {
|
||||
if i != -1 {
|
||||
colon_port = host[i..]
|
||||
if !valid_optional_port(colon_port) {
|
||||
return error(error_msg('invalid port $colon_port after host ', ''))
|
||||
return error(error_msg('parse_host: invalid port $colon_port after host ', ''))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -872,7 +872,7 @@ fn parse_query_values(m mut Values, query string) ?bool {
|
||||
m.add(key, value)
|
||||
}
|
||||
if had_error {
|
||||
return error(error_msg('error parsing query string', ''))
|
||||
return error(error_msg('parse_query_values: failed parsing query string', ''))
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user