]> git.lizzy.rs Git - minetest.git/blobdiff - src/socket.h
Add setting for tooltips show delay.
[minetest.git] / src / socket.h
index 10bcdefee825c2a96a08fd4841318d38680e6c53..92e0cbb13034baa8ca6efac168943cb620626758 100644 (file)
@@ -1,18 +1,18 @@
 /*
-Minetest-c55
-Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
+Minetest
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
 (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+GNU Lesser General Public License for more details.
 
-You should have received a copy of the GNU General Public License along
+You should have received a copy of the GNU Lesser General Public License along
 with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
@@ -21,31 +21,26 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define SOCKET_HEADER
 
 #ifdef _WIN32
-       #define WIN32_LEAN_AND_MEAN
-       // Without this some of the network functions are not found on mingw
-       #ifndef _WIN32_WINNT
-               #define _WIN32_WINNT 0x0501
+       #ifndef WIN32_LEAN_AND_MEAN
+               #define WIN32_LEAN_AND_MEAN
        #endif
+#ifndef _WIN32_WINNT
+       #define _WIN32_WINNT 0x0501
+#endif
        #include <windows.h>
        #include <winsock2.h>
        #include <ws2tcpip.h>
-       #ifdef _MSC_VER
-               #pragma comment(lib, "wsock32.lib")
-       #endif
-typedef SOCKET socket_t;
-typedef int socklen_t;
 #else
        #include <sys/socket.h>
        #include <netinet/in.h>
-       #include <fcntl.h>
-       #include <netdb.h>
-       #include <unistd.h>
-typedef int socket_t;
 #endif
 
 #include <ostream>
+#include <string.h>
+#include "irrlichttypes.h"
 #include "exceptions.h"
-#include "constants.h"
+
+extern bool socket_enable_debug_output;
 
 class SocketException : public BaseException
 {
@@ -77,36 +72,52 @@ class SendFailedException : public BaseException
 void sockets_init();
 void sockets_cleanup();
 
+class IPv6AddressBytes
+{
+public:
+       u8 bytes[16];
+       IPv6AddressBytes() { memset(bytes, 0, 16); }
+};
+
 class Address
 {
 public:
        Address();
-       Address(unsigned int address, unsigned short port);
-       Address(unsigned int a, unsigned int b,
-                       unsigned int c, unsigned int d,
-                       unsigned short port);
+       Address(u32 address, u16 port);
+       Address(u8 a, u8 b, u8 c, u8 d, u16 port);
+       Address(const IPv6AddressBytes * ipv6_bytes, u16 port);
        bool operator==(Address &address);
        bool operator!=(Address &address);
+       // Resolve() may throw ResolveError (address is unchanged in this case)
        void Resolve(const char *name);
-       unsigned int getAddress() const;
+       struct sockaddr_in getAddress() const;
        unsigned short getPort() const;
-       void setAddress(unsigned int address);
-       void setAddress(unsigned int a, unsigned int b,
-                       unsigned int c, unsigned int d);
+       void setAddress(u32 address);
+       void setAddress(u8 a, u8 b, u8 c, u8 d);
+       void setAddress(const IPv6AddressBytes * ipv6_bytes);
+       struct sockaddr_in6 getAddress6() const;
+       int getFamily() const;
+       bool isIPv6() const;
+       bool isZero() const;
        void setPort(unsigned short port);
        void print(std::ostream *s) const;
-       void print() const;
+       std::string serializeString() const;
 private:
-       unsigned int m_address;
-       unsigned short m_port;
+       unsigned int m_addr_family;
+       union
+       {
+               struct sockaddr_in  ipv4;
+               struct sockaddr_in6 ipv6;
+       } m_address;
+       u16 m_port; // Port is separate from sockaddr structures
 };
 
 class UDPSocket
 {
 public:
-       UDPSocket();
+       UDPSocket(bool ipv6);
        ~UDPSocket();
-       void Bind(unsigned short port);
+       void Bind(Address addr);
        //void Close();
        //bool IsOpen();
        void Send(const Address & destination, const void * data, int size);
@@ -119,6 +130,7 @@ class UDPSocket
 private:
        int m_handle;
        int m_timeout_ms;
+       int m_addr_family;
 };
 
 #endif