[asterisk-commits] kharwell: trunk r431671 - in /trunk: ./ res/ res/ari/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Feb 11 10:52:57 CST 2015
Author: kharwell
Date: Wed Feb 11 10:52:55 2015
New Revision: 431671
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=431671
Log:
res_http_websocket: websocket write timeout fails to fully disconnect
When writing to a websocket if a timeout occurred the underlying socket did not
get closed/disconnected. This patch makes sure the websocket gets disconnected
on a write timeout. Also a notice is logged stating that the websocket was
disconnected.
ASTERISK-24701 #close
Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/4412/
........
Merged revisions 431669 from http://svn.asterisk.org/svn/asterisk/branches/11
........
Merged revisions 431670 from http://svn.asterisk.org/svn/asterisk/branches/13
Modified:
trunk/ (props changed)
trunk/res/ari/ari_websockets.c
trunk/res/res_http_websocket.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-13-merged' - no diff available.
Modified: trunk/res/ari/ari_websockets.c
URL: http://svnview.digium.com/svn/asterisk/trunk/res/ari/ari_websockets.c?view=diff&rev=431671&r1=431670&r2=431671
==============================================================================
--- trunk/res/ari/ari_websockets.c (original)
+++ trunk/res/ari/ari_websockets.c Wed Feb 11 10:52:55 2015
@@ -99,6 +99,16 @@
struct ast_ari_websocket_session *session)
{
RAII_VAR(struct ast_json *, message, NULL, ast_json_unref);
+
+ if (ast_websocket_fd(session->ws_session) < 0) {
+ return NULL;
+ }
+
+
+ if (ast_websocket_fd(session->ws_session) <= 0) {
+ return NULL;
+ }
+
while (!message) {
int res;
@@ -127,7 +137,7 @@
switch (opcode) {
case AST_WEBSOCKET_OPCODE_CLOSE:
- ast_debug(1, "WebSocket closed by peer\n");
+ ast_debug(1, "WebSocket closed\n");
return NULL;
case AST_WEBSOCKET_OPCODE_TEXT:
message = ast_json_load_buf(payload, payload_len, NULL);
@@ -173,8 +183,12 @@
}
ast_debug(3, "Examining ARI event: \n%s\n", str);
- return ast_websocket_write(session->ws_session,
- AST_WEBSOCKET_OPCODE_TEXT, str, strlen(str));
+ if (ast_websocket_write(session->ws_session,
+ AST_WEBSOCKET_OPCODE_TEXT, str, strlen(str))) {
+ ast_log(LOG_NOTICE, "Problem occurred during websocket write, websocket closed\n");
+ return -1;
+ }
+ return 0;
}
void ari_handle_websocket(struct ast_websocket_server *ws_server,
Modified: trunk/res/res_http_websocket.c
URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_http_websocket.c?view=diff&rev=431671&r1=431670&r2=431671
==============================================================================
--- trunk/res/res_http_websocket.c (original)
+++ trunk/res/res_http_websocket.c Wed Feb 11 10:52:55 2015
@@ -307,11 +307,15 @@
}
if (ast_careful_fwrite(session->f, session->fd, frame, header_size, session->timeout)) {
ao2_unlock(session);
+ /* 1011 - server terminating connection due to not being able to fulfill the request */
+ ast_websocket_close(session, 1011);
return -1;
}
if (ast_careful_fwrite(session->f, session->fd, payload, actual_length, session->timeout)) {
ao2_unlock(session);
+ /* 1011 - server terminating connection due to not being able to fulfill the request */
+ ast_websocket_close(session, 1011);
return -1;
}
fflush(session->f);
More information about the asterisk-commits
mailing list