]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10762: [freeswitch-core] Websocket logic error
authorAnthony Minessale <anthm@freeswitch.org>
Mon, 13 Nov 2017 19:49:23 +0000 (13:49 -0600)
committerMuteesa Fred <muteesafred@hotmail.com>
Tue, 24 Jul 2018 07:21:33 +0000 (07:21 +0000)
libs/sofia-sip/.update
libs/sofia-sip/libsofia-sip-ua/tport/tport_type_ws.c
libs/sofia-sip/libsofia-sip-ua/tport/ws.c
src/mod/endpoints/mod_verto/ws.c

index 0b779c7ab1d8bcb1bf792c767b7ea1b92dfe4a41..7465198045392fb072af0d1f8fce3a8db98f3833 100644 (file)
@@ -1 +1 @@
-Wed Feb 21 13:55:11 CDT 2018
+Mon Nov 13 13:48:40 CST 2017
index 3ce3b4a005a0873b5c8d4bc4f4fd9fa153db10f3..de0cda565f0122d98e87d788dce7c0e8e7525d2d 100644 (file)
@@ -314,16 +314,26 @@ ssize_t tport_send_stream_ws(tport_t const *self, msg_t *msg,
     if (nerror == -1) {
       int err = su_errno();
       if (su_is_blocking(err))
-       break;
+                 break;
       SU_DEBUG_3(("ws_write: %s\n", strerror(err)));
       return -1;
     }
   }
 
   if (wstp->wstp_buflen) {
+         ssize_t wrote = 0;
+         
          *(wstp->wstp_buffer + wstp->wstp_buflen) = '\0';
-         ws_write_frame(&wstp->ws, WSOC_TEXT, wstp->wstp_buffer, wstp->wstp_buflen);
-         size = wstp->wstp_buflen;
+         wrote = ws_write_frame(&wstp->ws, WSOC_TEXT, wstp->wstp_buffer, wstp->wstp_buflen);
+
+         if (wrote < 0) {
+                 int err = su_errno();
+                 SU_DEBUG_3(("ws_write_frame: %s\n", strerror(err)));
+                 size = wrote;
+                 
+         } else {
+                 size = wstp->wstp_buflen;
+         }
   }
 
   return size;
index 3dc776f5301f95dae8bedbd623fbd0980ea16886..32fee259b4cab0821bf312a74b3ec2fc12a08720 100644 (file)
@@ -448,8 +448,10 @@ ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
                                ssl_err = 0;
                        }
 
-               } while (--sanity > 0 && wsh->block && wrote < bytes);
+               } while (--sanity > 0 && wrote < bytes);
 
+               if (!sanity) ssl_err = 56;
+               
                if (ssl_err) {
                        r = ssl_err * -1;
                }
@@ -469,9 +471,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);
@@ -483,7 +485,7 @@ ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
                        }
                }
 
-       } while (--sanity > 0 && wsh->block && wrote < bytes);
+       } while (--sanity > 0 && wrote < bytes);
 
        //if (r<0) {
                //printf("wRITE FAIL: %s\n", strerror(errno));
index 3dc776f5301f95dae8bedbd623fbd0980ea16886..32fee259b4cab0821bf312a74b3ec2fc12a08720 100644 (file)
@@ -448,8 +448,10 @@ ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
                                ssl_err = 0;
                        }
 
-               } while (--sanity > 0 && wsh->block && wrote < bytes);
+               } while (--sanity > 0 && wrote < bytes);
 
+               if (!sanity) ssl_err = 56;
+               
                if (ssl_err) {
                        r = ssl_err * -1;
                }
@@ -469,9 +471,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);
@@ -483,7 +485,7 @@ ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
                        }
                }
 
-       } while (--sanity > 0 && wsh->block && wrote < bytes);
+       } while (--sanity > 0 && wrote < bytes);
 
        //if (r<0) {
                //printf("wRITE FAIL: %s\n", strerror(errno));