X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_transport_plugin.h;h=d95e9f4e9cf411b0d6521bfa9134faf8a7f3be1f;hb=a6fb0db57f2a70a05bdb6ef7ccf69a044268dee6;hp=84f1b1f4a8af0300f4ebe20bc0559d79ae13343c;hpb=68a65fb3e7629da9c5e61d6d96aa254633b45ad0;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_transport_plugin.h b/src/include/gnunet_transport_plugin.h index 84f1b1f4a..d95e9f4e9 100644 --- a/src/include/gnunet_transport_plugin.h +++ b/src/include/gnunet_transport_plugin.h @@ -127,6 +127,20 @@ typedef struct sender_address_len); +/** + * Function that will be called to figure if an address is an loopback, + * LAN, WAN etc. address + * + * @param cls closure + * @param addr binary address + * @param addrlen length of the address + * @return ATS Information containing the network type + */ +typedef const struct GNUNET_ATS_Information +(*GNUNET_TRANSPORT_AddressToType) (void *cls, + const struct sockaddr *addr, + size_t addrlen); + /** * Function that will be called for each address the transport * is aware that it might be reachable under. @@ -202,12 +216,6 @@ struct GNUNET_TRANSPORT_PluginEnvironment */ struct GNUNET_STATISTICS_Handle *stats; - /** - * ATS Handle to request address type. - */ - struct GNUNET_ATS_SchedulingHandle *ats; - - /** * Function that should be called by the transport plugin * whenever a message is received. @@ -233,6 +241,13 @@ struct GNUNET_TRANSPORT_PluginEnvironment */ GNUNET_TRANSPORT_SessionEnd session_end; + /** + * Function that will be called to figure if an address is an loopback, + * LAN, WAN etc. address + */ + GNUNET_TRANSPORT_AddressToType get_address_type; + + /** * What is the maximum number of connections that this transport * should allow? Transports that do not have sessions (such as @@ -319,6 +334,57 @@ typedef ssize_t (*GNUNET_TRANSPORT_TransmitFunction) (void *cls, cont, void *cont_cls); +/** + * The new send function with just the session and no address + * + * Function that can be used by the transport service to transmit + * a message using the plugin. Note that in the case of a + * peer disconnecting, the continuation MUST be called + * prior to the disconnect notification itself. This function + * will be called with this peer's HELLO message to initiate + * a fresh connection to another peer. + * + * @param cls closure + * @param target who should receive this message + * @param msgbuf the message to transmit + * @param msgbuf_size number of bytes in 'msgbuf' + * @param priority how important is the message (most plugins will + * ignore message priority and just FIFO) + * @param timeout how long to wait at most for the transmission (does not + * require plugins to discard the message after the timeout, + * just advisory for the desired delay; most plugins will ignore + * this as well) + * @param session which session must be used (or NULL for "any") + * @param addr the address to use (can be NULL if the plugin + * is "on its own" (i.e. re-use existing TCP connection)) + * @param addrlen length of the address in bytes + * @param force_address GNUNET_YES if the plugin MUST use the given address, + * GNUNET_NO means the plugin may use any other address and + * GNUNET_SYSERR means that only reliable existing + * bi-directional connections should be used (regardless + * of address) + * @param cont continuation to call once the message has + * been transmitted (or if the transport is ready + * for the next transmission call; or if the + * peer disconnected...); can be NULL + * @param cont_cls closure for cont + * @return number of bytes used (on the physical network, with overheads); + * -1 on hard errors (i.e. address invalid); 0 is a legal value + * and does NOT mean that the message was not transmitted (DV) + */ +typedef ssize_t (*GNUNET_TRANSPORT_TransmitFunctionWithSession) (void *cls, + const struct + GNUNET_PeerIdentity * + target, + const char *msgbuf, + size_t msgbuf_size, + uint32_t priority, + struct GNUNET_TIME_Relative timeout, + struct Session * session, + GNUNET_TRANSPORT_TransmitContinuation + cont, void *cont_cls); + + /** * Function that can be called to force a disconnect from the * specified neighbour. This should also cancel all previously @@ -396,6 +462,22 @@ typedef void (*GNUNET_TRANSPORT_AddressPrettyPrinter) (void *cls, typedef int (*GNUNET_TRANSPORT_CheckAddress) (void *cls, const void *addr, size_t addrlen); +/** + * Create a new session to transmit data to the target + * This session will used to send data to this peer and the plugin will + * notify us by calling the env->session_end function + * + * @param cls closure + * @param target the neighbour id + * @param addr pointer to the address + * @param addrlen length of addr + * @return the session if the address is valid, NULL otherwise + */ +typedef const void * (*GNUNET_TRANSPORT_CreateSession) (void *cls, + const struct GNUNET_PeerIdentity *target, + const void *addr, + size_t addrlen); + /** * Function called for a quick conversion of the binary address to @@ -434,6 +516,13 @@ struct GNUNET_TRANSPORT_PluginFunctions */ GNUNET_TRANSPORT_TransmitFunction send; + /** + * New send function + * Will be renamed to "send" when implementation is done + */ + + GNUNET_TRANSPORT_TransmitFunctionWithSession send_with_session; + /** * Function that can be used to force the plugin to disconnect from * the given peer and cancel all previous transmissions (and their @@ -465,6 +554,11 @@ struct GNUNET_TRANSPORT_PluginFunctions */ GNUNET_TRANSPORT_AddressToString address_to_string; + /** + * Function that will be called tell the plugin to create a session + * object + */ + GNUNET_TRANSPORT_CreateSession create_session; };