diff options
author | bju <bju@maxi.fritz.box> | 2018-07-23 00:51:34 +0200 |
---|---|---|
committer | bju <bju@maxi.fritz.box> | 2018-07-29 01:11:46 +0200 |
commit | 947f1e5adc8beffcc79cfc54a1ccc997dfd9aefe (patch) | |
tree | ad1d8a68efee5f952db63c2be55908e854906c3c /vdr-vdrmanager/serversock.cpp | |
parent | 3886dd0db9bbc182513a0628afbaf1d4ee3a2637 (diff) | |
download | vdr-manager-947f1e5adc8beffcc79cfc54a1ccc997dfd9aefe.tar.gz vdr-manager-947f1e5adc8beffcc79cfc54a1ccc997dfd9aefe.tar.bz2 |
Feature #2557: Added support for IPv6
Diffstat (limited to 'vdr-vdrmanager/serversock.cpp')
-rw-r--r-- | vdr-vdrmanager/serversock.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/vdr-vdrmanager/serversock.cpp b/vdr-vdrmanager/serversock.cpp index 0c44a45..60b5f85 100644 --- a/vdr-vdrmanager/serversock.cpp +++ b/vdr-vdrmanager/serversock.cpp @@ -1,6 +1,7 @@ /* * extendes sockets */ +#include <string.h> #include <unistd.h> #include <vdr/plugin.h> @@ -35,7 +36,7 @@ bool cVdrmanagerServerSocket::Create(int port, const char * password, bool force this->keyFile = keyFile; // create socket - sock = socket(PF_INET, SOCK_STREAM, 0); + sock = socket(AF_INET6, SOCK_STREAM, 0); if (sock < 0) { LOG_ERROR; return false; @@ -48,11 +49,12 @@ bool cVdrmanagerServerSocket::Create(int port, const char * password, bool force setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &ReUseAddr, sizeof(ReUseAddr)); // bind to address - struct sockaddr_in name; - name.sin_family = AF_INET; - name.sin_port = htons(port); - name.sin_addr.s_addr = htonl(INADDR_ANY); - if (bind(sock, (struct sockaddr *) &name, sizeof(name)) < 0) { + struct sockaddr_in6 addr; + memset(&addr, 0, sizeof(addr)); + addr.sin6_family = AF_INET6; + addr.sin6_port = htons(port); + addr.sin6_addr = in6addr_any; + if (bind(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) { LOG_ERROR; Close(); return false; @@ -93,7 +95,7 @@ cVdrmanagerClientSocket * cVdrmanagerServerSocket::Accept() { isyslog("[vdrmanager] new client on port %d", port); // accept the connection - struct sockaddr_in clientname; + struct sockaddr_in6 clientname; uint size = sizeof(clientname); int newsock = accept(sock, (struct sockaddr *) &clientname, &size); if (newsock > 0) { @@ -105,7 +107,8 @@ cVdrmanagerClientSocket * cVdrmanagerServerSocket::Accept() { } if (!IsPasswordSet() || forceCheckSvdrp == true) { - bool accepted = SVDRPhosts.Acceptable(clientname.sin_addr.s_addr); +/* + bool accepted = SVDRPhosts.Acceptable(clientname.sin6_addr); if (!accepted) { newsocket->Write(string("NACC Access denied.\n")); newsocket->Flush(); @@ -115,6 +118,7 @@ cVdrmanagerClientSocket * cVdrmanagerServerSocket::Accept() { dsyslog("[vdrmanager] connect from %s, port %hd - %s", inet_ntoa(clientname.sin_addr), ntohs(clientname.sin_port), accepted ? "accepted" : "DENIED"); +*/ } } else if (errno != EINTR && errno != EAGAIN) LOG_ERROR; |