| /* | |
| * GPAC - Multimedia Framework C SDK | |
| * | |
| * Authors: Jean Le Feuvre | |
| * Copyright (c) Telecom ParisTech 2009-2012 | |
| * All rights reserved | |
| * | |
| * This file is part of GPAC / Platinum UPnP module | |
| * | |
| * GPAC is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU Lesser General Public License as published by | |
| * the Free Software Foundation; either version 2, or (at your option) | |
| * any later version. | |
| * | |
| * GPAC is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; see the file COPYING. If not, write to | |
| * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
| * | |
| * | |
| * ---------------------------------------------------------------------------------- | |
| * PLATINUM IS LICENSED UNDER GPL or commercial agreement - cf platinum license | |
| * ---------------------------------------------------------------------------------- | |
| * | |
| */ | |
| #ifndef _GPAC_FILE_MEDIA_SERVER_H_ | |
| #define _GPAC_FILE_MEDIA_SERVER_H_ | |
| #include "PltFileMediaServer.h" | |
| #include <gpac/list.h> | |
| #define MAX_PATH_LENGTH 1024 | |
| class PLT_MetadataHandler; | |
| class GPAC_MediaDirectory | |
| { | |
| public: | |
| /* | |
| if is_hidden is set, directory is not visible during BrowseDirectChildren | |
| if alias is NULL, a CRC32 of the path name will be used | |
| */ | |
| GPAC_MediaDirectory(const char *alias, const char *path, Bool is_hidden = GF_FALSE) | |
| { | |
| m_Path = path; | |
| m_Path.Replace('/', NPT_FilePath::Separator); | |
| m_Path.TrimRight("/\\"); | |
| m_Path += NPT_FilePath::Separator; | |
| m_Alias = alias; | |
| m_Alias.TrimRight("/\\"); | |
| m_Alias.TrimLeft("/\\"); | |
| m_Hide = is_hidden; | |
| } | |
| NPT_String m_Path; | |
| NPT_String m_Alias; | |
| Bool m_Hide; | |
| }; | |
| class GPAC_VirtualFile | |
| { | |
| public: | |
| GPAC_VirtualFile(const char *uri="", const char *val="", const char *mime="", Bool temporary= GF_FALSE) | |
| { | |
| m_URI = uri; | |
| m_Content = val; | |
| m_MIME = mime; | |
| m_temporary = temporary; | |
| } | |
| bool operator==(const GPAC_VirtualFile & v1) { | |
| return m_URI==v1.m_URI; | |
| } | |
| NPT_String m_URI; | |
| NPT_String m_Content; | |
| NPT_String m_MIME; | |
| Bool m_temporary; | |
| }; | |
| class GPAC_FileMediaServer : public PLT_FileMediaServer | |
| { | |
| public: | |
| GPAC_FileMediaServer(const char* friendly_name, | |
| bool show_ip = false, | |
| const char* uuid = NULL, | |
| NPT_UInt16 port = 0); | |
| void AddSharedDirectory(const char *path, const char *alias, Bool is_hidden = GF_FALSE); | |
| NPT_String GetResourceURI(const char *file_path, const char *for_host); | |
| void ShareVirtualResource(const char *res_uri, const char *res_val, const char *res_mime, Bool temporary = GF_FALSE); | |
| protected: | |
| virtual NPT_Result OnBrowseDirectChildren(PLT_ActionReference& action, | |
| const char* object_id, | |
| const char* filter, | |
| NPT_UInt32 starting_index, | |
| NPT_UInt32 requested_count, | |
| const char * sort_criteria, | |
| const PLT_HttpRequestContext& context); | |
| virtual NPT_Result GetFilePath(const char* object_id, NPT_String& filepath); | |
| virtual NPT_Result ServeFile(const NPT_HttpRequest& request, | |
| const NPT_HttpRequestContext& context, | |
| NPT_HttpResponse& response, | |
| const NPT_String& file_path); | |
| virtual PLT_MediaObject* BuildFromFilePath(const NPT_String& filepath, | |
| const PLT_HttpRequestContext& context, | |
| bool with_count = true, | |
| bool keep_extension_in_title = false, | |
| bool allip = false); | |
| PLT_MediaObject* BuildFromFilePathAndHost(const NPT_String& filepath, | |
| const PLT_HttpRequestContext *context = NULL, | |
| bool with_count = true, | |
| bool keep_extension_in_title = false, | |
| const char *for_host = NULL); | |
| NPT_Result ServeVirtualFile(NPT_HttpResponse& response, | |
| GPAC_VirtualFile *vfile, | |
| NPT_Position start, | |
| NPT_Position end, | |
| bool request_is_head); | |
| private: | |
| NPT_List<GPAC_MediaDirectory> m_Directories; | |
| NPT_List<GPAC_VirtualFile> m_VirtualFiles; | |
| }; | |
| #endif /* _PLT_FILE_MEDIA_SERVER_H_ */ |