From 5fcd1bc556af56017f35021062843db8d1bc6b4d Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Wed, 29 Jul 2015 14:35:58 -0500 Subject: [PATCH] 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 --- res/res_http_websocket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/res_http_websocket.c b/res/res_http_websocket.c index ecae039192..b3ad2f76c8 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); -- 2.47.2