aboutsummaryrefslogtreecommitdiff
path: root/src/transport/plugin_transport_udp_new_broadcasting.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-01-30 11:02:54 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-01-30 11:02:54 +0000
commit950c22927b978fde5cfd92d9b1ff7a6523dcb569 (patch)
tree877736d67bbad1b582d32b6a8765feb0a7aad5d7 /src/transport/plugin_transport_udp_new_broadcasting.c
parent2480cd03d241eec2448017997b5b8c056ee3caf5 (diff)
downloadgnunet-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.c48
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
176void
177udp_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
176static void 224static void
177udp_ipv4_broadcast_send (void *cls, 225udp_ipv4_broadcast_send (void *cls,
178 const struct GNUNET_SCHEDULER_TaskContext *tc) 226 const struct GNUNET_SCHEDULER_TaskContext *tc)