diff options
author | Hiroshi Ichikawa <gimite@gmail.com> | 2011-09-18 15:07:12 +0900 |
---|---|---|
committer | Hiroshi Ichikawa <gimite@gmail.com> | 2011-09-18 15:07:12 +0900 |
commit | 24acbabaed38a9efaf1a6505e4d25a190963d85b (patch) | |
tree | 8460fa37ce13a9114faa95858d76bbf508598769 | |
parent | c1e7a1abd92446335cec8c93a58cd65224272856 (diff) | |
download | web-socket-js-24acbabaed38a9efaf1a6505e4d25a190963d85b.tar.gz |
Fixing closing handshake.
-rw-r--r-- | WebSocketMain.swf | bin | 175956 -> 176011 bytes | |||
-rw-r--r-- | WebSocketMainInsecure.zip | bin | 166708 -> 166896 bytes | |||
-rw-r--r-- | flash-src/src/net/gimite/websocket/WebSocket.as | 47 |
3 files changed, 29 insertions, 18 deletions
diff --git a/WebSocketMain.swf b/WebSocketMain.swf Binary files differindex e2df313..fbdb479 100644 --- a/WebSocketMain.swf +++ b/WebSocketMain.swf diff --git a/WebSocketMainInsecure.zip b/WebSocketMainInsecure.zip Binary files differindex 3729ecf..2793d76 100644 --- a/WebSocketMainInsecure.zip +++ b/WebSocketMainInsecure.zip diff --git a/flash-src/src/net/gimite/websocket/WebSocket.as b/flash-src/src/net/gimite/websocket/WebSocket.as index d47e1ca..20f11ba 100644 --- a/flash-src/src/net/gimite/websocket/WebSocket.as +++ b/flash-src/src/net/gimite/websocket/WebSocket.as @@ -41,10 +41,6 @@ public class WebSocket extends EventDispatcher { private static var OPCODE_PONG:int = 0x0a; private var id:int; - private var rawSocket:Socket; - private var tlsSocket:TLSSocket; - private var tlsConfig:TLSConfig; - private var socket:Socket; private var url:String; private var scheme:String; private var host:String; @@ -52,15 +48,23 @@ public class WebSocket extends EventDispatcher { private var path:String; private var origin:String; private var requestedProtocols:Array; + private var cookie:String; + private var headers:String; + + private var rawSocket:Socket; + private var tlsSocket:TLSSocket; + private var tlsConfig:TLSConfig; + private var socket:Socket; + private var acceptedProtocol:String; + private var expectedDigest:String; + private var buffer:ByteArray = new ByteArray(); private var headerState:int = 0; private var readyState:int = CONNECTING; - private var cookie:String; - private var headers:String; - private var expectedDigest:String; + private var logger:IWebSocketLogger; - private var b64encoder:Base64Encoder = new Base64Encoder(); + private var base64Encoder:Base64Encoder = new Base64Encoder(); public function WebSocket( id:int, url:String, protocols:Array, origin:String, @@ -154,8 +158,7 @@ public class WebSocket extends EventDispatcher { } } - public function close(isError:Boolean = false):void { - logger.log("close"); + public function close(isError:Boolean = false, byServer:Boolean = false):void { try { if (readyState == OPEN && !isError) { // TODO: send code and reason @@ -164,10 +167,18 @@ public class WebSocket extends EventDispatcher { frame.payload = new ByteArray(); sendFrame(frame); } - socket.close(); + if (byServer || isError) { + socket.close(); + } } catch (ex:Error) { } - readyState = CLOSED; - this.dispatchEvent(new WebSocketEvent(isError ? "error" : "close")); + if (byServer || isError) { + logger.log("closed"); + readyState = CLOSED; + this.dispatchEvent(new WebSocketEvent(isError ? "error" : "close")); + } else { + logger.log("closing"); + readyState = CLOSING; + } } private function onSocketConnect(event:Event):void { @@ -287,8 +298,8 @@ public class WebSocket extends EventDispatcher { break; case OPCODE_CLOSE: // TODO: extract code and reason string - logger.log("received closing packet"); - close(); + logger.log("received closing frame"); + close(false, true); break; case OPCODE_PING: sendPong(frame.payload); @@ -467,9 +478,9 @@ public class WebSocket extends EventDispatcher { for (var i:int = 0; i < 16; i++) { vals = vals + randomInt(0, 127).toString(); } - b64encoder.reset(); - b64encoder.encode(vals); - return b64encoder.toString(); + base64Encoder.reset(); + base64Encoder.encode(vals); + return base64Encoder.toString(); } private function readUTFBytes(buffer:ByteArray, start:int, numBytes:int):String { |