Selaa lähdekoodia

Merge pull request #89 from paullouisageneau/fix-compilation-win32

Fix compilation for Windows
Paul-Louis Ageneau 5 vuotta sitten
vanhempi
commit
35d58bb4e5

+ 36 - 45
examples/copy-paste-capi/answerer.c

@@ -19,12 +19,19 @@
 
 #include <rtc/rtc.h>
 
+#include <ctype.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
+#ifdef _WIN32
+#include "getline.h"
+#include <windows.h>
+static void sleep(unsigned int secs) { Sleep(secs * 1000); }
+#else
 #include <unistd.h> // for sleep
-#include <ctype.h>
+#endif
 
 typedef struct {
         rtcState state;
@@ -65,11 +72,9 @@ int main(int argc, char **argv) {
 
         Peer *peer = (Peer *)malloc(sizeof(Peer));
         if (!peer) {
-
-                printf("Error allocating memory for peer\n");
-                deletePeer(peer);
-
-        }
+		    fprintf(stderr, "Error allocating memory for peer\n");
+		    return -1;
+	    }
         memset(peer, 0, sizeof(Peer));
 
         printf("Peer created\n");
@@ -86,17 +91,12 @@ int main(int argc, char **argv) {
         rtcSetUserPointer(peer->dc, NULL);
         rtcSetDataChannelCallback(peer->pc, dataChannelCallback);
 
+	    sleep(1);
 
-
-
-        bool exit = false;
-
+	    bool exit = false;
         while (!exit) {
-
                 printf("\n");
                 printf("***************************************************************************************\n");
-
-                // << endl
                 printf("* 0: Exit /"
                        " 1: Enter remote description /"
                        " 2: Enter remote candidate /"
@@ -106,16 +106,16 @@ int main(int argc, char **argv) {
 
                 int command = -1;
                 int c;
-                // int check_scan
-                if (scanf("%d", &command)) {
 
-                }else {
-                        break;
-                }
-                while ((c = getchar()) != '\n' && c != EOF) { }
+		        if (!scanf("%d", &command)) {
+			        break;
+		        }
 
-                fflush(stdin);
-                switch (command) {
+		        while ((c = getchar()) != '\n' && c != EOF) {
+		        }
+		        fflush(stdin);
+
+		        switch (command) {
                 case 0: {
                         exit = true;
                         break;
@@ -123,8 +123,6 @@ int main(int argc, char **argv) {
                 case 1: {
                         // Parse Description
                         printf("[Description]: ");
-
-
                         char *line = NULL;
                         size_t len = 0;
                         size_t read = 0;
@@ -151,12 +149,12 @@ int main(int argc, char **argv) {
                                 rtcAddRemoteCandidate(peer->pc, candidate, "0");
                                 free(candidate);
 
-                        }else {
-                                printf("Error reading line\n");
-                                break;
-                        }
+			            } else {
+				            printf("Error reading line\n");
+				            break;
+			            }
 
-                        break;
+			            break;
                 }
                 case 3: {
                         // Send Message
@@ -171,11 +169,11 @@ int main(int argc, char **argv) {
                         if(getline(&message, &message_size, stdin)) {
                                 rtcSendMessage(peer->dc, message, -1);
                                 free(message);
-                        }else {
-                                printf("Error reading line\n");
-                                break;
-                        }
-                        break;
+			            } else {
+				            printf("Error reading line\n");
+				            break;
+			            }
+			            break;
                 }
                 case 4: {
                         // Connection Info
@@ -200,12 +198,10 @@ int main(int argc, char **argv) {
                 }
         }
 
-
         deletePeer(peer);
         return 0;
 }
 
-
 static void descriptionCallback(const char *sdp, const char *type, void *ptr) {
         // Peer *peer = (Peer *)ptr;
         printf("Description %s:\n%s\n", "answerer", sdp);
@@ -229,22 +225,19 @@ static void gatheringStateCallback(rtcGatheringState state, void *ptr) {
         printf("Gathering state %s: %s\n", "answerer", rtcGatheringState_print(state));
 }
 
-
-
 static void closedCallback(void *ptr) {
         Peer *peer = (Peer *)ptr;
         peer->connected = false;
-
-
 }
+
 static void messageCallback(const char *message, int size, void *ptr) {
-        // Peer *peer = (Peer *)ptr;
         if (size < 0) { // negative size indicates a null-terminated string
                 printf("Message %s: %s\n", "answerer", message);
         } else {
                 printf("Message %s: [binary of size %d]\n", "answerer", size);
         }
 }
+
 static void deletePeer(Peer *peer) {
         if (peer) {
                 if (peer->dc)
@@ -264,16 +257,16 @@ static void dataChannelCallback(int dc, void *ptr) {
         char buffer[256];
         if (rtcGetDataChannelLabel(dc, buffer, 256) >= 0)
                 printf("DataChannel %s: Received with label \"%s\"\n", "answerer", buffer);
-
-
 }
+
 int all_space(const char *str) {
         while (*str) {
                 if (!isspace(*str++)) {
                         return 0;
                 }
         }
-        return 1;
+
+	    return 1;
 }
 
 char* state_print(rtcState state) {
@@ -302,7 +295,6 @@ char* state_print(rtcState state) {
         }
 
         return str;
-
 }
 
 char* rtcGatheringState_print(rtcState state) {
@@ -322,5 +314,4 @@ char* rtcGatheringState_print(rtcState state) {
         }
 
         return str;
-
 }

+ 48 - 0
examples/copy-paste-capi/getline.h

@@ -0,0 +1,48 @@
+// Simple POSIX getline() implementation
+// This code is public domain
+
+#include "malloc.h"
+#include "stdio.h"
+
+ssize_t getline(char **lineptr, size_t *n, FILE *stream) {
+	if (!lineptr || !stream || !n)
+		return -1;
+
+	int c = getc(stream);
+	if (c == EOF)
+		return -1;
+
+	if (!*lineptr) {
+		*lineptr = malloc(128);
+		if (!*lineptr)
+			return -1;
+
+		*n = 128;
+	}
+
+	size_t pos = 0;
+	while(c != EOF) {
+        if (pos + 1 >= *n) {
+            size_t new_size = *n + (*n >> 2);
+			if (new_size < 128)
+				new_size = 128;
+
+			char *new_ptr = realloc(*lineptr, new_size);
+			if (!new_ptr)
+				return -1;
+
+			*n = new_size;
+            *lineptr = new_ptr;
+        }
+
+        ((unsigned char *)(*lineptr))[pos ++] = c;
+		if (c == '\n')
+			break;
+
+		c = getc(stream);
+    }
+
+    (*lineptr)[pos] = '\0';
+    return pos;
+}
+

+ 25 - 37
examples/copy-paste-capi/offerer.c

@@ -19,12 +19,19 @@
 
 #include <rtc/rtc.h>
 
+#include <ctype.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
+#ifdef _WIN32
+#include "getline.h"
+#include <windows.h>
+static void sleep(unsigned int secs) { Sleep(secs * 1000); }
+#else
 #include <unistd.h> // for sleep
-#include <ctype.h>
+#endif
 
 char* state_print(rtcState state);
 char* rtcGatheringState_print(rtcState state);
@@ -65,13 +72,11 @@ int main(int argc, char **argv){
         memset(&config, 0, sizeof(config));
 
         Peer *peer = (Peer *)malloc(sizeof(Peer));
-        if (!peer) {
-
-                printf("Error allocating memory for peer\n");
-                deletePeer(peer);
-
-        }
-        memset(peer, 0, sizeof(Peer));
+	    if (!peer) {
+		    fprintf(stderr, "Error allocating memory for peer\n");
+		    return -1;
+	    }
+	    memset(peer, 0, sizeof(Peer));
 
         printf("Peer created\n");
 
@@ -85,25 +90,17 @@ int main(int argc, char **argv){
 
         // Since this is the offere, we will create a datachannel
         peer->dc = rtcCreateDataChannel(peer->pc, "test");
-
         rtcSetOpenCallback(peer->dc, openCallback);
-
-
         rtcSetClosedCallback(peer->dc, closedCallback);
-
         rtcSetMessageCallback(peer->dc, messageCallback);
 
+	    sleep(1);
 
-        sleep(1);
-
-        bool exit = false;
-
+	    bool exit = false;
         while (!exit) {
 
                 printf("\n");
                 printf("***************************************************************************************\n");
-
-                // << endl
                 printf("* 0: Exit /"
                        " 1: Enter remote description /"
                        " 2: Enter remote candidate /"
@@ -113,13 +110,14 @@ int main(int argc, char **argv){
 
                 int command = -1;
                 int c;
-                if (scanf("%d", &command)) {
 
-                }else {
-                        break;
-                }
-                while ((c = getchar()) != '\n' && c != EOF) { }
-                fflush(stdin);
+		        if (!scanf("%d", &command)) {
+			        break;
+		        }
+
+		        while ((c = getchar()) != '\n' && c != EOF) {
+		        }
+		        fflush(stdin);
 
                 switch (command) {
                 case 0: {
@@ -210,11 +208,6 @@ int main(int argc, char **argv){
         return 0;
 }
 
-
-
-
-
-
 static void descriptionCallback(const char *sdp, const char *type, void *ptr) {
         // Peer *peer = (Peer *)ptr;
         printf("Description %s:\n%s\n", "offerer", sdp);
@@ -238,22 +231,17 @@ static void gatheringStateCallback(rtcGatheringState state, void *ptr) {
         printf("Gathering state %s: %s\n", "offerer", rtcGatheringState_print(state));
 }
 
-
 static void openCallback(void *ptr) {
         Peer *peer = (Peer *)ptr;
         peer->connected = true;
         char buffer[256];
         if (rtcGetDataChannelLabel(peer->dc, buffer, 256) >= 0)
                 printf("DataChannel %s: Received with label \"%s\"\n","offerer", buffer);
-
-
 }
 
 static void closedCallback(void *ptr) {
         Peer *peer = (Peer *)ptr;
         peer->connected = false;
-
-
 }
 
 static void messageCallback(const char *message, int size, void *ptr) {
@@ -264,6 +252,7 @@ static void messageCallback(const char *message, int size, void *ptr) {
                 printf("Message %s: [binary of size %d]\n", "offerer", size);
         }
 }
+
 static void deletePeer(Peer *peer) {
         if (peer) {
                 if (peer->dc)
@@ -274,14 +263,14 @@ static void deletePeer(Peer *peer) {
         }
 }
 
-
 int all_space(const char *str) {
         while (*str) {
                 if (!isspace(*str++)) {
                         return 0;
                 }
         }
-        return 1;
+
+	    return 1;
 }
 
 char* state_print(rtcState state) {
@@ -330,5 +319,4 @@ char* rtcGatheringState_print(rtcState state) {
         }
 
         return str;
-
 }

+ 3 - 3
src/tcptransport.cpp

@@ -59,7 +59,7 @@ int SelectInterrupter::prepare(fd_set &readfds, fd_set &writefds) {
 	if (mDummySock == INVALID_SOCKET)
 		mDummySock = ::socket(AF_INET, SOCK_DGRAM, 0);
 	FD_SET(mDummySock, &readfds);
-	return SOCK_TO_INT(mDummySock) + 1;
+	return SOCKET_TO_INT(mDummySock) + 1;
 #else
 	int ret;
 	do {
@@ -226,7 +226,7 @@ void TcpTransport::connect(const sockaddr *addr, socklen_t addrlen) {
 
 		int error = 0;
 		socklen_t errorlen = sizeof(error);
-		if (::getsockopt(mSock, SOL_SOCKET, SO_ERROR, &error, &errorlen) != 0)
+		if (::getsockopt(mSock, SOL_SOCKET, SO_ERROR, (char *)&error, &errorlen) != 0)
 			throw std::runtime_error("Failed to get socket error code");
 
 		if (error != 0) {
@@ -271,7 +271,7 @@ bool TcpTransport::trySendMessage(message_ptr &message) {
 	auto data = reinterpret_cast<const char *>(message->data());
 	auto size = message->size();
 	while (size) {
-#ifdef __APPLE__
+#if defined(__APPLE__) or defined(_WIN32)
 		int flags = 0;
 #else
 		int flags = MSG_NOSIGNAL;