www.pudn.com > NetPaw.rar > HttpSocket.h
#pragma once
#include "iocpsocket.h"
#include "httpreqheader.h"
#include "httpresponsehdr.h"
#define MAX_BUFF_SIZE 4096
enum _ERRORS
{
ERR_FINISHED = -1,
ERR_OK = 0,
ERR_STATUSCODE,
ERR_DATALEN,
ERR_GENERAL = 100,
ERR_MAX
};
// This is a just sample class for how to use CIocpSocket in client socket,
// so it isn't implemented perfectly
class CMainFrame;
class CNetPawDoc;
class CDownloadFile;
class CHttpSocket : public CIocpSocket
{
public:
CHttpSocket(CDownloadFile *pDlFile);
~CHttpSocket(void);
virtual void OnConnect(BOOL bSuccess, CEventCallback * /*pc*/) throw();
virtual void OnReceive(BOOL bSuccess, LPWSABUF pBuf, DWORD dwBuffers, DWORD dwBytesRecvd, DWORD dwFlags, CEventCallback *pc) throw();
virtual void OnReceiveFrom(BOOL bSuccess, LPWSABUF pBuf, DWORD dwBuffers, DWORD dwBytesRecvd, DWORD dwFlags, LPSOCKADDR pAddrFrom, INT nFromLen, CEventCallback *pc) throw();
virtual void OnSend(BOOL bSuccess, LPWSABUF pBuf, DWORD dwBuffers, DWORD dwBytesSent, CEventCallback *pc) throw();
protected:
BYTE *m_pbRecvBuf;
BYTE *m_pbSendBuf;
LONGLONG m_nDataToWrite;
UINT m_nSendFailed;
BOOL m_bProcessHeader;
CDownloadFile* m_pDownldFile;
// http request and response
CHttpReqHeader m_HttpRequest;
CHttpResponseHdr m_HttpResponseHdr;
protected:
BOOL ProcessRcvData(char* pBuffer, DWORD dwBytesRecvd);
BOOL ProcResponseHdr(char* pBuffer, DWORD dwBytesRecvd);
BOOL ProcStatusCode(int nCode);
public:
// connection parameter of the socket
CString m_sHostName;
CString m_sFileObj;
UINT m_nPort;
// protect sockets public data
CCriticalSection m_csSockAccess;
// current socket writing position in the file,
// should be protected by LOCK
BOOL m_bConnected;
volatile LONGLONG m_nFileOffset;
volatile LONGLONG m_nDataToRead;
volatile LONGLONG m_nRequestTo;
list m_lstSegments;
BOOL ParseUrl(LPCTSTR szUrl);
BOOL Redirect( LPCTSTR szNewUrl );
BOOL Connect(void);
BOOL SendHttpRequest();
void NewSegment(SEGMENT_S* pstSeg);
};