Browse Source

Fixed compilation with MSVC

Paul-Louis Ageneau 5 years ago
parent
commit
7bfd731ed3
8 changed files with 32 additions and 22 deletions
  1. 1 0
      CMakeLists.txt
  2. 1 1
      src/base64.cpp
  3. 16 6
      src/rtc.cpp
  4. 2 2
      src/sctptransport.cpp
  5. 3 3
      src/tcptransport.cpp
  6. 2 2
      src/tlstransport.cpp
  7. 7 7
      src/wstransport.cpp
  8. 0 1
      test/capi.cpp

+ 1 - 0
CMakeLists.txt

@@ -21,6 +21,7 @@ if(WIN32)
 	add_definitions(-DWIN32_LEAN_AND_MEAN)
 	if (MSVC)
 		add_definitions(-DNOMINMAX)
+		add_definitions(-D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING)
 	endif()
 endif()
 

+ 1 - 1
src/base64.cpp

@@ -42,7 +42,7 @@ string to_base64(const binary &data) {
 		i += 3;
 	}
 
-	int left = data.size() - i;
+	int left = int(data.size() - i);
 	if (left) {
 		auto d0 = to_integer<uint8_t>(data[i]);
 		out += tab[d0 >> 2];

+ 16 - 6
src/rtc.cpp

@@ -35,6 +35,11 @@
 #include <unordered_map>
 #include <utility>
 
+#ifdef _WIN32
+#include <codecvt>
+#include <locale>
+#endif
+
 using namespace rtc;
 using std::shared_ptr;
 using std::string;
@@ -174,9 +179,14 @@ public:
 	void write(const plog::Record &record) override {
 		plog::Severity severity = record.getSeverity();
 		auto formatted = plog::FuncMessageFormatter::format(record);
-		std::string str(formatted.begin(), formatted.end());
 		formatted.pop_back(); // remove newline
-
+#ifdef _WIN32
+		using convert_type = std::codecvt_utf8<wchar_t>;
+		std::wstring_convert<convert_type, wchar_t> converter;
+		std::string str = converter.to_bytes(formatted);
+#else
+		std::string str = formatted;
+#endif
 		std::lock_guard lock(mutex);
 		if (callback)
 			callback(static_cast<rtcLogLevel>(record.getSeverity()), str.c_str());
@@ -374,10 +384,10 @@ int rtcGetLocalAddress(int pc, char *buffer, int size) {
 
 		if (auto addr = peerConnection->localAddress()) {
 			const char *data = addr->data();
-			size = std::min(size_t(size - 1), addr->size());
+			size = std::min(size - 1, int(addr->size()));
 			std::copy(data, data + size, buffer);
 			buffer[size] = '\0';
-			return int(size + 1);
+			return size + 1;
 		}
 	});
 }
@@ -394,7 +404,7 @@ int rtcGetRemoteAddress(int pc, char *buffer, int size) {
 
 		if (auto addr = peerConnection->remoteAddress()) {
 			const char *data = addr->data();
-			size = std::min(size_t(size - 1), addr->size());
+			size = std::min(size - 1, int(addr->size()));
 			std::copy(data, data + size, buffer);
 			buffer[size] = '\0';
 			return int(size + 1);
@@ -414,7 +424,7 @@ int rtcGetDataChannelLabel(int dc, char *buffer, int size) {
 
 		string label = dataChannel->label();
 		const char *data = label.data();
-		size = std::min(size_t(size - 1), label.size());
+		size = std::min(size - 1, int(label.size()));
 		std::copy(data, data + size, buffer);
 		buffer[size] = '\0';
 		return int(size + 1);

+ 2 - 2
src/sctptransport.cpp

@@ -262,7 +262,7 @@ bool SctpTransport::send(message_ptr message) {
 		return true;
 
 	mSendQueue.push(message);
-	updateBufferedAmount(message->stream, message_size_func(message));
+	updateBufferedAmount(message->stream, long(message_size_func(message)));
 	return false;
 }
 
@@ -302,7 +302,7 @@ bool SctpTransport::trySendQueue() {
 		if (!trySendMessage(message))
 			return false;
 		mSendQueue.pop();
-		updateBufferedAmount(message->stream, -message_size_func(message));
+		updateBufferedAmount(message->stream, -long(message_size_func(message)));
 	}
 	return true;
 }

+ 3 - 3
src/tcptransport.cpp

@@ -150,7 +150,7 @@ void TcpTransport::connect(const string &hostname, const string &service) {
 
 	for (auto p = result; p; p = p->ai_next) {
 		try {
-			connect(p->ai_addr, p->ai_addrlen);
+			connect(p->ai_addr, socklen_t(p->ai_addrlen));
 
 			PLOG_INFO << "Connected to " << hostname << ":" << service;
 			freeaddrinfo(result);
@@ -271,12 +271,12 @@ bool TcpTransport::trySendMessage(message_ptr &message) {
 	auto data = reinterpret_cast<const char *>(message->data());
 	auto size = message->size();
 	while (size) {
-#if defined(__APPLE__) or defined(_WIN32)
+#if defined(__APPLE__) || defined(_WIN32)
 		int flags = 0;
 #else
 		int flags = MSG_NOSIGNAL;
 #endif
-		int len = ::send(mSock, data, size, flags);
+		int len = ::send(mSock, data, int(size), flags);
 		if (len < 0) {
 			if (errno == EAGAIN || errno == EWOULDBLOCK) {
 				message = make_message(message->end() - size, message->end());

+ 2 - 2
src/tlstransport.cpp

@@ -337,7 +337,7 @@ bool TlsTransport::send(message_ptr message) {
 	if (message->size() == 0)
 		return true;
 
-	int ret = SSL_write(mSsl, message->data(), message->size());
+	int ret = SSL_write(mSsl, message->data(), int(message->size()));
 	if (!openssl::check(mSsl, ret))
 		return false;
 
@@ -393,7 +393,7 @@ void TlsTransport::runRecvLoop() {
 
 			message_ptr message = *next;
 			if (message->size() > 0)
-				BIO_write(mInBio, message->data(), message->size()); // Input
+				BIO_write(mInBio, message->data(), int(message->size())); // Input
 			else
 				recv(message); // Pass zero-sized messages through
 		}

+ 7 - 7
src/wstransport.cpp

@@ -50,7 +50,7 @@ using std::to_integer;
 using std::to_string;
 
 using random_bytes_engine =
-    std::independent_bits_engine<std::default_random_engine, CHAR_BIT, unsigned char>;
+    std::independent_bits_engine<std::default_random_engine, CHAR_BIT, unsigned short>;
 
 WsTransport::WsTransport(std::shared_ptr<Transport> lower, string host, string path,
                          message_callback recvCallback, state_callback stateCallback)
@@ -145,12 +145,12 @@ void WsTransport::close() {
 bool WsTransport::sendHttpRequest() {
 	changeState(State::Connecting);
 
-	auto seed = system_clock::now().time_since_epoch().count();
+	auto seed = static_cast<unsigned int>(system_clock::now().time_since_epoch().count());
 	random_bytes_engine generator(seed);
 
 	binary key(16);
 	auto k = reinterpret_cast<uint8_t *>(key.data());
-	std::generate(k, k + key.size(), generator);
+	std::generate(k, k + key.size(), [&]() { return uint8_t(generator()); });
 
 	const string request = "GET " + mPath +
 	                       " HTTP/1.1\r\n"
@@ -283,7 +283,7 @@ size_t WsTransport::readFrame(byte *buffer, size_t size, Frame &frame) {
 		cur += 4;
 	}
 
-	if (end - cur < frame.length)
+	if (size_t(end - cur) < frame.length)
 		return 0;
 
 	frame.payload = cur;
@@ -292,7 +292,7 @@ size_t WsTransport::readFrame(byte *buffer, size_t size, Frame &frame) {
 			frame.payload[i] ^= maskingKey[i % 4];
 	cur += frame.length;
 
-	return cur - buffer;
+	return size_t(cur - buffer);
 }
 
 void WsTransport::recvFrame(const Frame &frame) {
@@ -378,13 +378,13 @@ bool WsTransport::sendFrame(const Frame &frame) {
 	}
 
 	if (frame.mask) {
-		auto seed = system_clock::now().time_since_epoch().count();
+		auto seed = static_cast<unsigned int>(system_clock::now().time_since_epoch().count());
 		random_bytes_engine generator(seed);
 
 		byte *maskingKey = reinterpret_cast<byte *>(cur);
 
 		auto u = reinterpret_cast<uint8_t *>(maskingKey);
-		std::generate(u, u + 4, generator);
+		std::generate(u, u + 4, [&]() { return uint8_t(generator()); });
 		cur += 4;
 
 		for (size_t i = 0; i < frame.length; ++i)

+ 0 - 1
test/capi.cpp

@@ -18,7 +18,6 @@
 
 #include <rtc/rtc.h>
 
-#include <cstdbool>
 #include <cstdio>
 #include <cstdlib>
 #include <cstring>