summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi Ichikawa <gimite@gmail.com>2011-02-27 12:38:42 +0900
committerHiroshi Ichikawa <gimite@gmail.com>2011-02-27 12:38:42 +0900
commit0a09afaf9bc5a34483c4f8dfe9d21a64da110bff (patch)
treee754d6aff2238671487e7f3bc3f492b9fde42b2a
parent87daea0c26c030800043e1068e17cc9bc0fa004c (diff)
downloadweb-socket-js-0a09afaf9bc5a34483c4f8dfe9d21a64da110bff.tar.gz
Minimizing dependency from WebSocket to WebSocketMain.
Removing WebSocket.swc.
-rw-r--r--WebSocket.swcbin246314 -> 0 bytes
-rw-r--r--WebSocketMain.swfbin175680 -> 175725 bytes
-rw-r--r--WebSocketMainInsecure.zipbin166253 -> 166519 bytes
-rw-r--r--flash-src/IWebSocketLogger.as8
-rw-r--r--flash-src/IWebSocketWrapper.as9
-rw-r--r--flash-src/WebSocket.as47
-rw-r--r--flash-src/WebSocketMain.as47
-rwxr-xr-xflash-src/build.sh5
8 files changed, 55 insertions, 61 deletions
diff --git a/WebSocket.swc b/WebSocket.swc
deleted file mode 100644
index 92ff58f..0000000
--- a/WebSocket.swc
+++ /dev/null
Binary files differ
diff --git a/WebSocketMain.swf b/WebSocketMain.swf
index 74a70a1..f6f927a 100644
--- a/WebSocketMain.swf
+++ b/WebSocketMain.swf
Binary files differ
diff --git a/WebSocketMainInsecure.zip b/WebSocketMainInsecure.zip
index 019c600..2c47546 100644
--- a/WebSocketMainInsecure.zip
+++ b/WebSocketMainInsecure.zip
Binary files differ
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
-
-