aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-light/src/hicn/io/udpListener.c
diff options
context:
space:
mode:
authorJordan Augé <jordan.auge+fdio@cisco.com>2019-10-07 09:52:33 +0200
committerJordan Augé <jordan.auge+fdio@cisco.com>2019-10-07 15:55:42 +0200
commit6b84ec54083da9911f5ad4816d0eb4f4745afad4 (patch)
treee4296ebb218fff02dc0bbea73ce1c8d12aba7bcc /hicn-light/src/hicn/io/udpListener.c
parent85a791ac2cdd35d79c00141e748b4c68fbdafb0d (diff)
[HICN-298] Release new hICN app for Android
Change-Id: I43adc62fadf00690b687078d739788dffdc5e566 Signed-off-by: Jordan Augé <jordan.auge+fdio@cisco.com>
Diffstat (limited to 'hicn-light/src/hicn/io/udpListener.c')
-rw-r--r--hicn-light/src/hicn/io/udpListener.c38
1 files changed, 25 insertions, 13 deletions
diff --git a/hicn-light/src/hicn/io/udpListener.c b/hicn-light/src/hicn/io/udpListener.c
index f6b434fed..050ca104c 100644
--- a/hicn-light/src/hicn/io/udpListener.c
+++ b/hicn-light/src/hicn/io/udpListener.c
@@ -41,6 +41,7 @@
struct udp_listener {
Forwarder *forwarder;
+ char *listenerName;
Logger *logger;
PARCEvent *udp_event;
@@ -48,13 +49,16 @@ struct udp_listener {
uint16_t port;
unsigned id;
+ char *interfaceName;
Address *localAddress;
};
static void _destroy(ListenerOps **listenerOpsPtr);
+static const char *_getListenerName(const ListenerOps *ops);
static unsigned _getInterfaceIndex(const ListenerOps *ops);
static const Address *_getListenAddress(const ListenerOps *ops);
static EncapType _getEncapType(const ListenerOps *ops);
+static const char *_getInterfaceName(const ListenerOps *ops);
static int _getSocket(const ListenerOps *ops);
static unsigned _createNewConnection(ListenerOps *listener, int fd, const AddressPair *pair);
static const Connection * _lookupConnection(ListenerOps * listener, const AddressPair *pair);
@@ -66,8 +70,10 @@ static ListenerOps udpTemplate = {
.getListenAddress = &_getListenAddress,
.getEncapType = &_getEncapType,
.getSocket = &_getSocket,
+ .getListenerName = &_getListenerName,
.createConnection = &_createNewConnection,
.lookupConnection = &_lookupConnection,
+ .getInterfaceName = &_getInterfaceName,
};
static void _readcb(int fd, PARCEventType what, void * listener_void);
@@ -76,19 +82,16 @@ static void _readcb(int fd, PARCEventType what, void * listener_void);
extern int bindSocket(int sock, const char* ifname);
#endif
-#ifdef __linux__
-ListenerOps *udpListener_CreateInet6(Forwarder *forwarder,
+ListenerOps *udpListener_CreateInet6(Forwarder *forwarder, char *listenerName,
struct sockaddr_in6 sin6, const char *interfaceName) {
-#else
-ListenerOps *udpListener_CreateInet6(Forwarder *forwarder,
- struct sockaddr_in6 sin6) {
-#endif
ListenerOps *ops = NULL;
UdpListener *udp = parcMemory_AllocateAndClear(sizeof(UdpListener));
parcAssertNotNull(udp, "parcMemory_AllocateAndClear(%zu) returned NULL",
sizeof(UdpListener));
udp->forwarder = forwarder;
+ udp->listenerName = parcMemory_StringDuplicate(listenerName, strlen(listenerName));
+ udp->interfaceName = parcMemory_StringDuplicate(interfaceName, strlen(interfaceName));
udp->logger = logger_Acquire(forwarder_GetLogger(forwarder));
udp->localAddress = addressCreateFromInet6(&sin6);
udp->id = forwarder_GetNextConnectionId(forwarder);
@@ -172,6 +175,8 @@ ListenerOps *udpListener_CreateInet6(Forwarder *forwarder,
myerrno, strerror(myerrno));
parcMemory_Deallocate((void **)&str);
}
+ parcMemory_Deallocate((void **)&udp->listenerName);
+ parcMemory_Deallocate((void **)&udp->interfaceName);
#ifndef _WIN32
close(udp->udp_socket);
#else
@@ -185,19 +190,16 @@ ListenerOps *udpListener_CreateInet6(Forwarder *forwarder,
return ops;
}
-#ifdef __linux__
-ListenerOps *udpListener_CreateInet(Forwarder *forwarder,
+ListenerOps *udpListener_CreateInet(Forwarder *forwarder, char *listenerName,
struct sockaddr_in sin, const char *interfaceName) {
-#else
-ListenerOps *udpListener_CreateInet(Forwarder *forwarder,
- struct sockaddr_in sin) {
-#endif
ListenerOps *ops = NULL;
UdpListener *udp = parcMemory_AllocateAndClear(sizeof(UdpListener));
parcAssertNotNull(udp, "parcMemory_AllocateAndClear(%zu) returned NULL",
sizeof(UdpListener));
udp->forwarder = forwarder;
+ udp->listenerName = parcMemory_StringDuplicate(listenerName, strlen(listenerName));
+ udp->interfaceName = parcMemory_StringDuplicate(interfaceName, strlen(interfaceName));
udp->logger = logger_Acquire(forwarder_GetLogger(forwarder));
udp->localAddress = addressCreateFromInet(&sin);
udp->id = forwarder_GetNextConnectionId(forwarder);
@@ -315,6 +317,16 @@ static void udpListener_Destroy(UdpListener **listenerPtr) {
*listenerPtr = NULL;
}
+static const char *_getListenerName(const ListenerOps *ops) {
+ UdpListener *udp = (UdpListener *)ops->context;
+ return udp->listenerName;
+}
+
+static const char *_getInterfaceName(const ListenerOps *ops) {
+ UdpListener *udp = (UdpListener *)ops->context;
+ return udp->interfaceName;
+}
+
static void _destroy(ListenerOps **listenerOpsPtr) {
ListenerOps *ops = *listenerOpsPtr;
UdpListener *udp = (UdpListener *)ops->context;
@@ -420,7 +432,7 @@ static unsigned _createNewConnection(ListenerOps * listener, int fd,
}
// metisUdpConnection_Create takes ownership of the pair
- IoOperations *ops = udpConnection_Create(udp->forwarder, fd, pair, isLocal);
+ IoOperations *ops = udpConnection_Create(udp->forwarder, udp->interfaceName, fd, pair, isLocal);
Connection *conn = connection_Create(ops);
// connection_AllowWldrAutoStart(conn);