projects
/
oweals
/
gnunet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- coverity
[oweals/gnunet.git]
/
src
/
transport
/
plugin_transport_wlan.c
diff --git
a/src/transport/plugin_transport_wlan.c
b/src/transport/plugin_transport_wlan.c
index 2d786e2a915ee2bf060f0c51ddaeeaa347a4618b..ccf5d587cb86b7117f019b5bafa4bb274d515ed3 100644
(file)
--- a/
src/transport/plugin_transport_wlan.c
+++ b/
src/transport/plugin_transport_wlan.c
@@
-260,6
+260,16
@@
struct FragmentMessage
*/
void *cont_cls;
*/
void *cont_cls;
+ /**
+ * Size of original message
+ */
+ size_t size_payload;
+
+ /**
+ * Number of bytes used to transmit message
+ */
+ size_t size_on_wire;
+
};
};
@@
-706,6
+716,7
@@
fragment_transmission_done (void *cls,
{
struct FragmentMessage *fm = cls;
{
struct FragmentMessage *fm = cls;
+
fm->sh = NULL;
GNUNET_FRAGMENT_context_transmission_done (fm->fragcontext);
}
fm->sh = NULL;
GNUNET_FRAGMENT_context_transmission_done (fm->fragcontext);
}
@@
-744,11
+755,18
@@
transmit_fragment (void *cls,
&radio_header->header,
GNUNET_NO,
&fragment_transmission_done, fm);
&radio_header->header,
GNUNET_NO,
&fragment_transmission_done, fm);
+ fm->size_on_wire += size;
if (NULL != fm->sh)
GNUNET_STATISTICS_update (endpoint->plugin->env->stats, _("# WLAN message fragments sent"),
1, GNUNET_NO);
else
GNUNET_FRAGMENT_context_transmission_done (fm->fragcontext);
if (NULL != fm->sh)
GNUNET_STATISTICS_update (endpoint->plugin->env->stats, _("# WLAN message fragments sent"),
1, GNUNET_NO);
else
GNUNET_FRAGMENT_context_transmission_done (fm->fragcontext);
+ GNUNET_STATISTICS_update (endpoint->plugin->env->stats,
+ "# bytes currently in WLAN buffers",
+ -msize, GNUNET_NO);
+ GNUNET_STATISTICS_update (endpoint->plugin->env->stats,
+ "# bytes transmitted via WLAN",
+ msize, GNUNET_NO);
}
}
}
}
@@
-772,7
+790,7
@@
free_fragment_message (struct FragmentMessage *fm)
GNUNET_HELPER_send_cancel (fm->sh);
fm->sh = NULL;
}
GNUNET_HELPER_send_cancel (fm->sh);
fm->sh = NULL;
}
- GNUNET_FRAGMENT_context_destroy (fm->fragcontext);
+ GNUNET_FRAGMENT_context_destroy (fm->fragcontext
, NULL, NULL
);
if (fm->timeout_task != GNUNET_SCHEDULER_NO_TASK)
{
GNUNET_SCHEDULER_cancel (fm->timeout_task);
if (fm->timeout_task != GNUNET_SCHEDULER_NO_TASK)
{
GNUNET_SCHEDULER_cancel (fm->timeout_task);
@@
-797,7
+815,7
@@
fragmentmessage_timeout (void *cls,
fm->timeout_task = GNUNET_SCHEDULER_NO_TASK;
if (NULL != fm->cont)
{
fm->timeout_task = GNUNET_SCHEDULER_NO_TASK;
if (NULL != fm->cont)
{
- fm->cont (fm->cont_cls, &fm->target, GNUNET_SYSERR);
+ fm->cont (fm->cont_cls, &fm->target, GNUNET_SYSERR
, fm->size_payload, fm->size_on_wire
);
fm->cont = NULL;
}
free_fragment_message (fm);
fm->cont = NULL;
}
free_fragment_message (fm);
@@
-811,6
+829,7
@@
fragmentmessage_timeout (void *cls,
* @param timeout how long can the message wait?
* @param target peer that should receive the message
* @param msg message to transmit
* @param timeout how long can the message wait?
* @param target peer that should receive the message
* @param msg message to transmit
+ * @param payload_size bytes of payload
* @param cont continuation to call once the message has
* been transmitted (or if the transport is ready
* for the next transmission call; or if the
* @param cont continuation to call once the message has
* been transmitted (or if the transport is ready
* for the next transmission call; or if the
@@
-822,6
+841,7
@@
send_with_fragmentation (struct MacEndpoint *endpoint,
struct GNUNET_TIME_Relative timeout,
const struct GNUNET_PeerIdentity *target,
const struct GNUNET_MessageHeader *msg,
struct GNUNET_TIME_Relative timeout,
const struct GNUNET_PeerIdentity *target,
const struct GNUNET_MessageHeader *msg,
+ size_t payload_size,
GNUNET_TRANSPORT_TransmitContinuation cont, void *cont_cls)
{
GNUNET_TRANSPORT_TransmitContinuation cont, void *cont_cls)
{
@@
-832,13
+852,18
@@
send_with_fragmentation (struct MacEndpoint *endpoint,
fm = GNUNET_malloc (sizeof (struct FragmentMessage));
fm->macendpoint = endpoint;
fm->target = *target;
fm = GNUNET_malloc (sizeof (struct FragmentMessage));
fm->macendpoint = endpoint;
fm->target = *target;
+ fm->size_payload = payload_size;
+ fm->size_on_wire = 0;
fm->timeout = GNUNET_TIME_relative_to_absolute (timeout);
fm->cont = cont;
fm->cont_cls = cont_cls;
fm->timeout = GNUNET_TIME_relative_to_absolute (timeout);
fm->cont = cont;
fm->cont_cls = cont_cls;
+ /* 1 MBit/s typical data rate, 1430 byte fragments => ~100 ms per message */
fm->fragcontext =
GNUNET_FRAGMENT_context_create (plugin->env->stats, WLAN_MTU,
&plugin->tracker,
GNUNET_TIME_UNIT_SECONDS,
fm->fragcontext =
GNUNET_FRAGMENT_context_create (plugin->env->stats, WLAN_MTU,
&plugin->tracker,
GNUNET_TIME_UNIT_SECONDS,
+ GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS,
+ 100),
msg,
&transmit_fragment, fm);
fm->timeout_task =
msg,
&transmit_fragment, fm);
fm->timeout_task =
@@
-1063,10
+1088,16
@@
wlan_plugin_send (void *cls,
wlanheader->target = session->target;
wlanheader->crc = htonl (GNUNET_CRYPTO_crc32_n (msgbuf, msgbuf_size));
memcpy (&wlanheader[1], msgbuf, msgbuf_size);
wlanheader->target = session->target;
wlanheader->crc = htonl (GNUNET_CRYPTO_crc32_n (msgbuf, msgbuf_size));
memcpy (&wlanheader[1], msgbuf, msgbuf_size);
+
+ GNUNET_STATISTICS_update (plugin->env->stats,
+ "# bytes currently in WLAN buffers",
+ msgbuf_size, GNUNET_NO);
+
send_with_fragmentation (session->mac,
to,
&session->target,
&wlanheader->header,
send_with_fragmentation (session->mac,
to,
&session->target,
&wlanheader->header,
+ msgbuf_size,
cont, cont_cls);
return size;
}
cont, cont_cls);
return size;
}
@@
-1099,6
+1130,11
@@
process_data (void *cls, void *client, const struct GNUNET_MessageHeader *hdr)
ats[1].type = htonl (GNUNET_ATS_NETWORK_TYPE);
ats[1].value = htonl (GNUNET_ATS_NET_WLAN);
msize = ntohs (hdr->size);
ats[1].type = htonl (GNUNET_ATS_NETWORK_TYPE);
ats[1].value = htonl (GNUNET_ATS_NET_WLAN);
msize = ntohs (hdr->size);
+
+ GNUNET_STATISTICS_update (plugin->env->stats,
+ "# bytes received via WLAN",
+ msize, GNUNET_NO);
+
switch (ntohs (hdr->type))
{
case GNUNET_MESSAGE_TYPE_HELLO:
switch (ntohs (hdr->type))
{
case GNUNET_MESSAGE_TYPE_HELLO:
@@
-1160,7
+1196,7
@@
process_data (void *cls, void *client, const struct GNUNET_MessageHeader *hdr)
mas->endpoint->timeout = GNUNET_TIME_relative_to_absolute (MACENDPOINT_TIMEOUT);
if (NULL != fm->cont)
{
mas->endpoint->timeout = GNUNET_TIME_relative_to_absolute (MACENDPOINT_TIMEOUT);
if (NULL != fm->cont)
{
- fm->cont (fm->cont_cls, &fm->target, GNUNET_OK);
+ fm->cont (fm->cont_cls, &fm->target, GNUNET_OK
, fm->size_payload, fm->size_on_wire
);
fm->cont = NULL;
}
free_fragment_message (fm);
fm->cont = NULL;
}
free_fragment_message (fm);
@@
-1285,7
+1321,8
@@
handle_helper_message (void *cls, void *client,
/* remove old address */
plugin->env->notify_address (plugin->env->cls, GNUNET_NO,
&plugin->mac_address,
/* remove old address */
plugin->env->notify_address (plugin->env->cls, GNUNET_NO,
&plugin->mac_address,
- sizeof (struct GNUNET_TRANSPORT_WLAN_MacAddress));
+ sizeof (struct GNUNET_TRANSPORT_WLAN_MacAddress),
+ "wlan");
}
plugin->mac_address = cm->mac;
plugin->have_mac = GNUNET_YES;
}
plugin->mac_address = cm->mac;
plugin->have_mac = GNUNET_YES;
@@
-1295,7
+1332,8
@@
handle_helper_message (void *cls, void *client,
GNUNET_i2s (plugin->env->my_identity));
plugin->env->notify_address (plugin->env->cls, GNUNET_YES,
&plugin->mac_address,
GNUNET_i2s (plugin->env->my_identity));
plugin->env->notify_address (plugin->env->cls, GNUNET_YES,
&plugin->mac_address,
- sizeof (struct GNUNET_TRANSPORT_WLAN_MacAddress));
+ sizeof (struct GNUNET_TRANSPORT_WLAN_MacAddress),
+ "wlan");
break;
case GNUNET_MESSAGE_TYPE_WLAN_DATA_FROM_HELPER:
LOG (GNUNET_ERROR_TYPE_DEBUG,
break;
case GNUNET_MESSAGE_TYPE_WLAN_DATA_FROM_HELPER:
LOG (GNUNET_ERROR_TYPE_DEBUG,
@@
-1475,7
+1513,7
@@
wlan_plugin_address_to_string (void *cls, const void *addr, size_t addrlen)
return NULL;
}
mac = addr;
return NULL;
}
mac = addr;
- return
GNUNET_strdup (mac_to_string (mac)
);
+ return
mac_to_string (mac
);
}
}
@@
-1537,6
+1575,16
@@
libgnunet_plugin_transport_wlan_done (void *cls)
GNUNET_free (api);
return NULL;
}
GNUNET_free (api);
return NULL;
}
+
+ if (GNUNET_YES == plugin->have_mac)
+ {
+ plugin->env->notify_address (plugin->env->cls, GNUNET_NO,
+ &plugin->mac_address,
+ sizeof (struct GNUNET_TRANSPORT_WLAN_MacAddress),
+ "wlan");
+ plugin->have_mac = GNUNET_NO;
+ }
+
if (GNUNET_SCHEDULER_NO_TASK != plugin->beacon_task)
{
GNUNET_SCHEDULER_cancel (plugin->beacon_task);
if (GNUNET_SCHEDULER_NO_TASK != plugin->beacon_task)
{
GNUNET_SCHEDULER_cancel (plugin->beacon_task);
@@
-1662,11
+1710,9
@@
libgnunet_plugin_transport_wlan_init (void *cls)
GNUNET_CONFIGURATION_get_value_number (env->cfg, "transport-wlan",
"TESTMODE", &testmode)) ||
(testmode > 2) ) )
GNUNET_CONFIGURATION_get_value_number (env->cfg, "transport-wlan",
"TESTMODE", &testmode)) ||
(testmode > 2) ) )
- {
- LOG (GNUNET_ERROR_TYPE_ERROR,
- _("Invalid configuration option `%s' in section `%s'\n"),
- "TESTMODE",
- "transport-wlan");
+ {
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+ "transport-wlan", "TESTMODE");
return NULL;
}
if ( (0 == testmode) &&
return NULL;
}
if ( (0 == testmode) &&
@@
-1682,10
+1728,8
@@
libgnunet_plugin_transport_wlan_init (void *cls)
(env->cfg, "transport-wlan", "INTERFACE",
&interface))
{
(env->cfg, "transport-wlan", "INTERFACE",
&interface))
{
- LOG (GNUNET_ERROR_TYPE_ERROR,
- _("Missing configuration option `%s' in section `%s'\n"),
- "INTERFACE",
- "transport-wlan");
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+ "transport-wlan", "INTERFACE");
return NULL;
}
return NULL;
}
@@
-1704,13
+1748,15
@@
libgnunet_plugin_transport_wlan_init (void *cls)
plugin->helper_payload_tokenizer = GNUNET_SERVER_mst_create (&process_data, plugin);
plugin->beacon_task = GNUNET_SCHEDULER_add_now (&send_hello_beacon,
plugin);
plugin->helper_payload_tokenizer = GNUNET_SERVER_mst_create (&process_data, plugin);
plugin->beacon_task = GNUNET_SCHEDULER_add_now (&send_hello_beacon,
plugin);
- switch (testmode)
+ /* some compilers do not like switch on 'long long'... */
+ switch ((unsigned int) testmode)
{
case 0: /* normal */
plugin->helper_argv[0] = (char *) "gnunet-helper-transport-wlan";
plugin->helper_argv[1] = interface;
plugin->helper_argv[2] = NULL;
{
case 0: /* normal */
plugin->helper_argv[0] = (char *) "gnunet-helper-transport-wlan";
plugin->helper_argv[1] = interface;
plugin->helper_argv[2] = NULL;
- plugin->suid_helper = GNUNET_HELPER_start ("gnunet-helper-transport-wlan",
+ plugin->suid_helper = GNUNET_HELPER_start (GNUNET_NO,
+ "gnunet-helper-transport-wlan",
plugin->helper_argv,
&handle_helper_message,
NULL,
plugin->helper_argv,
&handle_helper_message,
NULL,
@@
-1720,7
+1766,8
@@
libgnunet_plugin_transport_wlan_init (void *cls)
plugin->helper_argv[0] = (char *) "gnunet-helper-transport-wlan-dummy";
plugin->helper_argv[1] = (char *) "1";
plugin->helper_argv[2] = NULL;
plugin->helper_argv[0] = (char *) "gnunet-helper-transport-wlan-dummy";
plugin->helper_argv[1] = (char *) "1";
plugin->helper_argv[2] = NULL;
- plugin->suid_helper = GNUNET_HELPER_start ("gnunet-helper-transport-wlan-dummy",
+ plugin->suid_helper = GNUNET_HELPER_start (GNUNET_NO,
+ "gnunet-helper-transport-wlan-dummy",
plugin->helper_argv,
&handle_helper_message,
NULL,
plugin->helper_argv,
&handle_helper_message,
NULL,
@@
-1730,7
+1777,8
@@
libgnunet_plugin_transport_wlan_init (void *cls)
plugin->helper_argv[0] = (char *) "gnunet-helper-transport-wlan-dummy";
plugin->helper_argv[1] = (char *) "2";
plugin->helper_argv[2] = NULL;
plugin->helper_argv[0] = (char *) "gnunet-helper-transport-wlan-dummy";
plugin->helper_argv[1] = (char *) "2";
plugin->helper_argv[2] = NULL;
- plugin->suid_helper = GNUNET_HELPER_start ("gnunet-helper-transport-wlan-dummy",
+ plugin->suid_helper = GNUNET_HELPER_start (GNUNET_NO,
+ "gnunet-helper-transport-wlan-dummy",
plugin->helper_argv,
&handle_helper_message,
NULL,
plugin->helper_argv,
&handle_helper_message,
NULL,