1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
/*
* UPnP Support for XBMC
* Copyright (c) 2006 c0diq (Sylvain Rebaud)
* Portions Copyright (c) by the authors of libPlatinum
* http://www.plutinosoft.com/blog/category/platinum/
* Copyright (C) 2006-2018 Team Kodi
* This file is part of Kodi - https://kodi.tv
*
* SPDX-License-Identifier: GPL-2.0-or-later
* See LICENSES/README.md for more information.
*/
#pragma once
#include "threads/CriticalSection.h"
#include <string>
class NPT_LogHandler;
class PLT_UPnP;
class PLT_SyncMediaBrowser;
class PLT_MediaController;
class PLT_MediaObject;
class PLT_MediaItemResource;
class CFileItem;
class CBookmark;
namespace UPNP
{
class CDeviceHostReferenceHolder;
class CCtrlPointReferenceHolder;
class CRendererReferenceHolder;
class CUPnPRenderer;
class CUPnPServer;
class CUPnP
{
public:
CUPnP();
~CUPnP();
// server
bool StartServer();
void StopServer();
// client
void StartClient();
void StopClient();
bool IsClientStarted() { return (m_MediaBrowser != NULL); }
// controller
void StartController();
void StopController();
bool IsControllerStarted() { return (m_MediaController != NULL); }
// renderer
bool StartRenderer();
void StopRenderer();
void UpdateState();
// class methods
static CUPnP* GetInstance();
static CUPnPServer* GetServer();
static void ReleaseInstance(bool bWait);
static bool IsInstantiated() { return upnp != NULL; }
static bool MarkWatched(const CFileItem& item,
const bool watched);
static bool SaveFileState(const CFileItem& item,
const CBookmark& bookmark,
const bool updatePlayCount);
static bool UpdateItem(const std::string& path,
const CFileItem& item);
static void RegisterUserdata(void* ptr);
static void UnregisterUserdata(void* ptr);
private:
CUPnP(const CUPnP&) = delete;
CUPnP& operator=(const CUPnP&) = delete;
void CreateControlPoint();
void DestroyControlPoint();
// methods
CUPnPRenderer* CreateRenderer(int port = 0);
CUPnPServer* CreateServer(int port = 0);
CCriticalSection m_lockMediaBrowser;
public:
PLT_SyncMediaBrowser* m_MediaBrowser;
PLT_MediaController* m_MediaController;
private:
std::string m_IP;
PLT_UPnP* m_UPnP;
NPT_LogHandler* m_LogHandler;
CDeviceHostReferenceHolder* m_ServerHolder;
CRendererReferenceHolder* m_RendererHolder;
CCtrlPointReferenceHolder* m_CtrlPointHolder;
static CUPnP* upnp;
};
} /* namespace UPNP */
|