res_http_websocket: Debug write lengths.

Commit 39cc28f6ea 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
39cc28f6ea 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
changes/33/1033/1
Mark Michelson 10 years ago
parent 1aa23a5d1b
commit 27dc2094e9

@ -174,7 +174,7 @@ int ast_ari_websocket_session_write(struct ast_ari_websocket_session *session,
return -1; 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)) { if (ast_websocket_write_string(session->ws_session, str)) {
ast_log(LOG_NOTICE, "Problem occurred during websocket write, websocket closed\n"); ast_log(LOG_NOTICE, "Problem occurred during websocket write, websocket closed\n");
return -1; return -1;

@ -298,6 +298,24 @@ int AST_OPTIONAL_API_NAME(ast_websocket_close)(struct ast_websocket *session, ui
return res; 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 */ /*! \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) int AST_OPTIONAL_API_NAME(ast_websocket_write)(struct ast_websocket *session, enum ast_websocket_opcode opcode, char *payload, uint64_t actual_length)
@ -306,6 +324,9 @@ int AST_OPTIONAL_API_NAME(ast_websocket_write)(struct ast_websocket *session, en
char *frame; char *frame;
uint64_t length; uint64_t length;
ast_debug(3, "Writing websocket %s frame, length %" PRIu64 "\n",
websocket_opcode2str(opcode), actual_length);
if (actual_length < 126) { if (actual_length < 126) {
length = actual_length; length = actual_length;
} else if (actual_length < (1 << 16)) { } else if (actual_length < (1 << 16)) {
@ -1356,6 +1377,8 @@ int AST_OPTIONAL_API_NAME(ast_websocket_write_string)
{ {
uint64_t len = strlen(buf); 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 /* 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 * size_t returned by strlen() may not require the same storage size
* as the uint64_t that ast_websocket_write() uses. This normally * as the uint64_t that ast_websocket_write() uses. This normally

Loading…
Cancel
Save