MSVC compatibility for STUN module implementation.
<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" />
<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" />
<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
#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)
#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"
/*---------------------------------------------------------------------*/
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