From 080192d12eff59161ae8c66af3f054feed098ef7 Mon Sep 17 00:00:00 2001 From: Remy Date: Mon, 31 Jan 2022 22:56:27 -0500 Subject: [PATCH] disable ws compression, remove trailing \n from ws protocol, readme Python example dies with compression enabled. Trailing \n makes no sense in ws protocol, removed so we can use strict == in legnth of segments. Updated readme and examples to reflect change --- README.md | 4 ++-- bitslinger.go | 12 ++++++++---- examples/golang/example_websockets.go | 4 ++-- examples/nodejs/example_websockets.js | 4 ++-- examples/python3/example_websockets.py | 4 ++-- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index aa90e49..c2a124b 100644 --- a/README.md +++ b/README.md @@ -73,9 +73,9 @@ An HTTP `POST` request is sent through the proxy and back to the bitslinger HTTP In this mode bitslinger will automatically stand up a WebSocket server in this mode and attempt to send and receive messages containing the packets in the following format to any connected WebSocket client. -EX: `96f7ba66-d3f2-4b06-b6a0-e5975525d98f\n68656c6c6f0a\n` +EX: `96f7ba66-d3f2-4b06-b6a0-e5975525d98f\n68656c6c6f0a` -Where the UUID and hex encoded payloads segments are terminated with a Line-Feed `\n`. +Where the UUID and hex encoded payloads segments are separated with a Line-Feed `\n`. ### No Proxy diff --git a/bitslinger.go b/bitslinger.go index 471dd23..10f52a4 100644 --- a/bitslinger.go +++ b/bitslinger.go @@ -37,7 +37,9 @@ var ( httpClient *http.Client ) -var upgrader = websocket.Upgrader{} // use default options +var upgrader = websocket.Upgrader{ + EnableCompression: false, +} // var tcpClient net.Conn var gpq *manager.PacketQueue @@ -235,6 +237,8 @@ func receivePayloadWS(w http.ResponseWriter, r *http.Request) { } slog.Info().Str("caller", r.RemoteAddr).Msg("WS Client Connected") // slog.SetOutput(ioutil.Discard) + c.EnableWriteCompression(false) + c.SetCompressionLevel(0) wsConn = c defer func(c *websocket.Conn) { @@ -259,7 +263,7 @@ func receivePayloadWS(w http.ResponseWriter, r *http.Request) { // Segment Message segments := strings.Split(string(message), "\n") - if len(segments) < 2 { + if len(segments) != 2 { slog.Warn().Str("message", string(message)).Msg("unexpected message format") continue } @@ -311,7 +315,7 @@ func httpModeHandler(pckt manager.Packet) { return } - log.Warn().Msg("HTTP Proxy communication failed, Default forwarding packet as-is") + slog.Warn().Msg("HTTP Proxy communication failed, Default forwarding packet as-is") gpq.AcceptAndRelease(pckt.UUID()) } @@ -320,7 +324,7 @@ func wsModeHandler(pckt manager.Packet) { defer slog.Trace().Msg("wsModeHandler done") - hexEncodedPayload := []byte(pckt.UUID() + "\n" + hex.EncodeToString(pckt.AppLayer().Payload()) + "\n") + hexEncodedPayload := []byte(pckt.UUID() + "\n" + hex.EncodeToString(pckt.AppLayer().Payload())) if wsConn != nil { err := wsConn.WriteMessage(websocket.TextMessage, hexEncodedPayload) if err != nil { diff --git a/examples/golang/example_websockets.go b/examples/golang/example_websockets.go index 1a687e2..ceb8270 100644 --- a/examples/golang/example_websockets.go +++ b/examples/golang/example_websockets.go @@ -20,7 +20,7 @@ var interrupt chan os.Signal func unpackBitSlinger(message []byte) (packetUuid string, packetPayload []byte, err error) { segments := strings.Split(string(message), "\n") - if len(segments) >= 2 { + if len(segments) == 2 { packetUuid := segments[0] packetPayload, err := hex.DecodeString(segments[1]) if err != nil { @@ -34,7 +34,7 @@ func unpackBitSlinger(message []byte) (packetUuid string, packetPayload []byte, } func packBitSlinger(packetUuid string, packetPayload []byte) (message []byte) { - return []byte(packetUuid + "\n" + hex.EncodeToString(packetPayload) + "\n") + return []byte(packetUuid + "\n" + hex.EncodeToString(packetPayload)) } func modifyPayload(payload []byte) []byte { diff --git a/examples/nodejs/example_websockets.js b/examples/nodejs/example_websockets.js index 5ccdf3f..bb839a4 100644 --- a/examples/nodejs/example_websockets.js +++ b/examples/nodejs/example_websockets.js @@ -4,7 +4,7 @@ const ws = new WebSocket('ws://127.0.0.1:9393/bitslinger'); function unpackBitSlinger(message) { var segments = message.split('\n'); - if (segments.length >= 2) { + if (segments.length == 2) { var packetUuid = segments[0]; var packetPayload = Buffer.from(segments[1], 'hex') return [packetUuid, packetPayload] @@ -12,7 +12,7 @@ function unpackBitSlinger(message) { } function packBitSlinger(packetUuid, packetPayload) { - return packetUuid + '\n' + Buffer.toString('hex') + '\n' + return packetUuid + '\n' + Buffer.toString('hex') } function modifyPayload(packetPayload) { diff --git a/examples/python3/example_websockets.py b/examples/python3/example_websockets.py index 0b25d1b..e88a43a 100644 --- a/examples/python3/example_websockets.py +++ b/examples/python3/example_websockets.py @@ -4,13 +4,13 @@ import time def unpackBitSlinger(message): segments = message.split("\n") - if len(segments) >= 2: + if len(segments) == 2: packetUuid = segments[0] packetPayload = bytes.fromhex(segments[1]) return packetUuid, packetPayload def packBitSlinger(packetUuid, packetPayload): - return packetUuid + "\n" + packetPayload.hex() + "\n" + return packetUuid + "\n" + packetPayload.hex() def modifyPayload(packetPayload): return packetPayload.replace(b'world', b'remy!')