Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e812e3cbbe | |||
| 23cecce39d | |||
| d8ee592823 | |||
| 221d2d0e6e |
@@ -5,6 +5,6 @@
|
|||||||
(license "BSD")
|
(license "BSD")
|
||||||
(category web)
|
(category web)
|
||||||
(author "Thomas Hintz")
|
(author "Thomas Hintz")
|
||||||
(depends spiffy intarweb uri-common base64 simple-sha1 mailbox comparse)
|
(depends (spiffy 5.3.1) intarweb uri-common base64 simple-sha1 mailbox comparse)
|
||||||
(files "websockets.setup" "websockets.meta" "websockets.release-info" "LICENSE"
|
(files "websockets.setup" "websockets.meta" "websockets.release-info" "LICENSE"
|
||||||
"utf8-grammar.scm"))
|
"utf8-grammar.scm"))
|
||||||
|
|||||||
@@ -4,3 +4,6 @@
|
|||||||
|
|
||||||
(release "0.0.1")
|
(release "0.0.1")
|
||||||
(release "0.1.0")
|
(release "0.1.0")
|
||||||
|
(release "0.1.1")
|
||||||
|
(release "0.1.2")
|
||||||
|
(release "0.1.3")
|
||||||
|
|||||||
@@ -198,14 +198,15 @@
|
|||||||
const unsigned char* __restrict kb = maskkey2;
|
const unsigned char* __restrict kb = maskkey2;
|
||||||
|
|
||||||
|
|
||||||
for (int i = wslen >> 2; i != 0; --i)
|
int i;
|
||||||
|
for (i = wslen >> 2; i != 0; --i)
|
||||||
{
|
{
|
||||||
*((unsigned int*)wsv) ^= kd;
|
*((unsigned int*)wsv) ^= kd;
|
||||||
wsv += 4;
|
wsv += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int rem = wslen & 3;
|
const int rem = wslen & 3;
|
||||||
for (int i = 0; i < rem; ++i)
|
for (i = 0; i < rem; ++i)
|
||||||
{
|
{
|
||||||
*((unsigned int*)wsv++) ^= kb[i];
|
*((unsigned int*)wsv++) ^= kb[i];
|
||||||
}
|
}
|
||||||
@@ -343,7 +344,8 @@
|
|||||||
"
|
"
|
||||||
if (ws_utlen > UINT_MAX) { return -1; }
|
if (ws_utlen > UINT_MAX) { return -1; }
|
||||||
|
|
||||||
for (int i = ws_utlen; i != 0; --i)
|
int i;
|
||||||
|
for (i = ws_utlen; i != 0; --i)
|
||||||
{
|
{
|
||||||
if (*((unsigned char*)ws_uts++) > 127)
|
if (*((unsigned char*)ws_uts++) > 127)
|
||||||
{
|
{
|
||||||
@@ -451,8 +453,13 @@
|
|||||||
(define (process-fragments fragments optype #!optional (ws (current-websocket)))
|
(define (process-fragments fragments optype #!optional (ws (current-websocket)))
|
||||||
(let ((message-body (string-concatenate/shared
|
(let ((message-body (string-concatenate/shared
|
||||||
(reverse (map unmask fragments)))))
|
(reverse (map unmask fragments)))))
|
||||||
(when (and (eq? optype 'text)
|
(when (and (or (eq? optype 'text) (eq? optype 'connection-close))
|
||||||
(not (valid-utf8? message-body)))
|
(not (valid-utf8?
|
||||||
|
(if (eq? optype 'text)
|
||||||
|
message-body
|
||||||
|
(if (> (string-length message-body) 2)
|
||||||
|
(substring message-body 2)
|
||||||
|
"")))))
|
||||||
(set-websocket-state! ws 'error)
|
(set-websocket-state! ws 'error)
|
||||||
(signal (make-websocket-exception
|
(signal (make-websocket-exception
|
||||||
(make-property-condition
|
(make-property-condition
|
||||||
@@ -497,7 +504,10 @@
|
|||||||
#t)
|
#t)
|
||||||
(let loop ()
|
(let loop ()
|
||||||
(receive (data type) (receive-message ws)
|
(receive (data type) (receive-message ws)
|
||||||
(unless (eq? type 'connection-close) (loop)))))
|
(if (eq? type 'connection-close)
|
||||||
|
(unless (valid-utf8? data)
|
||||||
|
(set! close-reason 'invalid-data))
|
||||||
|
(loop)))))
|
||||||
(begin
|
(begin
|
||||||
(send-frame ws 'connection-close
|
(send-frame ws 'connection-close
|
||||||
(u8vector 3 (close-reason->close-code close-reason))
|
(u8vector 3 (close-reason->close-code close-reason))
|
||||||
|
|||||||
@@ -6,4 +6,4 @@
|
|||||||
|
|
||||||
(install-extension 'websockets
|
(install-extension 'websockets
|
||||||
'("websockets.so" "websockets.import.so")
|
'("websockets.so" "websockets.import.so")
|
||||||
`((version "0.1.0")))
|
`((version "0.1.3")))
|
||||||
|
|||||||
Reference in New Issue
Block a user