summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--WebSocketMain.swfbin177139 -> 179939 bytes
-rw-r--r--flash-src/src/net/gimite/websocket/WebSocket.as21
2 files changed, 20 insertions, 1 deletions
diff --git a/WebSocketMain.swf b/WebSocketMain.swf
index f286c81..cda89d6 100644
--- a/WebSocketMain.swf
+++ b/WebSocketMain.swf
Binary files differ
diff --git a/flash-src/src/net/gimite/websocket/WebSocket.as b/flash-src/src/net/gimite/websocket/WebSocket.as
index dcde61b..6ae5aba 100644
--- a/flash-src/src/net/gimite/websocket/WebSocket.as
+++ b/flash-src/src/net/gimite/websocket/WebSocket.as
@@ -66,6 +66,7 @@ public class WebSocket extends EventDispatcher {
private var expectedDigest:String;
private var buffer:ByteArray = new ByteArray();
+ private var fragmentsBuffer:ByteArray = null;
private var headerState:int = 0;
private var readyState:int = CONNECTING;
@@ -329,15 +330,33 @@ public class WebSocket extends EventDispatcher {
} else {
switch (frame.opcode) {
case OPCODE_CONTINUATION:
- close(1003, "Received continuation frame, which is not implemented.");
+ if (fragmentsBuffer == null) {
+ close(1002, "Unexpected continuation frame");
+ } else {
+ fragmentsBuffer.writeBytes(frame.payload);
+ if (frame.fin) {
+ data = readUTFBytes(fragmentsBuffer, 0, fragmentsBuffer.length);
+ try {
+ this.dispatchEvent(new WebSocketEvent("message", encodeURIComponent(data)));
+ } catch (ex:URIError) {
+ close(1007, "URIError while encoding the received data.");
+ }
+ fragmentsBuffer = null;
+ }
+ }
break;
case OPCODE_TEXT:
+ if (frame.fin) {
var data:String = readUTFBytes(frame.payload, 0, frame.payload.length);
try {
this.dispatchEvent(new WebSocketEvent("message", encodeURIComponent(data)));
} catch (ex:URIError) {
close(1007, "URIError while encoding the received data.");
}
+ } else {
+ fragmentsBuffer = new ByteArray();
+ fragmentsBuffer.writeBytes(frame.payload);
+ }
break;
case OPCODE_BINARY:
// See https://github.com/gimite/web-socket-js/pull/89