ecere: Initial Emscripten support
[sdk] / ecere / src / net / Socket.ec
index 4adc881..141ce11 100644 (file)
@@ -1,3 +1,5 @@
+#define _Noreturn
+
 namespace net;
 
 #include <stdarg.h>
@@ -8,11 +10,12 @@ namespace net;
 #define String _String
 #include <winsock.h>
 #undef String
-static WSADATA wsaData;
+#define SOCKLEN_TYPE int
 
 #elif defined(__unix__) || defined(__APPLE__)
 
 default:
+#define SOCKLEN_TYPE socklen_t
 #define set _set
 #define uint _uint
 #include <sys/time.h>
@@ -40,6 +43,14 @@ typedef struct in_addr IN_ADDR;
 
 import "network"
 
+#ifdef __ANDROID__
+// TOFIX:
+#undef ntohs
+#undef htons
+#define ntohs(x) (x)
+#define htons(x) (x)
+#endif
+
 #define GETLEDWORD(b) (uint32)(((b)[3] << 24) | ((b)[2] << 16) | ((b)[1] << 8) | (b)[0])
 
 #define PUTLEDWORD(b, d) \
@@ -133,7 +144,7 @@ public:
          {
             SOCKET s;
             SOCKADDR_IN a;
-            int addrLen = sizeof(a);
+            SOCKLEN_TYPE addrLen = sizeof(a);
 
             value.accepted = true;
             s = accept(value.s,(SOCKADDR *)&a, &addrLen);
@@ -180,7 +191,7 @@ public:
       get { return this ? service : null; }
    };
 
-   property char * inetAddress { get { return (char *)inetAddress; } };
+   property const char * inetAddress { get { return (char *)inetAddress; } };
    property int inetPort { get { return inetPort; } }
    property Socket next { get { return next; } };
    property bool connected { get { return _connected == 1 || _connected == -2; } };
@@ -218,7 +229,7 @@ public:
    virtual void OnDisconnect(int code);
    virtual void OnReceivePacket(Packet packet);
 
-   bool Connect(char * address, int port)
+   bool Connect(const char * address, int port)
    {
       bool result = false;
    #if defined(__WIN32__) || defined(__unix__) || defined(__APPLE__)
@@ -304,7 +315,7 @@ public:
    }
 
    // --- Transfer ---
-   bool Send(void * buffer, int size)
+   bool Send(const void * buffer, int size)
    {
    #if defined(__WIN32__) || defined(__unix__) || defined(__APPLE__)
       if(this)
@@ -353,12 +364,12 @@ public:
       return false;
    }
 
-   bool SendString(char * string)
+   bool SendString(const char * string)
    {
       return Send(string, (int)strlen(string));
    }
 
-   bool Sendf(char * format, ...)
+   bool Sendf(const char * format, ...)
    {
       bool result;
       va_list args;
@@ -371,7 +382,7 @@ public:
       return result;
    }
 
-   bool DatagramConnect(char * sendAddress, int port)
+   bool DatagramConnect(const char * sendAddress, int port)
    {
       SOCKET s = socket(AF_INET,SOCK_DGRAM,0);
       if(s != -1)
@@ -423,11 +434,11 @@ public:
 
    virtual int ReceiveData(byte * buffer, int count, uint flags)
    {
-      return (int)recv(s, buffer, count, flags);
+      return (int)recv(s, (char *)buffer, count, flags);
    }
-   virtual int SendData(byte * buffer, int count, uint flags)
+   virtual int SendData(const byte * buffer, int count, uint flags)
    {
-      return (int)send(s, buffer, count, flags);
+      return (int)send(s, (const char *)buffer, count, flags);
    }
    virtual bool OnEstablishConnection(int s);
 
@@ -514,7 +525,7 @@ private:
       network.mutex.Release();
    }
 
-   bool _Connect(SOCKET s, char * address, int port)
+   bool _Connect(SOCKET s, const char * address, int port)
    {
       bool result = false;
       if(this)
@@ -627,8 +638,8 @@ private:
                count = ReceiveData(recvBuffer + recvBytes, recvBufferSize - recvBytes, 0);
             else
             {
-               int len = sizeof(a);
-               count = (int)recvfrom(s, recvBuffer + recvBytes,
+               SOCKLEN_TYPE len = sizeof(a);
+               count = (int)recvfrom(s, (char *)recvBuffer + recvBytes,
                   recvBufferSize - recvBytes, 0, (SOCKADDR *)&a, &len);
                strcpy(inetAddress, inet_ntoa(this.a.sin_addr));
                inetPort = ntohs((uint16)a.sin_port);