X-Git-Url: https://jxself.org/git/?p=8sync.git;a=blobdiff_plain;f=8sync%2Fsystems%2Fwebsocket%2Fserver.scm;h=c29ce51e44c40c545219f258daad01dee5207631;hp=0865d675d41b6421ab92fe56b31b09ec4411cf83;hb=HEAD;hpb=f0c6e9e653ca414cf881296cc9511cd7d404c797 diff --git a/8sync/systems/websocket/server.scm b/8sync/systems/websocket/server.scm index 0865d67..11704d4 100644 --- a/8sync/systems/websocket/server.scm +++ b/8sync/systems/websocket/server.scm @@ -1,6 +1,7 @@ ;;; guile-websocket --- WebSocket client/server ;;; Copyright © 2015 David Thompson ;;; Copyright © 2017 Christopher Allan Webber +;;; Copyright © 2020,2021 Jan (janneke) Nieuwenhuizen ;;; ;;; This file is part of guile-websocket. ;;; @@ -70,8 +71,7 @@ string." ((ws-send websocket-server-send)) (upgrade-paths #:init-value `(("websocket" . ,(wrap-apply websocket-client-loop))) - #:allocation #:each-subclass - #:accessor .upgrade-paths) + #:allocation #:each-subclass) (gen-client-id #:init-thunk make-simple-counter) @@ -134,7 +134,9 @@ called for each complete message that is received." (let ((frame (read-frame-maybe))) (cond ;; EOF - port is closed. - ((not frame) + ;; @@: Sometimes the eof object appears here as opposed to + ;; at lookahead, but I'm not sure why + ((or (not frame) (eof-object? frame)) (close-down)) ;; Per section 5.4, control frames may appear interspersed ;; along with a fragmented message. @@ -155,7 +157,8 @@ called for each complete message that is received." ((first-fragment-frame? frame) ; begin accumulating fragments (loop (list frame) (frame-type frame))) ((final-fragment-frame? frame) ; concatenate all fragments - (handle-data-frame type (frame-concatenate (reverse fragments))) + (handle-data-frame type (frame-concatenate + (reverse (cons frame fragments)))) (loop '() #f)) ((fragment-frame? frame) ; add a fragment (loop (cons frame fragments) type))