diff options
author | Hiroshi Ichikawa <gimite@gmail.com> | 2011-02-27 12:38:42 +0900 |
---|---|---|
committer | Hiroshi Ichikawa <gimite@gmail.com> | 2011-02-27 12:38:42 +0900 |
commit | 0a09afaf9bc5a34483c4f8dfe9d21a64da110bff (patch) | |
tree | e754d6aff2238671487e7f3bc3f492b9fde42b2a | |
parent | 87daea0c26c030800043e1068e17cc9bc0fa004c (diff) | |
download | web-socket-js-0a09afaf9bc5a34483c4f8dfe9d21a64da110bff.tar.gz |
Minimizing dependency from WebSocket to WebSocketMain.
Removing WebSocket.swc.
-rw-r--r-- | WebSocket.swc | bin | 246314 -> 0 bytes | |||
-rw-r--r-- | WebSocketMain.swf | bin | 175680 -> 175725 bytes | |||
-rw-r--r-- | WebSocketMainInsecure.zip | bin | 166253 -> 166519 bytes | |||
-rw-r--r-- | flash-src/IWebSocketLogger.as | 8 | ||||
-rw-r--r-- | flash-src/IWebSocketWrapper.as | 9 | ||||
-rw-r--r-- | flash-src/WebSocket.as | 47 | ||||
-rw-r--r-- | flash-src/WebSocketMain.as | 47 | ||||
-rwxr-xr-x | flash-src/build.sh | 5 |
8 files changed, 55 insertions, 61 deletions
diff --git a/WebSocket.swc b/WebSocket.swc Binary files differdeleted file mode 100644 index 92ff58f..0000000 --- a/WebSocket.swc +++ /dev/null diff --git a/WebSocketMain.swf b/WebSocketMain.swf Binary files differindex 74a70a1..f6f927a 100644 --- a/WebSocketMain.swf +++ b/WebSocketMain.swf diff --git a/WebSocketMainInsecure.zip b/WebSocketMainInsecure.zip Binary files differindex 019c600..2c47546 100644 --- a/WebSocketMainInsecure.zip +++ b/WebSocketMainInsecure.zip diff --git a/flash-src/IWebSocketLogger.as b/flash-src/IWebSocketLogger.as new file mode 100644 index 0000000..24f4ef7 --- /dev/null +++ b/flash-src/IWebSocketLogger.as @@ -0,0 +1,8 @@ +package { + +public interface IWebSocketLogger { + function log(message:String):void; + function error(message:String):void; +} + +} diff --git a/flash-src/IWebSocketWrapper.as b/flash-src/IWebSocketWrapper.as deleted file mode 100644 index 0dd87d0..0000000 --- a/flash-src/IWebSocketWrapper.as +++ /dev/null @@ -1,9 +0,0 @@ -package { - - public interface IWebSocketWrapper { - function getOrigin():String; - function getCallerHost():String; - function log(message:String):void; - function error(message:String):void; - } -}
\ No newline at end of file diff --git a/flash-src/WebSocket.as b/flash-src/WebSocket.as index 72cc7d1..42a8d79 100644 --- a/flash-src/WebSocket.as +++ b/flash-src/WebSocket.as @@ -36,7 +36,6 @@ public class WebSocket extends EventDispatcher { private var tlsSocket:TLSSocket; private var tlsConfig:TLSConfig; private var socket:Socket; - private var main:IWebSocketWrapper; private var url:String; private var scheme:String; private var host:String; @@ -47,15 +46,18 @@ public class WebSocket extends EventDispatcher { 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 noiseChars:Array; private var expectedDigest:String; + private var logger:IWebSocketLogger; public function WebSocket( - main:IWebSocketWrapper, id:int, url:String, protocol:String, - proxyHost:String = null, proxyPort:int = 0, - headers:String = null) { - this.main = main; + id:int, url:String, protocol:String, origin:String, + proxyHost:String, proxyPort:int, + cookie:String, headers:String, + logger:IWebSocketLogger) { + this.logger = logger; this.id = id; initNoiseChars(); this.url = url; @@ -65,8 +67,9 @@ public class WebSocket extends EventDispatcher { this.host = m[2]; this.port = parseInt(m[4] || "80"); this.path = m[5] || "/"; - this.origin = main.getOrigin(); + this.origin = origin; this.protocol = protocol; + this.cookie = cookie; // if present and not the empty string, headers MUST end with \r\n // headers should be zero or more complete lines, for example // "Header1: xxx\r\nHeader2: yyyy\r\n" @@ -124,7 +127,7 @@ public class WebSocket extends EventDispatcher { socket.writeUTFBytes(data); socket.writeByte(0xff); socket.flush(); - main.log("sent: " + data); + logger.log("sent: " + data); return -1; } else if (readyState == CLOSING || readyState == CLOSED) { var bytes:ByteArray = new ByteArray(); @@ -137,7 +140,7 @@ public class WebSocket extends EventDispatcher { } public function close(isError:Boolean = false):void { - main.log("close"); + logger.log("close"); try { if (readyState == OPEN && !isError) { socket.writeByte(0xff); @@ -151,18 +154,14 @@ public class WebSocket extends EventDispatcher { } private function onSocketConnect(event:Event):void { - main.log("connected"); + logger.log("connected"); if (scheme == "wss") { - main.log("starting SSL/TLS"); + logger.log("starting SSL/TLS"); tlsSocket.startTLS(rawSocket, host, tlsConfig); } var hostValue:String = host + (port == 80 ? "" : ":" + port); - var cookie:String = ""; - if (main.getCallerHost() == host) { - cookie = ExternalInterface.call("function(){return document.cookie}"); - } var key1:String = generateKey(); var key2:String = generateKey(); var key3:String = generateKey3(); @@ -184,15 +183,15 @@ public class WebSocket extends EventDispatcher { "{6}" + "\r\n", path, hostValue, origin, cookie, key1, key2, opt); - main.log("request header:\n" + req); + logger.log("request header:\n" + req); socket.writeUTFBytes(req); - main.log("sent key3: " + key3); + logger.log("sent key3: " + key3); writeBytes(key3); socket.flush(); } private function onSocketClose(event:Event):void { - main.log("closed"); + logger.log("closed"); readyState = CLOSED; this.dispatchEvent(new WebSocketEvent("close")); } @@ -221,7 +220,7 @@ public class WebSocket extends EventDispatcher { private function onError(message:String):void { if (readyState == CLOSED) return; - main.error(message); + logger.error(message); close(readyState != CONNECTING); } @@ -240,7 +239,7 @@ public class WebSocket extends EventDispatcher { } if (headerState == 4) { var headerStr:String = readUTFBytes(buffer, 0, pos + 1); - main.log("response header:\n" + headerStr); + logger.log("response header:\n" + headerStr); if (!validateHeader(headerStr)) return; removeBufferBefore(pos + 1); pos = -1; @@ -248,7 +247,7 @@ public class WebSocket extends EventDispatcher { } else if (headerState == 4) { if (pos == 15) { var replyDigest:String = readBytes(buffer, 0, 16); - main.log("reply digest: " + replyDigest); + logger.log("reply digest: " + replyDigest); if (replyDigest != expectedDigest) { onError("digest doesn't match: " + replyDigest + " != " + expectedDigest); return; @@ -266,12 +265,12 @@ public class WebSocket extends EventDispatcher { return; } var data:String = readUTFBytes(buffer, 1, pos - 1); - main.log("received: " + data); + logger.log("received: " + data); this.dispatchEvent(new WebSocketEvent("message", encodeURIComponent(data))); removeBufferBefore(pos + 1); pos = -1; } else if (pos == 1 && buffer[0] == 0xff && buffer[1] == 0x00) { // closing - main.log("received closing packet"); + logger.log("received closing packet"); removeBufferBefore(pos + 1); pos = -1; close(); @@ -435,7 +434,7 @@ public class WebSocket extends EventDispatcher { } private function fatal(message:String):void { - main.error(message); + logger.error(message); throw message; } @@ -445,7 +444,7 @@ public class WebSocket extends EventDispatcher { for (var i:int = 0; i < bytes.length; ++i) { output += bytes.charCodeAt(i).toString() + ", "; } - main.log(output); + logger.log(output); } } diff --git a/flash-src/WebSocketMain.as b/flash-src/WebSocketMain.as index 22d42f5..5661df0 100644 --- a/flash-src/WebSocketMain.as +++ b/flash-src/WebSocketMain.as @@ -15,7 +15,7 @@ import mx.utils.URLUtil; /** * Provides JavaScript API of WebSocket. */ -public class WebSocketMain extends Sprite implements IWebSocketWrapper{ +public class WebSocketMain extends Sprite implements IWebSocketLogger{ private var callerUrl:String; private var debug:Boolean = false; @@ -34,10 +34,6 @@ public class WebSocketMain extends Sprite implements IWebSocketWrapper{ ExternalInterface.call("WebSocket.__onFlashInitialized"); } - /************* - * Initialization / Utility methods - */ - public function setCallerUrl(url:String):void { callerUrl = url; } @@ -46,15 +42,6 @@ public class WebSocketMain extends Sprite implements IWebSocketWrapper{ debug = val; } - public function getOrigin():String { - return (URLUtil.getProtocol(this.callerUrl) + "://" + - URLUtil.getServerNameWithPort(this.callerUrl)).toLowerCase(); - } - - public function getCallerHost():String { - return URLUtil.getServerName(this.callerUrl); - } - private function loadDefaultPolicyFile(wsUrl:String):void { var policyUrl:String = "xmlsocket://" + URLUtil.getServerName(wsUrl) + ":843"; log("policy file: " + policyUrl); @@ -89,19 +76,17 @@ public class WebSocketMain extends Sprite implements IWebSocketWrapper{ return eventObj; } - /** - * Socket interface - */ public function create( - webSocketId:int, - url:String, protocol:String, - proxyHost:String = null, proxyPort:int = 0, - headers:String = null):void { + webSocketId:int, + url:String, protocol:String, + proxyHost:String = null, proxyPort:int = 0, + headers:String = null):void { if (!manualPolicyFileLoaded) { loadDefaultPolicyFile(url); } var newSocket:WebSocket = new WebSocket( - this, webSocketId, url, protocol, proxyHost, proxyPort, headers); + webSocketId, url, protocol, getOrigin(), proxyHost, proxyPort, + getCookie(url), headers, this); newSocket.addEventListener("open", onSocketEvent); newSocket.addEventListener("close", onSocketEvent); newSocket.addEventListener("error", onSocketEvent); @@ -125,8 +110,22 @@ public class WebSocketMain extends Sprite implements IWebSocketWrapper{ return result; } - /**************** - * Socket event handler + private function getOrigin():String { + return (URLUtil.getProtocol(this.callerUrl) + "://" + + URLUtil.getServerNameWithPort(this.callerUrl)).toLowerCase(); + } + + private function getCookie(url:String):String { + if (URLUtil.getServerName(url).toLowerCase() == + URLUtil.getServerName(this.callerUrl).toLowerCase()) { + return ExternalInterface.call("function(){return document.cookie}"); + } else { + return ""; + } + } + + /** + * Socket event handler. */ public function onSocketEvent(event:WebSocketEvent):void { var eventObj:Object = parseEvent(event); diff --git a/flash-src/build.sh b/flash-src/build.sh index 3a37cf2..598674a 100755 --- a/flash-src/build.sh +++ b/flash-src/build.sh @@ -5,9 +5,6 @@ mxmlc -static-link-runtime-shared-libraries -target-player=10.0.0 -output=../WebSocketMain.swf WebSocketMain.as && mxmlc -static-link-runtime-shared-libraries -output=../WebSocketMainInsecure.swf WebSocketMainInsecure.as && -compc -source-path . -include-classes WebSocket IWebSocketWrapper -output=../WebSocket.swc && cd .. && -zip WebSocketMainInsecure.zip WebSocketMainInsecure.swf WebSocket.swc && +zip WebSocketMainInsecure.zip WebSocketMainInsecure.swf && rm WebSocketMainInsecure.swf - - |