Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
		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;
		}