commit 285181f04d096dd675a3b7538779f0ba7ceb63c6
parent 72ef45e25d24e73e0548d3cffcea35f1cd98f13a
Author: Matthias Wachs <wachs@net.in.tum.de>
Date: Thu, 11 Jul 2013 12:56:53 +0000
notification for inbound sessions
Diffstat:
1 file changed, 51 insertions(+), 8 deletions(-)
diff --git a/src/transport/plugin_transport_wlan.c b/src/transport/plugin_transport_wlan.c
@@ -702,15 +702,16 @@ session_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
}
+
/**
- * Create a new session
+ * Lookup a new session
*
* @param endpoint pointer to the mac endpoint of the peer
* @param peer peer identity to use for this session
- * @return returns the session
+ * @return returns the session or NULL
*/
static struct Session *
-create_session (struct MacEndpoint *endpoint,
+lookup_session (struct MacEndpoint *endpoint,
const struct GNUNET_PeerIdentity *peer)
{
struct Session *session;
@@ -722,6 +723,22 @@ create_session (struct MacEndpoint *endpoint,
session->timeout = GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT);
return session;
}
+ return NULL;
+}
+
+/**
+ * Create a new session
+ *
+ * @param endpoint pointer to the mac endpoint of the peer
+ * @param peer peer identity to use for this session
+ * @return returns the session or NULL
+ */
+static struct Session *
+create_session (struct MacEndpoint *endpoint,
+ const struct GNUNET_PeerIdentity *peer)
+{
+ struct Session *session;
+
GNUNET_STATISTICS_update (endpoint->plugin->env->stats, _("# WLAN sessions allocated"), 1,
GNUNET_NO);
session = GNUNET_malloc (sizeof (struct Session));
@@ -733,7 +750,7 @@ create_session (struct MacEndpoint *endpoint,
session->timeout = GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT);
session->timeout_task =
GNUNET_SCHEDULER_add_delayed (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, &session_timeout, session);
- LOG (GNUNET_ERROR_TYPE_DEBUG,
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
"Created new session for peer `%s' with endpoint %s\n",
GNUNET_i2s (peer),
mac_to_string (&endpoint->addr.mac));
@@ -742,6 +759,24 @@ create_session (struct MacEndpoint *endpoint,
/**
+ * Look up a session for a peer and create a new session if none is found
+ *
+ * @param endpoint pointer to the mac endpoint of the peer
+ * @param peer peer identity to use for this session
+ * @return returns the session
+ */
+static struct Session *
+get_session (struct MacEndpoint *endpoint,
+ const struct GNUNET_PeerIdentity *peer)
+{
+ struct Session *session;
+ if (NULL != (session = lookup_session (endpoint, peer)))
+ return session;
+ return create_session (endpoint, peer);
+}
+
+
+/**
* Function called once we have successfully given the fragment
* message to the SUID helper process and we are thus ready for
* the next fragment.
@@ -1063,7 +1098,7 @@ wlan_plugin_get_session (void *cls,
GNUNET_i2s (&address->peer),
wlan_plugin_address_to_string(NULL, address->address, address->address_length));
endpoint = create_macendpoint (plugin, address->address);
- return create_session (endpoint, &address->peer);
+ return get_session (endpoint, &address->peer);
}
@@ -1304,9 +1339,17 @@ process_data (void *cls, void *client, const struct GNUNET_MessageHeader *hdr)
break;
}
xmas.endpoint = mas->endpoint;
- xmas.session = create_session (mas->endpoint, &wlanheader->sender);
- LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Processing %u bytes of WLAN DATA from peer `%s'\n",
+ if (NULL == (xmas.session = lookup_session (mas->endpoint, &wlanheader->sender)))
+ {
+ xmas.session = create_session (mas->endpoint, &wlanheader->sender);
+ plugin->env->session_start (NULL, &wlanheader->sender,
+ PLUGIN_NAME, NULL, 0, xmas.session, NULL, 0);
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "Notifying transport about peer `%s''s new inbound session %p \n",
+ GNUNET_i2s (&wlanheader->sender), xmas.session);
+ }
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "Processing %u bytes of WLAN DATA from peer `%s'\n",
(unsigned int) msize,
GNUNET_i2s (&wlanheader->sender));
(void) GNUNET_SERVER_mst_receive (plugin->wlan_header_payload_tokenizer,