mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-26 04:31:37 +08:00
新增Https支持
This commit is contained in:
parent
52e25fc08c
commit
6ff60dd56e
@ -84,6 +84,7 @@ HttpSession::HttpSession(const std::shared_ptr<ThreadPool> &pTh, const Socket::P
|
|||||||
static onceToken token([]() {
|
static onceToken token([]() {
|
||||||
g_mapCmdIndex.emplace("GET",&HttpSession::Handle_Req_GET);
|
g_mapCmdIndex.emplace("GET",&HttpSession::Handle_Req_GET);
|
||||||
g_mapCmdIndex.emplace("POST",&HttpSession::Handle_Req_POST);
|
g_mapCmdIndex.emplace("POST",&HttpSession::Handle_Req_POST);
|
||||||
|
g_mapCmdIndex.emplace("OPTIONS",&HttpSession::Handle_Req_POST);
|
||||||
}, nullptr);
|
}, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,15 +92,18 @@ HttpSession::~HttpSession() {
|
|||||||
//DebugL;
|
//DebugL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HttpSession::onRecv(const Socket::Buffer::Ptr&pBuf) {
|
void HttpSession::onRecv(const Socket::Buffer::Ptr &pBuf) {
|
||||||
|
onRecv(pBuf->data(),pBuf->size());
|
||||||
|
}
|
||||||
|
void HttpSession::onRecv(const char *data,int size){
|
||||||
static uint32_t reqSize = mINI::Instance()[Config::Http::kMaxReqSize].as<uint32_t>();
|
static uint32_t reqSize = mINI::Instance()[Config::Http::kMaxReqSize].as<uint32_t>();
|
||||||
m_ticker.resetTime();
|
m_ticker.resetTime();
|
||||||
if (m_strRcvBuf.size() + pBuf->size() >= reqSize) {
|
if (m_strRcvBuf.size() + size >= reqSize) {
|
||||||
WarnL << "接收缓冲区溢出:" << m_strRcvBuf.size() + pBuf->size() << "," << reqSize;
|
WarnL << "接收缓冲区溢出:" << m_strRcvBuf.size() + size << "," << reqSize;
|
||||||
shutdown();
|
shutdown();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_strRcvBuf.append(pBuf->data(), pBuf->size());
|
m_strRcvBuf.append(data, size);
|
||||||
size_t index;
|
size_t index;
|
||||||
string onePkt;
|
string onePkt;
|
||||||
while ((index = m_strRcvBuf.find("\r\n\r\n")) != std::string::npos) {
|
while ((index = m_strRcvBuf.find("\r\n\r\n")) != std::string::npos) {
|
||||||
|
@ -31,9 +31,11 @@ public:
|
|||||||
HttpSession(const std::shared_ptr<ThreadPool> &pTh, const Socket::Ptr &pSock);
|
HttpSession(const std::shared_ptr<ThreadPool> &pTh, const Socket::Ptr &pSock);
|
||||||
virtual ~HttpSession();
|
virtual ~HttpSession();
|
||||||
|
|
||||||
void onRecv(const Socket::Buffer::Ptr &) override;
|
virtual void onRecv(const Socket::Buffer::Ptr &) override;
|
||||||
void onError(const SockException &err) override;
|
virtual void onError(const SockException &err) override;
|
||||||
void onManager() override;
|
virtual void onManager() override;
|
||||||
|
protected:
|
||||||
|
void onRecv(const char *data,int size);
|
||||||
private:
|
private:
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
54
src/Http/HttpsSession.h
Normal file
54
src/Http/HttpsSession.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* HttpsSession.h
|
||||||
|
*
|
||||||
|
* Created on: 2017年4月19日
|
||||||
|
* Author: xzl
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRC_HTTP_HTTPSSESSION_H_
|
||||||
|
#define SRC_HTTP_HTTPSSESSION_H_
|
||||||
|
|
||||||
|
#include "HttpSession.h"
|
||||||
|
#include "Util/SSLBox.h"
|
||||||
|
#include "Util/TimeTicker.h"
|
||||||
|
using namespace ZL::Util;
|
||||||
|
|
||||||
|
namespace ZL {
|
||||||
|
namespace Http {
|
||||||
|
|
||||||
|
class HttpsSession: public HttpSession {
|
||||||
|
public:
|
||||||
|
HttpsSession(const std::shared_ptr<ThreadPool> &pTh, const Socket::Ptr &pSock):
|
||||||
|
HttpSession(pTh,pSock){
|
||||||
|
m_sslBox.setOnEncData([&](const char *data, uint32_t len){
|
||||||
|
HttpSession::send(data,len);
|
||||||
|
});
|
||||||
|
m_sslBox.setOnDecData([&](const char *data, uint32_t len){
|
||||||
|
HttpSession::onRecv(data,len);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
virtual ~HttpsSession(){
|
||||||
|
//m_sslBox.shutdown();
|
||||||
|
}
|
||||||
|
void onRecv(const Socket::Buffer::Ptr &pBuf) override{
|
||||||
|
TimeTicker();
|
||||||
|
m_sslBox.onRecv(pBuf->data(), pBuf->size());
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
virtual int send(const string &buf) override{
|
||||||
|
TimeTicker();
|
||||||
|
m_sslBox.onSend(buf.data(), buf.size());
|
||||||
|
return buf.size();
|
||||||
|
}
|
||||||
|
virtual int send(const char *buf, int size) override{
|
||||||
|
TimeTicker();
|
||||||
|
m_sslBox.onSend(buf, size);
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
SSL_Box m_sslBox;
|
||||||
|
};
|
||||||
|
|
||||||
|
} /* namespace Http */
|
||||||
|
} /* namespace ZL */
|
||||||
|
|
||||||
|
#endif /* SRC_HTTP_HTTPSSESSION_H_ */
|
@ -37,6 +37,9 @@ namespace Http {
|
|||||||
#define HTTP_PORT 80
|
#define HTTP_PORT 80
|
||||||
const char kPort[] = HTTP_FIELD"port";
|
const char kPort[] = HTTP_FIELD"port";
|
||||||
|
|
||||||
|
#define HTTPS_PORT 443
|
||||||
|
extern const char kSSLPort[] = HTTP_FIELD"sslport";
|
||||||
|
|
||||||
//http 文件发送缓存大小
|
//http 文件发送缓存大小
|
||||||
#define HTTP_SEND_BUF_SIZE (64 * 1024)
|
#define HTTP_SEND_BUF_SIZE (64 * 1024)
|
||||||
const char kSendBufSize[] = HTTP_FIELD"sendBufSize";
|
const char kSendBufSize[] = HTTP_FIELD"sendBufSize";
|
||||||
@ -85,6 +88,7 @@ const char kHttpPrefix[] = HTTP_FIELD"httpPrefix";
|
|||||||
|
|
||||||
onceToken token([](){
|
onceToken token([](){
|
||||||
mINI::Instance()[kPort] = HTTP_PORT;
|
mINI::Instance()[kPort] = HTTP_PORT;
|
||||||
|
mINI::Instance()[kSSLPort] = HTTPS_PORT;
|
||||||
mINI::Instance()[kSendBufSize] = HTTP_SEND_BUF_SIZE;
|
mINI::Instance()[kSendBufSize] = HTTP_SEND_BUF_SIZE;
|
||||||
mINI::Instance()[kMaxReqSize] = HTTP_MAX_REQ_SIZE;
|
mINI::Instance()[kMaxReqSize] = HTTP_MAX_REQ_SIZE;
|
||||||
mINI::Instance()[kKeepAliveSecond] = HTTP_KEEP_ALIVE_SECOND;
|
mINI::Instance()[kKeepAliveSecond] = HTTP_KEEP_ALIVE_SECOND;
|
||||||
|
@ -63,6 +63,7 @@ extern const char kReplayCount[];
|
|||||||
////////////HTTP配置///////////
|
////////////HTTP配置///////////
|
||||||
namespace Http {
|
namespace Http {
|
||||||
extern const char kPort[];
|
extern const char kPort[];
|
||||||
|
extern const char kSSLPort[];
|
||||||
//http 文件发送缓存大小
|
//http 文件发送缓存大小
|
||||||
extern const char kSendBufSize[];
|
extern const char kSendBufSize[];
|
||||||
//http 最大请求字节数
|
//http 最大请求字节数
|
||||||
|
6
test.cpp
6
test.cpp
@ -18,6 +18,8 @@
|
|||||||
#include "Poller/EventPoller.hpp"
|
#include "Poller/EventPoller.hpp"
|
||||||
#include "Thread/WorkThreadPool.h"
|
#include "Thread/WorkThreadPool.h"
|
||||||
#include "Http/HttpSession.h"
|
#include "Http/HttpSession.h"
|
||||||
|
#include "Http/HttpsSession.h"
|
||||||
|
#include "Util/SSLBox.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace ZL::Util;
|
using namespace ZL::Util;
|
||||||
@ -35,19 +37,23 @@ int main(int argc,char *argv[]){
|
|||||||
|
|
||||||
Logger::Instance().add(std::make_shared<ConsoleChannel>("stdout", LTrace));
|
Logger::Instance().add(std::make_shared<ConsoleChannel>("stdout", LTrace));
|
||||||
Logger::Instance().setWriter(std::make_shared<AsyncLogWriter>());
|
Logger::Instance().setWriter(std::make_shared<AsyncLogWriter>());
|
||||||
|
SSL_Initor::Instance().loadServerPem((exeDir() + ".HttpServer.pem").data());
|
||||||
|
|
||||||
TcpServer<RtspSession>::Ptr rtspSrv(new TcpServer<RtspSession>());
|
TcpServer<RtspSession>::Ptr rtspSrv(new TcpServer<RtspSession>());
|
||||||
TcpServer<RtmpSession>::Ptr rtmpSrv(new TcpServer<RtmpSession>());
|
TcpServer<RtmpSession>::Ptr rtmpSrv(new TcpServer<RtmpSession>());
|
||||||
TcpServer<HttpSession>::Ptr httpSrv(new TcpServer<HttpSession>());
|
TcpServer<HttpSession>::Ptr httpSrv(new TcpServer<HttpSession>());
|
||||||
|
TcpServer<HttpsSession>::Ptr httpsSrv(new TcpServer<HttpsSession>());
|
||||||
rtspSrv->start(mINI::Instance()[Config::Rtsp::kPort]);
|
rtspSrv->start(mINI::Instance()[Config::Rtsp::kPort]);
|
||||||
rtmpSrv->start(mINI::Instance()[Config::Rtmp::kPort]);
|
rtmpSrv->start(mINI::Instance()[Config::Rtmp::kPort]);
|
||||||
httpSrv->start(mINI::Instance()[Config::Http::kPort]);
|
httpSrv->start(mINI::Instance()[Config::Http::kPort]);
|
||||||
|
httpsSrv->start(mINI::Instance()[Config::Http::kSSLPort]);
|
||||||
|
|
||||||
EventPoller::Instance().runLoop();
|
EventPoller::Instance().runLoop();
|
||||||
|
|
||||||
rtspSrv.reset();
|
rtspSrv.reset();
|
||||||
rtmpSrv.reset();
|
rtmpSrv.reset();
|
||||||
httpSrv.reset();
|
httpSrv.reset();
|
||||||
|
httpsSrv.reset();
|
||||||
static onceToken token(nullptr, []() {
|
static onceToken token(nullptr, []() {
|
||||||
UDPServer::Destory();
|
UDPServer::Destory();
|
||||||
WorkThreadPool::Destory();
|
WorkThreadPool::Destory();
|
||||||
|
Loading…
Reference in New Issue
Block a user