mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: disallow comparison between enum and int (#7886)
This commit is contained in:
@@ -9,6 +9,9 @@ pub:
|
||||
port int
|
||||
}
|
||||
|
||||
struct C.addrinfo {
|
||||
}
|
||||
|
||||
pub fn (a Addr) str() string {
|
||||
return '${a.saddr}:${a.port}'
|
||||
}
|
||||
@@ -19,7 +22,7 @@ const (
|
||||
)
|
||||
|
||||
fn new_addr(addr C.sockaddr) ?Addr {
|
||||
addr_len := if addr.sa_family == SocketFamily.inet {
|
||||
addr_len := if addr.sa_family == int(SocketFamily.inet) {
|
||||
sizeof(C.sockaddr)
|
||||
} else {
|
||||
// TODO NOOOOOOOOOOOO
|
||||
@@ -57,8 +60,8 @@ pub fn resolve_addr(addr string, family SocketFamily, typ SocketType) ?Addr {
|
||||
address, port := split_address(addr)?
|
||||
|
||||
mut hints := C.addrinfo{}
|
||||
hints.ai_family = family
|
||||
hints.ai_socktype = typ
|
||||
hints.ai_family = int(family)
|
||||
hints.ai_socktype = int(typ)
|
||||
hints.ai_flags = C.AI_PASSIVE
|
||||
hints.ai_protocol = 0
|
||||
hints.ai_addrlen = 0
|
||||
|
||||
@@ -20,7 +20,7 @@ pub fn socket_error(potential_code int) ?int {
|
||||
if potential_code < 0 {
|
||||
last_error_int := C.WSAGetLastError()
|
||||
last_error := wsa_error(last_error_int)
|
||||
return error_with_code('net: socket error: ($last_error_int) $last_error', last_error)
|
||||
return error_with_code('net: socket error: ($last_error_int) $last_error', int(last_error))
|
||||
}
|
||||
}
|
||||
$else {
|
||||
|
||||
@@ -7,7 +7,7 @@ pub fn ssl_error(ret int, ssl voidptr) ?SSLError {
|
||||
.ssl_error_syscall { return error_with_code('unrecoverable syscall ($res)', res) }
|
||||
.ssl_error_ssl { return error_with_code('unrecoverable ssl protocol error ($res)',
|
||||
res) }
|
||||
else { return res }
|
||||
else { return SSLError(res) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ fn (c Client) expect_reply(expected ReplyCode) ? {
|
||||
|
||||
if str.len >= 3 {
|
||||
status := str[..3].int()
|
||||
if status != expected {
|
||||
if ReplyCode(status) != expected {
|
||||
return error('Received unexpected status code $status, expecting $expected')
|
||||
}
|
||||
} else { return error('Recieved unexpected SMTP data: $str') }
|
||||
|
||||
@@ -47,14 +47,11 @@ pub fn (c TcpConn) write_ptr(b byteptr, len int) ? {
|
||||
mut sent := C.send(c.sock.handle, ptr, remaining, msg_nosignal)
|
||||
if sent < 0 {
|
||||
code := error_code()
|
||||
match code {
|
||||
error_ewouldblock {
|
||||
c.wait_for_write()
|
||||
continue
|
||||
}
|
||||
else {
|
||||
wrap_error(code) ?
|
||||
}
|
||||
if code == int(error_ewouldblock) {
|
||||
c.wait_for_write()
|
||||
continue
|
||||
} else {
|
||||
wrap_error(code) ?
|
||||
}
|
||||
}
|
||||
total_sent += sent
|
||||
@@ -82,18 +79,15 @@ pub fn (c TcpConn) read_ptr(buf_ptr byteptr, len int) ?int {
|
||||
return res
|
||||
}
|
||||
code := error_code()
|
||||
match code {
|
||||
error_ewouldblock {
|
||||
c.wait_for_read() ?
|
||||
res = wrap_read_result(C.recv(c.sock.handle, buf_ptr, len, 0)) ?
|
||||
$if trace_tcp ? {
|
||||
eprintln('<<< TcpConn.read_ptr | c.sock.handle: $c.sock.handle | buf_ptr: ${ptr_str(buf_ptr)} len: $len | res: $res')
|
||||
}
|
||||
return socket_error(res)
|
||||
}
|
||||
else {
|
||||
wrap_error(code) ?
|
||||
if code == int(error_ewouldblock) {
|
||||
c.wait_for_read() ?
|
||||
res = wrap_read_result(C.recv(c.sock.handle, buf_ptr, len, 0)) ?
|
||||
$if trace_tcp ? {
|
||||
eprintln('<<< TcpConn.read_ptr | c.sock.handle: $c.sock.handle | buf_ptr: ${ptr_str(buf_ptr)} len: $len | res: $res')
|
||||
}
|
||||
return socket_error(res)
|
||||
} else {
|
||||
wrap_error(code) ?
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,7 +154,7 @@ pub fn (c TcpConn) peer_ip() ?string {
|
||||
buf := [44]byte{}
|
||||
peeraddr := C.sockaddr_in{}
|
||||
speeraddr := sizeof(peeraddr)
|
||||
socket_error(C.getpeername(c.sock.handle, unsafe {&C.sockaddr(&peeraddr)}, &speeraddr)) ?
|
||||
socket_error(C.getpeername(c.sock.handle, unsafe { &C.sockaddr(&peeraddr) }, &speeraddr)) ?
|
||||
cstr := C.inet_ntop(C.AF_INET, &peeraddr.sin_addr, buf, sizeof(buf))
|
||||
if cstr == 0 {
|
||||
return error('net.peer_ip: inet_ntop failed')
|
||||
@@ -185,12 +179,12 @@ pub fn listen_tcp(port int) ?TcpListener {
|
||||
s := new_tcp_socket() ?
|
||||
validate_port(port) ?
|
||||
mut addr := C.sockaddr_in{}
|
||||
addr.sin_family = SocketFamily.inet
|
||||
addr.sin_family = int(SocketFamily.inet)
|
||||
addr.sin_port = C.htons(port)
|
||||
addr.sin_addr.s_addr = C.htonl(C.INADDR_ANY)
|
||||
size := sizeof(C.sockaddr_in)
|
||||
// cast to the correct type
|
||||
sockaddr := unsafe {&C.sockaddr(&addr)}
|
||||
sockaddr := unsafe { &C.sockaddr(&addr) }
|
||||
socket_error(C.bind(s.handle, sockaddr, size)) ?
|
||||
socket_error(C.listen(s.handle, 128)) ?
|
||||
return TcpListener{
|
||||
@@ -205,7 +199,7 @@ pub fn (l TcpListener) accept() ?TcpConn {
|
||||
unsafe { C.memset(&addr, 0, sizeof(C.sockaddr_storage)) }
|
||||
size := sizeof(C.sockaddr_storage)
|
||||
// cast to correct type
|
||||
sock_addr := unsafe {&C.sockaddr(&addr)}
|
||||
sock_addr := unsafe { &C.sockaddr(&addr) }
|
||||
mut new_handle := C.accept(l.sock.handle, sock_addr, &size)
|
||||
if new_handle <= 0 {
|
||||
l.wait_for_accept() ?
|
||||
@@ -344,7 +338,7 @@ pub fn (s TcpSocket) address() ?Addr {
|
||||
mut addr := C.sockaddr_in{}
|
||||
size := sizeof(C.sockaddr_in)
|
||||
// cast to the correct type
|
||||
sockaddr := unsafe {&C.sockaddr(&addr)}
|
||||
sockaddr := unsafe { &C.sockaddr(&addr) }
|
||||
C.getsockname(s.handle, sockaddr, &size)
|
||||
return new_addr(sockaddr)
|
||||
}
|
||||
|
||||
114
vlib/net/udp.v
114
vlib/net/udp.v
@@ -8,35 +8,29 @@ const (
|
||||
)
|
||||
|
||||
pub struct UdpConn {
|
||||
sock UdpSocket
|
||||
|
||||
sock UdpSocket
|
||||
mut:
|
||||
write_deadline time.Time
|
||||
read_deadline time.Time
|
||||
|
||||
read_timeout time.Duration
|
||||
write_timeout time.Duration
|
||||
read_deadline time.Time
|
||||
read_timeout time.Duration
|
||||
write_timeout time.Duration
|
||||
}
|
||||
|
||||
pub fn dial_udp(laddr string, raddr string) ?UdpConn {
|
||||
// Dont have to do this when its fixed
|
||||
// this just allows us to store this `none` optional in a struct
|
||||
resolve_wrapper := fn(raddr string) ?Addr {
|
||||
x := resolve_addr(raddr, .inet, .udp) or { return none }
|
||||
resolve_wrapper := fn (raddr string) ?Addr {
|
||||
x := resolve_addr(raddr, .inet, .udp) or { return none }
|
||||
return x
|
||||
}
|
||||
|
||||
local := resolve_addr(laddr, .inet, .udp)?
|
||||
sbase := new_udp_socket(local.port)?
|
||||
|
||||
sock := UdpSocket {
|
||||
local := resolve_addr(laddr, .inet, .udp) ?
|
||||
sbase := new_udp_socket(local.port) ?
|
||||
sock := UdpSocket{
|
||||
handle: sbase.handle
|
||||
|
||||
l: local
|
||||
r: resolve_wrapper(raddr)
|
||||
}
|
||||
|
||||
return UdpConn {
|
||||
return UdpConn{
|
||||
sock: sock
|
||||
read_timeout: udp_default_read_timeout
|
||||
write_timeout: udp_default_write_timeout
|
||||
@@ -44,10 +38,7 @@ pub fn dial_udp(laddr string, raddr string) ?UdpConn {
|
||||
}
|
||||
|
||||
pub fn (c UdpConn) write_ptr(b byteptr, len int) ? {
|
||||
remote := c.sock.remote() or {
|
||||
return err_no_udp_remote
|
||||
}
|
||||
|
||||
remote := c.sock.remote() or { return err_no_udp_remote }
|
||||
return c.write_to_ptr(remote, b, len)
|
||||
}
|
||||
|
||||
@@ -61,22 +52,16 @@ pub fn (c UdpConn) write_str(s string) ? {
|
||||
|
||||
pub fn (c UdpConn) write_to_ptr(addr Addr, b byteptr, len int) ? {
|
||||
res := C.sendto(c.sock.handle, b, len, 0, &addr.addr, addr.len)
|
||||
|
||||
if res >= 0 {
|
||||
return none
|
||||
}
|
||||
|
||||
code := error_code()
|
||||
match code {
|
||||
error_ewouldblock {
|
||||
c.wait_for_write()?
|
||||
socket_error(C.sendto(c.sock.handle, b, len, 0, &addr.addr, addr.len))?
|
||||
}
|
||||
else {
|
||||
wrap_error(code)?
|
||||
}
|
||||
if code == int(error_ewouldblock) {
|
||||
c.wait_for_write() ?
|
||||
socket_error(C.sendto(c.sock.handle, b, len, 0, &addr.addr, addr.len)) ?
|
||||
} else {
|
||||
wrap_error(code) ?
|
||||
}
|
||||
|
||||
return none
|
||||
}
|
||||
|
||||
@@ -94,30 +79,24 @@ pub fn (c UdpConn) write_to_string(addr Addr, s string) ? {
|
||||
pub fn (c UdpConn) read(mut buf []byte) ?(int, Addr) {
|
||||
mut addr_from := C.sockaddr{}
|
||||
len := sizeof(C.sockaddr)
|
||||
|
||||
mut res := wrap_read_result(C.recvfrom(c.sock.handle, buf.data, buf.len, 0, &addr_from, &len))?
|
||||
|
||||
mut res := wrap_read_result(C.recvfrom(c.sock.handle, buf.data, buf.len, 0, &addr_from,
|
||||
&len)) ?
|
||||
if res > 0 {
|
||||
addr := new_addr(addr_from)?
|
||||
addr := new_addr(addr_from) ?
|
||||
return res, addr
|
||||
}
|
||||
|
||||
code := error_code()
|
||||
match code {
|
||||
error_ewouldblock {
|
||||
c.wait_for_read()?
|
||||
// same setup as in tcp
|
||||
res = wrap_read_result(C.recvfrom(c.sock.handle, buf.data, buf.len, 0, &addr_from, &len))?
|
||||
res2 := socket_error(res)?
|
||||
|
||||
addr := new_addr(addr_from)?
|
||||
return res2, addr
|
||||
}
|
||||
else {
|
||||
wrap_error(code)?
|
||||
}
|
||||
if code == int(error_ewouldblock) {
|
||||
c.wait_for_read() ?
|
||||
// same setup as in tcp
|
||||
res = wrap_read_result(C.recvfrom(c.sock.handle, buf.data, buf.len, 0, &addr_from,
|
||||
&len)) ?
|
||||
res2 := socket_error(res) ?
|
||||
addr := new_addr(addr_from) ?
|
||||
return res2, addr
|
||||
} else {
|
||||
wrap_error(code) ?
|
||||
}
|
||||
|
||||
return none
|
||||
}
|
||||
|
||||
@@ -147,7 +126,7 @@ pub fn (c UdpConn) read_timeout() time.Duration {
|
||||
return c.read_timeout
|
||||
}
|
||||
|
||||
pub fn(mut c UdpConn) set_read_timeout(t time.Duration) {
|
||||
pub fn (mut c UdpConn) set_read_timeout(t time.Duration) {
|
||||
c.read_timeout = t
|
||||
}
|
||||
|
||||
@@ -179,9 +158,8 @@ pub fn (c UdpConn) close() ? {
|
||||
}
|
||||
|
||||
pub fn listen_udp(port int) ?UdpConn {
|
||||
s := new_udp_socket(port)?
|
||||
|
||||
return UdpConn {
|
||||
s := new_udp_socket(port) ?
|
||||
return UdpConn{
|
||||
sock: s
|
||||
read_timeout: udp_default_read_timeout
|
||||
write_timeout: udp_default_write_timeout
|
||||
@@ -190,38 +168,32 @@ pub fn listen_udp(port int) ?UdpConn {
|
||||
|
||||
struct UdpSocket {
|
||||
handle int
|
||||
|
||||
l Addr
|
||||
r ?Addr
|
||||
l Addr
|
||||
r ?Addr
|
||||
}
|
||||
|
||||
fn new_udp_socket(local_port int) ?UdpSocket {
|
||||
sockfd := socket_error(C.socket(SocketFamily.inet, SocketType.udp, 0))?
|
||||
s := UdpSocket {
|
||||
sockfd := socket_error(C.socket(SocketFamily.inet, SocketType.udp, 0)) ?
|
||||
s := UdpSocket{
|
||||
handle: sockfd
|
||||
}
|
||||
s.set_option_bool(.reuse_addr, true)?
|
||||
s.set_option_bool(.reuse_addr, true) ?
|
||||
$if windows {
|
||||
t := true
|
||||
socket_error(C.ioctlsocket(sockfd, fionbio, &t))?
|
||||
socket_error(C.ioctlsocket(sockfd, fionbio, &t)) ?
|
||||
} $else {
|
||||
socket_error(C.fcntl(sockfd, C.F_SETFD, C.O_NONBLOCK))
|
||||
}
|
||||
|
||||
// In UDP we always have to bind to a port
|
||||
validate_port(local_port)?
|
||||
|
||||
validate_port(local_port) ?
|
||||
mut addr := C.sockaddr_in{}
|
||||
addr.sin_family = SocketFamily.inet
|
||||
addr.sin_family = int(SocketFamily.inet)
|
||||
addr.sin_port = C.htons(local_port)
|
||||
addr.sin_addr.s_addr = C.htonl(C.INADDR_ANY)
|
||||
size := sizeof(C.sockaddr_in)
|
||||
|
||||
// cast to the correct type
|
||||
sockaddr := unsafe {&C.sockaddr(&addr)}
|
||||
|
||||
socket_error(C.bind(s.handle, sockaddr, size))?
|
||||
|
||||
sockaddr := unsafe { &C.sockaddr(&addr) }
|
||||
socket_error(C.bind(s.handle, sockaddr, size)) ?
|
||||
return s
|
||||
}
|
||||
|
||||
@@ -237,7 +209,7 @@ pub fn (s UdpSocket) set_option_bool(opt SocketOption, value bool) ? {
|
||||
// if opt !in opts_bool {
|
||||
// return err_option_wrong_type
|
||||
// }
|
||||
socket_error(C.setsockopt(s.handle, C.SOL_SOCKET, int(opt), &value, sizeof(bool)))?
|
||||
socket_error(C.setsockopt(s.handle, C.SOL_SOCKET, int(opt), &value, sizeof(bool))) ?
|
||||
return none
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user