1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

net.websocket: swap unsafe use of nil for a safe default value (#15836)

This commit is contained in:
Alfie Ranstead 2022-09-22 06:00:03 +01:00 committed by GitHub
parent 41dbd12bc4
commit 27305d1a5f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 84 additions and 6 deletions

View File

@ -165,6 +165,7 @@ pub fn new_test_session(_vargs string, will_compile bool) TestSession {
skip_files << 'examples/websocket/ping.v' // requires OpenSSL
skip_files << 'examples/websocket/client-server/client.v' // requires OpenSSL
skip_files << 'examples/websocket/client-server/server.v' // requires OpenSSL
skip_files << 'vlib/v/tests/websocket_logger_interface_should_compile_test.v' // requires OpenSSL
skip_files << 'examples/vweb_orm_jwt' // requires mysql
$if tinyc {
skip_files << 'examples/database/orm.v' // try fix it

View File

@ -135,9 +135,11 @@ const (
'vlib/net/websocket/websocket_test.v',
'vlib/crypto/rand/crypto_rand_read_test.v',
'vlib/net/smtp/smtp_test.v',
'vlib/v/tests/websocket_logger_interface_should_compile_test.v',
]
skip_with_fsanitize_address = [
'vlib/net/websocket/websocket_test.v',
'vlib/v/tests/websocket_logger_interface_should_compile_test.v',
]
skip_with_fsanitize_undefined = [
'do_not_remove',
@ -184,6 +186,7 @@ const (
'vlib/net/http/response_test.v',
'vlib/builtin/js/array_test.js.v',
'vlib/net/smtp/smtp_test.v',
'vlib/v/tests/websocket_logger_interface_should_compile_test.v',
]
skip_on_linux = [
'do_not_remove',
@ -214,6 +217,7 @@ const (
'vlib/sync/many_times_test.v',
'vlib/sync/once_test.v',
'vlib/net/smtp/smtp_test.v',
'vlib/v/tests/websocket_logger_interface_should_compile_test.v',
]
skip_on_non_windows = [
'do_not_remove',

View File

@ -36,11 +36,14 @@ pub mut:
header http.Header // headers that will be passed when connecting
conn &net.TcpConn = unsafe { nil } // underlying TCP socket connection
nonce_size int = 16 // size of nounce used for masking
panic_on_callback bool // set to true of callbacks can panic
state State // current state of connection
logger &log.Logger = unsafe { nil } // logger used to log messages
resource_name string // name of current resource
last_pong_ut i64 // last time in unix time we got a pong message
panic_on_callback bool // set to true of callbacks can panic
state State // current state of connection
// logger used to log messages
logger &log.Logger = &log.Logger(&log.Log{
level: .info
})
resource_name string // name of current resource
last_pong_ut i64 // last time in unix time we got a pong message
}
// Flag represents different types of headers in websocket handshake

View File

@ -9,7 +9,9 @@ import rand
// Server represents a websocket server connection
pub struct Server {
mut:
logger &log.Logger = unsafe { nil } // logger used to log
logger &log.Logger = &log.Logger(&log.Log{
level: .info
})
ls &net.TcpListener = unsafe { nil } // listener used to get incoming connection to socket
accept_client_callbacks []AcceptClientFn // accept client callback functions
message_callbacks []MessageEventHandler // new message callback functions

View File

@ -0,0 +1,68 @@
import net.websocket as ws
pub type RawMessage = ws.Message
pub struct WsTransport {
pub mut:
ws ws.Client
}
struct WsClient {
pub mut:
transport Transport
}
pub interface Transport {
send()
wait()
}
fn (wst WsTransport) send() {
println('send is called')
}
fn (wst WsTransport) wait() {
println('wait is called')
}
pub fn new_ws_client(transport Transport) ?WsClient {
return WsClient{
transport: transport
}
}
fn server() ? {
mut s := ws.new_server(.ip6, 8081, '/')
s.on_connect(fn (mut s ws.ServerClient) ?bool {
if s.resource_name != '/' {
return false
}
println('Client has connected...')
return true
})?
s.on_message(fn (mut ws ws.Client, msg &RawMessage) ? {
mut transport := WsTransport{}
mut ws_client := new_ws_client(transport)?
_ := ws_client
})
s.on_close(fn (mut ws ws.Client, code int, reason string) ? {
println('client ($ws.id) closed connection')
})
s.listen() or { println('error on server listen: $err') }
unsafe {
s.free()
}
}
fn abc() ? {
server()?
}
fn test_compilation_of_the_example_code_in_issue_15839() {
assert true
}