VTrain/tools/rtsp_server/xop/rtsp.h

108 lines
2.1 KiB
C++

// PHZ
// 2018-6-8
#ifndef XOP_RTSP_H
#define XOP_RTSP_H
#include <cstdio>
#include <string>
#include "MediaSession.h"
#include "Acceptor.h"
#include "EventLoop.h"
#include "Socket.h"
#include "Timer.h"
namespace xop
{
struct RtspUrlInfo
{
std::string url;
std::string ip;
uint16_t port;
std::string suffix;
};
class Rtsp : public std::enable_shared_from_this<Rtsp>
{
public:
Rtsp() : has_auth_info_(false) {}
virtual ~Rtsp() {}
virtual void SetAuthConfig(std::string realm, std::string username, std::string password)
{
realm_ = realm;
username_ = username;
password_ = password;
has_auth_info_ = true;
if (realm_=="" || username=="") {
has_auth_info_ = false;
}
}
virtual void SetVersion(std::string version) // SDP Session Name
{ version_ = std::move(version); }
virtual std::string GetVersion()
{ return version_; }
virtual std::string GetRtspUrl()
{ return rtsp_url_info_.url; }
bool ParseRtspUrl(std::string url)
{
char ip[100] = { 0 };
char suffix[100] = { 0 };
uint16_t port = 0;
#if defined(__linux) || defined(__linux__)
if (sscanf(url.c_str() + 7, "%[^:]:%hu/%s", ip, &port, suffix) == 3)
#elif defined(WIN32) || defined(_WIN32)
if (sscanf_s(url.c_str() + 7, "%[^:]:%hu/%s", ip, 100, &port, suffix, 100) == 3)
#endif
{
rtsp_url_info_.port = port;
}
#if defined(__linux) || defined(__linux__)
else if (sscanf(url.c_str() + 7, "%[^/]/%s", ip, suffix) == 2)
#elif defined(WIN32) || defined(_WIN32)
else if (sscanf_s(url.c_str() + 7, "%[^/]/%s", ip, 100, suffix, 100) == 2)
#endif
{
rtsp_url_info_.port = 554;
}
else
{
//LOG("%s was illegal.\n", url.c_str());
return false;
}
rtsp_url_info_.ip = ip;
rtsp_url_info_.suffix = suffix;
rtsp_url_info_.url = url;
return true;
}
protected:
friend class RtspConnection;
virtual MediaSession::Ptr LookMediaSession(const std::string& suffix)
{ return nullptr; }
virtual MediaSession::Ptr LookMediaSession(MediaSessionId sessionId)
{ return nullptr; }
bool has_auth_info_ = false;
std::string realm_;
std::string username_;
std::string password_;
std::string version_;
struct RtspUrlInfo rtsp_url_info_;
};
}
#endif