优化鉴权invoker定义
This commit is contained in:
parent
991715fc93
commit
d375116e6d
|
|
@ -85,7 +85,8 @@ extern const char kBroadcastOnRtspAuth[];
|
||||||
#define BroadcastOnRtspAuthArgs const string &user_name,const bool &must_no_encrypt,const RtspSession::onAuth &invoker
|
#define BroadcastOnRtspAuthArgs const string &user_name,const bool &must_no_encrypt,const RtspSession::onAuth &invoker
|
||||||
|
|
||||||
//鉴权结果回调对象
|
//鉴权结果回调对象
|
||||||
typedef std::function<void(bool success, const string &errMessage)> AuthInvoker;
|
//如果errMessage为空则代表鉴权成功
|
||||||
|
typedef std::function<void(const string &errMessage)> AuthInvoker;
|
||||||
|
|
||||||
//收到rtmp推流事件广播,通过该事件控制推流鉴权
|
//收到rtmp推流事件广播,通过该事件控制推流鉴权
|
||||||
extern const char kBroadcastRtmpPublish[];
|
extern const char kBroadcastRtmpPublish[];
|
||||||
|
|
|
||||||
|
|
@ -206,7 +206,8 @@ inline bool HttpSession::checkLiveFlvStream(){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto onRes = [this,mediaSrc](bool authSuccess,const string &err){
|
auto onRes = [this,mediaSrc](const string &err){
|
||||||
|
bool authSuccess = err.empty();
|
||||||
if(!authSuccess){
|
if(!authSuccess){
|
||||||
sendResponse("401 Unauthorized", makeHttpHeader(true,err.size()),err);
|
sendResponse("401 Unauthorized", makeHttpHeader(true,err.size()),err);
|
||||||
shutdown();
|
shutdown();
|
||||||
|
|
@ -279,23 +280,23 @@ inline bool HttpSession::checkLiveFlvStream(){
|
||||||
};
|
};
|
||||||
|
|
||||||
weak_ptr<HttpSession> weakSelf = dynamic_pointer_cast<HttpSession>(shared_from_this());
|
weak_ptr<HttpSession> weakSelf = dynamic_pointer_cast<HttpSession>(shared_from_this());
|
||||||
Broadcast::AuthInvoker invoker = [weakSelf,onRes](bool authSuccess,const string &err){
|
Broadcast::AuthInvoker invoker = [weakSelf,onRes](const string &err){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
strongSelf->async([weakSelf,onRes,authSuccess,err](){
|
strongSelf->async([weakSelf,onRes,err](){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
onRes(authSuccess,err);
|
onRes(err);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
auto flag = NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastMediaPlayed,m_mediaInfo,invoker);
|
auto flag = NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastMediaPlayed,m_mediaInfo,invoker);
|
||||||
if(!flag){
|
if(!flag){
|
||||||
//该事件无人监听,默认不鉴权
|
//该事件无人监听,默认不鉴权
|
||||||
onRes(true,"");
|
onRes("");
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -134,12 +134,13 @@ void RtmpSession::onCmd_publish(AMFDecoder &dec) {
|
||||||
dec.load<AMFValue>();/* NULL */
|
dec.load<AMFValue>();/* NULL */
|
||||||
m_mediaInfo.parse(m_strTcUrl + "/" + dec.load<std::string>());
|
m_mediaInfo.parse(m_strTcUrl + "/" + dec.load<std::string>());
|
||||||
|
|
||||||
auto onRes = [this](bool authSuccess,const string &err){
|
auto onRes = [this](const string &err){
|
||||||
auto src = dynamic_pointer_cast<RtmpMediaSource>(MediaSource::find(RTMP_SCHEMA,
|
auto src = dynamic_pointer_cast<RtmpMediaSource>(MediaSource::find(RTMP_SCHEMA,
|
||||||
m_mediaInfo.m_vhost,
|
m_mediaInfo.m_vhost,
|
||||||
m_mediaInfo.m_app,
|
m_mediaInfo.m_app,
|
||||||
m_mediaInfo.m_streamid,
|
m_mediaInfo.m_streamid,
|
||||||
false));
|
false));
|
||||||
|
bool authSuccess = err.empty();
|
||||||
bool ok = (!src && !m_pPublisherSrc && authSuccess);
|
bool ok = (!src && !m_pPublisherSrc && authSuccess);
|
||||||
AMFValue status(AMF_OBJECT);
|
AMFValue status(AMF_OBJECT);
|
||||||
status.set("level", ok ? "status" : "error");
|
status.set("level", ok ? "status" : "error");
|
||||||
|
|
@ -162,17 +163,17 @@ void RtmpSession::onCmd_publish(AMFDecoder &dec) {
|
||||||
};
|
};
|
||||||
|
|
||||||
weak_ptr<RtmpSession> weakSelf = dynamic_pointer_cast<RtmpSession>(shared_from_this());
|
weak_ptr<RtmpSession> weakSelf = dynamic_pointer_cast<RtmpSession>(shared_from_this());
|
||||||
Broadcast::AuthInvoker invoker = [weakSelf,onRes](bool success,const string &err){
|
Broadcast::AuthInvoker invoker = [weakSelf,onRes](const string &err){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
strongSelf->async([weakSelf,onRes,success,err](){
|
strongSelf->async([weakSelf,onRes,err](){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
onRes(success,err);
|
onRes(err);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
auto flag = NoticeCenter::Instance().emitEvent(Config::Broadcast::kBroadcastRtmpPublish,
|
auto flag = NoticeCenter::Instance().emitEvent(Config::Broadcast::kBroadcastRtmpPublish,
|
||||||
|
|
@ -180,7 +181,7 @@ void RtmpSession::onCmd_publish(AMFDecoder &dec) {
|
||||||
invoker);
|
invoker);
|
||||||
if(!flag){
|
if(!flag){
|
||||||
//该事件无人监听,默认鉴权成功
|
//该事件无人监听,默认鉴权成功
|
||||||
onRes(true,"");
|
onRes("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -194,12 +195,13 @@ void RtmpSession::onCmd_deleteStream(AMFDecoder &dec) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RtmpSession::doPlay(AMFDecoder &dec){
|
void RtmpSession::doPlay(AMFDecoder &dec){
|
||||||
auto onRes = [this](bool authSuccess,const string &err) {
|
auto onRes = [this](const string &err) {
|
||||||
auto src = dynamic_pointer_cast<RtmpMediaSource>(MediaSource::find(RTMP_SCHEMA,
|
auto src = dynamic_pointer_cast<RtmpMediaSource>(MediaSource::find(RTMP_SCHEMA,
|
||||||
m_mediaInfo.m_vhost,
|
m_mediaInfo.m_vhost,
|
||||||
m_mediaInfo.m_app,
|
m_mediaInfo.m_app,
|
||||||
m_mediaInfo.m_streamid,
|
m_mediaInfo.m_streamid,
|
||||||
true));
|
true));
|
||||||
|
bool authSuccess = err.empty();
|
||||||
bool ok = (src.operator bool() && authSuccess);
|
bool ok = (src.operator bool() && authSuccess);
|
||||||
if(ok){
|
if(ok){
|
||||||
ok = ok && src->ready();
|
ok = ok && src->ready();
|
||||||
|
|
@ -297,23 +299,23 @@ void RtmpSession::doPlay(AMFDecoder &dec){
|
||||||
};
|
};
|
||||||
|
|
||||||
weak_ptr<RtmpSession> weakSelf = dynamic_pointer_cast<RtmpSession>(shared_from_this());
|
weak_ptr<RtmpSession> weakSelf = dynamic_pointer_cast<RtmpSession>(shared_from_this());
|
||||||
Broadcast::AuthInvoker invoker = [weakSelf,onRes](bool authSuccess,const string &err){
|
Broadcast::AuthInvoker invoker = [weakSelf,onRes](const string &err){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
strongSelf->async([weakSelf,onRes,authSuccess,err](){
|
strongSelf->async([weakSelf,onRes,err](){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
onRes(authSuccess,err);
|
onRes(err);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
auto flag = NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastMediaPlayed,m_mediaInfo,invoker);
|
auto flag = NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastMediaPlayed,m_mediaInfo,invoker);
|
||||||
if(!flag){
|
if(!flag){
|
||||||
//该事件无人监听,默认不鉴权
|
//该事件无人监听,默认不鉴权
|
||||||
onRes(true,"");
|
onRes("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void RtmpSession::onCmd_play2(AMFDecoder &dec) {
|
void RtmpSession::onCmd_play2(AMFDecoder &dec) {
|
||||||
|
|
|
||||||
|
|
@ -649,7 +649,8 @@ bool RtspSession::handleReq_Play() {
|
||||||
send_SessionNotFound();
|
send_SessionNotFound();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
auto onRes = [this](bool authSuccess,const string &err){
|
auto onRes = [this](const string &err){
|
||||||
|
bool authSuccess = err.empty();
|
||||||
char response[2 * 1024];
|
char response[2 * 1024];
|
||||||
m_pcBuf = response;
|
m_pcBuf = response;
|
||||||
if(!authSuccess && m_bFirstPlay){
|
if(!authSuccess && m_bFirstPlay){
|
||||||
|
|
@ -742,23 +743,23 @@ bool RtspSession::handleReq_Play() {
|
||||||
};
|
};
|
||||||
|
|
||||||
weak_ptr<RtspSession> weakSelf = dynamic_pointer_cast<RtspSession>(shared_from_this());
|
weak_ptr<RtspSession> weakSelf = dynamic_pointer_cast<RtspSession>(shared_from_this());
|
||||||
Broadcast::AuthInvoker invoker = [weakSelf,onRes](bool authSuccess,const string &err){
|
Broadcast::AuthInvoker invoker = [weakSelf,onRes](const string &err){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
strongSelf->async([weakSelf,onRes,authSuccess,err](){
|
strongSelf->async([weakSelf,onRes,err](){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
onRes(authSuccess,err);
|
onRes(err);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
auto flag = NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastMediaPlayed,m_mediaInfo,invoker);
|
auto flag = NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastMediaPlayed,m_mediaInfo,invoker);
|
||||||
if(!flag){
|
if(!flag){
|
||||||
//该事件无人监听,默认不鉴权
|
//该事件无人监听,默认不鉴权
|
||||||
onRes(true,"");
|
onRes("");
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue