Example #1
0
Status ConnectionOut::sendPacketWithHeader(Packet& p, PacketHeader h){
	assert(&p != &buffer);

	do {
		size_t n = std::min(p.remaining(), NRG_MAX_PACKET_SIZE - PacketHeader::size);

		if(p.remaining() > NRG_MAX_PACKET_SIZE - PacketHeader::size){
			h.flags |= PKTFLAG_CONTINUED;
		}

		h.write(buffer.reset());
		buffer.writeArray(p.getPointer(), n);

		if(cc.transform) cc.transform->apply(buffer, buffer2.reset());

		Packet& sendme = cc.transform ? buffer2 : buffer;
		last_status = sock.sendPacket(sendme, remote_addr);
		if(!last_status){
			return last_status;
		}

		p.seek(n, SEEK_CUR);
		++h.frag_index;

	} while(p.remaining());

	return last_status = StatusOK();
}