summaryrefslogtreecommitdiff
path: root/src/libcharon/network/socket.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcharon/network/socket.h')
-rw-r--r--src/libcharon/network/socket.h53
1 files changed, 47 insertions, 6 deletions
diff --git a/src/libcharon/network/socket.h b/src/libcharon/network/socket.h
index be875035b..e3cda3bea 100644
--- a/src/libcharon/network/socket.h
+++ b/src/libcharon/network/socket.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2010 Tobias Brunner
+ * Copyright (C) 2006-2013 Tobias Brunner
* Copyright (C) 2005-2010 Martin Willi
* Copyright (C) 2006 Daniel Roethlisberger
* Copyright (C) 2005 Jan Hutter
@@ -25,10 +25,11 @@
#define SOCKET_H_
typedef struct socket_t socket_t;
+typedef enum socket_family_t socket_family_t;
#include <library.h>
-#include <network/packet.h>
-#include <utils/enumerator.h>
+#include <networking/packet.h>
+#include <collections/enumerator.h>
#include <plugins/plugin.h>
/**
@@ -37,6 +38,31 @@ typedef struct socket_t socket_t;
typedef socket_t *(*socket_constructor_t)();
/**
+ * Address families supported by socket implementations.
+ */
+enum socket_family_t {
+ /**
+ * No address families supported
+ */
+ SOCKET_FAMILY_NONE = 0,
+
+ /**
+ * IPv4
+ */
+ SOCKET_FAMILY_IPV4 = (1 << 0),
+
+ /**
+ * IPv6
+ */
+ SOCKET_FAMILY_IPV6 = (1 << 1),
+
+ /**
+ * Both address families supported
+ */
+ SOCKET_FAMILY_BOTH = (1 << 2) - 1,
+};
+
+/**
* Socket interface definition.
*/
struct socket_t {
@@ -52,7 +78,7 @@ struct socket_t {
* - SUCCESS when packet successfully received
* - FAILED when unable to receive
*/
- status_t (*receive) (socket_t *this, packet_t **packet);
+ status_t (*receive)(socket_t *this, packet_t **packet);
/**
* Send a packet.
@@ -65,12 +91,27 @@ struct socket_t {
* - SUCCESS when packet successfully sent
* - FAILED when unable to send
*/
- status_t (*send) (socket_t *this, packet_t *packet);
+ status_t (*send)(socket_t *this, packet_t *packet);
+
+ /**
+ * Get the port this socket is listening on.
+ *
+ * @param nat_t TRUE to get the port used to float in case of NAT-T
+ * @return the port
+ */
+ u_int16_t (*get_port)(socket_t *this, bool nat_t);
+
+ /**
+ * Get the address families this socket is listening on.
+ *
+ * @return supported families
+ */
+ socket_family_t (*supported_families)(socket_t *this);
/**
* Destroy a socket implementation.
*/
- void (*destroy) (socket_t *this);
+ void (*destroy)(socket_t *this);
};
/**