diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-08-14 15:18:52 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-08-14 15:18:52 +0000 |
commit | afb010fb5c1864267f446f1097dc045b0001dba5 (patch) | |
tree | 68cdce95c338f45eb7093f2c8e056fe1db5eecb6 | |
parent | dd0cb0a52289df80d378f2c518e5036c64aef7a0 (diff) | |
download | gnunet-afb010fb5c1864267f446f1097dc045b0001dba5.tar.gz gnunet-afb010fb5c1864267f446f1097dc045b0001dba5.zip |
handle connect request, add message types
-rw-r--r-- | src/transport/gnunet-service-transport_clients.c | 80 |
1 files changed, 71 insertions, 9 deletions
diff --git a/src/transport/gnunet-service-transport_clients.c b/src/transport/gnunet-service-transport_clients.c index e73826daf..0e701ea02 100644 --- a/src/transport/gnunet-service-transport_clients.c +++ b/src/transport/gnunet-service-transport_clients.c | |||
@@ -533,6 +533,57 @@ clients_handle_send (void *cls, | |||
533 | stcc); | 533 | stcc); |
534 | } | 534 | } |
535 | 535 | ||
536 | |||
537 | |||
538 | /** | ||
539 | * Try to initiate a connection to the given peer if the blacklist | ||
540 | * allowed it. | ||
541 | * | ||
542 | * @param cls closure (unused, NULL) | ||
543 | * @param peer identity of peer that was tested | ||
544 | * @param result GNUNET_OK if the connection is allowed, | ||
545 | * GNUNET_NO if not | ||
546 | */ | ||
547 | static void | ||
548 | try_connect_if_allowed (void *cls, | ||
549 | const struct GNUNET_PeerIdentity *peer, | ||
550 | int result) | ||
551 | { | ||
552 | if (GNUNET_OK != result) | ||
553 | return; /* not allowed */ | ||
554 | GST_neighbours_try_connect (peer); | ||
555 | } | ||
556 | |||
557 | |||
558 | /** | ||
559 | * Handle request connect message | ||
560 | * | ||
561 | * @param cls closure (always NULL) | ||
562 | * @param client identification of the client | ||
563 | * @param message the actual message | ||
564 | */ | ||
565 | static void | ||
566 | clients_handle_request_connect (void *cls, | ||
567 | struct GNUNET_SERVER_Client *client, | ||
568 | const struct GNUNET_MessageHeader *message) | ||
569 | { | ||
570 | const struct TransportRequestConnectMessage *trcm = | ||
571 | (const struct TransportRequestConnectMessage *) message; | ||
572 | |||
573 | GNUNET_STATISTICS_update (GST_stats, | ||
574 | gettext_noop ("# REQUEST CONNECT messages received"), | ||
575 | 1, | ||
576 | GNUNET_NO); | ||
577 | #if DEBUG_TRANSPORT | ||
578 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | ||
579 | "Received a request connect message for peer `%s'\n", | ||
580 | GNUNET_i2s(&trcm->peer)); | ||
581 | #endif | ||
582 | (void) GST_blacklist_test_allowed (&trcm->peer, NULL, | ||
583 | &try_connect_if_allowed, NULL); | ||
584 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | ||
585 | } | ||
586 | |||
536 | 587 | ||
537 | /** | 588 | /** |
538 | * Client asked for a quota change for a particular peer. Process the request. | 589 | * Client asked for a quota change for a particular peer. Process the request. |
@@ -795,15 +846,26 @@ void | |||
795 | GST_clients_start (struct GNUNET_SERVER_Handle *server) | 846 | GST_clients_start (struct GNUNET_SERVER_Handle *server) |
796 | { | 847 | { |
797 | static const struct GNUNET_SERVER_MessageHandler handlers[] = { | 848 | static const struct GNUNET_SERVER_MessageHandler handlers[] = { |
798 | { &clients_handle_start, NULL, sizeof (struct StartMessage)}, | 849 | { &clients_handle_start, NULL, |
799 | { &clients_handle_hello, NULL, 0}, | 850 | GNUNET_MESSAGE_TYPE_TRANSPORT_START, sizeof (struct StartMessage)}, |
800 | { &clients_handle_send, NULL, 0}, | 851 | { &clients_handle_hello, NULL, |
801 | { &clients_handle_set_quota, NULL, sizeof (struct QuotaSetMessage)}, | 852 | GNUNET_MESSAGE_TYPE_HELLO, 0}, |
802 | { &clients_handle_address_lookup, NULL, 0}, | 853 | { &clients_handle_send, NULL, |
803 | { &clients_handle_peer_address_lookup, NULL, sizeof (struct PeerAddressLookupMessage)}, | 854 | GNUNET_MESSAGE_TYPE_TRANSPORT_SEND , 0}, |
804 | { &clients_handle_address_iterate, NULL, sizeof (struct GNUNET_MessageHeader)}, | 855 | { &clients_handle_request_connect, NULL, |
805 | { &GST_blacklist_handle_init, NULL, sizeof (struct GNUNET_MessageHeader)}, | 856 | GNUNET_MESSAGE_TYPE_TRANSPORT_REQUEST_CONNECT, sizeof (struct TransportRequestConnectMessage)}, |
806 | { &GST_blacklist_handle_reply, NULL, sizeof (struct BlacklistMessage)}, | 857 | { &clients_handle_set_quota, NULL, |
858 | GNUNET_MESSAGE_TYPE_TRANSPORT_SET_QUOTA, sizeof (struct QuotaSetMessage)}, | ||
859 | { &clients_handle_address_lookup, NULL, | ||
860 | GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_LOOKUP , 0}, | ||
861 | { &clients_handle_peer_address_lookup, NULL, | ||
862 | GNUNET_MESSAGE_TYPE_TRANSPORT_PEER_ADDRESS_LOOKUP, sizeof (struct PeerAddressLookupMessage)}, | ||
863 | { &clients_handle_address_iterate, NULL, | ||
864 | GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_ITERATE, sizeof (struct GNUNET_MessageHeader)}, | ||
865 | { &GST_blacklist_handle_init, NULL, | ||
866 | GNUNET_MESSAGE_TYPE_TRANSPORT_BLACKLIST_INIT, sizeof (struct GNUNET_MessageHeader)}, | ||
867 | { &GST_blacklist_handle_reply, NULL, | ||
868 | GNUNET_MESSAGE_TYPE_TRANSPORT_BLACKLIST_REPLY, sizeof (struct BlacklistMessage)}, | ||
807 | {NULL, NULL, 0, 0} | 869 | {NULL, NULL, 0, 0} |
808 | }; | 870 | }; |
809 | GNUNET_SERVER_add_handlers (server, handlers); | 871 | GNUNET_SERVER_add_handlers (server, handlers); |