X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftransport%2Ftransport-testing.h;h=cb5ad319cc537623e385fc3abf6be31d2b3ed1ef;hb=5a7cef0202631204485cbcb1e36671e4321a936f;hp=42daa45962143e3c6c96f8e742a85b7b6fe14eb9;hpb=3685629253bb94994449f56871252af24a91b6e7;p=oweals%2Fgnunet.git diff --git a/src/transport/transport-testing.h b/src/transport/transport-testing.h index 42daa4596..cb5ad319c 100644 --- a/src/transport/transport-testing.h +++ b/src/transport/transport-testing.h @@ -30,6 +30,9 @@ #include "gnunet_util_lib.h" #include "gnunet_hello_lib.h" #include "gnunet_transport_service.h" +#include "gnunet_transport_core_service.h" +#include "gnunet_transport_hello_service.h" +#include "gnunet_transport_manipulation_service.h" #include "gnunet_testing_lib.h" @@ -46,19 +49,6 @@ struct GNUNET_TRANSPORT_TESTING_PeerContext; struct GNUNET_TRANSPORT_TESTING_Handle; -/** - * Callback when two peers are connected and both have called the connect callback - * to notify clients about a new peer - * - * @param p FIXME: remove ASAP. - * @param cls closure - */ -typedef void -(*GNUNET_TRANSPORT_TESTING_StartCallback) (struct GNUNET_TRANSPORT_TESTING_PeerContext *p, - void *cls); - - - /** * Context for a single peer */ @@ -87,7 +77,12 @@ struct GNUNET_TRANSPORT_TESTING_PeerContext /** * Peer's transport service handle */ - struct GNUNET_TRANSPORT_Handle *th; + struct GNUNET_TRANSPORT_CoreHandle *th; + + /** + * Peer's transport service manipulation handle + */ + struct GNUNET_TRANSPORT_ManipulationHandle *tmh; /** * Peer's ATS handle. @@ -97,7 +92,7 @@ struct GNUNET_TRANSPORT_TESTING_PeerContext /** * Peer's transport get hello handle to retrieve peer's HELLO message */ - struct GNUNET_TRANSPORT_GetHelloHandle *ghh; + struct GNUNET_TRANSPORT_HelloGetHandle *ghh; /** * Peer's testing handle @@ -117,22 +112,22 @@ struct GNUNET_TRANSPORT_TESTING_PeerContext /** * Receive callback */ - GNUNET_TRANSPORT_ReceiveCallback rec; + struct GNUNET_MQ_MessageHandler *handlers; /** * Notify connect callback */ - GNUNET_TRANSPORT_NotifyConnect nc; + GNUNET_TRANSPORT_NotifyConnecT nc; /** * Notify disconnect callback */ - GNUNET_TRANSPORT_NotifyDisconnect nd; + GNUNET_TRANSPORT_NotifyDisconnecT nd; /** * Startup completed callback */ - GNUNET_TRANSPORT_TESTING_StartCallback start_cb; + GNUNET_SCHEDULER_TaskCallback start_cb; /** * Peers HELLO Message @@ -207,6 +202,11 @@ struct GNUNET_TRANSPORT_TESTING_ConnectRequest */ void *cb_cls; + /** + * Message queue for sending from @a p1 to @a p2. + */ + struct GNUNET_MQ_Handle *mq; + /** * Set if peer1 says the connection is up to peer2. */ @@ -224,55 +224,6 @@ struct GNUNET_TRANSPORT_TESTING_ConnectRequest }; -/** - * Information we keep for active transmission jobs. - */ -struct TRANSPORT_TESTING_SendJob -{ - - /** - * Kept in a DLL. - */ - struct TRANSPORT_TESTING_SendJob *next; - - /** - * Kept in a DLL. - */ - struct TRANSPORT_TESTING_SendJob *prev; - - /** - * Sender of the message. - */ - struct GNUNET_TRANSPORT_TESTING_PeerContext *sender; - - /** - * Receiver of the message. - */ - struct GNUNET_TRANSPORT_TESTING_PeerContext *receiver; - - /** - * Operation handle. - */ - struct GNUNET_TRANSPORT_TransmitHandle *th; - - /** - * Number of the message. - */ - uint32_t num; - - /** - * Type of message to send. - */ - uint16_t mtype; - - /** - * Length of the message. - */ - uint16_t msize; - -}; - - /** * Handle for a test run. */ @@ -293,16 +244,6 @@ struct GNUNET_TRANSPORT_TESTING_Handle */ struct GNUNET_TRANSPORT_TESTING_ConnectRequest *cc_tail; - /** - * Kept in a DLL. - */ - struct TRANSPORT_TESTING_SendJob *sj_head; - - /** - * Kept in a DLL. - */ - struct TRANSPORT_TESTING_SendJob *sj_tail; - /** * head DLL of peers */ @@ -339,7 +280,7 @@ GNUNET_TRANSPORT_TESTING_done (struct GNUNET_TRANSPORT_TESTING_Handle *tth); * @param tth the testing handle * @param cfgname configuration file * @param peer_id the peer_id - * @param rec receive callback + * @param handlers functions for receiving messages * @param nc connect callback * @param nd disconnect callback * @param cb_cls closure for @a nc and @a nd callback @@ -351,11 +292,11 @@ struct GNUNET_TRANSPORT_TESTING_PeerContext * GNUNET_TRANSPORT_TESTING_start_peer (struct GNUNET_TRANSPORT_TESTING_Handle *tth, const char *cfgname, int peer_id, - GNUNET_TRANSPORT_ReceiveCallback rec, - GNUNET_TRANSPORT_NotifyConnect nc, - GNUNET_TRANSPORT_NotifyDisconnect nd, + const struct GNUNET_MQ_MessageHandler *handlers, + GNUNET_TRANSPORT_NotifyConnecT nc, + GNUNET_TRANSPORT_NotifyDisconnecT nd, void *cb_cls, - GNUNET_TRANSPORT_TESTING_StartCallback start_cb, + GNUNET_SCHEDULER_TaskCallback start_cb, void *start_cb_cls); @@ -378,7 +319,7 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct GNUNET_TRANSPORT_TESTING_PeerContext */ int GNUNET_TRANSPORT_TESTING_restart_peer (struct GNUNET_TRANSPORT_TESTING_PeerContext *p, - GNUNET_TRANSPORT_TESTING_StartCallback restart_cb, + GNUNET_SCHEDULER_TaskCallback restart_cb, void *restart_cb_cls); @@ -466,6 +407,23 @@ struct GNUNET_TRANSPORT_TESTING_ConnectRequestList; struct GNUNET_TRANSPORT_TESTING_InternalPeerContext; +GNUNET_NETWORK_STRUCT_BEGIN +struct GNUNET_TRANSPORT_TESTING_TestMessage +{ + /** + * Type is (usually) #GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE. + */ + struct GNUNET_MessageHeader header; + + /** + * Monotonically increasing counter throughout the test. + */ + uint32_t num GNUNET_PACKED; +}; +GNUNET_NETWORK_STRUCT_END + + + /** * Function called by the transport for each received message. * @@ -478,7 +436,7 @@ typedef void (*GNUNET_TRANSPORT_TESTING_ReceiveCallback) (void *cls, struct GNUNET_TRANSPORT_TESTING_PeerContext *receiver, const struct GNUNET_PeerIdentity *sender, - const struct GNUNET_MessageHeader *message); + const struct GNUNET_TRANSPORT_TESTING_TestMessage *message); /** @@ -759,11 +717,6 @@ GNUNET_TRANSPORT_TESTING_main_ (const char *argv0, /* ***************** Convenience functions for sending ********* */ -// TODO: -// - need to have continuation after send is done! -// - need easy way to specify continuation in case -// of the scheduler tasks - /** * Send a test message of type @a mtype and size @a msize from * peer @a sender to peer @a receiver. The peers should be @@ -774,6 +727,8 @@ GNUNET_TRANSPORT_TESTING_main_ (const char *argv0, * @param mtype message type to use * @param msize size of the message, at least `sizeof (struct GNUNET_TRANSPORT_TESTING_TestMessage)` * @param num unique message number + * @param cont continuation to call after transmission + * @param cont_cls closure for @a cont * @return #GNUNET_OK if message was queued, * #GNUNET_NO if peers are not connected * #GNUNET_SYSERR if @a msize is illegal @@ -783,7 +738,9 @@ GNUNET_TRANSPORT_TESTING_send (struct GNUNET_TRANSPORT_TESTING_PeerContext *send struct GNUNET_TRANSPORT_TESTING_PeerContext *receiver, uint16_t mtype, uint16_t msize, - uint32_t num); + uint32_t num, + GNUNET_SCHEDULER_TaskCallback cont, + void *cont_cls); /** @@ -791,27 +748,55 @@ GNUNET_TRANSPORT_TESTING_send (struct GNUNET_TRANSPORT_TESTING_PeerContext *send */ #define GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE 12345 -GNUNET_NETWORK_STRUCT_BEGIN -struct GNUNET_TRANSPORT_TESTING_TestMessage +/** + * Alternative message type for tests. + */ +#define GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE2 12346 + + +/** + * Type of the closure argument to pass to + * #GNUNET_TRANSPORT_TESTING_simple_send() and + * #GNUNET_TRANSPORT_TESTING_large_send(). + */ +struct GNUNET_TRANSPORT_TESTING_SendClosure { /** - * Type is #GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE. + * Context for the transmission. */ - struct GNUNET_MessageHeader header; + struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext *ccc; /** - * Monotonically increasing counter throughout the test. + * Function that returns the desired message size. Overrides + * the message size, can be NULL in which case the message + * size is the default. */ - uint32_t num GNUNET_PACKED; + size_t (*get_size_cb)(unsigned int n); + + /** + * Number of messages to be transmitted in a loop. + * Use zero for "forever" (until external shutdown). + */ + unsigned int num_messages; + + /** + * Function to call after all transmissions, can be NULL. + */ + GNUNET_SCHEDULER_TaskCallback cont; + + /** + * Closure for @e cont. + */ + void *cont_cls; + }; -GNUNET_NETWORK_STRUCT_END /** * Task that sends a minimalistic test message from the * first peer to the second peer. * - * @param cls the `struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext` + * @param cls the `struct GNUNET_TRANSPORT_TESTING_SendClosure` * which should contain at least two peers, the first two * of which should be currently connected */ @@ -829,7 +814,7 @@ GNUNET_TRANSPORT_TESTING_simple_send (void *cls); * Task that sends a large test message from the * first peer to the second peer. * - * @param cls the `struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext` + * @param cls the `struct GNUNET_TRANSPORT_TESTING_SendClosure` * which should contain at least two peers, the first two * of which should be currently connected */