websocket: Also concatenate last fragmented frame.
authorJan Nieuwenhuizen <janneke@gnu.org>
Mon, 27 Jan 2020 17:35:12 +0000 (18:35 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Mon, 27 Jan 2020 17:37:42 +0000 (18:37 +0100)
* 8sync/systems/websocket/server.scm (websocket-client-loop): Also add
final fragmented frame.

8sync/systems/websocket/server.scm

index 6283255ede52bcc5bfc48277e134878a538665fc..af0fe1fb5b88af205c7c53d825f6e65e91e42679 100644 (file)
@@ -1,6 +1,7 @@
 ;;; guile-websocket --- WebSocket client/server
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2017 Christopher Allan Webber <cwebber@dustycloud.org>
+;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of guile-websocket.
 ;;;
@@ -156,11 +157,11 @@ called for each complete message that is received."
           (loop fragments type))
          ((first-fragment-frame? frame) ; begin accumulating fragments
           (loop (list frame) (frame-type frame)))
+         ((fragment-frame? frame) ; add a fragment
+          (loop (cons frame fragments) type))
          ((final-fragment-frame? frame) ; concatenate all fragments
           (handle-data-frame type (frame-concatenate (reverse fragments)))
           (loop '() #f))
-         ((fragment-frame? frame) ; add a fragment
-          (loop (cons frame fragments) type))
          ((data-frame? frame) ; unfragmented data frame
           (handle-data-frame (frame-type frame) (frame-data frame))
           (loop '() #f)))))))