int SFProtobufProtocol::tryDeframeIncomingPacket(DataBuffer& Buffer, BasePacket*& pPacket, int& packetId, unsigned int& nExtractedBytes) { if(Buffer.GetDataSize() < 8) return SFProtocol::eIncompletePacket; char* pBuffer = Buffer.GetBuffer(); unsigned int sStart = 0; unsigned int packetLen = 0; packetId = 0; unsigned int sEnd = 0; for (int i=0; i<2; i++) { *((BYTE*)(&sStart)+i)=pBuffer[i]; *((BYTE*)(&packetLen)+i)=pBuffer[i+2]; *((BYTE*)(&packetId) + i) = pBuffer[i + 4]; } if (sStart!=SignatureStart) return SFProtocol::eCorruptPacket; if (packetLen > Buffer.GetDataSize()) return SFProtocol::eIncompletePacket; for (int i=0; i<2; i++) *((BYTE*)(&sEnd)+i)=pBuffer[packetLen-2+i]; if(sEnd!=SignatureEnd) return SFProtocol::eCorruptPacket; char* pData = pBuffer + 6; unsigned int dataSize = packetLen - 8; nExtractedBytes = packetLen; pPacket = CreateIncomingPacketFromPacketId(packetId); if(pPacket==NULL) return SFProtocol::eUndefinedFailure; if(!pPacket->Decode(pData, dataSize)) { disposeIncomingPacket(pPacket); return SFProtocol::eDecodingFailure; } return SFProtocol::Success; }
int SSClient::SendMsg( Packet & packet ) { DataBuffer * buff = packet.GetBuffer(); int iRet = SockSend( buff->GetReadPtr(), buff->GetDataSize()); if(iRet < 0) return -1; return 0; }