windows sockets working

This commit is contained in:
Robin Müller 2020-09-06 11:58:12 +02:00
parent 3e0819f954
commit 7774434d7a

View File

@ -1,3 +1,4 @@
#include <fsfw/ipc/MutexHelper.h>
#include "TmTcWinUdpBridge.h" #include "TmTcWinUdpBridge.h"
TmTcWinUdpBridge::TmTcWinUdpBridge(object_id_t objectId, TmTcWinUdpBridge::TmTcWinUdpBridge(object_id_t objectId,
@ -70,10 +71,43 @@ TmTcWinUdpBridge::~TmTcWinUdpBridge() {
} }
ReturnValue_t TmTcWinUdpBridge::sendTm(const uint8_t *data, size_t dataLen) { ReturnValue_t TmTcWinUdpBridge::sendTm(const uint8_t *data, size_t dataLen) {
int flags = 0;
//clientAddress.sin_addr.s_addr = htons(INADDR_ANY);
//clientAddressLen = sizeof(serverAddress);
// char ipAddress [15];
// sif::debug << "IP Address Sender: "<< inet_ntop(AF_INET,
// &clientAddress.sin_addr.s_addr, ipAddress, 15) << std::endl;
ssize_t bytesSent = sendto(serverSocket,
reinterpret_cast<const char*>(data), dataLen, flags,
reinterpret_cast<sockaddr*>(&clientAddress), clientAddressLen);
if(bytesSent == SOCKET_ERROR) {
sif::error << "TmTcWinUdpBridge::sendTm: Send operation failed."
<< std::endl;
handleSendError();
}
// sif::debug << "TmTcUnixUdpBridge::sendTm: " << bytesSent << " bytes were"
// " sent." << std::endl;
return HasReturnvaluesIF::RETURN_OK;
return HasReturnvaluesIF::RETURN_OK; return HasReturnvaluesIF::RETURN_OK;
} }
void TmTcWinUdpBridge::checkAndSetClientAddress(sockaddr_in clientAddress) { void TmTcWinUdpBridge::checkAndSetClientAddress(sockaddr_in newAddress) {
MutexHelper lock(mutex, MutexIF::TimeoutType::WAITING, 10);
// char ipAddress [15];
// sif::debug << "IP Address Sender: "<< inet_ntop(AF_INET,
// &newAddress.sin_addr.s_addr, ipAddress, 15) << std::endl;
// sif::debug << "IP Address Old: " << inet_ntop(AF_INET,
// &clientAddress.sin_addr.s_addr, ipAddress, 15) << std::endl;
// Set new IP address if it has changed.
if(clientAddress.sin_addr.s_addr != newAddress.sin_addr.s_addr) {
clientAddress.sin_addr.s_addr = newAddress.sin_addr.s_addr;
clientAddressLen = sizeof(clientAddress);
}
} }
void TmTcWinUdpBridge::handleSocketError() { void TmTcWinUdpBridge::handleSocketError() {
@ -85,6 +119,10 @@ void TmTcWinUdpBridge::handleSocketError() {
break; break;
} }
default: { default: {
/*
https://docs.microsoft.com/en-us/windows/win32/winsock/
windows-sockets-error-codes-2
*/
sif::info << "TmTcWinUdpBridge::handleSocketError: Error code: " sif::info << "TmTcWinUdpBridge::handleSocketError: Error code: "
<< errCode << std::endl; << errCode << std::endl;
break; break;
@ -101,6 +139,10 @@ void TmTcWinUdpBridge::handleBindError() {
break; break;
} }
default: { default: {
/*
https://docs.microsoft.com/en-us/windows/win32/winsock/
windows-sockets-error-codes-2
*/
sif::info << "TmTcWinUdpBridge::handleBindError: Error code: " sif::info << "TmTcWinUdpBridge::handleBindError: Error code: "
<< errCode << std::endl; << errCode << std::endl;
break; break;
@ -116,7 +158,16 @@ void TmTcWinUdpBridge::handleSendError() {
<< "WSAStartup(...) call " << "necessary" << std::endl; << "WSAStartup(...) call " << "necessary" << std::endl;
break; break;
} }
case(WSAEADDRNOTAVAIL): {
sif::info << "TmTcWinUdpBridge::handleReadError: WSAEADDRNOTAVAIL: "
<< "Check target address. " << std::endl;
break;
}
default: { default: {
/*
https://docs.microsoft.com/en-us/windows/win32/winsock/
windows-sockets-error-codes-2
*/
sif::info << "TmTcWinUdpBridge::handleSendError: Error code: " sif::info << "TmTcWinUdpBridge::handleSendError: Error code: "
<< errCode << std::endl; << errCode << std::endl;
break; break;