#ifndef __HTTPCONTROLSOCKET_H__
#define __HTTPCONTROLSOCKET_H__

class CHttpOpData;
class CHttpControlSocket : public CRealControlSocket
{
public:
	CHttpControlSocket(CFileZillaEnginePrivate *pEngine);
	virtual ~CHttpControlSocket();

protected:
	virtual int ContinueConnect(const wxIPV4address *address);
	virtual bool Connected() const { return m_pCurrentServer != 0; }

	virtual bool SetAsyncRequestReply(CAsyncRequestNotification *pNotification);
	virtual int SendNextCommand(int prevResult = FZ_REPLY_OK);

	virtual int FileTransfer(const wxString localFile, const CServerPath &remotePath,
							 const wxString &remoteFile, bool download,
							 const CFileTransferCommand::t_transferSettings& transferSettings);
	virtual int FileTransferSend(int prevResult = FZ_REPLY_OK);
	virtual int FileTransferParseResponse(char* p, unsigned int len);

	int InternalConnect(const wxString& host, unsigned short port);
	int DoInternalConnect();

	virtual void OnConnect();
	virtual void OnClose();
	virtual void OnReceive();

	virtual int ResetOperation(int nErrorCode);
	
	virtual void ResetHttpData(CHttpOpData* pData);

	int ParseHeader(CHttpOpData* pData);
	int OnChunkedData(CHttpOpData* pData);

	int ProcessData(char* p, int len);

	// IP address of server
	wxIPV4address* m_pAddress;

	char* m_pRecvBuffer;
	unsigned int m_recvBufferPos;
	static const unsigned int m_recvBufferLen = 4096;

	CHttpOpData* m_pHttpOpData;
};

#endif //__HTTPCONTROLSOCKET_H__


syntax highlighted by Code2HTML, v. 0.9.1