mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-26 04:31:37 +08:00
鉴权失败添加错误描述信息
This commit is contained in:
parent
805a1a945e
commit
cf8b6f6b91
@ -86,7 +86,7 @@ extern const char kBroadcastOnRtspAuth[];
|
|||||||
|
|
||||||
|
|
||||||
//鉴权结果回调对象
|
//鉴权结果回调对象
|
||||||
typedef std::function<void(bool success)> AuthInvoker;
|
typedef std::function<void(bool success, const string &errMessage)> AuthInvoker;
|
||||||
|
|
||||||
//收到rtmp推流事件广播,通过该事件控制推流鉴权
|
//收到rtmp推流事件广播,通过该事件控制推流鉴权
|
||||||
extern const char kBroadcastRtmpPublish[];
|
extern const char kBroadcastRtmpPublish[];
|
||||||
|
@ -202,10 +202,9 @@ inline bool HttpSession::checkLiveFlvStream(){
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto onRes = [this,mediaSrc](bool authSuccess){
|
auto onRes = [this,mediaSrc](bool authSuccess,const string &err){
|
||||||
if(!authSuccess){
|
if(!authSuccess){
|
||||||
string status = "401 Unauthorized";
|
sendResponse("401 Unauthorized", makeHttpHeader(true,err.size()),err);
|
||||||
sendResponse(status.data(), makeHttpHeader(true,status.size()),status);
|
|
||||||
shutdown();
|
shutdown();
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
@ -276,23 +275,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){
|
Broadcast::AuthInvoker invoker = [weakSelf,onRes](bool authSuccess,const string &err){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
strongSelf->async([weakSelf,onRes,authSuccess](){
|
strongSelf->async([weakSelf,onRes,authSuccess,err](){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
onRes(authSuccess);
|
onRes(authSuccess,err);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
auto flag = NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastMediaPlayed,info,invoker);
|
auto flag = NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastMediaPlayed,info,invoker);
|
||||||
if(!flag){
|
if(!flag){
|
||||||
//该事件无人监听,默认不鉴权
|
//该事件无人监听,默认不鉴权
|
||||||
onRes(true);
|
onRes(true,"");
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ 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){
|
auto onRes = [this](bool authSuccess,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,
|
||||||
@ -140,12 +140,12 @@ void RtmpSession::onCmd_publish(AMFDecoder &dec) {
|
|||||||
AMFValue status(AMF_OBJECT);
|
AMFValue status(AMF_OBJECT);
|
||||||
status.set("level", ok ? "status" : "error");
|
status.set("level", ok ? "status" : "error");
|
||||||
status.set("code", ok ? "NetStream.Publish.Start" : (authSuccess ? "NetStream.Publish.BadName" : "NetStream.Publish.BadAuth"));
|
status.set("code", ok ? "NetStream.Publish.Start" : (authSuccess ? "NetStream.Publish.BadName" : "NetStream.Publish.BadAuth"));
|
||||||
status.set("description", ok ? "Started publishing stream." : (authSuccess ? "Already publishing." : "Auth failed"));
|
status.set("description", ok ? "Started publishing stream." : (authSuccess ? "Already publishing." : err.data()));
|
||||||
status.set("clientid", "0");
|
status.set("clientid", "0");
|
||||||
sendReply("onStatus", nullptr, status);
|
sendReply("onStatus", nullptr, status);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
WarnL << "onPublish:"
|
WarnL << "onPublish:"
|
||||||
<< (authSuccess ? "Already publishing:" : "Auth failed:")
|
<< (authSuccess ? "Already publishing:" : err.data())
|
||||||
<< m_mediaInfo.m_vhost << " "
|
<< m_mediaInfo.m_vhost << " "
|
||||||
<< m_mediaInfo.m_app << " "
|
<< m_mediaInfo.m_app << " "
|
||||||
<< m_mediaInfo.m_streamid << endl;
|
<< m_mediaInfo.m_streamid << endl;
|
||||||
@ -157,17 +157,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){
|
Broadcast::AuthInvoker invoker = [weakSelf,onRes](bool success,const string &err){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
strongSelf->async([weakSelf,onRes,success](){
|
strongSelf->async([weakSelf,onRes,success,err](){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
onRes(success);
|
onRes(success,err);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
auto flag = NoticeCenter::Instance().emitEvent(Config::Broadcast::kBroadcastRtmpPublish,
|
auto flag = NoticeCenter::Instance().emitEvent(Config::Broadcast::kBroadcastRtmpPublish,
|
||||||
@ -175,7 +175,7 @@ void RtmpSession::onCmd_publish(AMFDecoder &dec) {
|
|||||||
invoker);
|
invoker);
|
||||||
if(!flag){
|
if(!flag){
|
||||||
//该事件无人监听,默认鉴权成功
|
//该事件无人监听,默认鉴权成功
|
||||||
onRes(true);
|
onRes(true,"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ void RtmpSession::onCmd_deleteStream(AMFDecoder &dec) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RtmpSession::doPlay(AMFDecoder &dec){
|
void RtmpSession::doPlay(AMFDecoder &dec){
|
||||||
auto onRes = [this](bool authSuccess) {
|
auto onRes = [this](bool authSuccess,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,
|
||||||
@ -207,13 +207,13 @@ void RtmpSession::doPlay(AMFDecoder &dec){
|
|||||||
AMFValue status(AMF_OBJECT);
|
AMFValue status(AMF_OBJECT);
|
||||||
status.set("level", ok ? "status" : "error");
|
status.set("level", ok ? "status" : "error");
|
||||||
status.set("code", ok ? "NetStream.Play.Reset" : (authSuccess ? "NetStream.Play.StreamNotFound" : "NetStream.Play.BadAuth"));
|
status.set("code", ok ? "NetStream.Play.Reset" : (authSuccess ? "NetStream.Play.StreamNotFound" : "NetStream.Play.BadAuth"));
|
||||||
status.set("description", ok ? "Resetting and playing." : (authSuccess ? "No such stream." : "Auth failed"));
|
status.set("description", ok ? "Resetting and playing." : (authSuccess ? "No such stream." : err.data()));
|
||||||
status.set("details", m_mediaInfo.m_streamid);
|
status.set("details", m_mediaInfo.m_streamid);
|
||||||
status.set("clientid", "0");
|
status.set("clientid", "0");
|
||||||
sendReply("onStatus", nullptr, status);
|
sendReply("onStatus", nullptr, status);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
WarnL << "onPlayed:"
|
WarnL << "onPlayed:"
|
||||||
<< (authSuccess ? "No such stream:" : "Auth failed:")
|
<< (authSuccess ? "No such stream:" : err.data())
|
||||||
<< m_mediaInfo.m_vhost << " "
|
<< m_mediaInfo.m_vhost << " "
|
||||||
<< m_mediaInfo.m_app << " "
|
<< m_mediaInfo.m_app << " "
|
||||||
<< m_mediaInfo.m_streamid
|
<< m_mediaInfo.m_streamid
|
||||||
@ -292,23 +292,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){
|
Broadcast::AuthInvoker invoker = [weakSelf,onRes](bool authSuccess,const string &err){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
strongSelf->async([weakSelf,onRes,authSuccess](){
|
strongSelf->async([weakSelf,onRes,authSuccess,err](){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
onRes(authSuccess);
|
onRes(authSuccess,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(true,"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void RtmpSession::onCmd_play2(AMFDecoder &dec) {
|
void RtmpSession::onCmd_play2(AMFDecoder &dec) {
|
||||||
|
@ -641,7 +641,7 @@ bool RtspSession::handleReq_Play() {
|
|||||||
send_SessionNotFound();
|
send_SessionNotFound();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
auto onRes = [this](bool authSuccess){
|
auto onRes = [this](bool authSuccess,const string &err){
|
||||||
char response[2 * 1024];
|
char response[2 * 1024];
|
||||||
m_pcBuf = response;
|
m_pcBuf = response;
|
||||||
if(!authSuccess && m_bFirstPlay){
|
if(!authSuccess && m_bFirstPlay){
|
||||||
@ -650,8 +650,12 @@ bool RtspSession::handleReq_Play() {
|
|||||||
"RTSP/1.0 401 Unauthorized\r\n"
|
"RTSP/1.0 401 Unauthorized\r\n"
|
||||||
"CSeq: %d\r\n"
|
"CSeq: %d\r\n"
|
||||||
"Server: %s-%0.2f(build in %s)\r\n"
|
"Server: %s-%0.2f(build in %s)\r\n"
|
||||||
"%s\r\n",
|
"%s"
|
||||||
m_iCseq, SERVER_NAME, RTSP_VERSION, RTSP_BUILDTIME, dateHeader().data());
|
"Content-Type: text/plain\r\n"
|
||||||
|
"Content-Length: %d\r\n\r\n%s",
|
||||||
|
m_iCseq, SERVER_NAME,
|
||||||
|
RTSP_VERSION, RTSP_BUILDTIME,
|
||||||
|
dateHeader().data(),(int)err.size(),err.data());
|
||||||
send(m_pcBuf,n);
|
send(m_pcBuf,n);
|
||||||
shutdown();
|
shutdown();
|
||||||
return;
|
return;
|
||||||
@ -730,23 +734,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){
|
Broadcast::AuthInvoker invoker = [weakSelf,onRes](bool authSuccess,const string &err){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
strongSelf->async([weakSelf,onRes,authSuccess](){
|
strongSelf->async([weakSelf,onRes,authSuccess,err](){
|
||||||
auto strongSelf = weakSelf.lock();
|
auto strongSelf = weakSelf.lock();
|
||||||
if(!strongSelf){
|
if(!strongSelf){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
onRes(authSuccess);
|
onRes(authSuccess,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(true,"");
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -112,14 +112,16 @@ static onceToken s_token([](){
|
|||||||
NoticeCenter::Instance().addListener(nullptr,Config::Broadcast::kBroadcastRtmpPublish,[](BroadcastRtmpPublishArgs){
|
NoticeCenter::Instance().addListener(nullptr,Config::Broadcast::kBroadcastRtmpPublish,[](BroadcastRtmpPublishArgs){
|
||||||
InfoL << args.m_vhost << " " << args.m_app << " " << args.m_streamid << " " << args.m_param_strs ;
|
InfoL << args.m_vhost << " " << args.m_app << " " << args.m_streamid << " " << args.m_param_strs ;
|
||||||
EventPoller::Instance().async([invoker](){
|
EventPoller::Instance().async([invoker](){
|
||||||
invoker(true);
|
//invoker(true,"");//鉴权成功
|
||||||
|
invoker(false,"this is auth failed message");//鉴权失败
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
NoticeCenter::Instance().addListener(nullptr,Config::Broadcast::kBroadcastMediaPlayed,[](BroadcastMediaPlayedArgs){
|
NoticeCenter::Instance().addListener(nullptr,Config::Broadcast::kBroadcastMediaPlayed,[](BroadcastMediaPlayedArgs){
|
||||||
InfoL << args.m_schema << " " << args.m_vhost << " " << args.m_app << " " << args.m_streamid << " " << args.m_param_strs ;
|
InfoL << args.m_schema << " " << args.m_vhost << " " << args.m_app << " " << args.m_streamid << " " << args.m_param_strs ;
|
||||||
EventPoller::Instance().async([invoker](){
|
EventPoller::Instance().async([invoker](){
|
||||||
invoker(true);
|
//invoker(true,"");//鉴权成功
|
||||||
|
invoker(false,"this is auth failed message");//鉴权失败
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user