#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 */
/**
* Hostkey generation context
*/
-struct GNUNET_CRYPTO_RsaKeyGenerationContext *GST_keygen;
+struct GNUNET_CRYPTO_EccKeyGenerationContext *GST_keygen;
/**
* Handle to our service's server.
/**
* Our public key.
*/
-struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded GST_my_public_key;
+struct GNUNET_CRYPTO_EccPublicKeyBinaryEncoded GST_my_public_key;
/**
* Our private key.
*/
-struct GNUNET_CRYPTO_RsaPrivateKey *GST_my_private_key;
+struct GNUNET_CRYPTO_EccPrivateKey *GST_my_private_key;
/**
* ATS handle.
* @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,
+ struct Session *session,
const char *sender_address,
uint16_t sender_address_len)
{
GST_validation_handle_pong (peer, message);
break;
case GNUNET_MESSAGE_TYPE_TRANSPORT_SESSION_CONNECT:
- GST_neighbours_handle_connect (message, peer, &address, session, ats,
- ats_count);
+ GST_neighbours_handle_connect (message, peer, &address, session, NULL, 0);
break;
case GNUNET_MESSAGE_TYPE_TRANSPORT_SESSION_CONNECT_ACK:
- GST_neighbours_handle_connect_ack (message, peer, &address, session, ats,
- ats_count);
+ GST_neighbours_handle_connect_ack (message, peer, &address, session, NULL, 0);
break;
case GNUNET_MESSAGE_TYPE_TRANSPORT_SESSION_ACK:
- GST_neighbours_handle_session_ack (message, peer, &address, session, ats,
- ats_count);
+ GST_neighbours_handle_session_ack (message, peer, &address, session, NULL, 0);
break;
case GNUNET_MESSAGE_TYPE_TRANSPORT_SESSION_DISCONNECT:
GST_neighbours_handle_disconnect_message (peer, message);
GST_neighbours_keepalive (peer);
break;
case GNUNET_MESSAGE_TYPE_TRANSPORT_SESSION_KEEPALIVE_RESPONSE:
- GST_neighbours_keepalive_response (peer, ats, ats_count);
+ GST_neighbours_keepalive_response (peer, NULL, 0);
break;
default:
/* should be payload */
gettext_noop
("# bytes payload received"),
ntohs (message->size), GNUNET_NO);
- ret = process_payload (peer, &address, session, message, ats, ats_count);
+ ret = process_payload (peer, &address, session, message, NULL, 0);
break;
}
end:
return GNUNET_ATS_address_get_type(GST_ats, addr, addrlen);
}
+/**
+ * Function that will be called to figure if an address is an loopback,
+ * LAN, WAN etc. address
+ *
+ * @param cls closure
+ * @param addr binary address
+ * @param addrlen length of the address
+ * @return ATS Information containing the network type
+ */
+static void
+plugin_env_update_metrics (void *cls,
+ const struct GNUNET_PeerIdentity *peer,
+ const char *address,
+ uint16_t address_len,
+ struct Session *session,
+ struct GNUNET_ATS_Information *ats,
+ uint32_t ats_count)
+{
+ struct GNUNET_HELLO_Address haddress;
+ const char *plugin_name = cls;
+
+ if ((NULL == ats) || (0 == ats_count))
+ return;
+ GNUNET_assert (NULL != GST_ats);
+
+ haddress.peer = *peer;
+ haddress.address = address;
+ haddress.address_length = address_len;
+ haddress.transport_name = plugin_name;
+
+ GNUNET_ATS_address_update (GST_ats, &haddress, session, ats, ats_count);
+}
+
/**
* Function called by ATS to notify the callee that the
{
if (NULL != GST_keygen)
{
- GNUNET_CRYPTO_rsa_key_create_stop (GST_keygen);
+ GNUNET_CRYPTO_ecc_key_create_stop (GST_keygen);
GST_keygen = NULL;
}
GST_neighbours_stop ();
GST_clients_stop ();
GST_blacklist_stop ();
GST_hello_stop ();
+ GST_manipulation_stop ();
if (NULL != GST_peerinfo)
{
}
if (NULL != GST_my_private_key)
{
- GNUNET_CRYPTO_rsa_key_free (GST_my_private_key);
+ GNUNET_CRYPTO_ecc_key_free (GST_my_private_key);
GST_my_private_key = NULL;
}
GST_server = NULL;
*/
static void
key_generation_cb (void *cls,
- struct GNUNET_CRYPTO_RsaPrivateKey *pk,
+ struct GNUNET_CRYPTO_EccPrivateKey *pk,
const char *emsg)
{
- struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded tmp;
long long unsigned int max_fd_cfg;
int max_fd_rlimit;
int max_fd;
GST_my_private_key = pk;
GST_stats = GNUNET_STATISTICS_create ("transport", GST_cfg);
- if (NULL == GST_stats)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- _("Could not access STATISTICS service. Exiting.\n"));
- GNUNET_SCHEDULER_shutdown ();
- return;
- }
GST_peerinfo = GNUNET_PEERINFO_connect (GST_cfg);
- memset (&GST_my_public_key, '\0', sizeof (GST_my_public_key));
- memset (&tmp, '\0', sizeof (tmp));
- GNUNET_CRYPTO_rsa_key_get_public (GST_my_private_key, &GST_my_public_key);
+ GNUNET_CRYPTO_ecc_key_get_public (GST_my_private_key, &GST_my_public_key);
GNUNET_CRYPTO_hash (&GST_my_public_key, sizeof (GST_my_public_key),
&GST_my_identity.hashPubKey);
-
GNUNET_assert (NULL != GST_my_private_key);
- GNUNET_assert (0 != memcmp (&GST_my_public_key, &tmp, sizeof (GST_my_public_key)));
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
NULL);
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_cfg);
+ GST_plugins_load (&GST_manipulation_recv,
&plugin_env_address_change_notification,
&plugin_env_session_end,
- &plugin_env_address_to_type);
+ &plugin_env_address_to_type,
+ &plugin_env_update_metrics);
GST_neighbours_start (NULL,
&neighbours_connect_notification,
&neighbours_disconnect_notification,
/* setup globals */
GST_cfg = c;
if (GNUNET_OK !=
- GNUNET_CONFIGURATION_get_value_filename (c, "GNUNETD", "HOSTKEY",
+ GNUNET_CONFIGURATION_get_value_filename (c, "PEER", "PRIVATE_KEY",
&keyfile))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
}
GST_server = server;
GNUNET_SERVER_suspend (server);
- GST_keygen = GNUNET_CRYPTO_rsa_key_create_start (keyfile, &key_generation_cb, NULL);
+ GST_keygen = GNUNET_CRYPTO_ecc_key_create_start (keyfile, &key_generation_cb, NULL);
GNUNET_free (keyfile);
if (NULL == GST_keygen)
{