MSVC compatibility for STUN module implementation. 66/head
authorfsb4000 <fsb4000@yandex.ru>
Fri, 28 Nov 2014 08:34:01 +0000 (14:34 +0600)
committerfsb4000 <fsb4000@yandex.ru>
Fri, 28 Nov 2014 08:34:01 +0000 (14:34 +0600)
MSVC/libcommon/libcommon.vcxproj
MSVC/libcommon/libcommon.vcxproj.filters
src/ministun.h
src/stun.cpp

index fda7fda..8abc579 100644 (file)
@@ -21,6 +21,7 @@
   <ItemGroup>
     <ClCompile Include="..\..\src\alert.cpp" />
     <ClCompile Include="..\..\src\scrypt-generic.c" />
+    <ClCompile Include="..\..\src\stun.cpp" />
     <ClCompile Include="..\..\src\txdb-leveldb.cpp" />
     <ClCompile Include="..\..\src\version.cpp" />
     <ClCompile Include="..\..\src\checkpoints.cpp" />
@@ -74,6 +75,7 @@
     <ClInclude Include="..\..\src\leveldb.h" />
     <ClInclude Include="..\..\src\limitedmap.h" />
     <ClInclude Include="..\..\src\main.h" />
+    <ClInclude Include="..\..\src\ministun.h" />
     <ClInclude Include="..\..\src\mruset.h" />
     <ClInclude Include="..\..\src\net.h" />
     <ClInclude Include="..\..\src\netbase.h" />
index 20c4f7a..9d1b8d5 100644 (file)
     <ClCompile Include="..\..\src\scrypt-generic.c">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\stun.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\addrman.h">
     <ClInclude Include="..\..\src\txdb-leveldb.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\ministun.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
 </Project>
\ No newline at end of file
index 8b19df8..4dbd186 100644 (file)
 #define STUN_COUNT 3
 #define STUN_TIMEOUT 3
 
-typedef struct { unsigned int id[4]; } __attribute__((packed)) stun_trans_id;
+#ifndef _MSC_VER
+    typedef struct { unsigned int id[4]; } __attribute__((packed)) stun_trans_id;
 
-struct stun_header {
-    unsigned short msgtype;
-    unsigned short msglen;
-    stun_trans_id  id;
-    unsigned char  ies[0];
-} __attribute__((packed));
+    struct stun_header {
+        unsigned short msgtype;
+        unsigned short msglen;
+        stun_trans_id id;
+        unsigned char ies[0];
+    } __attribute__((packed));
 
-struct stun_attr {
-    unsigned short attr;
-    unsigned short len;
-    unsigned char  value[0];
-} __attribute__((packed));
+    struct stun_attr {
+        unsigned short attr;
+        unsigned short len;
+        unsigned char value[0];
+    } __attribute__((packed));
 
-/*
- * The format normally used for addresses carried by STUN messages.
- */
-struct stun_addr {
-    unsigned char  unused;
-    unsigned char  family;
-    unsigned short port;
-    unsigned int   addr;
-} __attribute__((packed));
+    /*
+    * The format normally used for addresses carried by STUN messages.
+    */
+
+    struct stun_addr {
+        unsigned char unused;
+        unsigned char family;
+        unsigned short port;
+        unsigned int addr;
+    } __attribute__((packed));
+#else
+    typedef struct { unsigned int id[4]; } stun_trans_id;
+
+#pragma pack(push, 1)    
+    struct stun_header {
+        unsigned short msgtype;
+        unsigned short msglen;
+        stun_trans_id id;
+        unsigned char ies[0];
+    };
+#pragma pack(pop)
+
+#pragma pack(push, 1)
+    struct stun_attr {
+        unsigned short attr;
+        unsigned short len;
+        unsigned char value[0];
+    };
+#pragma pack(pop)
+
+    /*
+    * The format normally used for addresses carried by STUN messages.
+    */
+#pragma pack(push, 1)
+    struct stun_addr {
+        unsigned char unused;
+        unsigned char family;
+        unsigned short port;
+        unsigned int addr;
+    };
+#pragma pack(pop)
+#endif
 
 #define STUN_IGNORE  (0)
 #define STUN_ACCEPT  (1)
index ee45833..f724eaa 100644 (file)
 #include <arpa/inet.h>
 #include <netdb.h>
 #endif
+#ifndef _MSC_VER
 #include <unistd.h>
+#else
+#include <io.h>
+#endif
 #include <time.h>
 #include <errno.h>
 
-
 #include "ministun.h"
 
 /*---------------------------------------------------------------------*/
@@ -506,8 +509,11 @@ static int StunRequest(const char *host, uint16_t port, struct sockaddr_in *mapp
     int rc = -3;
     if(bind(sock, (struct sockaddr*)&client, sizeof(client)) >= 0)
         rc = StunRequest2(sock, &server, mapped);
-
+#ifndef _MSC_VER
     close(sock);
+#else
+    _close(sock);
+#endif
     return rc;
 } // StunRequest