aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-service-transport.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport/gnunet-service-transport.c')
-rw-r--r--src/transport/gnunet-service-transport.c44
1 files changed, 24 insertions, 20 deletions
diff --git a/src/transport/gnunet-service-transport.c b/src/transport/gnunet-service-transport.c
index 95ab96919..d239ce0ce 100644
--- a/src/transport/gnunet-service-transport.c
+++ b/src/transport/gnunet-service-transport.c
@@ -1110,9 +1110,11 @@ try_transmission_to_peer (struct NeighborList *neighbor)
1110 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, _("try_transmission_to_peer pre-send: at this point rl->neighbor->addr is NOT NULL, addrlen is %d\n"), rl->neighbor->addr_len); 1110 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, _("try_transmission_to_peer pre-send: at this point rl->neighbor->addr is NOT NULL, addrlen is %d\n"), rl->neighbor->addr_len);
1111 else 1111 else
1112 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, _("try_transmission_to_peer pre-send: at this point rl->neighbor->addr is NULL\n")); 1112 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, _("try_transmission_to_peer pre-send: at this point rl->neighbor->addr is NULL\n"));
1113 /* FIXME: Change MessageQueue to hold message buffer and size? */
1113 rl->plugin->api->send (rl->plugin->api->cls, 1114 rl->plugin->api->send (rl->plugin->api->cls,
1114 &neighbor->id, 1115 &neighbor->id,
1115 mq->message, 1116 (char *)mq->message,
1117 ntohs(mq->message->size),
1116 mq->priority, 1118 mq->priority,
1117 GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, 1119 GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT,
1118 rl->neighbor->addr, 1120 rl->neighbor->addr,
@@ -1556,7 +1558,9 @@ cleanup_validation (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
1556 GNUNET_PEERINFO_add_peer (cfg, sched, &pid, hello); 1558 GNUNET_PEERINFO_add_peer (cfg, sched, &pid, hello);
1557 n = find_neighbor (&pid, NULL, 0); 1559 n = find_neighbor (&pid, NULL, 0);
1558 if (NULL != n) 1560 if (NULL != n)
1559 try_transmission_to_peer (n); 1561 {
1562 try_transmission_to_peer (n);
1563 }
1560 GNUNET_free (hello); 1564 GNUNET_free (hello);
1561 while (NULL != (va = pos->addresses)) 1565 while (NULL != (va = pos->addresses))
1562 { 1566 {
@@ -1593,21 +1597,6 @@ cleanup_validation (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
1593} 1597}
1594 1598
1595 1599
1596static struct GNUNET_MessageHeader *
1597createPingMessage (struct GNUNET_PeerIdentity * target, struct ValidationAddress *va)
1598{
1599
1600 struct TransportPingMessage *ping;
1601 ping = GNUNET_malloc(sizeof(struct TransportPingMessage));
1602
1603 ping->challenge = htonl(va->challenge);
1604 ping->header.size = sizeof(struct TransportPingMessage);
1605 ping->header.type = htons(GNUNET_MESSAGE_TYPE_TRANSPORT_PING);
1606 memcpy(&ping->target, target, sizeof(struct GNUNET_PeerIdentity));
1607
1608 return &ping->header;
1609}
1610
1611/** 1600/**
1612 * Function that will be called if we receive a validation 1601 * Function that will be called if we receive a validation
1613 * of an address challenge that we transmitted to another 1602 * of an address challenge that we transmitted to another
@@ -1757,8 +1746,12 @@ run_validation (void *cls,
1757 struct TransportPlugin *tp; 1746 struct TransportPlugin *tp;
1758 struct ValidationAddress *va; 1747 struct ValidationAddress *va;
1759 struct GNUNET_PeerIdentity id; 1748 struct GNUNET_PeerIdentity id;
1760 struct GNUNET_MessageHeader *pingMessage; 1749 char *pingMessage;
1761 int sent; 1750 int sent;
1751 struct TransportPingMessage *ping;
1752 char * message_buf;
1753 int hello_size;
1754
1762 tp = find_transport (tname); 1755 tp = find_transport (tname);
1763 if (tp == NULL) 1756 if (tp == NULL)
1764 { 1757 {
@@ -1786,13 +1779,22 @@ run_validation (void *cls,
1786 (unsigned int) -1); 1779 (unsigned int) -1);
1787 memcpy (&va[1], addr, addrlen); 1780 memcpy (&va[1], addr, addrlen);
1788 1781
1789 pingMessage = createPingMessage(&id, va); 1782 hello_size = GNUNET_HELLO_size(our_hello);
1783 message_buf = GNUNET_malloc(sizeof(struct TransportPingMessage) + hello_size);
1784 memcpy(message_buf, &our_hello, hello_size);
1785
1786 ping = GNUNET_malloc(sizeof(struct TransportPingMessage));
1787 ping->challenge = htonl(va->challenge);
1788 ping->header.size = htons(sizeof(struct TransportPingMessage));
1789 ping->header.type = htons(GNUNET_MESSAGE_TYPE_TRANSPORT_PING);
1790 memcpy(&ping->target, &id, sizeof(struct GNUNET_PeerIdentity));
1791 memcpy(&message_buf[hello_size], ping, sizeof(struct TransportPingMessage));
1790 1792
1791 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending ping message to address `%s' via `%s' for `%4s'\n", 1793 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending ping message to address `%s' via `%s' for `%4s'\n",
1792 GNUNET_a2s (addr, addrlen), tname, GNUNET_i2s (&id)); 1794 GNUNET_a2s (addr, addrlen), tname, GNUNET_i2s (&id));
1793 1795
1794 1796
1795 sent = tp->api->send(tp->api->cls, &id, pingMessage, GNUNET_SCHEDULER_PRIORITY_DEFAULT, 1797 sent = tp->api->send(tp->api->cls, &id, message_buf, sizeof(struct TransportPingMessage) + hello_size, GNUNET_SCHEDULER_PRIORITY_DEFAULT,
1796 TRANSPORT_DEFAULT_TIMEOUT, addr, addrlen, GNUNET_YES, NULL, NULL); 1798 TRANSPORT_DEFAULT_TIMEOUT, addr, addrlen, GNUNET_YES, NULL, NULL);
1797 1799
1798 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transport returned %d from send!\n", sent); 1800 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transport returned %d from send!\n", sent);
@@ -1814,6 +1816,8 @@ run_validation (void *cls,
1814 * the address via the transport plugin. If not validated, then 1816 * the address via the transport plugin. If not validated, then
1815 * do not count this as a good peer/address... 1817 * do not count this as a good peer/address...
1816 * 1818 *
1819 * Currently this function is not used, ping/pongs get sent from the
1820 * run_validation function. Haven't decided yet how to do this.
1817 */ 1821 */
1818static void 1822static void
1819validate_address (void *cls, struct ValidationAddress *va, 1823validate_address (void *cls, struct ValidationAddress *va,