📄 chttpsvr.h
字号:
/*******************************************************************
* cHttpsvr.h
* DESCRIPTION:http-server类的头文件
*
* AUTHOR:yyc---yycmail@263.sina.com
* http://yycnet.yeah.net
* HISTORY:
*
* DATE:2002-6-28
*
*******************************************************************/
#ifndef __CHTTPSVR_H__
#define __CHTTPSVR_H__
#include "cSocket.h"
#include "cHttpreq.h"
#include "cMap.h"
namespace yyc
{
//浏览器请求用户自定义处理函数声明
//如果函数返回-1,则不关闭浏览器socket连接,等待浏览器关闭
typedef int(FUNC_DOREQ)(cSocket * psock,cHttpreq * phttpreq);
class cHttpsvr
{
private:
cSocket *m_pSocksvr;//侦听cSocket服务对象
int m_iPort;//侦听端口
int m_iStatus;//cHttpsvr状态 0-未启动 1-侦听服务启动
//保存URL和此URL的处理函数映射
std::map<std::string,FUNC_DOREQ *> m_mapUrlfunc;
//保存每个csocket对象和此cSocket对象接收的http请求数据对象映射
cMap<cSocket *,cHttpreq> m_reqmap;
private:
//处理cSocket对象的接收数据
static int do_browserreq(char *buf,int len,cSocket *psock);
public:
//发送文本文件到浏览器
static void send_text_file(cSocket *psock,const char * filename);
//发送二进制文件
static void send_file(cSocket *psock,const char * filename);
public:
enum
{
HTTPSVR_STOP,
HTTPSVR_START
};
cHttpsvr(){
m_iPort=0;
m_pSocksvr=NULL;
m_pSocksvr=new cSocket;
if(m_pSocksvr!=NULL){
m_pSocksvr->set_pfDodata(&do_browserreq);
m_pSocksvr->set_pArgs((void *)this);
}
}
~cHttpsvr(){
stop();
if (m_pSocksvr!=NULL)
delete m_pSocksvr;
}
/**
* 启动http服务
*
* @param port_p http服务端口,如果为0,则系统自动分配
*
* @return http服务侦听端口,<0发生错误
*/
int start(int iPort);
int stop();
int add_url(const char * url,FUNC_DOREQ * pfunc);
//得到某个url的处理地址
FUNC_DOREQ *get_url_addr(const char *url);
int del_url(const char * url);
};
}//?namespace yyc
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -