#ifndef _PLT_PROTOCOL_INFO_H_
#define _PLT_PROTOCOL_INFO_H_
#include "Neptune.h"
#include "PltHttp.h"
class PLT_HttpRequestContext;
typedef struct PLT_HttpFileRequestHandler_DefaultDlnaExtMapEntry {
const char* mime_type;
const char* dlna_ext;
} PLT_HttpFileRequestHandler_DefaultDlnaExtMapEntry ;
class PLT_ProtocolInfo
{
public:
class FieldEntry {
public:
FieldEntry(const char* key, const char* value) :
m_Key(key), m_Value(value) {}
NPT_String m_Key;
NPT_String m_Value;
};
static NPT_String GetMimeTypeFromProtocolInfo(const char* protocol_info);
static const char* GetDlnaExtension(const char* mime_type,
const PLT_HttpRequestContext* context = NULL);
static const char* GetDlnaExtension(const char* mime_type,
PLT_DeviceSignature signature = PLT_DEVICE_UNKNOWN);
static PLT_ProtocolInfo GetProtocolInfo(const char* filename,
bool with_dlna_extension = true,
const PLT_HttpRequestContext* context = NULL);
static PLT_ProtocolInfo GetProtocolInfo(const char* filename,
bool with_dlna_extension = true,
PLT_DeviceSignature signature = PLT_DEVICE_UNKNOWN);
static PLT_ProtocolInfo GetProtocolInfoFromMimeType(const char* mime_type,
bool with_dlna_extension = true,
const PLT_HttpRequestContext* context = NULL);
static PLT_ProtocolInfo GetProtocolInfoFromMimeType(const char* mime_type,
bool with_dlna_extension = true,
PLT_DeviceSignature signature = PLT_DEVICE_UNKNOWN);
PLT_ProtocolInfo();
PLT_ProtocolInfo(const char* protocol_info);
PLT_ProtocolInfo(const char* protocol,
const char* mask,
const char* content_type,
const char* extra);
const NPT_String& GetProtocol() const { return m_Protocol; }
const NPT_String& GetMask() const { return m_Mask; }
const NPT_String& GetContentType() const { return m_ContentType; }
const NPT_String& GetExtra() const { return m_Extra; }
const NPT_String& GetDLNA_PN() const { return m_DLNA_PN; }
bool IsValid() { return m_Valid; }
NPT_String ToString() const;
bool Match(const PLT_ProtocolInfo& other) const;
private:
typedef enum {
PLT_PROTINFO_PARSER_STATE_START,
PLT_PROTINFO_PARSER_STATE_PN,
PLT_PROTINFO_PARSER_STATE_OP,
PLT_PROTINFO_PARSER_STATE_PS,
PLT_PROTINFO_PARSER_STATE_CI,
PLT_PROTINFO_PARSER_STATE_FLAGS,
PLT_PROTINFO_PARSER_STATE_MAXSP,
PLT_PROTINFO_PARSER_STATE_OTHER
} PLT_ProtocolInfoParserState;
NPT_Result SetProtocolInfo(const char* protocol_info);
NPT_Result ValidateField(const char* val,
const char* valid_chars,
NPT_Cardinal num_chars = 0);
NPT_Result ParseExtra(NPT_List<FieldEntry>& entries);
NPT_Result ValidateExtra();
private:
NPT_String m_Protocol;
NPT_String m_Mask;
NPT_String m_ContentType;
NPT_String m_Extra;
NPT_String m_DLNA_PN;
NPT_String m_DLNA_OP;
NPT_String m_DLNA_PS;
NPT_String m_DLNA_CI;
NPT_String m_DLNA_FLAGS;
NPT_String m_DLNA_MAXSP;
NPT_List<FieldEntry> m_DLNA_OTHER;
bool m_Valid;
};
#endif