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:47:39 -0500
commit5fcd1bc556af56017f35021062843db8d1bc6b4d (patch)
treef46c8d6bbd226780c1bc9a3115bf54d85aa9f876
parent687597ca8c2412f79b79f9b13e17f3ec0ff0ce0c (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 ecae03919..b3ad2f76c 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);