aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-light/src/hicn/io/tcpListener.c
diff options
context:
space:
mode:
Diffstat (limited to 'hicn-light/src/hicn/io/tcpListener.c')
-rw-r--r--hicn-light/src/hicn/io/tcpListener.c30
1 files changed, 26 insertions, 4 deletions
diff --git a/hicn-light/src/hicn/io/tcpListener.c b/hicn-light/src/hicn/io/tcpListener.c
index cc6fdbba8..4464edf28 100644
--- a/hicn-light/src/hicn/io/tcpListener.c
+++ b/hicn-light/src/hicn/io/tcpListener.c
@@ -30,6 +30,8 @@
#include <parc/assert/parc_Assert.h>
typedef struct tcp_listener {
+ char *listenerName;
+
Forwarder *forwarder;
Logger *logger;
@@ -38,6 +40,7 @@ typedef struct tcp_listener {
Address *localAddress;
unsigned id;
+ char *interfaceName;
// is the localAddress as 127.0.0.0 address?
bool isLocalAddressLocal;
@@ -46,30 +49,36 @@ typedef struct tcp_listener {
static void _tcpListener_Destroy(_TcpListener **listenerPtr);
static void _tcpListener_OpsDestroy(ListenerOps **listenerOpsPtr);
+static const char *_tcpListener_ListenerName(const ListenerOps *ops);
static unsigned _tcpListener_OpsGetInterfaceIndex(const ListenerOps *ops);
static const Address *_tcpListener_OpsGetListenAddress(const ListenerOps *ops);
+static const char *_tcpListener_InterfaceName(const ListenerOps *ops);
static EncapType _tcpListener_OpsGetEncapType(const ListenerOps *ops);
static ListenerOps _tcpTemplate = {
.context = NULL,
.destroy = &_tcpListener_OpsDestroy,
+ .getListenerName = &_tcpListener_ListenerName,
.getInterfaceIndex = &_tcpListener_OpsGetInterfaceIndex,
.getListenAddress = &_tcpListener_OpsGetListenAddress,
.getEncapType = &_tcpListener_OpsGetEncapType,
+ .getInterfaceName = &_tcpListener_InterfaceName,
.getSocket = NULL};
// STREAM daemon listener callback
static void _tcpListener_Listen(int, struct sockaddr *, int socklen,
void *tcpVoid);
-ListenerOps *tcpListener_CreateInet6(Forwarder *forwarder,
- struct sockaddr_in6 sin6) {
+ListenerOps *tcpListener_CreateInet6(Forwarder *forwarder, char *listenerName,
+ struct sockaddr_in6 sin6, char *interfaceName) {
_TcpListener *tcp = parcMemory_AllocateAndClear(sizeof(_TcpListener));
parcAssertNotNull(tcp, "parcMemory_AllocateAndClear(%zu) returned NULL",
sizeof(_TcpListener));
tcp->forwarder = forwarder;
+ tcp->listenerName = parcMemory_StringDuplicate(listenerName, strlen(listenerName));
tcp->logger = logger_Acquire(forwarder_GetLogger(forwarder));
+ tcp->interfaceName = parcMemory_StringDuplicate(interfaceName, strlen(interfaceName));
tcp->listener = dispatcher_CreateListener(
forwarder_GetDispatcher(forwarder), _tcpListener_Listen, (void *)tcp, -1,
@@ -107,8 +116,8 @@ ListenerOps *tcpListener_CreateInet6(Forwarder *forwarder,
return ops;
}
-ListenerOps *tcpListener_CreateInet(Forwarder *forwarder,
- struct sockaddr_in sin) {
+ListenerOps *tcpListener_CreateInet(Forwarder *forwarder, char *listenerName,
+ struct sockaddr_in sin, char *interfaceName) {
_TcpListener *tcp = parcMemory_AllocateAndClear(sizeof(_TcpListener));
parcAssertNotNull(tcp, "parcMemory_AllocateAndClear(%zu) returned NULL",
sizeof(_TcpListener));
@@ -164,6 +173,9 @@ static void _tcpListener_Destroy(_TcpListener **listenerPtr) {
parcMemory_Deallocate((void **)&str);
}
+ parcMemory_Deallocate((void **)&tcp->listenerName);
+ parcMemory_Deallocate((void **)&tcp->interfaceName);
+
logger_Release(&tcp->logger);
dispatcher_DestroyListener(forwarder_GetDispatcher(tcp->forwarder),
&tcp->listener);
@@ -174,6 +186,16 @@ static void _tcpListener_Destroy(_TcpListener **listenerPtr) {
// ==================================================
+static const char *_tcpListener_ListenerName(const ListenerOps *ops) {
+ _TcpListener *tcp = (_TcpListener *)ops->context;
+ return tcp->listenerName;
+}
+
+static const char *_tcpListener_InterfaceName(const ListenerOps *ops) {
+ _TcpListener *tcp = (_TcpListener *)ops->context;
+ return tcp->interfaceName;
+}
+
static void _tcpListener_Listen(int fd, struct sockaddr *sa, int socklen,
void *tcpVoid) {
_TcpListener *tcp = (_TcpListener *)tcpVoid;