* plugin that caused the call.
*
* @param recv_cb function to call when data is received
+ * @param register_quota_cb function to call to register a quota callback
+ * @param unregister_quota_cb function to call to unregister a quota callback
* @param address_cb function to call when our public addresses changed
* @param session_start_cb function to call when a session was created
* @param session_end_cb function to call when a session was terminated
*/
void
GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
+ GNUNET_TRANSPORT_RegisterQuotaNotification register_quota_cb,
+ GNUNET_TRANSPORT_UnregisterQuotaNotification unregister_quota_cb,
GNUNET_TRANSPORT_AddressNotification address_cb,
GNUNET_TRANSPORT_SessionStart session_start_cb,
GNUNET_TRANSPORT_SessionEnd session_end_cb,
GNUNET_CONFIGURATION_get_value_string (GST_cfg, "TRANSPORT", "PLUGINS",
&plugs))
return;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Starting transport plugins `%s'\n"),
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ _("Starting transport plugins `%s'\n"),
plugs);
for (pos = strtok (plugs, " "); pos != NULL; pos = strtok (NULL, " "))
{
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Loading `%s' transport plugin\n"),
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ _("Loading `%s' transport plugin\n"),
pos);
GNUNET_asprintf (&libname, "libgnunet_plugin_transport_%s", pos);
- plug = GNUNET_malloc (sizeof (struct TransportPlugin));
+ plug = GNUNET_new (struct TransportPlugin);
plug->short_name = GNUNET_strdup (pos);
plug->lib_name = libname;
plug->env.cfg = GST_cfg;
plug->env.session_end = session_end_cb;
plug->env.get_address_type = address_type_cb;
plug->env.update_address_metrics = metric_update_cb;
+ plug->env.register_quota_notification = register_quota_cb;
+ plug->env.unregister_quota_notification = unregister_quota_cb;
plug->env.max_connections = tneigh;
plug->env.stats = GST_stats;
GNUNET_CONTAINER_DLL_insert (plugins_head, plugins_tail, plug);
plug = next;
next = plug->next;
plug->api = GNUNET_PLUGIN_load (plug->lib_name, &plug->env);
- if (plug->api == NULL)
+ if (NULL == plug->api)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
_("Failed to load transport plugin for `%s'\n"),
"send",
plug->lib_name);
}
- if (NULL == plug->api->disconnect)
+ if (NULL == plug->api->disconnect_peer)
{
fail = GNUNET_YES;
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
_("Missing function `%s' in transport plugin for `%s'\n"),
- "disconnect",
+ "disconnect_peer",
+ plug->lib_name);
+ }
+ if (NULL == plug->api->disconnect_session)
+ {
+ fail = GNUNET_YES;
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ _("Missing function `%s' in transport plugin for `%s'\n"),
+ "disconnect_session",
+ plug->lib_name);
+ }
+ if (NULL == plug->api->query_keepalive_factor)
+ {
+ fail = GNUNET_YES;
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ _("Missing function `%s' in transport plugin for `%s'\n"),
+ "query_keepalive_factor",
+ plug->lib_name);
+ }
+ if (NULL == plug->api->update_session_timeout)
+ {
+ fail = GNUNET_YES;
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ _("Missing function `%s' in transport plugin for `%s'\n"),
+ "update_session_timeout",
plug->lib_name);
}
if (GNUNET_YES == fail)
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
_("Did not load plugin `%s' due to missing functions\n"),
plug->lib_name);
+ GNUNET_break (NULL == GNUNET_PLUGIN_unload (plug->lib_name, plug->api));
GNUNET_CONTAINER_DLL_remove (plugins_head, plugins_tail, plug);
GNUNET_free (plug->short_name);
GNUNET_free (plug->lib_name);