[IOMultiplexerV2] added possibility to access remote and local socket addresses
authorpk910 <philipp@zoelle1.de>
Sun, 20 Jul 2014 21:31:07 +0000 (23:31 +0200)
committerpk910 <philipp@zoelle1.de>
Sun, 20 Jul 2014 22:07:19 +0000 (00:07 +0200)
src/IOHandler/IOSockets.c
src/IOHandler/IOSockets.h

index c0d9310474fb6c52f85d2812c41ec9a85880a9d2..a98dc5a930b94a9c4bba6701922d6124ce970cd1 100644 (file)
@@ -800,6 +800,32 @@ void iosocket_close(struct IOSocket *iosocket) {
        iogc_add(iosocket);
 }
 
+struct IODNSAddress *iosocket_get_remote_addr(struct IOSocket *iosocket) {
+       struct _IOSocket *iosock = iosocket->iosocket;
+       if(iosock == NULL) {
+               iolog_trigger(IOLOG_WARNING, "called iosocket_get_remote_addr for destroyed IOSocket in %s:%d", __FILE__, __LINE__);
+               return NULL;
+       }
+       if(iosock->socket_flags & IOSOCKETFLAG_PENDING_DESTDNS)
+               return NULL;
+       if(!iosock->dest.addr.addresslen)
+               return NULL;
+       return &iosock->dest.addr;
+}
+
+struct IODNSAddress *iosocket_get_local_addr(struct IOSocket *iosocket) {
+       struct _IOSocket *iosock = iosocket->iosocket;
+       if(iosock == NULL) {
+               iolog_trigger(IOLOG_WARNING, "called iosocket_get_local_addr for destroyed IOSocket in %s:%d", __FILE__, __LINE__);
+               return NULL;
+       }
+       if(iosock->socket_flags & IOSOCKETFLAG_PENDING_BINDDNS)
+               return NULL;
+       if(!iosock->bind.addr.addresslen)
+               return NULL;
+       return &iosock->bind.addr;
+}
+
 static int iosocket_try_write(struct _IOSocket *iosock) {
        if(!iosock->writebuf.bufpos && !(iosock->socket_flags & IOSOCKETFLAG_SSL_WRITEHS)) \r
                return 0;
index 57bc4c7d214a046aed2244f489612571119b6d0e..f804fb6216f98f66aba036eb2970c7d2f9c452e8 100644 (file)
@@ -206,5 +206,8 @@ void iosocket_send(struct IOSocket *iosocket, const char *data, size_t datalen);
 void iosocket_printf(struct IOSocket *iosocket, const char *text, ...);
 void iosocket_close(struct IOSocket *iosocket);
 
+struct IODNSAddress *iosocket_get_remote_addr(struct IOSocket *iosocket);
+struct IODNSAddress *iosocket_get_local_addr(struct IOSocket *iosocket);
+
 #endif
 #endif