[Asterisk-code-review] res http websocket: Debug write lengths. (asterisk[master])

Mark Michelson asteriskteam at digium.com
Tue Aug 4 10:19:36 CDT 2015


Mark Michelson has uploaded a new change for review.

  https://gerrit.asterisk.org/1034

Change subject: res_http_websocket: Debug write lengths.
......................................................................

res_http_websocket: Debug write lengths.

Commit 39cc28f6ea2140ad6d561fd4c9e9a66f065cecee attempted to fix a
test failure observed on 32 bit test agents by ensuring that a cast from
a 32 bit unsigned integer to a 64 bit unsigned integer was happening in
a predictable place. As it turns out, this did not cause test runs to
succeed.

This commit adds several redundant debug messages that print the payload
lengths of websocket frames. The idea here is that this commit will not
cause tests to succeed for the faulty test agent, but we might deduce
where the fault lies more easily this way by observing at what point the
expected value (537) changes to some ungangly huge number.

If you are wondering why something like this is being committed to the
branch, keep in mind that in commit
39cc28f6ea2140ad6d561fd4c9e9a66f065cecee I noted that the observed test
failures only happen when automated tests are run. Attempts to run the
tests by hand manually on the test agent result in the tests passing.

Change-Id: I14a65c19d8af40dadcdbd52348de3b0016e1ae8d
---
M res/ari/ari_websockets.c
M res/res_http_websocket.c
2 files changed, 24 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/34/1034/1

diff --git a/res/ari/ari_websockets.c b/res/ari/ari_websockets.c
index ced1e0d..528e7f8 100644
--- a/res/ari/ari_websockets.c
+++ b/res/ari/ari_websockets.c
@@ -174,7 +174,7 @@
 		return -1;
 	}
 
-	ast_debug(3, "Examining ARI event: \n%s\n", str);
+	ast_debug(3, "Examining ARI event (length %zu): \n%s\n", strlen(str), str);
 	if (ast_websocket_write_string(session->ws_session, str)) {
 		ast_log(LOG_NOTICE, "Problem occurred during websocket write, websocket closed\n");
 		return -1;
diff --git a/res/res_http_websocket.c b/res/res_http_websocket.c
index 3390545..9e5c60d 100644
--- a/res/res_http_websocket.c
+++ b/res/res_http_websocket.c
@@ -300,6 +300,24 @@
 	return res;
 }
 
+static const char *opcode_map[] = {
+	[AST_WEBSOCKET_OPCODE_CONTINUATION] = "continuation",
+	[AST_WEBSOCKET_OPCODE_TEXT] = "text",
+	[AST_WEBSOCKET_OPCODE_BINARY] = "binary",
+	[AST_WEBSOCKET_OPCODE_CLOSE] = "close",
+	[AST_WEBSOCKET_OPCODE_PING] = "ping",
+	[AST_WEBSOCKET_OPCODE_PONG] = "pong",
+};
+
+static const char *websocket_opcode2str(enum ast_websocket_opcode opcode)
+{
+	if (opcode < AST_WEBSOCKET_OPCODE_CONTINUATION ||
+			opcode > AST_WEBSOCKET_OPCODE_PONG) {
+		return "<unknown>";
+	} else {
+		return opcode_map[opcode];
+	}
+}
 
 /*! \brief Write function for websocket traffic */
 int AST_OPTIONAL_API_NAME(ast_websocket_write)(struct ast_websocket *session, enum ast_websocket_opcode opcode, char *payload, uint64_t actual_length)
@@ -307,6 +325,9 @@
 	size_t header_size = 2; /* The minimum size of a websocket frame is 2 bytes */
 	char *frame;
 	uint64_t length;
+
+	ast_debug(3, "Writing websocket %s frame, length %" PRIu64 "\n",
+			websocket_opcode2str(opcode), actual_length);
 
 	if (actual_length < 126) {
 		length = actual_length;
@@ -1372,6 +1393,8 @@
 {
 	uint64_t len = strlen(buf);
 
+	ast_debug(3, "Writing websocket string of length %" PRIu64 "\n", len);
+
 	/* We do not pass strlen(buf) to ast_websocket_write() directly because the
 	 * size_t returned by strlen() may not require the same storage size
 	 * as the uint64_t that ast_websocket_write() uses. This normally

-- 
To view, visit https://gerrit.asterisk.org/1034
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I14a65c19d8af40dadcdbd52348de3b0016e1ae8d
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Owner: Mark Michelson <mmichelson at digium.com>



More information about the asterisk-code-review mailing list