14#include <QNetworkInterface>
40 LOG(VB_UPNP, LOG_DEBUG,
"UPnp - Constructor");
60 LOG(VB_UPNP, LOG_DEBUG,
"UPnp - Destructor");
78 if (sList.contains(QHostAddress(QHostAddress::AnyIPv4)))
80 sList.removeAll(QHostAddress(QHostAddress::AnyIPv4));
81 sList.removeAll(QHostAddress(QHostAddress::AnyIPv6));
82 sList.append(QNetworkInterface::allAddresses());
84 return Initialize( sList, nServicePort, pHttpServer );
93 LOG(VB_UPNP, LOG_DEBUG,
"UPnp::Initialize - Begin");
97 LOG(VB_GENERAL, LOG_ERR,
98 "UPnp::Initialize - Already initialized, programmer error.");
105 LOG(VB_GENERAL, LOG_ERR,
106 "UPnp::Initialize - Invalid Parameter (pHttpServer == NULL)");
120 if ((
g_IPAddrList[it].protocol() == QAbstractSocket::IPv4Protocol
122 ||(
g_IPAddrList[it].protocol() == QAbstractSocket::IPv6Protocol
136 LOG(VB_UPNP, LOG_DEBUG,
"UPnp::Initialize - End");
147 LOG(VB_UPNP, LOG_DEBUG,
"UPnp::Start - Enabling SSDP Notifications");
155 LOG(VB_UPNP, LOG_DEBUG,
"UPnp::Start - Returning");
164 LOG(VB_UPNP, LOG_INFO,
"UPnp::CleanUp() - disabling SSDP notifications");
249 if (pRequest !=
nullptr)
251 QString sDetails =
"";
254 sDetails =
"<UPnPResult xmlns=\"urn:schemas-upnp-org:control-1-0\">";
256 if (sMsg.length() == 0)
259 sDetails += QString(
"<errorCode>%1</errorCode>"
260 "<errorDescription>%2</errorDescription>" )
265 sDetails +=
"</UPnPResult>";
274 LOG(VB_GENERAL, LOG_ERR,
"Response not created - pRequest == NULL" );
283 const QString &hostName )
289 QString sUrl =
"http://" + pRequest->
GetLastHeader(
"host" ) + sItems[1];
292 (
"BackendServerAddr",hostName,hostName);
293 url.setHost( ipAddress );
297 LOG(VB_UPNP, LOG_INFO, QString(
"Sending http redirect to: %1")
298 .arg(url.toString()));
HttpResponseType m_eResponseType
qint64 SendResponse(void)
void FormatErrorResponse(bool bServerError, const QString &sFaultString, const QString &sDetails)
QString GetLastHeader(const QString &sType) const
QStringMap m_mapRespHeaders
static QString Encode(const QString &sIn)
QString GetSharePath(void) const
void RegisterExtension(HttpServerExtension *pExtension)
QString GetSettingOnHost(const QString &key, const QString &host, const QString &defaultval="")
bool GetBoolSetting(const QString &key, bool defaultval=false)
void WokeUp(std::chrono::seconds SecondsAsleep)
void WillSuspend(std::chrono::milliseconds MilliSeconds=0ms)
static MythPower * AcquireRelease(void *Reference, bool Acquire, std::chrono::seconds MinimumDelay=0s)
void WillShutDown(std::chrono::milliseconds MilliSeconds=0ms)
void WillRestart(std::chrono::milliseconds MilliSeconds=0ms)
void EnableNotifications(int nServicePort)
void DisableNotifications()
static QList< QHostAddress > DefaultListen(void)
static UPnpDeviceDesc * Retrieve(QString &sURL)
static QList< QHostAddress > g_IPAddrList
static void FormatRedirectResponse(HTTPRequest *pRequest, const QString &hostName)
static QString GetResultDesc(UPnPResultCode eCode)
static UPnpDeviceDesc * GetDeviceDesc(QString &sURL)
HttpServer * m_pHttpServer
static void DisableNotifications(std::chrono::milliseconds)
bool Initialize(int nServicePort, HttpServer *pHttpServer)
static UPnpDeviceDesc g_UPnpDeviceDesc
void EnableNotificatins(std::chrono::milliseconds) const
static void FormatErrorResponse(HTTPRequest *pRequest, UPnPResultCode eCode, const QString &sMsg="")
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
@ UPnPResult_MS_AccessDenied
@ UPnPResult_CDS_NoSuchDestRes
@ UPnPResult_InvalidControlURL
@ UPnPResult_ArgumentValueOutOfRange
@ UPnPResult_CDS_InvalidSortCriteria
@ UPnPResult_CDS_NoSuchSourceResource
@ UPnPResult_CDS_ParameterMismatch
@ UPnPResult_CDS_TransferBusy
@ UPnPResult_CDS_InvalidNewTagValue
@ UPnPResult_CDS_InvalidSearchCriteria
@ UPnPResult_NotEncrypted
@ UPnPResult_CDS_DestResAccessDenied
@ UPnPResult_HumanInterventionRequired
@ UPnPResult_OptionalActionNotImplemented
@ UPnPResult_CDS_CannotProcessRequest
@ UPnPResult_ArgumentValueInvalid
@ UPnPResult_MythTV_XmlParseError
@ UPnPResult_InvalidAction
@ UPnPResult_CDS_NoSuchContainer
@ UPnPResult_StringArgumentTooLong
@ UPnPResult_ActionFailed
@ UPnPResult_CDS_NoSuchObject
@ UPnPResult_CDS_RestrictedObject
@ UPnPResult_CDS_BadMetadata
@ UPnPResult_CDS_InvalidCurrentTagValue
@ UPnPResult_CDS_ResrtictedParentObject
@ UPnPResult_ActionNotAuthorized
@ UPnPResult_NoSuchSession
@ UPnPResult_CDS_ResourceAccessDenied
@ UPnPResult_CDS_RequiredTag
@ UPnPResult_CMGR_NotInNetwork
@ UPnPResult_CDS_NoSuchFileTransfer
@ UPnPResult_InvalidSequence
@ UPnPResult_CDS_ReadOnlyTag
@ UPnPResult_SignatureMissing
@ UPnPResult_MythTV_NoNamespaceGiven
@ UPnPResult_SignatureFailure