#define GNUNET_MESSAGE_TYPE_VPN_REMOTE_TCP_BACK 193
+/**
+ * Client asks VPN service to setup an IP to redirect traffic
+ * via an exit node to some global IP address.
+ */
+#define GNUNET_MESSAGE_TYPE_VPN_CLIENT_REDIRECT_TO_IP 202
+
+/**
+ * Client asks VPN service to setup an IP to redirect traffic
+ * to some peer offering a service.
+ */
+#define GNUNET_MESSAGE_TYPE_VPN_CLIENT_REDIRECT_TO_SERVICE 203
+
+/**
+ * VPN service responds to client with an IP to use for the
+ * requested redirection.
+ */
+#define GNUNET_MESSAGE_TYPE_VPN_CLIENT_USE_IP 204
+
+
/*******************************************************************************
* VPN-DNS message types
******************************************************************************/
#ifndef GNUNET_VPN_SERVICE_H
#define GNUNET_VPN_SERVICE_H
-#include "gnunet_common.h"
#include "gnunet_util_lib.h"
* reach the requested destination.
*
* @param cls closure
- * @param af address family, AF_INET or AF_INET6; AF_UNSPEC on error
+ * @param af address family, AF_INET or AF_INET6; AF_UNSPEC on error;
+ * will match 'result_af' from the request
* @param address IP address (struct in_addr or struct in_addr6, depending on 'af')
* that the VPN allocated for the redirection;
* traffic to this IP will now be redirected to the
* limitations, the longest inactive mappings will be destroyed.
*
* @param vh VPN handle
- * @param af address family, AF_INET or AF_INET6
+ * @param result_af desired address family for the returned allocation
+ * can also be AF_UNSPEC
* @param protocol protocol, IPPROTO_UDP or IPPROTO_TCP
* @param peer target peer for the redirection
* @param serv service descriptor to give to the peer
* @param nac GNUNET_YES to notify via callback only after completion of
* the MESH-level connection,
* GNUNET_NO to notify as soon as the IP has been reserved
+ * @param expiration_time at what time should the redirection expire?
+ * (this should not impact connections that are active at that time)
* @param cb function to call with the IP
* @param cb_cls closure for cb
* @return handle to cancel the request (means the callback won't be
* anyway)
*/
struct GNUNET_VPN_RedirectionRequest *
-GNUNET_VPN_redirect_to_peer (struct GNUNET_VPN_RequestHandle *rh,
- int af,
+GNUNET_VPN_redirect_to_peer (struct GNUNET_VPN_Handle *rh,
+ int result_af,
uint8_t protocol,
const struct GNUNET_PeerIdentity *peer,
- const HashCode *serv,
+ const GNUNET_HashCode *serv,
int nac,
+ struct GNUNET_TIME_Absolute expiration_time,
GNUNET_VPN_AllocationCallback cb,
void *cb_cls);
* limitations, the longest inactive mappings will be destroyed.
*
* @param vh VPN handle
- * @param af address family, AF_INET or AF_INET6
+ * @param result_af desired address family for the returned allocation,
+ * can also be AF_UNSPEC
+ * @param addr_af address family for 'addr', AF_INET or AF_INET6
* @param addr destination IP address on the Internet; destination
* port is to be taken from the VPN packet itself
* @param nac GNUNET_YES to notify via callback only after completion of
* the MESH-level connection,
* GNUNET_NO to notify as soon as the IP has been reserved
+ * @param expiration_time at what time should the redirection expire?
+ * (this should not impact connections that are active at that time)
* @param cb function to call with the IP
* @param cb_cls closure for cb
* @return handle to cancel the request (means the callback won't be
* anyway)
*/
struct GNUNET_VPN_RedirectionRequest *
-GNUNET_VPN_redirect_to_ip (struct GNUNET_VPN_RequestHandle *rh,
- int af,
+GNUNET_VPN_redirect_to_ip (struct GNUNET_VPN_Handle *rh,
+ int result_af,
+ int addr_af,
const void *addr,
int nac,
+ struct GNUNET_TIME_Absolute expiration_time,
GNUNET_VPN_AllocationCallback cb,
void *cb_cls);