summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2015-07-29 14:35:58 -0500
committerMark Michelson <mmichelson@digium.com>2015-07-29 14:35:58 -0500
commit48698a5e21d7307f61b5fb2bd39fd593bc1423ca (patch)
treec80ad526cb0761265df85a14a6487cb2d91753fe
parentc9099d06cceb6934c731a56e7e8f57759c43aaca (diff)
res_http_websocket: Properly encode 64 bit payload
A test agent was continuously failing all ARI tests when run against Asterisk 13. As it turns out, the reason for this is that on those test runs, for some reason we decided to use the super extended 64 bit payload length for websocket text frames instead of the extended 16 bit payload length. For 64-bit payloads, the expected byte order over the network is 7, 6, 5, 4, 3, 2, 1, 0 However, we were sending the payload as 3, 2, 1, 0, 7, 6, 5, 4 This meant that we were saying to expect an absolutely MASSIVE payload to arrive. Since we did not follow through on this expected payload size, the client would sit patiently waiting for the rest of the payload to arrive until the test would time out. With this change, we use the htobe64() function instead of htonl() so that a 64-bit byte-swap is performed instead of a 32 bit byte-swap. Change-Id: Ibcd8552392845fbcdd017a8c8c1043b7fe35964a
-rw-r--r--res/res_http_websocket.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/res/res_http_websocket.c b/res/res_http_websocket.c
index 1f1f77ce5..144c08d0e 100644
--- a/res/res_http_websocket.c
+++ b/res/res_http_websocket.c
@@ -328,7 +328,7 @@ int AST_OPTIONAL_API_NAME(ast_websocket_write)(struct ast_websocket *session, en
if (length == 126) {
put_unaligned_uint16(&frame[2], htons(actual_length));
} else if (length == 127) {
- put_unaligned_uint64(&frame[2], htonl(actual_length));
+ put_unaligned_uint64(&frame[2], htobe64(actual_length));
}
ao2_lock(session);