Beispiel #1
0
void UdpManager::stop()
{
    if(is_running == true)
    {
        socket->close();
        disconnect(socket,SIGNAL(readyRead()),this,SLOT(readUDP()));

        is_running = false;
    }
}
Beispiel #2
0
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;
    }
}
Beispiel #3
0
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;
}