root/modules/platinum/GPACFileMediaServer.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


/*
 *                      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_ */

/* [<][>][^][v][top][bottom][index][help] */