enum conn_state {
	conn_none,
	conn_connecting,
	conn_ready,
	conn_failed,
	conn_stopped
};

struct connection : public MZeroedObject
{
	char *ip;
	int port;
	int flags;
	enum conn_state state;
	struct mtproto_methods *methods;
	struct tgl_state *TLS;
	struct tgl_session *session;
	struct tgl_dc *dc;
	void *extra;
	double last_receive_time;
	HANDLE hNetlibConn;
	HANDLE ping_timer;
	HANDLE in_fail_timer;

	struct connection_buffer *in_head;
	struct connection_buffer *in_tail;
	struct connection_buffer *out_head;
	struct connection_buffer *out_tail;

	int in_bytes;
	int out_bytes;
	int packet_num;
	int out_packet_num;


	HANDLE ping_ev, fail_ev, write_ev, read_ev;

	time_t last_connect_time;

};

struct connection_buffer {
	unsigned char *start;
	unsigned char *end;
	unsigned char *rptr;
	unsigned char *wptr;
	struct connection_buffer *next;
};