commit 389c5f56f79bed8c5d220fa8a6bf05666951292e Author: David Fifield david@bamsoftware.com Date: Tue May 24 23:16:51 2011 -0700
Whitespace. --- rtmfp/RTMFPSocket.as | 283 +++++++++++++++-------------- rtmfp/RTMFPSocketClient.as | 110 ++++++------ rtmfp/events/RTMFPSocketEvent.as | 43 ++--- rtmfpcat.as | 372 +++++++++++++++++++------------------- 4 files changed, 404 insertions(+), 404 deletions(-)
diff --git a/rtmfp/RTMFPSocket.as b/rtmfp/RTMFPSocket.as index bb00994..d524699 100644 --- a/rtmfp/RTMFPSocket.as +++ b/rtmfp/RTMFPSocket.as @@ -1,10 +1,10 @@ /* RTMFPSocket abstraction * Author: Nate Hardison, May 2011 - * + * * This code is heavily based off of BelugaFile, an open-source * Air file-transfer application written by Nicholas Bliyk. * Website: http://www.belugafile.com/ - * Source: http://code.google.com/p/belugafile/ + * Source: http://code.google.com/p/belugafile/ * */
@@ -22,210 +22,211 @@ package rtmfp import flash.utils.clearInterval; import flash.utils.setInterval; import flash.utils.setTimeout; - + import rtmfp.RTMFPSocketClient; import rtmfp.events.RTMFPSocketEvent;
[Event(name="connectSuccess", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] - [Event(name="connectFail", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] - [Event(name="publishStart", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] - [Event(name="peerConnected", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] - [Event(name="peeringSuccess", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] - [Event(name="peeringFail", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] - [Event(name="peerDisconnected", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] + [Event(name="connectFail", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] + [Event(name="publishStart", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] + [Event(name="peerConnected", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] + [Event(name="peeringSuccess", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] + [Event(name="peeringFail", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] + [Event(name="peerDisconnected", type="com.jscat.rtmfp.events.RTMFPSocketEvent")] public class RTMFPSocket extends EventDispatcher { /* The name of the "media" to pass between peers */ private static const DATA:String = "data"; - private static const DEFAULT_CIRRUS_ADDRESS:String = "rtmfp://p2p.rtmfp.net"; - private static const DEFAULT_CIRRUS_KEY:String = RTMFP::CIRRUS_KEY; - private static const DEFAULT_CONNECT_TIMEOUT:uint = 4000; - + private static const DEFAULT_CIRRUS_ADDRESS:String = "rtmfp://p2p.rtmfp.net"; + private static const DEFAULT_CIRRUS_KEY:String = RTMFP::CIRRUS_KEY; + private static const DEFAULT_CONNECT_TIMEOUT:uint = 4000; + /* Connection to the Cirrus rendezvous service */ private var connection:NetConnection; - - /* ID of the peer to connect to */ - private var peerID:String; - - /* Data streams to be established with peer */ - private var sendStream:NetStream; - private var recvStream:NetStream; - - /* Timeouts */ - private var connectionTimeout:int; - private var peerConnectTimeout:uint; + + /* ID of the peer to connect to */ + private var peerID:String; + + /* Data streams to be established with peer */ + private var sendStream:NetStream; + private var recvStream:NetStream; + + /* Timeouts */ + private var connectionTimeout:int; + private var peerConnectTimeout:uint;
public function RTMFPSocket(){} - + public function connect(addr:String = DEFAULT_CIRRUS_ADDRESS, key:String = DEFAULT_CIRRUS_KEY):void { - connection = new NetConnection(); - connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatusEvent); - connection.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorEvent); - connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityErrorEvent); - connection.connect(addr + "/" + key); - connectionTimeout = setInterval(fail, DEFAULT_CONNECT_TIMEOUT); + connection = new NetConnection(); + connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatusEvent); + connection.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorEvent); + connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityErrorEvent); + connection.connect(addr + "/" + key); + connectionTimeout = setInterval(fail, DEFAULT_CONNECT_TIMEOUT); }
public function close():void { - connection.close(); + connection.close(); }
public function get id():String { - if (connection != null && connection.connected) { - return connection.nearID; - } - - return null; + if (connection != null && connection.connected) { + return connection.nearID; + } + + return null; } - + public function get connected():Boolean { - return (connection != null && connection.connected); + return (connection != null && connection.connected); } - + public function readBytes(bytes:ByteArray):void { - recvStream.client.bytes.readBytes(bytes); + recvStream.client.bytes.readBytes(bytes); }
public function writeBytes(bytes:ByteArray):void { - sendStream.send("dataAvailable", bytes); + sendStream.send("dataAvailable", bytes); } - + public function get peer():String { - return this.peerID; + return this.peerID; }
public function set peer(peerID:String):void { - if (peerID == null || peerID.length == 0) { - throw new Error("Peer ID is null/empty.") - } else if (peerID == connection.nearID) { - throw new Error("Peer ID cannot be the same as our ID."); - } else if (this.peerID == peerID) { - throw new Error("Already connected to peer " + peerID + "."); - } else if (this.recvStream != null) { - throw new Error("Cannot connect to a second peer."); - } - - this.peerID = peerID; - - recvStream = new NetStream(connection, peerID); - var client:RTMFPSocketClient = new RTMFPSocketClient(); - client.addEventListener(ProgressEvent.SOCKET_DATA, onDataAvailable, false, 0, true); - client.addEventListener(RTMFPSocketClient.PEER_CONNECT_ACKNOWLEDGED, onPeerConnectAcknowledged, false, 0, true); - recvStream.client = client; - recvStream.addEventListener(NetStatusEvent.NET_STATUS, onRecvStreamEvent); - recvStream.play(DATA); - setTimeout(onPeerConnectTimeout, peerConnectTimeout, recvStream); - } - + if (peerID == null || peerID.length == 0) { + throw new Error("Peer ID is null/empty.") + } else if (peerID == connection.nearID) { + throw new Error("Peer ID cannot be the same as our ID."); + } else if (this.peerID == peerID) { + throw new Error("Already connected to peer " + peerID + "."); + } else if (this.recvStream != null) { + throw new Error("Cannot connect to a second peer."); + } + + this.peerID = peerID; + + recvStream = new NetStream(connection, peerID); + var client:RTMFPSocketClient = new RTMFPSocketClient(); + client.addEventListener(ProgressEvent.SOCKET_DATA, onDataAvailable, false, 0, true); + client.addEventListener(RTMFPSocketClient.PEER_CONNECT_ACKNOWLEDGED, onPeerConnectAcknowledged, false, 0, true); + recvStream.client = client; + recvStream.addEventListener(NetStatusEvent.NET_STATUS, onRecvStreamEvent); + recvStream.play(DATA); + setTimeout(onPeerConnectTimeout, peerConnectTimeout, recvStream); + } + private function startPublishStream():void { - sendStream = new NetStream(connection, NetStream.DIRECT_CONNECTIONS); - sendStream.addEventListener(NetStatusEvent.NET_STATUS, onSendStreamEvent); - var o:Object = new Object(); - o.onPeerConnect = onPeerConnect; - sendStream.client = o; - sendStream.publish(DATA); + sendStream = new NetStream(connection, NetStream.DIRECT_CONNECTIONS); + sendStream.addEventListener(NetStatusEvent.NET_STATUS, onSendStreamEvent); + var o:Object = new Object(); + o.onPeerConnect = onPeerConnect; + sendStream.client = o; + sendStream.publish(DATA); } - + private function fail():void { - clearInterval(connectionTimeout); - dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.CONNECT_FAIL)); + clearInterval(connectionTimeout); + dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.CONNECT_FAIL)); } - + private function onDataAvailable(event:ProgressEvent):void { - dispatchEvent(event); + dispatchEvent(event); } - + private function onIOErrorEvent(event:IOErrorEvent):void { - fail(); + fail(); } - + private function onNetStatusEvent(event:NetStatusEvent):void { - switch (event.info.code) { - case "NetConnection.Connect.Success" : - clearInterval(connectionTimeout); - startPublishStream(); - dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.CONNECT_SUCCESS)); - break; - case "NetStream.Connect.Success" : - break; - case "NetStream.Publish.BadName" : - fail(); - break; - case "NetStream.Connect.Closed" : - // we've disconnected from the peer - // can reset to accept another - // clear the publish stream and re-publish another - dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.PEER_DISCONNECTED, recvStream)); - break; - } - } - + switch (event.info.code) { + case "NetConnection.Connect.Success" : + clearInterval(connectionTimeout); + startPublishStream(); + dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.CONNECT_SUCCESS)); + break; + case "NetStream.Connect.Success" : + break; + case "NetStream.Publish.BadName" : + fail(); + break; + case "NetStream.Connect.Closed" : + // we've disconnected from the peer + // can reset to accept another + // clear the publish stream and re-publish another + dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.PEER_DISCONNECTED, recvStream)); + break; + } + } + private function onPeerConnect(peer:NetStream):Boolean { - // establish a bidirectional stream with the peer - if (peerID == null) { - this.peer = peer.farID; - } - - // disallow additional peers connecting to us - if (peer.farID != peerID) return false; - - peer.send("setPeerConnectAcknowledged"); - dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.PEER_CONNECTED, peer)); - - return true; - } - + // establish a bidirectional stream with the peer + if (peerID == null) { + this.peer = peer.farID; + } + + // disallow additional peers connecting to us + if (peer.farID != peerID) + return false; + + peer.send("setPeerConnectAcknowledged"); + dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.PEER_CONNECTED, peer)); + + return true; + } + private function onPeerConnectAcknowledged(event:Event):void { - dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.PEERING_SUCCESS, recvStream)); + dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.PEERING_SUCCESS, recvStream)); } - + private function onPeerConnectTimeout(peer:NetStream):void { - if (!recvStream.client) return; - if (!RTMFPSocketClient(recvStream.client).peerConnectAcknowledged) { - dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.PEERING_FAIL, recvStream)); - } + if (!recvStream.client) return; + if (!RTMFPSocketClient(recvStream.client).peerConnectAcknowledged) { + dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.PEERING_FAIL, recvStream)); + } } - + private function onSecurityErrorEvent(event:SecurityErrorEvent):void { - fail(); + fail(); } - + private function onSendStreamEvent(event:NetStatusEvent):void { - switch (event.info.code) { - case ("NetStream.Publish.Start") : - dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.PUBLISH_START)); - break; - case ("NetStream.Play.Reset") : - case ("NetStream.Play.Start") : - break; - } - } - private function onRecvStreamEvent(event:NetStatusEvent):void - { - switch (event.info.code) { - case ("NetStream.Publish.Start") : - case ("NetStream.Play.Reset") : - case ("NetStream.Play.Start") : - break; - } - } + switch (event.info.code) { + case ("NetStream.Publish.Start") : + dispatchEvent(new RTMFPSocketEvent(RTMFPSocketEvent.PUBLISH_START)); + break; + case ("NetStream.Play.Reset") : + case ("NetStream.Play.Start") : + break; + } + } + private function onRecvStreamEvent(event:NetStatusEvent):void + { + switch (event.info.code) { + case ("NetStream.Publish.Start") : + case ("NetStream.Play.Reset") : + case ("NetStream.Play.Start") : + break; + } + } } } diff --git a/rtmfp/RTMFPSocketClient.as b/rtmfp/RTMFPSocketClient.as index d9fcffa..e2f93ef 100644 --- a/rtmfp/RTMFPSocketClient.as +++ b/rtmfp/RTMFPSocketClient.as @@ -1,57 +1,57 @@ package rtmfp { - import flash.events.Event; - import flash.events.EventDispatcher; - import flash.events.ProgressEvent; - import flash.utils.ByteArray; - - [Event(name="peerConnectAcknowledged", type="flash.events.Event")] - public dynamic class RTMFPSocketClient extends EventDispatcher { - public static const PEER_CONNECT_ACKNOWLEDGED:String = "peerConnectAcknowledged"; - - private var _bytes:ByteArray; - private var _peerID:String; - private var _peerConnectAcknowledged:Boolean; - - public function RTMFPSocketClient() - { - super(); - _bytes = new ByteArray(); - _peerID = null; - _peerConnectAcknowledged = false; - } - - public function get bytes():ByteArray - { - return _bytes; - } - - public function dataAvailable(bytes:ByteArray):void - { - this._bytes.clear(); - bytes.readBytes(this._bytes); - dispatchEvent(new ProgressEvent(ProgressEvent.SOCKET_DATA, false, false, this._bytes.bytesAvailable, this._bytes.length)); - } - - public function get peerConnectAcknowledged():Boolean - { - return _peerConnectAcknowledged; - } - - public function setPeerConnectAcknowledged():void - { - _peerConnectAcknowledged = true; - dispatchEvent(new Event(PEER_CONNECT_ACKNOWLEDGED)); - } - - public function get peerID():String - { - return _peerID; - } - - public function set peerID(id:String):void - { - _peerID = id; - } - } -} \ No newline at end of file + import flash.events.Event; + import flash.events.EventDispatcher; + import flash.events.ProgressEvent; + import flash.utils.ByteArray; + + [Event(name="peerConnectAcknowledged", type="flash.events.Event")] + public dynamic class RTMFPSocketClient extends EventDispatcher { + public static const PEER_CONNECT_ACKNOWLEDGED:String = "peerConnectAcknowledged"; + + private var _bytes:ByteArray; + private var _peerID:String; + private var _peerConnectAcknowledged:Boolean; + + public function RTMFPSocketClient() + { + super(); + _bytes = new ByteArray(); + _peerID = null; + _peerConnectAcknowledged = false; + } + + public function get bytes():ByteArray + { + return _bytes; + } + + public function dataAvailable(bytes:ByteArray):void + { + this._bytes.clear(); + bytes.readBytes(this._bytes); + dispatchEvent(new ProgressEvent(ProgressEvent.SOCKET_DATA, false, false, this._bytes.bytesAvailable, this._bytes.length)); + } + + public function get peerConnectAcknowledged():Boolean + { + return _peerConnectAcknowledged; + } + + public function setPeerConnectAcknowledged():void + { + _peerConnectAcknowledged = true; + dispatchEvent(new Event(PEER_CONNECT_ACKNOWLEDGED)); + } + + public function get peerID():String + { + return _peerID; + } + + public function set peerID(id:String):void + { + _peerID = id; + } + } +} diff --git a/rtmfp/events/RTMFPSocketEvent.as b/rtmfp/events/RTMFPSocketEvent.as index c5b4af1..5bc08e5 100644 --- a/rtmfp/events/RTMFPSocketEvent.as +++ b/rtmfp/events/RTMFPSocketEvent.as @@ -1,25 +1,24 @@ package rtmfp.events { - import flash.events.Event; - import flash.net.NetStream; + import flash.events.Event; + import flash.net.NetStream;
- public class RTMFPSocketEvent extends Event - { - public static const CONNECT_SUCCESS:String = "connectSuccess"; - public static const CONNECT_FAIL:String = "connectFail"; - public static const PUBLISH_START:String = "publishStart"; - public static const PEER_CONNECTED:String = "peerConnected"; - public static const PEER_DISCONNECTED:String = "peerDisconnected"; - public static const PEERING_SUCCESS:String = "peeringSuccess"; - public static const PEERING_FAIL:String = "peeringFail"; - - public var stream:NetStream; - - public function RTMFPSocketEvent(type:String, streamVal:NetStream = null, bubbles:Boolean = false, cancelable:Boolean = false) - { - super(type, bubbles, cancelable); - stream = streamVal; - } - - } -} \ No newline at end of file + public class RTMFPSocketEvent extends Event + { + public static const CONNECT_SUCCESS:String = "connectSuccess"; + public static const CONNECT_FAIL:String = "connectFail"; + public static const PUBLISH_START:String = "publishStart"; + public static const PEER_CONNECTED:String = "peerConnected"; + public static const PEER_DISCONNECTED:String = "peerDisconnected"; + public static const PEERING_SUCCESS:String = "peeringSuccess"; + public static const PEERING_FAIL:String = "peeringFail"; + + public var stream:NetStream; + + public function RTMFPSocketEvent(type:String, streamVal:NetStream = null, bubbles:Boolean = false, cancelable:Boolean = false) + { + super(type, bubbles, cancelable); + stream = streamVal; + } + } +} diff --git a/rtmfpcat.as b/rtmfpcat.as index 328274a..d4766c4 100644 --- a/rtmfpcat.as +++ b/rtmfpcat.as @@ -11,198 +11,198 @@ package import flash.events.SecurityErrorEvent; import flash.utils.ByteArray; import flash.utils.setTimeout; - + import rtmfp.RTMFPSocket; import rtmfp.events.RTMFPSocketEvent; import Utils; - - public class rtmfpcat extends Sprite { - - /* Nate's facilitator -- also serving a crossdomain policy */ - private const DEFAULT_FAC_ADDR:Object = { - host: "128.12.179.80", - port: 9002 - }; - - private const DEFAULT_TOR_CLIENT_ADDR:Object = { - host: "127.0.0.1", - port: 3333 - }; - - /* David's relay (nickname 3VXRyxz67OeRoqHn) that also serves a - crossdomain policy. */ - private const DEFAULT_TOR_PROXY_ADDR:Object = { - host: "173.255.221.44", - port: 9001 - }; - - // Milliseconds. - private const FACILITATOR_POLL_INTERVAL:int = 10000; - - private var output_text:TextField; - - private var s_f:Socket; - private var s_r:RTMFPSocket; - private var s_t:Socket; - - private var fac_addr:Object; - private var tor_addr:Object; - - private var proxy_mode:Boolean; - - public function rtmfpcat() - { - output_text = new TextField(); - output_text.width = 400; - output_text.height = 300; - output_text.background = true; - output_text.backgroundColor = 0x001f0f; - output_text.textColor = 0x44CC44; - addChild(output_text); - - puts("Starting."); - - this.loaderInfo.addEventListener(Event.COMPLETE, onLoaderInfoComplete); - } - - private function puts(s:String):void - { - output_text.appendText(s + "\n"); - output_text.scrollV = output_text.maxScrollV; - } - - private function onLoaderInfoComplete(e:Event):void - { - var fac_spec:String; - var tor_spec:String; - - puts("Parameters loaded."); - - proxy_mode = (this.loaderInfo.parameters["proxy"] != null); - - fac_spec = this.loaderInfo.parameters["facilitator"]; - if (!fac_spec) { - puts("No "facilitator" specification provided...using default."); - fac_addr = DEFAULT_FAC_ADDR; - } else { - puts("Facilitator spec: "" + fac_spec + """); - fac_addr = Utils.parseAddrSpec(fac_spec); + + public class rtmfpcat extends Sprite + { + /* Nate's facilitator -- also serving a crossdomain policy */ + private const DEFAULT_FAC_ADDR:Object = { + host: "128.12.179.80", + port: 9002 + }; + + private const DEFAULT_TOR_CLIENT_ADDR:Object = { + host: "127.0.0.1", + port: 3333 + }; + + /* David's relay (nickname 3VXRyxz67OeRoqHn) that also serves a + crossdomain policy. */ + private const DEFAULT_TOR_PROXY_ADDR:Object = { + host: "173.255.221.44", + port: 9001 + }; + + // Milliseconds. + private const FACILITATOR_POLL_INTERVAL:int = 10000; + + private var output_text:TextField; + + private var s_f:Socket; + private var s_r:RTMFPSocket; + private var s_t:Socket; + + private var fac_addr:Object; + private var tor_addr:Object; + + private var proxy_mode:Boolean; + + public function rtmfpcat() + { + output_text = new TextField(); + output_text.width = 400; + output_text.height = 300; + output_text.background = true; + output_text.backgroundColor = 0x001f0f; + output_text.textColor = 0x44CC44; + addChild(output_text); + + puts("Starting."); + + this.loaderInfo.addEventListener(Event.COMPLETE, onLoaderInfoComplete); } - - if (!fac_addr) { - puts("Error: Facilitator spec must be in the form "host:port"."); - return; + + private function puts(s:String):void + { + output_text.appendText(s + "\n"); + output_text.scrollV = output_text.maxScrollV; } - - tor_spec = this.loaderInfo.parameters["tor"]; - if (!tor_spec) { - puts("No Tor specification provided...using default."); - if (proxy_mode) tor_addr = DEFAULT_TOR_PROXY_ADDR; - else tor_addr = DEFAULT_TOR_CLIENT_ADDR; - } else { - puts("Tor spec: "" + tor_spec + """) - tor_addr = Utils.parseAddrSpec(tor_spec); + + private function onLoaderInfoComplete(e:Event):void + { + var fac_spec:String; + var tor_spec:String; + + puts("Parameters loaded."); + + proxy_mode = (this.loaderInfo.parameters["proxy"] != null); + + fac_spec = this.loaderInfo.parameters["facilitator"]; + if (!fac_spec) { + puts("No "facilitator" specification provided...using default."); + fac_addr = DEFAULT_FAC_ADDR; + } else { + puts("Facilitator spec: "" + fac_spec + """); + fac_addr = Utils.parseAddrSpec(fac_spec); + } + + if (!fac_addr) { + puts("Error: Facilitator spec must be in the form "host:port"."); + return; + } + + tor_spec = this.loaderInfo.parameters["tor"]; + if (!tor_spec) { + puts("No Tor specification provided...using default."); + if (proxy_mode) tor_addr = DEFAULT_TOR_PROXY_ADDR; + else tor_addr = DEFAULT_TOR_CLIENT_ADDR; + } else { + puts("Tor spec: "" + tor_spec + """) + tor_addr = Utils.parseAddrSpec(tor_spec); + } + + if (!tor_addr) { + puts("Error: Tor spec must be in the form "host:port"."); + return; + } + + establishRTMFPConnection(); }
- if (!tor_addr) { - puts("Error: Tor spec must be in the form "host:port"."); - return; + private function establishRTMFPConnection():void + { + s_r = new RTMFPSocket(); + s_r.addEventListener(RTMFPSocketEvent.CONNECT_SUCCESS, function (e:Event):void { + puts("Cirrus: connected with id " + s_r.id + "."); + establishFacilitatorConnection(); + }); + s_r.addEventListener(RTMFPSocketEvent.CONNECT_FAIL, function (e:Event):void { + puts("Error: failed to connect to Cirrus."); + }); + s_r.addEventListener(RTMFPSocketEvent.PUBLISH_START, function(e:RTMFPSocketEvent):void { + puts("Publishing started."); + }); + s_r.addEventListener(RTMFPSocketEvent.PEER_CONNECTED, function(e:RTMFPSocketEvent):void { + puts("Peer connected."); + }); + s_r.addEventListener(RTMFPSocketEvent.PEER_DISCONNECTED, function(e:RTMFPSocketEvent):void { + puts("Peer disconnected."); + }); + s_r.addEventListener(RTMFPSocketEvent.PEERING_SUCCESS, function(e:RTMFPSocketEvent):void { + puts("Peering success."); + establishTorConnection(); + }); + s_r.addEventListener(RTMFPSocketEvent.PEERING_FAIL, function(e:RTMFPSocketEvent):void { + puts("Peering fail."); + }); + s_r.addEventListener(ProgressEvent.SOCKET_DATA, function (e:ProgressEvent):void { + var bytes:ByteArray = new ByteArray(); + s_r.readBytes(bytes); + puts("RTMFP: read " + bytes.length + " bytes."); + s_t.writeBytes(bytes); + }); + + s_r.connect(); + } + + private function establishTorConnection():void + { + s_t = new Socket(); + s_t.addEventListener(Event.CONNECT, function (e:Event):void { + puts("Tor: connected to " + tor_addr.host + ":" + tor_addr.port + "."); + }); + s_t.addEventListener(Event.CLOSE, function (e:Event):void { + puts("Tor: closed connection."); + }); + s_t.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent):void { + puts("Tor: I/O error: " + e.text + "."); + }); + s_t.addEventListener(ProgressEvent.SOCKET_DATA, function (e:ProgressEvent):void { + var bytes:ByteArray = new ByteArray(); + s_t.readBytes(bytes, 0, e.bytesLoaded); + puts("Tor: read " + bytes.length + " bytes."); + s_r.writeBytes(bytes); + }); + s_t.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (e:SecurityErrorEvent):void { + puts("Tor: security error: " + e.text + "."); + }); + + s_t.connect(tor_addr.host, tor_addr.port); }
- establishRTMFPConnection(); - } - - private function establishRTMFPConnection():void - { - s_r = new RTMFPSocket(); - s_r.addEventListener(RTMFPSocketEvent.CONNECT_SUCCESS, function (e:Event):void { - puts("Cirrus: connected with id " + s_r.id + "."); - establishFacilitatorConnection(); - }); - s_r.addEventListener(RTMFPSocketEvent.CONNECT_FAIL, function (e:Event):void { - puts("Error: failed to connect to Cirrus."); - }); - s_r.addEventListener(RTMFPSocketEvent.PUBLISH_START, function(e:RTMFPSocketEvent):void { - puts("Publishing started."); - }); - s_r.addEventListener(RTMFPSocketEvent.PEER_CONNECTED, function(e:RTMFPSocketEvent):void { - puts("Peer connected."); - }); - s_r.addEventListener(RTMFPSocketEvent.PEER_DISCONNECTED, function(e:RTMFPSocketEvent):void { - puts("Peer disconnected."); - }); - s_r.addEventListener(RTMFPSocketEvent.PEERING_SUCCESS, function(e:RTMFPSocketEvent):void { - puts("Peering success."); - establishTorConnection(); - }); - s_r.addEventListener(RTMFPSocketEvent.PEERING_FAIL, function(e:RTMFPSocketEvent):void { - puts("Peering fail."); - }); - s_r.addEventListener(ProgressEvent.SOCKET_DATA, function (e:ProgressEvent):void { - var bytes:ByteArray = new ByteArray(); - s_r.readBytes(bytes); - puts("RTMFP: read " + bytes.length + " bytes."); - s_t.writeBytes(bytes); - }); - - s_r.connect(); - } - - private function establishTorConnection():void - { - s_t = new Socket(); - s_t.addEventListener(Event.CONNECT, function (e:Event):void { - puts("Tor: connected to " + tor_addr.host + ":" + tor_addr.port + "."); - }); - s_t.addEventListener(Event.CLOSE, function (e:Event):void { - puts("Tor: closed connection."); - }); - s_t.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent):void { - puts("Tor: I/O error: " + e.text + "."); - }); - s_t.addEventListener(ProgressEvent.SOCKET_DATA, function (e:ProgressEvent):void { - var bytes:ByteArray = new ByteArray(); - s_t.readBytes(bytes, 0, e.bytesLoaded); - puts("Tor: read " + bytes.length + " bytes."); - s_r.writeBytes(bytes); - }); - s_t.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (e:SecurityErrorEvent):void { - puts("Tor: security error: " + e.text + "."); - }); - - s_t.connect(tor_addr.host, tor_addr.port); - } - - private function establishFacilitatorConnection():void - { - s_f = new Socket(); - s_f.addEventListener(Event.CONNECT, function (e:Event):void { - puts("Facilitator: connected to " + fac_addr.host + ":" + fac_addr.port + "."); - if (proxy_mode) s_f.writeUTFBytes("GET / HTTP/1.0\r\n\r\n"); - else s_f.writeUTFBytes("POST / HTTP/1.0\r\n\r\nclient=" + s_r.id + "\r\n"); - }); - s_f.addEventListener(Event.CLOSE, function (e:Event):void { - puts("Facilitator: connection closed."); - if (proxy_mode) { - setTimeout(establishFacilitatorConnection, FACILITATOR_POLL_INTERVAL); - } - }); - s_f.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent):void { - puts("Facilitator: I/O error: " + e.text + "."); - }); - s_f.addEventListener(ProgressEvent.SOCKET_DATA, function (e:ProgressEvent):void { - var clientID:String = s_f.readMultiByte(e.bytesLoaded, "utf-8"); - puts("Facilitator: got "" + clientID + """); - if (clientID != "Registration list empty") { - puts("Connecting to " + clientID + "."); - s_r.peer = clientID; - } - }); - s_f.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (e:SecurityErrorEvent):void { - puts("Facilitator: security error: " + e.text + "."); - }); - - s_f.connect(fac_addr.host, fac_addr.port); - } - } -} \ No newline at end of file + private function establishFacilitatorConnection():void + { + s_f = new Socket(); + s_f.addEventListener(Event.CONNECT, function (e:Event):void { + puts("Facilitator: connected to " + fac_addr.host + ":" + fac_addr.port + "."); + if (proxy_mode) s_f.writeUTFBytes("GET / HTTP/1.0\r\n\r\n"); + else s_f.writeUTFBytes("POST / HTTP/1.0\r\n\r\nclient=" + s_r.id + "\r\n"); + }); + s_f.addEventListener(Event.CLOSE, function (e:Event):void { + puts("Facilitator: connection closed."); + if (proxy_mode) { + setTimeout(establishFacilitatorConnection, FACILITATOR_POLL_INTERVAL); + } + }); + s_f.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent):void { + puts("Facilitator: I/O error: " + e.text + "."); + }); + s_f.addEventListener(ProgressEvent.SOCKET_DATA, function (e:ProgressEvent):void { + var clientID:String = s_f.readMultiByte(e.bytesLoaded, "utf-8"); + puts("Facilitator: got "" + clientID + """); + if (clientID != "Registration list empty") { + puts("Connecting to " + clientID + "."); + s_r.peer = clientID; + } + }); + s_f.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (e:SecurityErrorEvent):void { + puts("Facilitator: security error: " + e.text + "."); + }); + + s_f.connect(fac_addr.host, fac_addr.port); + } + } +}
tor-commits@lists.torproject.org