TEST_F(CmWSHandleRFC6455Test, Decode126ErrorTest)
{
    char szBuf[500] = {0};
    memset(szBuf, 'e', 500);
    szBuf[499] = '\0';

    UINT8  uFirstByte = 0x81;
    UINT8  uSecondByte = 126;

    CCmMessageBlock aHead(2);
    CCmMessageBlock aData(strlen(szBuf));
    aData.Write(szBuf, strlen(szBuf));

    CCmByteStreamNetwork networkStream(aHead);
    networkStream << uFirstByte;
    networkStream << uSecondByte;

    aHead.Append(&aData);

    CCmMessageBlock* aDataIn = aHead.DuplicateChained();
    CCmMessageBlock* aDataOut = NULL;

    m_RFC6455.SetDataType(E_WS_DTYPE_TEXT);

    EXPECT_EQ(CM_OK, m_RFC6455.Decode(*aDataIn, aDataOut));

    SAFE_DELETE(aDataIn);
    SAFE_DELETE(aDataOut);
}
TEST_F(CmWSHandleRFC6455Test, Decode126Test)
{
    char szBuf[500] = {0};
    memset(szBuf, 'e', 500);
    szBuf[499] = '\0';

    UINT8  uFirstByte = 0x81;
    UINT8  uSecondByte = 126;

    CCmMessageBlock aHead(4);
    CCmMessageBlock aData(strlen(szBuf));
    aData.Write(szBuf, strlen(szBuf));

    UINT16 uDataLen = (UINT16)aData.GetChainedLength();

    CCmByteStreamNetwork networkStream(aHead);

    networkStream << uFirstByte;
    networkStream << uSecondByte;
    networkStream << uDataLen;

    aHead.Append(aData.DuplicateChained());

    CCmMessageBlock* aDataOut = NULL;

    m_RFC6455.SetDataType(E_WS_DTYPE_TEXT);

    EXPECT_EQ(CM_OK, m_RFC6455.Decode(aHead, aDataOut));
    EXPECT_TRUE(IsMessageEqual(aData, *aDataOut));

    aDataOut->DestroyChained();
    aDataOut = NULL;
}
TEST_F(CmWSHandleRFC6455Test, Decode127Test)
{
    char szBuf[0x10000] = {0};
    memset(szBuf, 'f', 0x10000);
    szBuf[0x10000 - 1] = '\0';

    UINT8  uFirstByte = 0x81;
    UINT8  uSecondByte = 127;

    CCmMessageBlock aHead(10);
    CCmMessageBlock aData(strlen(szBuf));
    aData.Write(szBuf, strlen(szBuf));

    unsigned long long uDataLen = aData.GetChainedLength();

    CCmByteStreamNetwork networkStream(aHead);

    networkStream << uFirstByte;
    networkStream << uSecondByte;
    networkStream << uDataLen;

    aHead.Append(aData.DuplicateChained());

    CCmMessageBlock* aDataOut = NULL;

    m_RFC6455.SetDataType(E_WS_DTYPE_TEXT);

    EXPECT_EQ(CM_OK, m_RFC6455.Decode(aHead, aDataOut));

    EXPECT_TRUE(IsMessageEqual(aData, *aDataOut));

    ASSERT_TRUE(NULL != aDataOut);
    aDataOut->DestroyChained();
}
TEST_F(CmWSHandleRFC6455Test, Decode127TestMask)
{
    char* pBuf = new char[565633];
    memset(pBuf, 'f', 565633);
    pBuf[565632] = '\0';

    UINT8  uFirstByte = 0x81;
    UINT8  uSecondByte = 0xff;

    DWORD dwSize = 565632;
    char* pMask = Mask(pBuf, dwSize);

    CCmMessageBlock aHead(14);
    CCmMessageBlock aData(dwSize);
    aData.Write(pBuf, dwSize);

    CCmMessageBlock aDataMask(dwSize);
    aDataMask.Write(pMask, dwSize);

    unsigned long long uDataLen = aDataMask.GetChainedLength();

    CCmByteStreamNetwork networkStream(aHead);

    networkStream << uFirstByte;
    networkStream << uSecondByte;
    networkStream << uDataLen;

    networkStream << m_mask_key[0];
    networkStream << m_mask_key[1];
    networkStream << m_mask_key[2];
    networkStream << m_mask_key[3];

    aHead.Append(&aDataMask);

    CCmMessageBlock* aDataOut = NULL;

    m_RFC6455.SetDataType(E_WS_DTYPE_TEXT);

    EXPECT_EQ(CM_OK, m_RFC6455.Decode(aHead, aDataOut));
    EXPECT_TRUE(IsMessageEqual(aData, *aDataOut));

    delete [] pMask;
    pMask = NULL;
    delete [] pBuf;
    pBuf = NULL;

    ASSERT_TRUE(NULL != aDataOut);
    aDataOut->DestroyChained();
}
Exemple #5
0
void TCPClient::readyRead()
{
    while (tcpSocket->bytesAvailable() >= TCP_MESSAGE_SIZE) {
        QByteArray message = tcpSocket->read(TCP_MESSAGE_SIZE);
        QDataStream networkStream( message );
        qint32 descriptor;
        networkStream >> descriptor;

        switch(descriptor) {
            case DESCRIPTOR_CODE_FOR_NEW_CONNECTION:
                networkStream >> descriptor;
                emit someoneConnectedToHost(descriptor);
                break;
            case DESCRIPTOR_CODE_FOR_LOST_CONNECTION:
                networkStream >> descriptor;
                emit someoneDisconnectedFromHost(descriptor);
                break;
            default :
                networkStream >> message;
                if (message.size() != 0)
                    emit networkMessageReceived(this, descriptor, message);
        }
    }
}