Ejemplo n.º 1
0
void basic_server_buffer<Document, Selector>::on_data(const net6::user& user6,
                                                      const net6::packet& pack)
{
	// Get obby::user from net6::user
	const user* from_user =
		basic_buffer<Document, Selector>::m_user_table.find(
			user6,
			user::flags::CONNECTED,
			user::flags::NONE
		);

	// Should not happen
	if(from_user == NULL)
	{
		format_string str("User %0% is not connected");
		str << user6.get_id();
		throw net6::bad_value(str.str() );
	}

	// Execute packet
	if(!execute_packet(pack, *from_user) )
	{
		throw net6::bad_value(
			"Unexpected command: " + pack.get_command()
		);
	}
}
Ejemplo n.º 2
0
void zPacketThread::exec_read(zPacket* pp)
{
 zPacketHTTP* p=dynamic_cast<zPacketHTTP*>(pp);
 if(p == NULL) return;
 ssize_t n=ZNSOCKET::read(p->sock, p->str_in, m_crd);
 if(n <= 0) { p->push(); return; }
 n= zPacketHTTP::parse(p);
 if(n <= ZHTTP_PACKET_INVALID) { zLog::Log.write("Incorrect packet\n"); p->push(); return; }
 if(n == ZHTTP_PACKET_EMPTY && p->str_in.size() > zPacketHTTP::header_max_length) { zLog::Log.write("Too long header packet size\n"); p->push(); return; }
 if(n >= ZHTTP_PACKET_HEADER && p->str_in.size() > zPacketHTTP::packet_max_length) { zLog::Log.write("Too long packet size\n"); p->push(); return; }
 if(n >= ZHTTP_PACKET_COMPLETE)
 {
  p->clear_event();
  execute_packet(p);
 }
};