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(); }
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); } } }