config_load :: proc(app: ^App) -> (Config, Maybe(Config_Load_Error)) {
config_path := fpath.join({ app.storage_path, "config.json" }, context.temp_allocator)
- raw_config, config_read := os.read_entire_file_from_filename(config_path)
+ raw_config, config_read := os.read_entire_file_from_filename(config_path, context.temp_allocator)
parsed_config: Config_Parsed
import "core:crypto/ed25519"
import "core:encoding/endian"
import "core:io"
+import "core:log"
import "core:math/rand"
+import "core:mem"
import "core:net"
import "core:slice"
import "core:sync"
_, _ = io.write(request_stream, id_bytes[:])
+ log.infof("ID %v", id_bytes)
+
// Request.
_ = common.client_request_to_bytes(request_stream, request)
len_bytes: [size_of(32)]u8
endian.put_u32(len_bytes[:], .Little, u32(buffer_length))
- _, _ = io.write_at(request_stream, len_bytes[:], 0)
+ mem.copy(raw_data(bytes_buf[size_of(u32):]), raw_data(bytes_buf[:buffer_length]), buffer_length)
+ mem.copy_non_overlapping(raw_data(bytes_buf[:]), raw_data(len_bytes[:]), size_of(u32))
- request_bytes := bytes.buffer_to_bytes(&bytes_buffer)
+ request_bytes := bytes_buf[:size_of(u32) + buffer_length]
_ = net.send_tcp(app.host.?, request_bytes) or_return
delete(app.info_bar_content)
}
+ sync.mutex_lock(&app.mutex)
+ defer sync.mutex_unlock(&app.mutex)
+
+ if len(format) == 0 {
+ app.info_bar_content = ""
+ app_update_info_bar(app)
+
+ return
+ }
+
info_bar_content_builder: strings.Builder
strings.builder_init_none(&info_bar_content_builder)
app.info_bar_content = strings.clone(strings.to_string(info_bar_content_builder))
app_update_info_bar(app)
+
+ log.infof("Info bar %v", app.info_bar_content)
}
app_set_box_message :: proc(app: ^App, lines: []string) {
}
state_load_config :: proc(app: ^App) {
- config_path := fpath.join({ app.storage_path, "config.json" }, context.temp_allocator)
-
- raw_config, config_read := os.read_entire_file_from_filename(config_path)
config, config_error := config_load(app)
if err, ok := config_error.?; ok {
}
state_connect_to_host :: proc(app: ^App) {
- app_set_info_bar(app, "Connecting to host..")
+ app_set_info_bar(app, "Connecting to host...")
maybe_host: Maybe(net.TCP_Socket)
hosts := strings.clone(app.profile.hosts, context.temp_allocator)
_ = io.read(stream, public_key_bytes[:]) or_return
+ log.infof("PK %v", public_key_bytes)
+
public_key: ed25519.Public_Key
ok := ed25519.public_key_set_bytes(&public_key, public_key_bytes[:])
if !ok do return {}, .Invalid_Public_Key
ed25519.public_key_bytes(&request.public_key, public_key_bytes[:])
_ = io.write(stream, public_key_bytes[:]) or_return
+ log.infof("PK %v", public_key_bytes)
+
client_request_inner_to_bytes(stream, request.inner) or_return
timestamp_bytes: [size_of(i64)]u8
import "core:bytes"
import "core:encoding/endian"
import "core:io"
+import "core:log"
import "core:net"
import "core:slice"
id_bytes := packet[:size_of(u32)]
id, _ = endian.get_u32(id_bytes[:], .Little)
+ log.infof("ID %v", id_bytes)
+
request_bytes := packet[size_of(u32):]
request_buffer: bytes.Buffer
request_buffer.buf = slice.into_dynamic(request_bytes[:])