去除编译警告,修复bug

This commit is contained in:
xia-chu
2021-01-19 16:05:38 +08:00
parent 5d752c89b5
commit f63b2b1863
51 changed files with 113 additions and 107 deletions

View File

@@ -153,7 +153,7 @@ void HlsPlayer::onParsed(bool is_m3u8_inner,int64_t sequence,const map<int,ts_se
}
}
size_t HlsPlayer::onResponseHeader(const string &status, const HttpClient::HttpHeader &headers) {
ssize_t HlsPlayer::onResponseHeader(const string &status, const HttpClient::HttpHeader &headers) {
if (status != "200" && status != "206") {
//失败
teardown_l(SockException(Err_shutdown, StrPrinter << "bad http status code:" + status));

View File

@@ -63,7 +63,7 @@ private:
* @return 返回后续content的长度-1:后续数据全是content>=0:固定长度content
* 需要指出的是在http头中带有Content-Length字段时该返回值无效
*/
size_t onResponseHeader(const string &status,const HttpHeader &headers) override;
ssize_t onResponseHeader(const string &status,const HttpHeader &headers) override;
/**
* 收到http conten数据
* @param buf 数据指针
@@ -71,7 +71,7 @@ private:
* @param recvedSize 已收数据大小(包含本次数据大小),当其等于totalSize时将触发onResponseCompleted回调
* @param totalSize 总数据大小
*/
void onResponseBody(const char *buf,size_t size,size_t recvedSize,size_t totalSize) override;
void onResponseBody(const char *buf,size_t size,size_t recvedSize, size_t totalSize) override;
/**
* 接收http回复完毕,

View File

@@ -27,12 +27,12 @@ HttpStringBody::HttpStringBody(const string &str){
_str = str;
}
size_t HttpStringBody::remainSize() {
ssize_t HttpStringBody::remainSize() {
return _str.size() - _offset;
}
Buffer::Ptr HttpStringBody::readData(size_t size) {
size = MIN(remainSize(),size);
size = MIN((size_t)remainSize(), size);
if(!size){
//没有剩余字节了
return nullptr;
@@ -121,19 +121,19 @@ private:
size_t _size;
};
size_t HttpFileBody::remainSize() {
ssize_t HttpFileBody::remainSize() {
return _max_size - _offset;
}
Buffer::Ptr HttpFileBody::readData(size_t size) {
size = MIN(remainSize(),size);
size = MIN((size_t)remainSize(),size);
if(!size){
//没有剩余字节了
return nullptr;
}
if(!_map_addr){
//fread模式
size_t iRead;
ssize_t iRead;
auto ret = _pool.obtain();
ret->setCapacity(size + 1);
do{
@@ -180,7 +180,7 @@ HttpMultiFormBody::HttpMultiFormBody(const HttpArgs &args,const string &filePath
_totalSize = _bodyPrefix.size() + _bodySuffix.size() + _fileBody->remainSize();
}
size_t HttpMultiFormBody::remainSize() {
ssize_t HttpMultiFormBody::remainSize() {
return _totalSize - _offset;
}

View File

@@ -40,7 +40,7 @@ public:
/**
* 剩余数据大小,如果返回-1, 那么就不设置content-length
*/
virtual size_t remainSize() { return 0;};
virtual ssize_t remainSize() { return 0;};
/**
* 读取一定字节数返回大小可能小于size
@@ -70,7 +70,7 @@ public:
typedef std::shared_ptr<HttpStringBody> Ptr;
HttpStringBody(const string &str);
virtual ~HttpStringBody(){}
size_t remainSize() override;
ssize_t remainSize() override;
Buffer::Ptr readData(size_t size) override ;
private:
@@ -95,7 +95,7 @@ public:
HttpFileBody(const string &file_path);
~HttpFileBody(){};
size_t remainSize() override ;
ssize_t remainSize() override ;
Buffer::Ptr readData(size_t size) override;
private:
@@ -126,7 +126,7 @@ public:
*/
HttpMultiFormBody(const HttpArgs &args,const string &filePath,const string &boundary = "0xKhTmLbOuNdArY");
virtual ~HttpMultiFormBody(){}
size_t remainSize() override ;
ssize_t remainSize() override ;
Buffer::Ptr readData(size_t size) override;
public:

View File

@@ -25,7 +25,7 @@ void HttpChunkedSplitter::onRecvContent(const char *data, size_t len) {
onRecvChunk(data,len - 2);
}
size_t HttpChunkedSplitter::onRecvHeader(const char *data, size_t len) {
ssize_t HttpChunkedSplitter::onRecvHeader(const char *data, size_t len) {
string str(data,len - 2);
int ret;
sscanf(str.data(),"%X",&ret);

View File

@@ -29,7 +29,7 @@ public:
~HttpChunkedSplitter() override {} ;
protected:
size_t onRecvHeader(const char *data,size_t len) override;
ssize_t onRecvHeader(const char *data,size_t len) override;
void onRecvContent(const char *data,size_t len) override;
const char *onSearchPacketTail(const char *data,size_t len) override;

View File

@@ -129,7 +129,7 @@ void HttpClient::onErr(const SockException &ex) {
onDisconnect(ex);
}
size_t HttpClient::onRecvHeader(const char *data, size_t len) {
ssize_t HttpClient::onRecvHeader(const char *data, size_t len) {
_parser.Parse(data);
if(_parser.Url() == "302" || _parser.Url() == "301"){
auto newUrl = _parser["Location"];
@@ -159,7 +159,7 @@ size_t HttpClient::onRecvHeader(const char *data, size_t len) {
_chunkedSplitter = std::make_shared<HttpChunkedSplitter>([this](const char *data,size_t len){
if(len > 0){
auto recvedBodySize = _recvedBodySize + len;
onResponseBody(data, len, recvedBodySize, INT64_MAX);
onResponseBody(data, len, recvedBodySize, SIZE_MAX);
_recvedBodySize = recvedBodySize;
}else{
onResponseCompleted_l();
@@ -188,14 +188,14 @@ void HttpClient::onRecvContent(const char *data, size_t len) {
}
auto recvedBodySize = _recvedBodySize + len;
if(_totalBodySize < 0){
//不限长度的content,最大支持INT64_MAX个字节
onResponseBody(data, len, recvedBodySize, INT64_MAX);
//不限长度的content,最大支持SIZE_MAX个字节
onResponseBody(data, len, recvedBodySize, SIZE_MAX);
_recvedBodySize = recvedBodySize;
return;
}
//固定长度的content
if ( recvedBodySize < _totalBodySize ) {
if (recvedBodySize < (size_t)_totalBodySize ) {
//content还未接收完毕
onResponseBody(data, len, recvedBodySize, _totalBodySize);
_recvedBodySize = recvedBodySize;
@@ -204,7 +204,7 @@ void HttpClient::onRecvContent(const char *data, size_t len) {
//content接收完毕
onResponseBody(data, _totalBodySize - _recvedBodySize, _totalBodySize, _totalBodySize);
bool biggerThanExpected = recvedBodySize > _totalBodySize;
bool biggerThanExpected = recvedBodySize > (size_t)_totalBodySize;
onResponseCompleted_l();
if(biggerThanExpected) {
//声明的content数据比真实的小那么我们只截取前面部分的并断开链接

View File

@@ -110,11 +110,11 @@ protected:
* @return 返回后续content的长度-1:后续数据全是content>=0:固定长度content
* 需要指出的是在http头中带有Content-Length字段时该返回值无效
*/
virtual size_t onResponseHeader(const string &status,const HttpHeader &headers){
virtual ssize_t onResponseHeader(const string &status,const HttpHeader &headers){
DebugL << status;
//无Content-Length字段时默认后面全是content
return -1;
};
}
/**
* 收到http conten数据
@@ -123,9 +123,9 @@ protected:
* @param recvedSize 已收数据大小(包含本次数据大小),当其等于totalSize时将触发onResponseCompleted回调
* @param totalSize 总数据大小
*/
virtual void onResponseBody(const char *buf,size_t size,size_t recvedSize,size_t totalSize){
DebugL << size << " " << recvedSize << " " << totalSize;
};
virtual void onResponseBody(const char *buf, size_t size, size_t recvedSize, size_t totalSize) {
DebugL << size << " " << recvedSize << " " << totalSize;
}
/**
* 接收http回复完毕,
@@ -149,7 +149,7 @@ protected:
virtual bool onRedirectUrl(const string &url,bool temporary){ return true;};
//HttpRequestSplitter override
size_t onRecvHeader(const char *data,size_t len) override;
ssize_t onRecvHeader(const char *data,size_t len) override;
void onRecvContent(const char *data,size_t len) override;
protected:
@@ -174,7 +174,7 @@ private:
string _path;
//recv
size_t _recvedBodySize;
size_t _totalBodySize;
ssize_t _totalBodySize;
Parser _parser;
string _lastHost;
Ticker _aliveTicker;

View File

@@ -47,7 +47,7 @@ void HttpDownloader::startDownload(const string& url, const string& filePath,boo
sendRequest(url,timeOutSecond);
}
size_t HttpDownloader::onResponseHeader(const string& status,const HttpHeader& headers) {
ssize_t HttpDownloader::onResponseHeader(const string& status,const HttpHeader& headers) {
if(status != "200" && status != "206"){
//失败
shutdown(SockException(Err_shutdown,StrPrinter << "Http Status:" << status));

View File

@@ -31,7 +31,7 @@ public:
_onResult = cb;
}
private:
size_t onResponseHeader(const string &status, const HttpHeader &headers) override;
ssize_t onResponseHeader(const string &status, const HttpHeader &headers) override;
void onResponseBody(const char *buf, size_t size, size_t recvedSize, size_t totalSize) override;
void onResponseCompleted() override;
void onDisconnect(const SockException &ex) override;

View File

@@ -44,7 +44,7 @@ void HttpRequestSplitter::input(const char *data,size_t len) {
}
//_content_len == 0这是请求头
const char *header_ptr = ptr;
auto header_size = index - ptr;
ssize_t header_size = index - ptr;
ptr = index;
_remain_data_size = len - (ptr - data);
_content_len = onRecvHeader(header_ptr, header_size);
@@ -71,7 +71,7 @@ void HttpRequestSplitter::input(const char *data,size_t len) {
//已经找到http头了
if(_content_len > 0){
//数据按照固定长度content处理
if(_remain_data_size < _content_len){
if(_remain_data_size < (size_t)_content_len){
//数据不够,缓存定位到剩余数据部分
_remain_data.assign(ptr, _remain_data_size);
return;
@@ -101,7 +101,7 @@ void HttpRequestSplitter::input(const char *data,size_t len) {
_remain_data.clear();
}
void HttpRequestSplitter::setContentLen(size_t content_len) {
void HttpRequestSplitter::setContentLen(ssize_t content_len) {
_content_len = content_len;
}

View File

@@ -41,7 +41,7 @@ protected:
* 0 : 代表为后面数据还是请求头,
* >0 : 代表后面数据为固定长度content,此时将缓存content并等到所有content接收完毕一次性通过onRecvContent函数回调出去
*/
virtual size_t onRecvHeader(const char *data,size_t len) = 0;
virtual ssize_t onRecvHeader(const char *data,size_t len) = 0;
/**
* 收到content分片或全部数据
@@ -62,7 +62,7 @@ protected:
/**
* 设置content len
*/
void setContentLen(size_t content_len);
void setContentLen(ssize_t content_len);
/**
* 恢复初始设置
@@ -75,7 +75,7 @@ protected:
size_t remainDataSize();
private:
size_t _content_len = 0;
ssize_t _content_len = 0;
size_t _remain_data_size = 0;
BufferLikeString _remain_data;
};

View File

@@ -19,7 +19,7 @@ HttpRequester::~HttpRequester(){
}
size_t HttpRequester::onResponseHeader(const string &status,const HttpHeader &headers) {
ssize_t HttpRequester::onResponseHeader(const string &status,const HttpHeader &headers) {
_strRecvBody.clear();
//无Content-Length字段时默认后面没有content
return 0;

View File

@@ -26,7 +26,7 @@ public:
void startRequester(const string &url,const HttpRequesterResult &onResult,float timeOutSecond = 10);
void clear() override ;
private:
size_t onResponseHeader(const string &status,const HttpHeader &headers) override;
ssize_t onResponseHeader(const string &status,const HttpHeader &headers) override;
void onResponseBody(const char *buf,size_t size,size_t recvedSize,size_t totalSize) override;
void onResponseCompleted() override;
void onDisconnect(const SockException &ex) override;

View File

@@ -31,15 +31,15 @@ HttpSession::~HttpSession() {
TraceP(this);
}
void HttpSession::Handle_Req_HEAD(size_t &content_len){
void HttpSession::Handle_Req_HEAD(ssize_t &content_len){
//暂时全部返回200 OK因为HTTP GET存在按需生成流的操作所以不能按照HTTP GET的流程返回
//如果直接返回404那么又会导致按需生成流的逻辑失效所以HTTP HEAD在静态文件或者已存在资源时才有效
//对于按需生成流的直播场景并不适用
sendResponse(200, true);
}
size_t HttpSession::onRecvHeader(const char *header,size_t len) {
typedef void (HttpSession::*HttpCMDHandle)(size_t &);
ssize_t HttpSession::onRecvHeader(const char *header,size_t len) {
typedef void (HttpSession::*HttpCMDHandle)(ssize_t &);
static unordered_map<string, HttpCMDHandle> s_func_map;
static onceToken token([]() {
s_func_map.emplace("GET",&HttpSession::Handle_Req_GET);
@@ -61,7 +61,7 @@ size_t HttpSession::onRecvHeader(const char *header,size_t len) {
_origin = _parser["Origin"];
//默认后面数据不是content而是header
size_t content_len = 0;
ssize_t content_len = 0;
auto &fun = it->second;
try {
(this->*fun)(content_len);
@@ -353,11 +353,11 @@ bool HttpSession::checkLiveStreamFlv(const function<void()> &cb){
});
}
void HttpSession::Handle_Req_GET(size_t &content_len) {
void HttpSession::Handle_Req_GET(ssize_t &content_len) {
Handle_Req_GET_l(content_len, true);
}
void HttpSession::Handle_Req_GET_l(size_t &content_len, bool sendBody) {
void HttpSession::Handle_Req_GET_l(ssize_t &content_len, bool sendBody) {
//先看看是否为WebSocket请求
if (checkWebSocket()) {
content_len = -1;
@@ -506,7 +506,7 @@ void HttpSession::sendResponse(int code,
GET_CONFIG(uint32_t,keepAliveSec,Http::kKeepAliveSecond);
//body默认为空
size_t size = 0;
ssize_t size = 0;
if (body && body->remainSize()) {
//有body获取body大小
size = body->remainSize();
@@ -515,7 +515,7 @@ void HttpSession::sendResponse(int code,
if(no_content_length){
//http-flv直播是Keep-Alive类型
bClose = false;
}else if(size >= INT64_MAX || size < 0 ){
}else if(size >= SIZE_MAX || size < 0 ){
//不固定长度的body那么发送完body后应该关闭socket以便浏览器做下载完毕的判断
bClose = true;
}
@@ -537,7 +537,7 @@ void HttpSession::sendResponse(int code,
headerOut.emplace(kAccessControlAllowCredentials, "true");
}
if(!no_content_length && size >= 0 && size < INT64_MAX){
if(!no_content_length && size >= 0 && size < SIZE_MAX){
//文件长度为固定值,且不是http-flv强制设置Content-Length
headerOut[kContentLength] = to_string(size);
}
@@ -642,10 +642,10 @@ bool HttpSession::emitHttpEvent(bool doInvoke){
return consumed;
}
void HttpSession::Handle_Req_POST(size_t &content_len) {
void HttpSession::Handle_Req_POST(ssize_t &content_len) {
GET_CONFIG(size_t,maxReqSize,Http::kMaxReqSize);
size_t totalContentLen = _parser["Content-Length"].empty() ? -1 : atoll(_parser["Content-Length"].data());
ssize_t totalContentLen = _parser["Content-Length"].empty() ? -1 : atoll(_parser["Content-Length"].data());
if(totalContentLen == 0){
//content为空
@@ -654,7 +654,7 @@ void HttpSession::Handle_Req_POST(size_t &content_len) {
return;
}
if(totalContentLen > 0 && totalContentLen < maxReqSize ){
if(totalContentLen > 0 && (size_t)totalContentLen < maxReqSize ){
//返回固定长度的content
content_len = totalContentLen;
auto parserCopy = _parser;
@@ -671,7 +671,7 @@ void HttpSession::Handle_Req_POST(size_t &content_len) {
return false;
};
}else{
//返回不固定长度的content
//返回不固定长度的content或者超过长度限制的content
content_len = -1;
auto parserCopy = _parser;
std::shared_ptr<size_t> recvedContentLen = std::make_shared<size_t>(0);
@@ -679,10 +679,16 @@ void HttpSession::Handle_Req_POST(size_t &content_len) {
_contentCallBack = [this,parserCopy,totalContentLen,recvedContentLen,bClose](const char *data,size_t len){
*(recvedContentLen) += len;
if (totalContentLen < 0) {
//不固定长度的content,源源不断接收数据
onRecvUnlimitedContent(parserCopy, data, len, SIZE_MAX, *(recvedContentLen));
return true;
}
//长度超过限制的content
onRecvUnlimitedContent(parserCopy,data,len,totalContentLen,*(recvedContentLen));
if(*(recvedContentLen) < totalContentLen){
if(*(recvedContentLen) < (size_t)totalContentLen){
//数据还没接收完毕
//_contentCallBack是可持续的后面还要处理后续content数据
return true;

View File

@@ -57,7 +57,7 @@ protected:
std::shared_ptr<FlvMuxer> getSharedPtr() override;
//HttpRequestSplitter override
size_t onRecvHeader(const char *data,size_t len) override;
ssize_t onRecvHeader(const char *data,size_t len) override;
void onRecvContent(const char *data,size_t len) override;
/**
@@ -101,10 +101,10 @@ protected:
void onWebSocketDecodeComplete(const WebSocketHeader &header_in) override;
private:
void Handle_Req_GET(size_t &content_len);
void Handle_Req_GET_l(size_t &content_len, bool sendBody);
void Handle_Req_POST(size_t &content_len);
void Handle_Req_HEAD(size_t &content_len);
void Handle_Req_GET(ssize_t &content_len);
void Handle_Req_GET_l(ssize_t &content_len, bool sendBody);
void Handle_Req_POST(ssize_t &content_len);
void Handle_Req_HEAD(ssize_t &content_len);
bool checkLiveStream(const string &schema, const string &url_suffix, const function<void(const MediaSource::Ptr &src)> &cb);

View File

@@ -19,7 +19,7 @@ HttpTSPlayer::HttpTSPlayer(const EventPoller::Ptr &poller, bool split_ts){
HttpTSPlayer::~HttpTSPlayer() {}
size_t HttpTSPlayer::onResponseHeader(const string &status, const HttpClient::HttpHeader &headers) {
ssize_t HttpTSPlayer::onResponseHeader(const string &status, const HttpClient::HttpHeader &headers) {
_status = status;
if (status != "200" && status != "206") {
//http状态码不符合预期

View File

@@ -33,7 +33,7 @@ public:
protected:
///HttpClient override///
size_t onResponseHeader(const string &status,const HttpHeader &headers) override;
ssize_t onResponseHeader(const string &status,const HttpHeader &headers) override;
void onResponseBody(const char *buf,size_t size,size_t recvedSize,size_t totalSize) override;
void onResponseCompleted() override;
void onDisconnect(const SockException &ex) override ;

View File

@@ -32,7 +32,7 @@ class HttpWsClient;
template <typename ClientType,WebSocketHeader::Type DataType>
class ClientTypeImp : public ClientType {
public:
typedef function<size_t (const Buffer::Ptr &buf)> onBeforeSendCB;
typedef function<ssize_t (const Buffer::Ptr &buf)> onBeforeSendCB;
friend class HttpWsClient<ClientType,DataType>;
template<typename ...ArgsType>
@@ -43,7 +43,7 @@ protected:
/**
* 发送前拦截并打包为websocket协议
*/
size_t send(Buffer::Ptr buf) override{
ssize_t send(Buffer::Ptr buf) override{
if(_beforeSendCB){
return _beforeSendCB(buf);
}
@@ -120,7 +120,7 @@ protected:
* @return 返回后续content的长度-1:后续数据全是content>=0:固定长度content
* 需要指出的是在http头中带有Content-Length字段时该返回值无效
*/
size_t onResponseHeader(const string &status,const HttpHeader &headers) override {
ssize_t onResponseHeader(const string &status,const HttpHeader &headers) override {
if(status == "101"){
auto Sec_WebSocket_Accept = encodeBase64(SHA1::encode_bin(_Sec_WebSocket_Key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"));
if(Sec_WebSocket_Accept == const_cast<HttpHeader &>(headers)["Sec-WebSocket-Accept"]){

View File

@@ -19,7 +19,7 @@
*/
class SendInterceptor{
public:
typedef function<size_t (const Buffer::Ptr &buf)> onBeforeSendCB;
typedef function<ssize_t (const Buffer::Ptr &buf)> onBeforeSendCB;
SendInterceptor() = default;
virtual ~SendInterceptor() = default;
virtual void setOnBeforeSendCB(const onBeforeSendCB &cb) = 0;
@@ -53,7 +53,7 @@ protected:
* @param buf 需要截取的数据
* @return 数据字节数
*/
size_t send(Buffer::Ptr buf) override {
ssize_t send(Buffer::Ptr buf) override {
if (_beforeSendCB) {
return _beforeSendCB(buf);
}

View File

@@ -140,7 +140,7 @@ begin_decode:
void WebSocketSplitter::onPayloadData(uint8_t *data, size_t len) {
if(_mask_flag){
for(int i = 0; i < len ; ++i,++data){
for(size_t i = 0; i < len ; ++i,++data){
*(data) ^= _mask[(i + _mask_offset) % 4];
}
_mask_offset = (_mask_offset + len) % 4;
@@ -184,7 +184,7 @@ void WebSocketSplitter::encode(const WebSocketHeader &header,const Buffer::Ptr &
if(len > 0){
if(mask_flag){
uint8_t *ptr = (uint8_t*)buffer->data();
for(int i = 0; i < len ; ++i,++ptr){
for(size_t i = 0; i < len ; ++i,++ptr){
*(ptr) ^= header._mask[i % 4];
}
}