struct web_client_http:ev::io
{
	char*m_buff;
	int m_pos,m_size;
	int m_fd,m_status;

	web_client_http()
	{
		m_fd=-1;
		m_pos=0;
		m_size=4096;
		m_buff=(char*)malloc(m_size);
	}

	int connect_tcp(const char*ip,int port)
	{
		int fd=zio::build_stream();
		if(zio::connect(fd,"127.0.0.1",4000))
		{
			zio::close(fd);
			return m_fd=-1;
		}

		zio::setiobuf(fd,16<<10,16<<10);
		zio::setblocking(fd,false);

		return m_fd=fd;
	}

	int connect_ws(const char*ip,int port)
	{
		const char*fmt=
				"GET / HTTP/1.1\n"
				"Connection:Upgrade\n"
				"Host:127.0.0.1:8088\n"
				"Sec-WebSocket-Extensions:x-webkit-deflate-frame\n"
				"Sec-WebSocket-Key:puVOuWb7rel6z2AVZBKnfw==\n"
				"Sec-WebSocket-Version:13\n"
				"Upgrade:webet\n";

		if(connect_tcp(ip,port)<0)	
			return -1;

		int len=strlen(fmt);
		if(len!=zio::writev(m_fd,fmt,len))
		{
			close();
			return -1;
		}

		for(;;)
		{
			len=zio::read(m_fd,m_buff+m_pos,m_size-m_pos);
			if(len==-1)
			{
				close();
				return -1;
			}

			if(len==-2)
				continue;

			m_pos+=len;
			m_buff[m_pos]=0;
			if(strstr(m_buff,"\n\n"))
				break;
		}

		log_info("http debug:%s",m_buff);
	}

	void close()
	{
		zio::close(m_fd);
	}

	~web_client_http()
	{
		close();
		::free(m_buff);
	}
};
