GNUNET_MessageHeader
* message,
const struct
- GNUNET_TRANSPORT_ATS_Information
+ GNUNET_ATS_Information
* ats,
uint32_t
ats_count,
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.
/**
* Function that should be called by the transport plugin
- * whenever a message is received.
+ * whenever a message is received. If this field is "NULL",
+ * the plugin should load in 'stub' mode and NOT fully
+ * initialize and instead only return an API with the
+ * 'address_pretty_printer', 'address_to_string' and
+ * 'string_to_address' functions.
*/
GNUNET_TRANSPORT_PluginReceiveCallback receive;
*/
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
GNUNET_PeerIdentity *
target, int result);
-
/**
+ * 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
* a fresh connection to another peer.
*
* @param cls closure
- * @param target who should receive this message
+ * @param session which session must be used
* @param msgbuf the message to transmit
* @param msgbuf_size number of bytes in 'msgbuf'
* @param priority how important is the message (most plugins will
* 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
* and does NOT mean that the message was not transmitted (DV)
*/
typedef ssize_t (*GNUNET_TRANSPORT_TransmitFunction) (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,
- const void *addr,
- size_t addrlen,
- int force_address,
- GNUNET_TRANSPORT_TransmitContinuation
- cont, void *cont_cls);
+ struct Session *session,
+ const char *msgbuf, size_t msgbuf_size,
+ unsigned int priority,
+ struct GNUNET_TIME_Relative to,
+ GNUNET_TRANSPORT_TransmitContinuation cont, void *cont_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 the plugin
+ * @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 struct Session * (*GNUNET_TRANSPORT_CreateSession) (void *cls,
+ const struct GNUNET_HELLO_Address *address);
+
/**
* Function called for a quick conversion of the binary address to
const void *addr,
size_t addrlen);
+/**
+ * Function called to convert a string address to
+ * a binary address.
+ *
+ * @param cls closure ('struct Plugin*')
+ * @param addr string address
+ * @param addrlen length of the address
+ * @param buf location to store the buffer
+ * If the function returns GNUNET_SYSERR, its contents are undefined.
+ * @param added length of created address
+ * @return GNUNET_OK on success, GNUNET_SYSERR on failure
+ */
+typedef int (*GNUNET_TRANSPORT_StringToAddress) (void *cls,
+ const char *addr,
+ uint16_t addrlen,
+ void **buf,
+ size_t *added);
+
/**
* Each plugin is required to return a pointer to a struct of this
*/
GNUNET_TRANSPORT_AddressToString address_to_string;
+ /**
+ * Function that will be called to convert a string address
+ * to binary (numeric conversion only).
+ */
+ GNUNET_TRANSPORT_StringToAddress string_to_address;
+
+ /**
+ * Function that will be called tell the plugin to create a session
+ * object
+ */
+ GNUNET_TRANSPORT_CreateSession get_session;
};