ByteArrayPtr Datagram::encode () const { // simple encoding headerLength, contentLength, header, content // both with 4 bytes size_t headerLength = mHeader ? mHeader->size() : 0; if (headerLength > 2147483647) { Log (LogError) << LOGID << "Header to long!" << std::endl; assert (false); return ByteArrayPtr(); } size_t contentLength = mContent ? mContent->size() : 0; if (contentLength > 2147483647) { Log (LogError) << LOGID << "Content to long" << std::endl; assert (false); return ByteArrayPtr(); } uint32_t hln = htonl ((uint32_t)headerLength); uint32_t cln = htonl ((uint32_t)contentLength); ByteArrayPtr dest = createByteArrayPtr (); dest->reserve(8 + headerLength + contentLength); dest->append((const char*) &hln, 4); dest->append((const char*) &cln, 4); if (mHeader) dest->append(*mHeader); if (mContent) dest->append(*mContent); assert (dest->size() == 8 + headerLength + contentLength); return dest; }
ByteArrayPtr StreamSocket::recvBuf() { size_t size = recvSize(); ByteArrayPtr ret = ByteArrayPtr(new ByteArray(size)); is_.read(&(*ret)[0], size); if (is_.bad()) { throw std::string("recvBuf() error"); } return ret; }
std::vector<bool> InboundMessageState::getFragmentsReceived() const { std::vector<bool> v(m_fragments.size()); for(unsigned int i = 0; i < m_fragments.size(); i++) v[i] = (m_fragments[i] != ByteArrayPtr()); return v; }