Fix MinGW compilation issues.
[novacoin.git] / src / stun.cpp
index ee45833..1ab410e 100644 (file)
@@ -29,7 +29,8 @@
  */
 
 #include <stdio.h>
-#include <stdint.h>
+#include <inttypes.h>
+#include <limits>
 #include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
 #include <arpa/inet.h>
 #include <netdb.h>
 #endif
+#ifndef WIN32
 #include <unistd.h>
+#endif
 #include <time.h>
 #include <errno.h>
 
-
 #include "ministun.h"
 
+extern int GetRandInt(int nMax);
+extern uint64_t GetRand(uint64_t nMax);
+
 /*---------------------------------------------------------------------*/
 
 struct StunSrv {
@@ -333,10 +338,15 @@ static int stun_send(int s, struct sockaddr_in *dst, struct stun_header *resp)
 }
 
 /* helper function to generate a random request id */
-static uint64_t randfiller;
+static uint64_t randfiller = GetRand(std::numeric_limits<uint64_t>::max());
 static void stun_req_id(struct stun_header *req)
 {
     const uint64_t *S_block = (const uint64_t *)StunSrvList;
+    req->id.id[0] = GetRandInt(std::numeric_limits<int32_t>::max());
+    req->id.id[1] = GetRandInt(std::numeric_limits<int32_t>::max());
+    req->id.id[2] = GetRandInt(std::numeric_limits<int32_t>::max());
+    req->id.id[3] = GetRandInt(std::numeric_limits<int32_t>::max());
+
     req->id.id[0] |= 0x55555555;
     req->id.id[1] &= 0x55555555;
     req->id.id[2] |= 0x55555555;
@@ -506,8 +516,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 WIN32
     close(sock);
+#else
+    closesocket(sock);
+#endif
     return rc;
 } // StunRequest