diff options
Diffstat (limited to 'src/transport/gnunet-service-transport.c')
-rw-r--r-- | src/transport/gnunet-service-transport.c | 44 |
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 | ||
1596 | static struct GNUNET_MessageHeader * | ||
1597 | createPingMessage (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 | */ |
1818 | static void | 1822 | static void |
1819 | validate_address (void *cls, struct ValidationAddress *va, | 1823 | validate_address (void *cls, struct ValidationAddress *va, |