www.pudn.com > NETINFO.rar > http.h
#ifndef _HTTP_H_
#define _HTTP_H_
#include "connect.h"
#include "CollectLine.h"
#define HTTP_HEADER_LINE_BUFFER_SIZE 16384
#define MAX_HTTP_HEADER_LINE 8192
#define MAX_URL_LENGTH 8192
#define MAX_HOST_LENGTH 256
#define MAX_HTTP_ITEM_LENGTH 256
struct HTTP_HEADER_INFO
{
char method[MAX_HTTP_ITEM_LENGTH];
char url[MAX_URL_LENGTH];
char content_Location[MAX_URL_LENGTH];
char location[MAX_URL_LENGTH];
char http_Version[MAX_HTTP_ITEM_LENGTH];
char status_Code[MAX_HTTP_ITEM_LENGTH];
char host[MAX_HOST_LENGTH];
char connection[MAX_HTTP_ITEM_LENGTH];
char content_Encoding[MAX_HTTP_ITEM_LENGTH];
char content_Length[MAX_HTTP_ITEM_LENGTH];
char content_MainType[MAX_HTTP_ITEM_LENGTH];
char content_SubType[MAX_HTTP_ITEM_LENGTH];
char content_Range[MAX_HTTP_ITEM_LENGTH];
char referer[MAX_URL_LENGTH];
char transfer_Encoding[MAX_HTTP_ITEM_LENGTH];
};
enum HTTP_ANALYSE_HEADER_TYPE
{
HEADER_TYPE_REQUEST_LINE,
HEADER_TYPE_STATUS_LINE,
HEADER_TYPE_NORMAL_HEADER
};
//status means the coming data belongs to what kind of data
enum HTTP_STATUS
{
HTTP_REQUEST_LINE,
HTTP_REQUEST_HEADER,
HTTP_REQUEST_BODY,
HTTP_STATUS_LINE,
HTTP_RESPONSE_HEADER,
HTTP_RESPONSE_BODY
};
BOOL GetHostFromUrl(const char url[], char host[MAX_HOST_LENGTH]);
class CHttpConnection:public CConnection
{
public:
CHttpConnection(const ETHERNET *ether, const IP*ip, NetInfo* pNi, const NETINFO_CALLBACKS *pFuncs, DWORD dwAttachData);
virtual ~CHttpConnection();
virtual BOOL OnData(int sender, int receiver, const BYTE* pData, DWORD length);
virtual enum CONNECT_TYPE GetConnectType(){return HTTP_CONNECT;};
public:
enum HTTP_STATUS m_status;
HTTP_HEADER_INFO m_request;
HTTP_HEADER_INFO m_response;
char m_szLastLine[MAX_HTTP_HEADER_LINE];
CCollectLine m_lineBuf;
};
typedef CHttpConnection* HHTTPCONNECT;
void GetHttpHeader(HHTTPCONNECT hHttpConnect, const HTTP_HEADER_INFO **ppRequest, const HTTP_HEADER_INFO **ppResponse);
#endif