diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-01-30 11:02:54 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-01-30 11:02:54 +0000 |
commit | 950c22927b978fde5cfd92d9b1ff7a6523dcb569 (patch) | |
tree | 877736d67bbad1b582d32b6a8765feb0a7aad5d7 /src/transport/plugin_transport_udp_new_broadcasting.c | |
parent | 2480cd03d241eec2448017997b5b8c056ee3caf5 (diff) | |
download | gnunet-950c22927b978fde5cfd92d9b1ff7a6523dcb569.tar.gz gnunet-950c22927b978fde5cfd92d9b1ff7a6523dcb569.zip |
- changes
Diffstat (limited to 'src/transport/plugin_transport_udp_new_broadcasting.c')
-rw-r--r-- | src/transport/plugin_transport_udp_new_broadcasting.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/transport/plugin_transport_udp_new_broadcasting.c b/src/transport/plugin_transport_udp_new_broadcasting.c index 7513cb626..849cdd15f 100644 --- a/src/transport/plugin_transport_udp_new_broadcasting.c +++ b/src/transport/plugin_transport_udp_new_broadcasting.c | |||
@@ -173,6 +173,54 @@ broadcast_ipv4_mst_cb (void *cls, void *client, | |||
173 | GNUNET_free (mc); | 173 | GNUNET_free (mc); |
174 | } | 174 | } |
175 | 175 | ||
176 | void | ||
177 | udp_broadcast_receive (struct Plugin *plugin, const char * buf, ssize_t size, struct sockaddr *addr, size_t addrlen) | ||
178 | { | ||
179 | struct GNUNET_ATS_Information ats; | ||
180 | |||
181 | if (addrlen == sizeof (struct sockaddr_in)) | ||
182 | { | ||
183 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
184 | "Received IPv4 HELLO beacon broadcast with %i bytes from address %s\n", | ||
185 | size, GNUNET_a2s ((const struct sockaddr *) addr, addrlen)); | ||
186 | |||
187 | struct Mstv4Context *mc; | ||
188 | |||
189 | mc = GNUNET_malloc (sizeof (struct Mstv4Context)); | ||
190 | struct sockaddr_in *av4 = (struct sockaddr_in *) addr; | ||
191 | |||
192 | mc->addr.ipv4_addr = av4->sin_addr.s_addr; | ||
193 | mc->addr.u4_port = av4->sin_port; | ||
194 | ats = plugin->env->get_address_type (plugin->env->cls, (const struct sockaddr *) addr, addrlen); | ||
195 | mc->ats_address_network_type = ats.value; | ||
196 | if (GNUNET_OK != | ||
197 | GNUNET_SERVER_mst_receive (plugin->broadcast_ipv4_mst, mc, buf, size, | ||
198 | GNUNET_NO, GNUNET_NO)) | ||
199 | GNUNET_free (mc); | ||
200 | } | ||
201 | else if (addrlen == sizeof (struct sockaddr_in6)) | ||
202 | { | ||
203 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
204 | "Received IPv6 HELLO beacon broadcast with %i bytes from address %s\n", | ||
205 | size, GNUNET_a2s ((const struct sockaddr *) &addr, addrlen)); | ||
206 | |||
207 | struct Mstv6Context *mc; | ||
208 | |||
209 | mc = GNUNET_malloc (sizeof (struct Mstv6Context)); | ||
210 | struct sockaddr_in6 *av6 = (struct sockaddr_in6 *) addr; | ||
211 | |||
212 | mc->addr.ipv6_addr = av6->sin6_addr; | ||
213 | mc->addr.u6_port = av6->sin6_port; | ||
214 | ats = plugin->env->get_address_type (plugin->env->cls, (const struct sockaddr *) addr, addrlen); | ||
215 | mc->ats_address_network_type = ats.value; | ||
216 | |||
217 | if (GNUNET_OK != | ||
218 | GNUNET_SERVER_mst_receive (plugin->broadcast_ipv6_mst, mc, buf, size, | ||
219 | GNUNET_NO, GNUNET_NO)) | ||
220 | GNUNET_free (mc); | ||
221 | } | ||
222 | } | ||
223 | |||
176 | static void | 224 | static void |
177 | udp_ipv4_broadcast_send (void *cls, | 225 | udp_ipv4_broadcast_send (void *cls, |
178 | const struct GNUNET_SCHEDULER_TaskContext *tc) | 226 | const struct GNUNET_SCHEDULER_TaskContext *tc) |