]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10762: [freeswitch-core] Websocket logic error #resolve
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 31 Oct 2017 03:10:59 +0000 (22:10 -0500)
committerMuteesa Fred <muteesafred@hotmail.com>
Tue, 24 Jul 2018 07:21:35 +0000 (07:21 +0000)
libs/sofia-sip/libsofia-sip-ua/tport/ws.c
src/mod/endpoints/mod_verto/ws.c

index 834fa3c139c4cf401ef24b281bd5779b38111d74..73a6f4e1c5dc9aa0401f579e5b68d0109ff4b1a7 100644 (file)
@@ -25,7 +25,7 @@
 #define WS_NOBLOCK 0
 
 #define WS_INIT_SANITY 5000
-#define WS_WRITE_SANITY 2000
+#define WS_WRITE_SANITY 200
 
 #define SHA1_HASH_SIZE 20
 static struct ws_globals_s ws_globals;
@@ -424,6 +424,11 @@ ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
                do {
                        r = SSL_write(wsh->ssl, (void *)((unsigned char *)data + wrote), bytes - wrote);
 
+                       if (r == 0) {
+                               ssl_err = 42;
+                               break;
+                       }
+                       
                        if (r > 0) {
                                wrote += r;
                        }
@@ -433,9 +438,9 @@ ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
 
                                if (wsh->block) {
                                        if (sanity < WS_WRITE_SANITY * 3 / 4) {
-                                               ms = 60;
+                                               ms = 50;
                                        } else if (sanity < WS_WRITE_SANITY / 2) {
-                                               ms = 10;
+                                               ms = 25;
                                        }
                                }
                                ms_sleep(ms);
@@ -456,6 +461,7 @@ ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
                
                if (ssl_err) {
                        r = ssl_err * -1;
+                       wsh->down = 1;
                }
 
                return r;
index 834fa3c139c4cf401ef24b281bd5779b38111d74..73a6f4e1c5dc9aa0401f579e5b68d0109ff4b1a7 100644 (file)
@@ -25,7 +25,7 @@
 #define WS_NOBLOCK 0
 
 #define WS_INIT_SANITY 5000
-#define WS_WRITE_SANITY 2000
+#define WS_WRITE_SANITY 200
 
 #define SHA1_HASH_SIZE 20
 static struct ws_globals_s ws_globals;
@@ -424,6 +424,11 @@ ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
                do {
                        r = SSL_write(wsh->ssl, (void *)((unsigned char *)data + wrote), bytes - wrote);
 
+                       if (r == 0) {
+                               ssl_err = 42;
+                               break;
+                       }
+                       
                        if (r > 0) {
                                wrote += r;
                        }
@@ -433,9 +438,9 @@ ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
 
                                if (wsh->block) {
                                        if (sanity < WS_WRITE_SANITY * 3 / 4) {
-                                               ms = 60;
+                                               ms = 50;
                                        } else if (sanity < WS_WRITE_SANITY / 2) {
-                                               ms = 10;
+                                               ms = 25;
                                        }
                                }
                                ms_sleep(ms);
@@ -456,6 +461,7 @@ ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
                
                if (ssl_err) {
                        r = ssl_err * -1;
+                       wsh->down = 1;
                }
 
                return r;