void UdpManager::stop() { if(is_running == true) { socket->close(); disconnect(socket,SIGNAL(readyRead()),this,SLOT(readUDP())); is_running = false; } }
void UdpManager::start() { if(is_running == false) { socket->bind(QHostAddress::Any, 6668); //bind to non-specific address and certain port; our subnet is 141.75.33.255 connect(socket,SIGNAL(readyRead()),this,SLOT(readUDP())); is_running = true; } }
UdpManager::UdpManager(QObject *parent) : QObject(parent) { is_running = true; workerIsBusy = false; isGPUWorker = false; file_hash = "Th15I5Th3DummymD5HasH0fGSORF.0RG"; socket = new QUdpSocket(this); socket->bind(QHostAddress::Any, 6668); //bind to non-specific address and certain port; our subnet is 141.75.33.255 connect(socket,SIGNAL(readyRead()),this,SLOT(readUDP())); }
bool NetworkSocket_Read(NetworkSocket * networkSocket, uint8_t * buffer, int bufferLength, NetworkAddress ** sourceAddress, int *readLength) { bool result = false; if (networkSocket) { networkSocket->LastError = NetworkSocketError_NoError; if (buffer && bufferLength > 0 && readLength) { *readLength = 0; if ((networkSocket->SocketType & NetworkSocketType_UDP) == NetworkSocketType_UDP) { if (sourceAddress) { if (networkSocket->Socket && readUDP(networkSocket, buffer, bufferLength, sourceAddress, readLength)) { result = true; } if ((*readLength > 0) && *sourceAddress && (*sourceAddress)->Secure) { if (DTLS_Decrypt(*sourceAddress, buffer, *readLength, encryptBuffer, ENCRYPT_BUFFER_LENGTH, readLength, networkSocket)) { if (*readLength > 0) { memcpy(buffer, encryptBuffer, *readLength); } } } } else { networkSocket->LastError = NetworkSocketError_InvalidArguments; } } } else { networkSocket->LastError = NetworkSocketError_InvalidArguments; } } return result; }
bool NetworkSocket_Read(NetworkSocket * networkSocket, uint8_t * buffer, int bufferLength, NetworkAddress ** sourceAddress, int *readLength) { bool result = false; if (networkSocket) { networkSocket->LastError = NetworkSocketError_NoError; if (buffer && bufferLength > 0 && readLength) { *readLength = 0; if ((networkSocket->SocketType & NetworkSocketType_UDP) == NetworkSocketType_UDP) { if (sourceAddress) { if ((networkSocket->Socket != SOCKET_ERROR) && readUDP(networkSocket, networkSocket->Socket, buffer, bufferLength, sourceAddress, readLength)) { result = true; if (*readLength == 0) { readUDP(networkSocket, networkSocket->SocketIPv6, buffer, bufferLength, sourceAddress, readLength); } } else if ((networkSocket->SocketIPv6 != SOCKET_ERROR) && readUDP(networkSocket, networkSocket->SocketIPv6, buffer, bufferLength, sourceAddress, readLength)) { result = true; } if ((*readLength > 0) && *sourceAddress && (*sourceAddress)->Secure) { if (DTLS_Decrypt(*sourceAddress, buffer, *readLength, encryptBuffer, ENCRYPT_BUFFER_LENGTH, readLength, networkSocket)) { if (*readLength > 0) { memcpy(buffer, encryptBuffer, *readLength); } } } } else { networkSocket->LastError = NetworkSocketError_InvalidArguments; } } else { errno = 0; *readLength = recv(networkSocket->Socket, buffer, bufferLength, 0); int lastError = errno; if (*readLength == 0) { networkSocket->LastError = NetworkSocketError_ConnectionLost; } else if (*readLength == SOCKET_ERROR) { *readLength = 0; if (lastError == EWOULDBLOCK) *readLength = 0; else if (lastError == ENOTCONN) networkSocket->LastError = NetworkSocketError_ConnectionLost; else if (lastError == EBADF) networkSocket->LastError = NetworkSocketError_ConnectionLost; } } } else { networkSocket->LastError = NetworkSocketError_InvalidArguments; } } return result; }