thali
Version:
1,890 lines (560 loc) • 33.6 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Module: thaliMobileNative</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">Module: thaliMobileNative</h1>
<section>
<header>
</header>
<article>
<div class="container-overview">
</div>
<h3 class="subsection-title">Members</h3>
<h4 class="name" id="~radioState"><span class="type-signature">(inner, readonly) </span>radioState<span class="type-signature"> :string</span></h4>
<div class="description">
<p>Enum to describe the state of the system's radios</p>
</div>
<h5>Type:</h5>
<ul>
<li>
<span class="param-type">string</span>
</li>
</ul>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>ON</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last"><p>The radio is on and available for use.</p></td>
</tr>
<tr>
<td class="name"><code>OFF</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last"><p>The radio exists on the device but is turned off.</p></td>
</tr>
<tr>
<td class="name"><code>UNAVAILABLE</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last"><p>The radio exists on the device and is on but for some reason the system won't let us use it.</p></td>
</tr>
<tr>
<td class="name"><code>NOT_HERE</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last"><p>We depend on this radio type for this platform type but it doesn't appear to exist on this device.</p></td>
</tr>
<tr>
<td class="name"><code>DO_NOT_CARE</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last"><p>Thali doesn't use this radio type on this platform and so makes no effort to determine its state.</p></td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="NextGeneration_thaliMobileNative.js.html">NextGeneration/thaliMobileNative.js</a>, <a href="NextGeneration_thaliMobileNative.js.html#line410">line 410</a>
</li></ul></dd>
</dl>
<h3 class="subsection-title">Type Definitions</h3>
<h4 class="name" id="~ConnectCallback"><span class="type-signature"></span>ConnectCallback<span class="signature">(err, listenerOrIncomingConnection)</span><span class="type-signature"></span></h4>
<div class="description">
<p>This is the callback used by external:"Mobile('connect')".callNative.</p>
<p>If err is not NULL then listenerOrIncomingConnection MUST be null and vice
versa.</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>err</code></td>
<td class="type">
<span class="param-type">error</span>
</td>
<td class="description last"><p>If null then the call the callback was submitted to was
successful. If not null then it will be an Error object that will define what
went wrong.</p></td>
</tr>
<tr>
<td class="name"><code>listenerOrIncomingConnection</code></td>
<td class="type">
<span class="param-type"><a href="module-thaliMobileNative.html#~ListenerOrIncomingConnection">module:thaliMobileNative~ListenerOrIncomingConnection</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_thaliMobileNative.js.html">NextGeneration/thaliMobileNative.js</a>, <a href="NextGeneration_thaliMobileNative.js.html#line192">line 192</a>
</li></ul></dd>
</dl>
<h4 class="name" id="~discoveryAdvertisingStateUpdate">discoveryAdvertisingStateUpdate</h4>
<div class="description">
<p>This object defines the state of discovery and advertising</p>
</div>
<h5>Type:</h5>
<ul>
<li>
<span class="param-type">Object</span>
</li>
</ul>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>discoveryActive</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="description last"><p>True if discovery is running otherwise
false. Note that this value can change as a result of calling start and stop
on discovery but also due to the user or other apps altering the system's
radio state.</p></td>
</tr>
<tr>
<td class="name"><code>advertisingActive</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="description last"><p>True if advertising is running
otherwise false. Note that this value can change as a result of calling start
and stop on advertising but also due to the user or other apps altering the
system's radio state.</p></td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="NextGeneration_thaliMobileNative.js.html">NextGeneration/thaliMobileNative.js</a>, <a href="NextGeneration_thaliMobileNative.js.html#line367">line 367</a>
</li></ul></dd>
</dl>
<h4 class="name" id="~discoveryAdvertisingStateUpdateNonTCPCallback"><span class="type-signature"></span>discoveryAdvertisingStateUpdateNonTCPCallback<span class="signature">()</span><span class="type-signature"></span></h4>
<div class="description">
<p>This is the callback used by
external:"Mobile('discoveryAdvertisingStateUpdateNonTCP')".registerToNative</p>
</div>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>discoveryAdvertisingStateUpdateValue</code></td>
<td class="type">
<span class="param-type"><a href="module-thaliMobileNative.html#~discoveryAdvertisingStateUpdate">module:thaliMobileNative~discoveryAdvertisingStateUpdate</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_thaliMobileNative.js.html">NextGeneration/thaliMobileNative.js</a>, <a href="NextGeneration_thaliMobileNative.js.html#line385">line 385</a>
</li></ul></dd>
</dl>
<h4 class="name" id="~incomingConnectionToPortNumberFailedCallback"><span class="type-signature"></span>incomingConnectionToPortNumberFailedCallback<span class="signature">()</span><span class="type-signature"></span></h4>
<div class="description">
<p>This is the callback used by
external:"Mobile('incomingConnectionToPortNumberFailed')".registerToNative</p>
</div>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<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"><p>The 127.0.0.1 port that the TCP/IP bridge tried to connect to.</p></td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="NextGeneration_thaliMobileNative.js.html">NextGeneration/thaliMobileNative.js</a>, <a href="NextGeneration_thaliMobileNative.js.html#line476">line 476</a>
</li></ul></dd>
</dl>
<h4 class="name" id="~ListenerOrIncomingConnection">ListenerOrIncomingConnection</h4>
<div class="description">
<p>When we are asked to connect to a remote peer the way we normally handles
this is by opening a port on 127.0.0.1 and listening for an incoming
connection. When we get the incoming connection we then bridge it to the
remote peer.</p>
<p>When we are using our normal behavior the listeningPort parameter will be
set to the port the local Thali application should connect to and both
clientPort and serverPort MUST be null.</p>
<p>However, we also have to deal with a bug in iOS's multipeer connectivity
framework. Our original iOS design involved us having one MCSession that
connected peer A as a TCP/IP client to peer B and then a second MCSession
that connected peer B as a TCP/IP client to peer A. But there is apparently a
bug in iOS that if two peers have two MCSessions and if one moves around a
bunch of data then the connections become unstable and randomly fail.</p>
<p>Our work around for this problem is that we will always form exactly one
MCSession between two peers. So let's say that peer A establishes a MCSession
with peer B. In that case peer A will create an output stream to peer B who
will then respond with an output stream to peer A. We will then marshal these
streams to TCP/IP by exposing peer A as a TCP/IP listener that peer A
connects to and sends data to peer B. Peer B will see the connection as an
incoming TCP/IP client that connects to Peer B's <code>portNumber</code>.</p>
<p>Now imagine that Peer B issues a connect request to Peer A's
<code>peerIdentifier</code>. Ideally we would just create a new MCSession and do what we
described above in reverse. But we cannot because of the bug. So the work
around is that we will use this type to notify the caller that what they have
to do is to use the existing connection from Peer A to Peer B to send TCP/IP
connection requests back to Peer A. This involves magic at the mux layer. In
other words we are pushing an iOS bug up from the iOS native code into
Node.js and requiring us to solve it up in Node.js land. For all the gory
details on how this works see the <a href="http://www.thaliproject.org/presenceprotocolBindings.md">binding
spec</a>.</p>
<p>We use the <code>clientPort</code> value below so that the mux layer can figure out
which of its connections is the one it needs to use to talk to the desired
peer.</p>
<p>We use the <code>serverPort</code> to indicate which 127.0.0.1 port we connected to.
The reason we include it here is because there is a potential race condition
where between the time we created the response to the connect request and
when it was actually sent to Node.js in theory we could have received a stop
and start that switched us to a different <code>portNumber</code>. So by including
<code>serverPort</code> we can catch those race conditions.</p>
</div>
<h5>Type:</h5>
<ul>
<li>
<span class="param-type">Object</span>
</li>
</ul>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>listeningPort</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last"><p>The port on which the native layer is
listening on 127.0.0.1 for an incoming TCP/IP connection that the native
layer will then relay to the remote peer.</p></td>
</tr>
<tr>
<td class="name"><code>clientPort</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last"><p>The port that the native layer's TCP/IP
client uses to connect to the <code>portNumber</code> submitted by the Thali
application.</p></td>
</tr>
<tr>
<td class="name"><code>serverPort</code></td>
<td class="type">
<span class="param-type">number</span>
</td>
<td class="description last"><p>The port that the native layer's TCP/IP
client connected to.</p></td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="NextGeneration_thaliMobileNative.js.html">NextGeneration/thaliMobileNative.js</a>, <a href="NextGeneration_thaliMobileNative.js.html#line133">line 133</a>
</li></ul></dd>
</dl>
<h4 class="name" id="~networkChanged">networkChanged</h4>
<div class="description">
<p>This object defines the current state of the network</p>
</div>
<h5>Type:</h5>
<ul>
<li>
<span class="param-type">Object</span>
</li>
</ul>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>blueToothLowEnergy</code></td>
<td class="type">
<span class="param-type"><a href="module-thaliMobileNative.html#~radioState">module:thaliMobileNative~radioState</a></span>
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>blueTooth</code></td>
<td class="type">
<span class="param-type"><a href="module-thaliMobileNative.html#~radioState">module:thaliMobileNative~radioState</a></span>
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>wifi</code></td>
<td class="type">
<span class="param-type"><a href="module-thaliMobileNative.html#~radioState">module:thaliMobileNative~radioState</a></span>
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>bssidName</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last"><p>If null this value indicates that either
wifiRadioOn is not 'on' or that the Wi-Fi isn't currently connected to an
access point. If non-null then this is the BSSID of the access point that
Wi-Fi is connected to.</p></td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="NextGeneration_thaliMobileNative.js.html">NextGeneration/thaliMobileNative.js</a>, <a href="NextGeneration_thaliMobileNative.js.html#line423">line 423</a>
</li></ul></dd>
</dl>
<h4 class="name" id="~networkChangedCallback"><span class="type-signature"></span>networkChangedCallback<span class="signature">()</span><span class="type-signature"></span></h4>
<div class="description">
<p>This is the callback used by
external:"Mobile('networkChanged')".registerToNative</p>
</div>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>networkChanged</code></td>
<td class="type">
<span class="param-type"><a href="module-thaliMobileNative.html#~networkChanged">module:thaliMobileNative~networkChanged</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_thaliMobileNative.js.html">NextGeneration/thaliMobileNative.js</a>, <a href="NextGeneration_thaliMobileNative.js.html#line441">line 441</a>
</li></ul></dd>
</dl>
<h4 class="name" id="~peer">peer</h4>
<div class="description">
<p>This object defines peerAvailabilityChanged information about a single peer.</p>
</div>
<h5>Type:</h5>
<ul>
<li>
<span class="param-type">Object</span>
</li>
</ul>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<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"><p>An opaque value that identifies a
non-TCP/IP transport handle for the discovered peer. Because of how
non-TCP/IP transports work it is completely possible for the same remote peer
to have many different peerIdentifiers assigned to them. So the only purpose
of this value is to use it in a connect call not to uniquely identify a peer.</p></td>
</tr>
<tr>
<td class="name"><code>peerAvailable</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="description last"><p>If true this indicates that the peer is
available for connectivity. If false it means that the peer can no longer be
connected to. For too many reasons to count it's perfectly possible to never
get a false for peerAvailable. It is also possible to get a false when the
peer is still reachable. A classic example is on Android where the app can go
into the background reducing the power to the BLE radio which can make the
peer seem to disappear. But Bluetooth would still be on full power so a
connect could still work. So this value can at best be treated as a hint.</p></td>
</tr>
<tr>
<td class="name"><code>pleaseConnect</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="description last"><p>If true then this means that a lexically
smaller peer wishes to establish a connection to this peer but requires this
peer to initiate the connection per the binding spec. If this peer already
has called external:"Mobile('connect')".callNative for the identified
peer then no action MUST be taken. Similarly if this peer already has a
connection to the remote peer then no action MUST be taken. Yes, there are
many race conditions here but the binding protocol calls for the other peer
to repeat its request a number of times so it should be o.k. If this value is
false then it either means that this isn't iOS or it means that the remote
peer is either lexically larger or not currently interested in connecting.</p></td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="NextGeneration_thaliMobileNative.js.html">NextGeneration/thaliMobileNative.js</a>, <a href="NextGeneration_thaliMobileNative.js.html#line305">line 305</a>
</li></ul></dd>
</dl>
<h4 class="name" id="~peerAvailabilityChangedCallback"><span class="type-signature"></span>peerAvailabilityChangedCallback<span class="signature">()</span><span class="type-signature"></span></h4>
<div class="description">
<p>This is the callback used by
external:"Mobile('peerAvailabilityChanged')".registerToNative</p>
</div>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>peers</code></td>
<td class="type">
<span class="param-type">Array.<<a href="module-thaliMobileNative.html#~peer">module:thaliMobileNative~peer</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_thaliMobileNative.js.html">NextGeneration/thaliMobileNative.js</a>, <a href="NextGeneration_thaliMobileNative.js.html#line338">line 338</a>
</li></ul></dd>
</dl>
<h4 class="name" id="~ThaliMobileCallback"><span class="type-signature"></span>ThaliMobileCallback<span class="signature">(err)</span><span class="type-signature"></span></h4>
<div class="description">
<p>This is the default callback we use for the methods defined in this file.</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>err</code></td>
<td class="type">
<span class="param-type">error</span>
</td>
<td class="description last"><p>If null then the call the callback was submitted to was
successful. If not null then it will be an Error object that will define what
went wrong.</p></td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="NextGeneration_thaliMobileNative.js.html">NextGeneration/thaliMobileNative.js</a>, <a href="NextGeneration_thaliMobileNative.js.html#line62">line 62</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:31 GMT+0200 (EET)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>