aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwachs <wachs@140774ce-b5e7-0310-ab8b-a85725594a96>2013-02-05 12:45:13 +0000
committerwachs <wachs@140774ce-b5e7-0310-ab8b-a85725594a96>2013-02-05 12:45:13 +0000
commit8024e931b411b88418ab5802586567d3d86bf21f (patch)
treefa2e023cda3dd546c2f34da9a9f2214786d1a111
parenta31112008dc93d49b93e723240ae379ddfbe08c4 (diff)
more metric
git-svn-id: https://gnunet.org/svn/gnunet@26014 140774ce-b5e7-0310-ab8b-a85725594a96
-rw-r--r--src/transport/gnunet-service-transport.c9
-rw-r--r--src/transport/gnunet-service-transport.h31
-rw-r--r--src/transport/transport.h28
3 files changed, 65 insertions, 3 deletions
diff --git a/src/transport/gnunet-service-transport.c b/src/transport/gnunet-service-transport.c
index 9f60d03d75..e64cbfbfe0 100644
--- a/src/transport/gnunet-service-transport.c
+++ b/src/transport/gnunet-service-transport.c
@@ -37,6 +37,7 @@
#include "gnunet-service-transport_neighbours.h"
#include "gnunet-service-transport_plugins.h"
#include "gnunet-service-transport_validation.h"
+#include "gnunet-service-transport_manipulation.h"
#include "transport.h"
/* globals */
@@ -229,8 +230,8 @@ process_payload (const struct GNUNET_PeerIdentity *peer,
* @return how long the plugin should wait until receiving more data
* (plugins that do not support this, can ignore the return value)
*/
-static struct GNUNET_TIME_Relative
-plugin_env_receive_callback (void *cls, const struct GNUNET_PeerIdentity *peer,
+struct GNUNET_TIME_Relative
+GST_receive_callback (void *cls, const struct GNUNET_PeerIdentity *peer,
const struct GNUNET_MessageHeader *message,
const struct GNUNET_ATS_Information *ats,
uint32_t ats_count, struct Session *session,
@@ -568,6 +569,7 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
GST_clients_stop ();
GST_blacklist_stop ();
GST_hello_stop ();
+ GST_manipulation_stop ();
if (NULL != GST_peerinfo)
{
@@ -677,7 +679,8 @@ key_generation_cb (void *cls,
GST_blacklist_start (GST_server);
GST_ats =
GNUNET_ATS_scheduling_init (GST_cfg, &ats_request_address_change, NULL);
- GST_plugins_load (&plugin_env_receive_callback,
+ GST_manipulation_init ();
+ GST_plugins_load (&GST_manipulation_recv,
&plugin_env_address_change_notification,
&plugin_env_session_end,
&plugin_env_address_to_type);
diff --git a/src/transport/gnunet-service-transport.h b/src/transport/gnunet-service-transport.h
index adc28ba6d0..abc473e213 100644
--- a/src/transport/gnunet-service-transport.h
+++ b/src/transport/gnunet-service-transport.h
@@ -67,6 +67,37 @@ extern struct GNUNET_CRYPTO_RsaPrivateKey *GST_my_private_key;
*/
extern struct GNUNET_ATS_SchedulingHandle *GST_ats;
+/**
+ * Function called by the transport for each received message.
+ * This function should also be called with "NULL" for the
+ * message to signal that the other peer disconnected.
+ *
+ * @param cls closure, const char* with the name of the plugin we received the message from
+ * @param peer (claimed) identity of the other peer
+ * @param message the message, NULL if we only care about
+ * learning about the delay until we should receive again -- FIXME!
+ * @param ats performance information
+ * @param ats_count number of records in ats
+ * @param session identifier used for this session (NULL for plugins
+ * that do not offer bi-directional communication to the sender
+ * using the same "connection")
+ * @param sender_address binary address of the sender (if we established the
+ * connection or are otherwise sure of it; should be NULL
+ * for inbound TCP/UDP connections since it it not clear
+ * that we could establish ourselves a connection to that
+ * IP address and get the same system)
+ * @param sender_address_len number of bytes in sender_address
+ * @return how long the plugin should wait until receiving more data
+ * (plugins that do not support this, can ignore the return value)
+ */
+struct GNUNET_TIME_Relative
+GST_receive_callback (void *cls, const struct GNUNET_PeerIdentity *peer,
+ const struct GNUNET_MessageHeader *message,
+ const struct GNUNET_ATS_Information *ats,
+ uint32_t ats_count, struct Session *session,
+ const char *sender_address,
+ uint16_t sender_address_len);
+
#endif
/* end of file gnunet-service-transport_plugins.h */
diff --git a/src/transport/transport.h b/src/transport/transport.h
index 2e7bd8372f..be31f0ad67 100644
--- a/src/transport/transport.h
+++ b/src/transport/transport.h
@@ -415,6 +415,34 @@ struct AddressIterateMessage
/**
+ * Message from the library to the transport service
+ * asking for binary addresses known for a peer.
+ */
+struct TrafficMetricMessage
+{
+ /**
+ * Type will be GNUNET_MESSAGE_TYPE_TRANSPORT_TRAFFIC_METRIC
+ */
+ struct GNUNET_MessageHeader header;
+
+ /**
+ * SEND, RECEIVE or BOTH?
+ */
+ uint16_t direction;
+
+ /**
+ * Traffic metrics count
+ */
+ uint16_t ats_count;
+
+ /**
+ * The identity of the peer to look up.
+ */
+ struct GNUNET_PeerIdentity peer;
+};
+
+
+/**
* Message from the transport service to the library
* containing binary addresses known for a peer.
* Memory layout: