UNPKG

thali

Version:
1,888 lines (568 loc) 37.7 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Class: MobileCallInstance</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Class: MobileCallInstance</h1> <section> <header> <h2> <span class="ancestors"><a href="module-WifiBasedNativeMock.html">WifiBasedNativeMock</a>~</span>MobileCallInstance</h2> </header> <article> <div class="container-overview"> <h4 class="name" id="MobileCallInstance"><span class="type-signature"></span>new MobileCallInstance<span class="signature">(mobileMethodName, platform, router, wifiBasedNativeMock)</span><span class="type-signature"></span></h4> <div class="description"> <p>This is the method that actually handles processing the native requests. In general this method just records the arguments for later use.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>mobileMethodName</code></td> <td class="type"> <span class="param-type">string</span> </td> <td class="description last"><p>This is the name of the method that was passed in on the mobile object</p></td> </tr> <tr> <td class="name"><code>platform</code></td> <td class="type"> <span class="param-type">platformChoice</span> </td> <td class="description last"></td> </tr> <tr> <td class="name"><code>router</code></td> <td class="type"> <span class="param-type">Object</span> </td> <td class="description last"></td> </tr> <tr> <td class="name"><code>wifiBasedNativeMock</code></td> <td class="type"> <span class="param-type">WifiBasedNativeMock</span> </td> <td class="description last"></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="NextGeneration_wifiBasedNativeMock.js.html">NextGeneration/wifiBasedNativeMock.js</a>, <a href="NextGeneration_wifiBasedNativeMock.js.html#line37">line 37</a> </li></ul></dd> </dl> </div> <h3 class="subsection-title">Methods</h3> <h4 class="name" id="callNative"><span class="type-signature"></span>callNative<span class="signature">()</span><span class="type-signature"></span></h4> <div class="description"> <p>Handles processing callNative requests. The actual params differ based on the particular Mobile method that is being called.</p> </div> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="NextGeneration_wifiBasedNativeMock.js.html">NextGeneration/wifiBasedNativeMock.js</a>, <a href="NextGeneration_wifiBasedNativeMock.js.html#line289">line 289</a> </li></ul></dd> </dl> <h4 class="name" id="connect"><span class="type-signature"></span>connect<span class="signature">(peerIdentifier, callback)</span><span class="type-signature"></span></h4> <div class="description"> <p>All the usual restrictions on connect apply including throwing errors if start listening isn't active, handling consecutive calls, etc. Please see the details in external:&quot;Mobile('connect')&quot;.callNative. In this case the mock MUST keep track of the advertised IP and port for each peerIdentifier and then be able to establish a TCP/IP listener on 127.0.0.1 and use a TCP proxy to relay any connections to the 127.0.0.1 port to the IP address and port that was advertised over SSDP. The point of all this redirection is to fully simulate the native layer so we can run tests of the Wrapper and above with full fidelity. This lets us do fun things like simulate turning off radios as well as properly enforce behaviors such as those below that let our local listener only accept one connection and simulating time outs on a single peer correctly (e.g. the other side is still available but we had no activity locally and so need to tear down). If setting up the outgoing TCP proxy is a big enough pain we could probably figure a way around it but I'm guessing that since we need it anyway for incoming connections it shouldn't be a big deal.</p> <p>In the case of simulating Android we just have to make sure that at any time we have exactly one outgoing connection to any peerIdentifier. So if we get a second connect for the same peerIdentifier then we have to return the port for the existing TCP listener we are using, even if it is connected. We also need the right tear down behavior so that if the local app connection to the local TCP listener (that will then relay to the remote peer's port) is torn down then we tear down the connection to the remote peer and vice versa.</p> <p>On iOS we need the same behavior as Android plus we have to deal with the MCSession problem. This means we have to look at the peerIdentifier, compare it to the peerIdentifier that we generated at the SSDP layer and do a lexical comparison. If we are lexically smaller then we have to simulate the trick that iOS uses where we create a MCSession but don't establish any connections over it. The MCSession is just used as a signaling mechanism to let the lexically larger peer know that the lexically smaller peer wants to connect. See the sections below on /ConnectToMeForMock and /IConnectedMock for details.</p> <h2>Making requests to /ConnectToMeForMock</h2><p>After we receive a connect when we are simulating iOS and the requester is lexically smaller than the target peerIdentifier then we MUST make a GET request to the target peer's /ConnectToMeForMock endpoint with a query argument of the form &quot;?port=x&amp;peerIdentifier=y&quot;. The port is the port the current peer wishes the target peer to connect over and the peerIdentifier is the current peer's peerIdentifier.</p> <p>If we get a 400 response then we MUST return the &quot;Connection could not be established&quot; error.</p> <p>If we get a 200 OK then we just have to wait for a /IConnectedMock request to come in telling us that the remote peer has established a connection. See the section below on how we handle this. Note that the usual timeout rules apply so if the /IConnectedMock request does not come within the timeout period the we MUST issue a &quot;Connection wait time out&quot; error.</p> <p>We do not include IP addresses in the request or response because we are only running the mock amongst instances that are all hosted on the same box and talking over 127.0.0.1.</p> <h2>Sending responses to /ConnectToMeForMock</h2><p>If we are not currently simulating an iOS device then we MUST return a 500 Server Error because something really bad has happened. We do not currently support simulating mixed scenarios, everyone in the test run needs to be either simulating iOS or Android.</p> <p>If we are not currently listening for incoming connections then we MUST return a 400 Bad Request. But we MUST also log the fact that this happened since baring some nasty race conditions we really shouldn't get a call to this endpoint unless we are listening.</p> <p>If we are listening then we MUST issue a peerAvailabilityChanged callback and set the peerIdentifier to the value in the query argument, peerAvailable to true and pleaseConnect to true. We MUST also record the port in the query argument so that if we get a connect request we know what port to submit.</p> <p>In theory it's possible for us to get into a situation where we get one port for a peerIdentifier in the /ConnectToMeForMock request and a different port in a SSDP request. We should just publish the PeerAvailablityChanged event as they come in and for internal mapping of peerIdentifier to port we should just record whatever came in last. And yes, this can lead to fun race conditions which is the situation in the real world too.</p> <h2>Making requests to /IConnectedMock</h2><p>If we are simulating iOS and if we are establishing a TCP connection to a remote peer then by definition we are the lexically larger peer. However the iOS protocol shares our peerIdentifier with the remote peer, TCP does not. To work around this anytime we are simulating iOS and have successfully established a TCP connection to a remote peer we MUST issue a GET request to the /IConnectedMock endpoint of the remote peer with the query string &quot;?clientPort=x&amp;serverPort=z&amp;peerIdentifier=y&quot;. The clientPort and serverPort are the client port and server port values from the TCP connection that caused us to send this request in the first place. The peerIdentifier is our peerIdentifier. If we get a 400 response back then we MUST log this event as it really should not have happened.</p> <h2>Sending response to /IConnectedMock</h2><p>If we are not currently simulating an iOS device then we MUST return a 500 Server Error because something really bad has happened. We do not currently support simulating mixed scenarios, everyone in the test run needs to be either simulating iOS or Android.</p> <p>If we are not currently listening for incoming connections then we MUST return a 400 Bad Request. But we MUST also log the fact that this happened since baring some nasty race conditions we really shouldn't have been able to set up the TCP connection in the first place.</p> <p>Otherwise we MUST return a 200 OK.</p> <p>When we return a 200 OK we MUST issue a peerAvailabilityChanged callback with peerIdentifier set to the submitted peerIdentifier, peerAvailable set to true and pleaseConnect set to false. If we have an outstanding connect request to the specified peerIdentifier then we MUST look up the specified clientPort/serverPort and see if we can match it to any of the incoming connections to the TCP proxy. If we can then we MUST return the clientPort/serverPort being used by the TCP proxy as the connect response with listeningPort set to null and clientPort/serverPort set to the values the TCP proxy is using. If we cannot match the connection via the TCP proxy then this means that the connection might have died or been killed while this request to /IConnectedMock was being sent. In that case we should send bogus values in the connect response to simulate a situation where a peer connects but then the connection dies before the connect callback is returned.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>peerIdentifier</code></td> <td class="type"> <span class="param-type">string</span> </td> <td class="description last"></td> </tr> <tr> <td class="name"><code>callback</code></td> <td class="type"> <span class="param-type"><a href="module-thaliMobileNative.html#~ConnectCallback">module:thaliMobileNative~ConnectCallback</a></span> </td> <td class="description last"></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="NextGeneration_wifiBasedNativeMock.js.html">NextGeneration/wifiBasedNativeMock.js</a>, <a href="NextGeneration_wifiBasedNativeMock.js.html#line268">line 268</a> </li></ul></dd> </dl> <h4 class="name" id="discoveryAdvertisingStateUpdateNonTCP"><span class="type-signature"></span>discoveryAdvertisingStateUpdateNonTCP<span class="signature">(callback)</span><span class="type-signature"></span></h4> <div class="description"> <p>Any time there is a call to start and stop or if Bluetooth is turned off on Android (which also MUST mean that we have disabled both advertising and discovery) then we MUST fire this event.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>callback</code></td> <td class="type"> <span class="param-type"><a href="module-thaliMobileNative.html#~discoveryAdvertisingStateUpdateNonTCPCallback">module:thaliMobileNative~discoveryAdvertisingStateUpdateNonTCPCallback</a></span> </td> <td class="description last"></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="NextGeneration_wifiBasedNativeMock.js.html">NextGeneration/wifiBasedNativeMock.js</a>, <a href="NextGeneration_wifiBasedNativeMock.js.html#line347">line 347</a> </li></ul></dd> </dl> <h4 class="name" id="incomingConnectionToPortNumberFailed"><span class="type-signature"></span>incomingConnectionToPortNumberFailed<span class="signature">(callback)</span><span class="type-signature"></span></h4> <div class="description"> <p>This is used anytime the TCP proxy for incoming connections cannot connect to the portNumber set in module:WifiBasedNativeMock~MobileCallInstance.startUpdateAdvertisingAndListening.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>callback</code></td> <td class="type"> <span class="param-type"><a href="module-thaliMobileNative.html#~incomingConnectionToPortNumberFailedCallback">module:thaliMobileNative~incomingConnectionToPortNumberFailedCallback</a></span> </td> <td class="description last"></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="NextGeneration_wifiBasedNativeMock.js.html">NextGeneration/wifiBasedNativeMock.js</a>, <a href="NextGeneration_wifiBasedNativeMock.js.html#line376">line 376</a> </li></ul></dd> </dl> <h4 class="name" id="killConnections"><span class="type-signature"></span>killConnections<span class="signature">(callback)</span><span class="type-signature"></span></h4> <div class="description"> <p>If we aren't emulating iOS then this method has to return the &quot;Not Supported&quot; error. If we are emulating iOS then we have to kill all the TCP listeners we are using to handling outgoing connections and the TCP proxy we are using to handle incoming connections.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>callback</code></td> <td class="type"> <span class="param-type"><a href="module-thaliMobileNative.html#~ThaliMobileCallback">module:thaliMobileNative~ThaliMobileCallback</a></span> </td> <td class="description last"></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="NextGeneration_wifiBasedNativeMock.js.html">NextGeneration/wifiBasedNativeMock.js</a>, <a href="NextGeneration_wifiBasedNativeMock.js.html#line280">line 280</a> </li></ul></dd> </dl> <h4 class="name" id="networkChanged"><span class="type-signature"></span>networkChanged<span class="signature">(callback)</span><span class="type-signature"></span></h4> <div class="description"> <p>At this point this event would only fire because we called toggleBluetooth or toggleWifi. For the moment we will treat toggleBluetooth and turning on/off both blueToothLowEnergy and blueTooth.</p> <p><strong>Open Issue:</strong> Near as I can tell both Android and iOS have a single Bluetooth switch that activates and de-activates Bluetooth and BLE. Note however that in theory it's possible to still have one available and not the other to a particular application because of app level permissions but that isn't an issue for the mock.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>callback</code></td> <td class="type"> <span class="param-type"><a href="module-thaliMobileNative.html#~networkChangedCallback">module:thaliMobileNative~networkChangedCallback</a></span> </td> <td class="description last"></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="NextGeneration_wifiBasedNativeMock.js.html">NextGeneration/wifiBasedNativeMock.js</a>, <a href="NextGeneration_wifiBasedNativeMock.js.html#line365">line 365</a> </li></ul></dd> </dl> <h4 class="name" id="peerAvailabilityChanged"><span class="type-signature"></span>peerAvailabilityChanged<span class="signature">(callback)</span><span class="type-signature"></span></h4> <div class="description"> <p>Anytime we are looking for advertising and we receive a SSDP:alive, SSDP:byebye or a response to one of our periodic queries we should use it to create a peerAvailabilityChanged call back. In practice we don't really need to batch these messages so we can just fire them as we get them. The peerIdentifier is the USN from the SSDP message, peerAvailable is true or false based on the SSDP response and pleaseConnect is false except for the situation described above for /ConnectToMeforMock.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>callback</code></td> <td class="type"> <span class="param-type"><a href="module-thaliMobileNative.html#~peerAvailabilityChangedCallback">module:thaliMobileNative~peerAvailabilityChangedCallback</a></span> </td> <td class="description last"></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="NextGeneration_wifiBasedNativeMock.js.html">NextGeneration/wifiBasedNativeMock.js</a>, <a href="NextGeneration_wifiBasedNativeMock.js.html#line336">line 336</a> </li></ul></dd> </dl> <h4 class="name" id="startListeningForAdvertisements"><span class="type-signature"></span>startListeningForAdvertisements<span class="signature">(callBack)</span><span class="type-signature"></span></h4> <div class="description"> <p>In effect this listens for SSDP:alive and SSDP:byebye messages along with the use of SSDP queries to find out who is around. These will be translated to peer availability callbacks as specified below. This code MUST meet the same requirements for using a unique SSDP port, syntax for requests, etc. as <a href="module-ThaliWifiInfrastructure.html">module:ThaliWifiInfrastructure</a>.</p> <p>Other requirements for this method MUST match those of external:&quot;Mobile('startListeningForAdvertisements')&quot;.callNative in terms of idempotency. This also means we MUST return &quot;Radio Turned Off&quot; if we are emulating Bluetooth as being off.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>callBack</code></td> <td class="type"> <span class="param-type"><a href="module-thaliMobileNative.html#~ThaliMobileCallback">module:thaliMobileNative~ThaliMobileCallback</a></span> </td> <td class="description last"></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="NextGeneration_wifiBasedNativeMock.js.html">NextGeneration/wifiBasedNativeMock.js</a>, <a href="NextGeneration_wifiBasedNativeMock.js.html#line65">line 65</a> </li></ul></dd> </dl> <h4 class="name" id="startUpdateAdvertisingAndListening"><span class="type-signature"></span>startUpdateAdvertisingAndListening<span class="signature">(portNumber, callBack)</span><span class="type-signature"></span></h4> <div class="description"> <p>This method tells the system to both start advertising and to accept incoming connections. In both cases we need to accept incoming connections. The main challenge is simulating what happens when stop is called. This is supposed to shut down all incoming connections. So we can't just advertise our 127.0.0.1 port and let the other mocks running on the same machine connect since stop wouldn't behave properly. To handle the stop behavior, that is to disconnect all incoming connections, we have to introduce a TCP level proxy. The reason we need a TCP proxy is that we are using direct SSL connections in a way that may or may not properly work through a HTTPS proxy. So it's simpler to just introduce the TCP proxy. We will advertise the TCP proxy's listener port in SSDP and when someone connects we will create a TCP client connection to portNumber and then pipe the two connections together.</p> <p><strong>Open Issue:</strong> If we directly pipe the TCP listener socket (from connect) and the TCP client socket (that we created) then will the system automatically kill the pipe if either socket is killed? We need to test this. If it doesn't then we just need to hook the close event and close the other side of the pipe.</p> <p><strong>Note:</strong> For now we are going to not simulate the Bluetooth handshake for Android. This covers the scenario where device A doesn't discover device B over BLE but device B discovered device A over BLE and then connected over Bluetooth. The handshake would create a simulated discovery event but we are going to assume that the SSDP discovery will arrive in a timely manner and so the behavior should be the same.</p> <p>For advertising we will use SSDP both to make SSDP:alive as well as to answer queries as given in <a href="module-ThaliWifiInfrastructure.html">module:ThaliWifiInfrastructure</a>.</p> <p>For incoming connections we will, as described above, just rely on everyone running on 127.0.0.1.</p> <p>Otherwise the behavior MUST be the same as defined for (@link external:&quot;Mobile('startUpdateAdvertisingAndListening')&quot;.ca llNative}. That includes returning the &quot;Call Start!&quot; error as appropriate as well as returning &quot;Radio Turned Off&quot; if we are emulating Bluetooth as being off.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>portNumber</code></td> <td class="type"> <span class="param-type">number</span> </td> <td class="description last"></td> </tr> <tr> <td class="name"><code>callBack</code></td> <td class="type"> <span class="param-type"><a href="module-thaliMobileNative.html#~ThaliMobileCallback">module:thaliMobileNative~ThaliMobileCallback</a></span> </td> <td class="description last"></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="NextGeneration_wifiBasedNativeMock.js.html">NextGeneration/wifiBasedNativeMock.js</a>, <a href="NextGeneration_wifiBasedNativeMock.js.html#line123">line 123</a> </li></ul></dd> </dl> <h4 class="name" id="stopAdvertisingAndListening"><span class="type-signature"></span>stopAdvertisingAndListening<span class="signature">(callBack)</span><span class="type-signature"></span></h4> <div class="description"> <p>This function MUST behave like <a href="module-ThaliWifiInfrastructure.html">module:ThaliWifiInfrastructure</a> and send a proper SSDP:byebye and then stop responding to queries or sending SSDP:alive messages. Otherwise it MUST act like (@link external:&quot;Mobile('stopAdvertisingAndListening')&quot;.callNative} including terminating the TCP proxy and all of its connections to simulate killing all incoming connections.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>callBack</code></td> <td class="type"> <span class="param-type"><a href="module-thaliMobileNative.html#~ThaliMobileCallback">module:thaliMobileNative~ThaliMobileCallback</a></span> </td> <td class="description last"></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="NextGeneration_wifiBasedNativeMock.js.html">NextGeneration/wifiBasedNativeMock.js</a>, <a href="NextGeneration_wifiBasedNativeMock.js.html#line137">line 137</a> </li></ul></dd> </dl> <h4 class="name" id="stopListeningForAdvertisements"><span class="type-signature"></span>stopListeningForAdvertisements<span class="signature">(callBack)</span><span class="type-signature"></span></h4> <div class="description"> <p>This shuts down the SSDP listener/query code. It MUST otherwise behave as given for external:&quot;Mobile('stopListeningForAdvertisements')&quot;.callNative.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>callBack</code></td> <td class="type"> <span class="param-type"><a href="module-thaliMobileNative.html#~ThaliMobileCallback">module:thaliMobileNative~ThaliMobileCallback</a></span> </td> <td class="description last"></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="NextGeneration_wifiBasedNativeMock.js.html">NextGeneration/wifiBasedNativeMock.js</a>, <a href="NextGeneration_wifiBasedNativeMock.js.html#line77">line 77</a> </li></ul></dd> </dl> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-TCPServersManager.html">TCPServersManager</a></li><li><a href="module-thaliMobile.html">thaliMobile</a></li><li><a href="module-thaliMobileNative.html">thaliMobileNative</a></li><li><a href="module-thaliMobileNativeWrapper.html">thaliMobileNativeWrapper</a></li><li><a href="module-thaliNotificationAction.html">thaliNotificationAction</a></li><li><a href="module-thaliNotificationBeacons.html">thaliNotificationBeacons</a></li><li><a href="module-thaliNotificationClient.html">thaliNotificationClient</a></li><li><a href="module-thaliNotificationServer.html">thaliNotificationServer</a></li><li><a href="module-thaliPeerAction.html">thaliPeerAction</a></li><li><a href="module-thaliPeerDictionary.html">thaliPeerDictionary</a></li><li><a href="module-thaliPeerPoolInterface.html">thaliPeerPoolInterface</a></li><li><a href="module-ThaliWifiInfrastructure.html">ThaliWifiInfrastructure</a></li><li><a href="module-WifiBasedNativeMock.html">WifiBasedNativeMock</a></li></ul><h3>Externals</h3><ul><li><a href="external-_Mobile(_connect_)_.html">Mobile('connect')</a></li><li><a href="external-_Mobile(_discoveryAdvertisingStateUpdateNonTCP_)_.html">Mobile('discoveryAdvertisingStateUpdateNonTCP')</a></li><li><a href="external-_Mobile(_incomingConnectionToPortNumberFailed_)_.html">Mobile('incomingConnectionToPortNumberFailed')</a></li><li><a href="external-_Mobile(_killConnections_)_.html">Mobile('killConnections')</a></li><li><a href="external-_Mobile(_networkChanged_)_.html">Mobile('networkChanged')</a></li><li><a href="external-_Mobile(_peerAvailabilityChanged_)_.html">Mobile('peerAvailabilityChanged')</a></li><li><a href="external-_Mobile(_startListeningForAdvertisements_)_.html">Mobile('startListeningForAdvertisements')</a></li><li><a href="external-_Mobile(_startUpdateAdvertisingAndListening_)_.html">Mobile('startUpdateAdvertisingAndListening')</a></li><li><a href="external-_Mobile(_stopAdvertisingAndListening_)_.html">Mobile('stopAdvertisingAndListening')</a></li><li><a href="external-_Mobile(_stopListeningForAdvertisements_)_.html">Mobile('stopListeningForAdvertisements')</a></li></ul><h3>Classes</h3><ul><li><a href="ConnectionTable.html">ConnectionTable</a></li><li><a href="module-TCPServersManager-TCPServersManager.html">TCPServersManager</a></li><li><a href="module-thaliNotificationAction-NotificationAction.html">NotificationAction</a></li><li><a href="module-thaliNotificationBeacons-ParseBeaconsResponse.html">ParseBeaconsResponse</a></li><li><a href="module-thaliNotificationClient-ThaliNotificationClient.html">ThaliNotificationClient</a></li><li><a href="module-thaliNotificationServer-ThaliNotificationServer.html">ThaliNotificationServer</a></li><li><a href="module-thaliPeerAction-PeerAction.html">PeerAction</a></li><li><a href="module-thaliPeerDictionary-NotificationPeerDictionaryEntry.html">NotificationPeerDictionaryEntry</a></li><li><a href="module-thaliPeerDictionary-PeerConnectionInformation.html">PeerConnectionInformation</a></li><li><a href="module-thaliPeerDictionary-PeerDictionary.html">PeerDictionary</a></li><li><a href="module-thaliPeerPoolInterface-ThaliPeerPoolInterface.html">ThaliPeerPoolInterface</a></li><li><a href="module-ThaliWifiInfrastructure-ThaliWifiInfrastructure.html">ThaliWifiInfrastructure</a></li><li><a href="module-WifiBasedNativeMock-MobileCallInstance.html">MobileCallInstance</a></li><li><a href="module-WifiBasedNativeMock-WifiBasedNativeMock.html">WifiBasedNativeMock</a></li></ul><h3>Events</h3><ul><li><a href="module-thaliMobileNativeWrapper.html#~event:discoveryAdvertisingStateUpdateNonTCPEvent">discoveryAdvertisingStateUpdateNonTCPEvent</a></li><li><a href="module-ThaliWifiInfrastructure.html#~event:discoveryAdvertisingStateUpdateWifiEvent">discoveryAdvertisingStateUpdateWifiEvent</a></li><li><a href="module-TCPServersManager.html#~event:failedConnection">failedConnection</a></li><li><a href="module-thaliMobileNativeWrapper.html#~event:incomingConnectionToPortNumberFailed">incomingConnectionToPortNumberFailed</a></li><li><a href="module-thaliMobileNativeWrapper.html#~event:networkChangedNonTCP">networkChangedNonTCP</a></li><li><a href="module-ThaliWifiInfrastructure.html#~event:networkChangedWifi">networkChangedWifi</a></li><li><a href="module-thaliMobileNativeWrapper.html#~event:nonTCPPeerAvailabilityChangedEvent">nonTCPPeerAvailabilityChangedEvent</a></li><li><a href="module-TCPServersManager.html#~event:routerPortConnectionFailed">routerPortConnectionFailed</a></li><li><a href="module-ThaliWifiInfrastructure.html#~event:wifiPeerAvailabilityChanged">wifiPeerAvailabilityChanged</a></li><li><a href="module-thaliMobile.html#.event:event:discoveryAdvertisingStateUpdate">discoveryAdvertisingStateUpdate</a></li><li><a href="module-thaliMobile.html#.event:event:networkChanged">networkChanged</a></li><li><a href="module-thaliMobile.html#.event:event:peerAvailabilityChanged">peerAvailabilityChanged</a></li><li><a href="module-thaliNotificationAction-NotificationAction.html#.event:event:Resolved">Resolved</a></li><li><a href="module-thaliNotificationClient.html#.event:event:peerAdvertisesDataForUs">peerAdvertisesDataForUs</a></li></ul><h3>Global</h3><ul><li><a href="global.html#getPKCS12Content">getPKCS12Content</a></li><li><a href="global.html#getPublicKeyHash">getPublicKeyHash</a></li><li><a href="global.html#stopThaliReplicationManager">stopThaliReplicationManager</a></li><li><a href="global.html#ThaliEmitter">ThaliEmitter</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Mon Jan 18 2016 11:19:32 GMT+0200 (EET) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>