diff options
Diffstat (limited to 'src/transport/gnunet-service-transport_plugins.c')
-rw-r--r-- | src/transport/gnunet-service-transport_plugins.c | 111 |
1 files changed, 48 insertions, 63 deletions
diff --git a/src/transport/gnunet-service-transport_plugins.c b/src/transport/gnunet-service-transport_plugins.c index 7fcc6f80d..87901d2cc 100644 --- a/src/transport/gnunet-service-transport_plugins.c +++ b/src/transport/gnunet-service-transport_plugins.c | |||
@@ -90,10 +90,10 @@ static struct TransportPlugin *plugins_tail; | |||
90 | * @param traffic_cb function to call for flow control | 90 | * @param traffic_cb function to call for flow control |
91 | * @param session_end_cb function to call when a session was terminated | 91 | * @param session_end_cb function to call when a session was terminated |
92 | */ | 92 | */ |
93 | void | 93 | void |
94 | GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb, | 94 | GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb, |
95 | GNUNET_TRANSPORT_AddressNotification address_cb, | 95 | GNUNET_TRANSPORT_AddressNotification address_cb, |
96 | GNUNET_TRANSPORT_SessionEnd session_end_cb) | 96 | GNUNET_TRANSPORT_SessionEnd session_end_cb) |
97 | { | 97 | { |
98 | struct TransportPlugin *plug; | 98 | struct TransportPlugin *plug; |
99 | unsigned long long tneigh; | 99 | unsigned long long tneigh; |
@@ -103,57 +103,48 @@ GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb, | |||
103 | 103 | ||
104 | if (GNUNET_OK != | 104 | if (GNUNET_OK != |
105 | GNUNET_CONFIGURATION_get_value_number (GST_cfg, | 105 | GNUNET_CONFIGURATION_get_value_number (GST_cfg, |
106 | "TRANSPORT", | 106 | "TRANSPORT", |
107 | "NEIGHBOUR_LIMIT", | 107 | "NEIGHBOUR_LIMIT", &tneigh)) |
108 | &tneigh)) | 108 | { |
109 | { | 109 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
110 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 110 | _("Transport service is lacking NEIGHBOUR_LIMIT option.\n")); |
111 | _("Transport service is lacking NEIGHBOUR_LIMIT option.\n")); | 111 | return; |
112 | return; | 112 | } |
113 | } | ||
114 | if (GNUNET_OK != | 113 | if (GNUNET_OK != |
115 | GNUNET_CONFIGURATION_get_value_string (GST_cfg, | 114 | GNUNET_CONFIGURATION_get_value_string (GST_cfg, |
116 | "TRANSPORT", "PLUGINS", &plugs)) | 115 | "TRANSPORT", "PLUGINS", &plugs)) |
117 | return; | 116 | return; |
118 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 117 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
119 | _("Starting transport plugins `%s'\n"), | 118 | _("Starting transport plugins `%s'\n"), plugs); |
120 | plugs); | ||
121 | for (pos = strtok (plugs, " "); pos != NULL; pos = strtok (NULL, " ")) | 119 | for (pos = strtok (plugs, " "); pos != NULL; pos = strtok (NULL, " ")) |
122 | { | 120 | { |
123 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 121 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
124 | _("Loading `%s' transport plugin\n"), pos); | 122 | _("Loading `%s' transport plugin\n"), pos); |
125 | GNUNET_asprintf (&libname, | 123 | GNUNET_asprintf (&libname, "libgnunet_plugin_transport_%s", pos); |
126 | "libgnunet_plugin_transport_%s", | 124 | plug = GNUNET_malloc (sizeof (struct TransportPlugin)); |
127 | pos); | 125 | plug->short_name = GNUNET_strdup (pos); |
128 | plug = GNUNET_malloc (sizeof (struct TransportPlugin)); | 126 | plug->lib_name = libname; |
129 | plug->short_name = GNUNET_strdup (pos); | 127 | plug->env.cfg = GST_cfg; |
130 | plug->lib_name = libname; | 128 | plug->env.my_identity = &GST_my_identity; |
131 | plug->env.cfg = GST_cfg; | 129 | plug->env.get_our_hello = &GST_hello_get; |
132 | plug->env.my_identity = &GST_my_identity; | 130 | plug->env.cls = plug->short_name; |
133 | plug->env.get_our_hello = &GST_hello_get; | 131 | plug->env.receive = recv_cb; |
134 | plug->env.cls = plug->short_name; | 132 | plug->env.notify_address = address_cb; |
135 | plug->env.receive = recv_cb; | 133 | plug->env.session_end = session_end_cb; |
136 | plug->env.notify_address = address_cb; | 134 | plug->env.max_connections = tneigh; |
137 | plug->env.session_end = session_end_cb; | 135 | plug->env.stats = GST_stats; |
138 | plug->env.max_connections = tneigh; | 136 | GNUNET_CONTAINER_DLL_insert (plugins_head, plugins_tail, plug); |
139 | plug->env.stats = GST_stats; | 137 | plug->api = GNUNET_PLUGIN_load (libname, &plug->env); |
140 | GNUNET_CONTAINER_DLL_insert (plugins_head, | 138 | if (plug->api == NULL) |
141 | plugins_tail, | 139 | { |
142 | plug); | 140 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
143 | plug->api = GNUNET_PLUGIN_load (libname, &plug->env); | 141 | _("Failed to load transport plugin for `%s'\n"), pos); |
144 | if (plug->api == NULL) | 142 | GNUNET_CONTAINER_DLL_remove (plugins_head, plugins_tail, plug); |
145 | { | 143 | GNUNET_free (plug->short_name); |
146 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 144 | GNUNET_free (plug->lib_name); |
147 | _("Failed to load transport plugin for `%s'\n"), | 145 | GNUNET_free (plug); |
148 | pos); | ||
149 | GNUNET_CONTAINER_DLL_remove (plugins_head, | ||
150 | plugins_tail, | ||
151 | plug); | ||
152 | GNUNET_free (plug->short_name); | ||
153 | GNUNET_free (plug->lib_name); | ||
154 | GNUNET_free (plug); | ||
155 | } | ||
156 | } | 146 | } |
147 | } | ||
157 | GNUNET_free (plugs); | 148 | GNUNET_free (plugs); |
158 | } | 149 | } |
159 | 150 | ||
@@ -167,15 +158,13 @@ GST_plugins_unload () | |||
167 | struct TransportPlugin *plug; | 158 | struct TransportPlugin *plug; |
168 | 159 | ||
169 | while (NULL != (plug = plugins_head)) | 160 | while (NULL != (plug = plugins_head)) |
170 | { | 161 | { |
171 | GNUNET_break (NULL == GNUNET_PLUGIN_unload (plug->lib_name, plug->api)); | 162 | GNUNET_break (NULL == GNUNET_PLUGIN_unload (plug->lib_name, plug->api)); |
172 | GNUNET_free (plug->lib_name); | 163 | GNUNET_free (plug->lib_name); |
173 | GNUNET_free (plug->short_name); | 164 | GNUNET_free (plug->short_name); |
174 | GNUNET_CONTAINER_DLL_remove (plugins_head, | 165 | GNUNET_CONTAINER_DLL_remove (plugins_head, plugins_tail, plug); |
175 | plugins_tail, | 166 | GNUNET_free (plug); |
176 | plug); | 167 | } |
177 | GNUNET_free (plug); | ||
178 | } | ||
179 | } | 168 | } |
180 | 169 | ||
181 | 170 | ||
@@ -208,20 +197,16 @@ GST_plugins_find (const char *name) | |||
208 | * @return statically allocated (!) human-readable address | 197 | * @return statically allocated (!) human-readable address |
209 | */ | 198 | */ |
210 | const char * | 199 | const char * |
211 | GST_plugins_a2s (const char *name, | 200 | GST_plugins_a2s (const char *name, const void *addr, size_t addrlen) |
212 | const void *addr, | ||
213 | size_t addrlen) | ||
214 | { | 201 | { |
215 | struct GNUNET_TRANSPORT_PluginFunctions *api; | 202 | struct GNUNET_TRANSPORT_PluginFunctions *api; |
216 | 203 | ||
217 | if (name == NULL) | 204 | if (name == NULL) |
218 | return NULL; | 205 | return NULL; |
219 | api = GST_plugins_find (name); | 206 | api = GST_plugins_find (name); |
220 | if ( (api == NULL) || (addrlen == 0) || (addr == NULL) ) | 207 | if ((api == NULL) || (addrlen == 0) || (addr == NULL)) |
221 | return NULL; | 208 | return NULL; |
222 | return api->address_to_string (NULL, | 209 | return api->address_to_string (NULL, addr, addrlen); |
223 | addr, | ||
224 | addrlen); | ||
225 | } | 210 | } |
226 | 211 | ||
227 | 212 | ||