Commit 5cc4258b by xiongziliang

兼容OPTIONS命令返回401、302等命令

parent cca9b175
......@@ -154,12 +154,12 @@ bool RtspPlayer::handleAuthenticationFailure(const string &paramsStr) {
return false;
}
void RtspPlayer::handleResDESCRIBE(const Parser& parser) {
bool RtspPlayer::handleResponse(const string &cmd, const Parser &parser){
string authInfo = parser["WWW-Authenticate"];
//发送DESCRIBE命令后的回复
if ((parser.Url() == "401") && handleAuthenticationFailure(authInfo)) {
sendOptions();
return;
return false;
}
if(parser.Url() == "302" || parser.Url() == "301"){
auto newUrl = parser["Location"];
......@@ -167,14 +167,19 @@ void RtspPlayer::handleResDESCRIBE(const Parser& parser) {
throw std::runtime_error("未找到Location字段(跳转url)");
}
play(newUrl);
return;
return false;
}
if (parser.Url() != "200") {
throw std::runtime_error(
StrPrinter << "DESCRIBE:" << parser.Url() << " " << parser.Tail() << endl);
throw std::runtime_error(StrPrinter << cmd << ":" << parser.Url() << " " << parser.Tail() << endl);
}
_content_base = parser["Content-Base"];
return true;
}
void RtspPlayer::handleResDESCRIBE(const Parser& parser) {
if (!handleResponse("DESCRIBE", parser)) {
return;
}
_content_base = parser["Content-Base"];
if(_content_base.empty()){
_content_base = _play_url;
}
......@@ -351,8 +356,8 @@ void RtspPlayer::sendDescribe() {
void RtspPlayer::sendOptions(){
_on_response = [this](const Parser& parser){
if (parser.Url() != "200") {
throw std::runtime_error(StrPrinter << "OPTIONS:" << parser.Url() << " " << parser.Tail() << endl);
if (!handleResponse("OPTIONS", parser)) {
return;
}
//获取服务器支持的命令
_supported_cmd.clear();
......
......@@ -94,6 +94,7 @@ private:
void handleResDESCRIBE(const Parser &parser);
bool handleAuthenticationFailure(const string &wwwAuthenticateParamsStr);
void handleResPAUSE(const Parser &parser, int type);
bool handleResponse(const string &cmd, const Parser &parser);
void sendOptions();
void sendSetup(unsigned int uiTrackIndex);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论