Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1995-2000 Microsoft Corporation
Module Name :
mimemap.hxx
Abstract:
This module defines the classes for mapping MIME type to file extensions.
Author:
Murali R. Krishnan ( MuraliK ) 09-Jan-1995
Project:
UlW3.dll
Revision History: Vlad Sadovsky (VladS) 12-feb-1996 Merging IE 2.0 MIME list Murali R. Krishnan (MuraliK) 14-Oct-1996 Use a hash-table Anil Ruia (AnilR) 27-Mar-2000 Port to IIS+ --*/
#ifndef _MIMEMAP_HXX_
#define _MIMEMAP_HXX_
class MIME_MAP_ENTRY { public:
MIME_MAP_ENTRY(IN LPCWSTR pszMimeType, IN LPCWSTR pszFileExt) : m_fValid (TRUE) { if (FAILED(m_strFileExt.Copy(pszFileExt)) || FAILED(m_strMimeType.Copy(pszMimeType))) { m_fValid = FALSE; } }
~MIME_MAP_ENTRY( VOID ) { // strings are automatically freed.
}
BOOL IsValid() { return m_fValid; }
LPCWSTR QueryMimeType() const { return m_strMimeType.QueryStr(); }
LPWSTR QueryFileExt() const { return (LPWSTR)m_strFileExt.QueryStr(); }
private:
STRU m_strFileExt; // key for the mime entry object
STRU m_strMimeType; BOOL m_fValid; }; // class MIME_MAP_ENTRY
class MIME_MAP: public CTypedHashTable<MIME_MAP, MIME_MAP_ENTRY, LPWSTR> {
public:
MIME_MAP() : CTypedHashTable<MIME_MAP, MIME_MAP_ENTRY, LPWSTR>("MimeMapper"), m_fValid (FALSE), m_pMmeDefault (NULL) {}
MIME_MAP(LPWSTR pszMimeMappings);
~MIME_MAP() { delete m_pMmeDefault; m_pMmeDefault = NULL; m_fValid = FALSE; }
//
// virtual methods from CTypedHashTable
//
static LPWSTR ExtractKey(const MIME_MAP_ENTRY *pMme) { return pMme->QueryFileExt(); }
static DWORD CalcKeyHash(LPCWSTR pszKey) { return HashStringNoCase(pszKey); }
static bool EqualKeys(LPCWSTR pszKey1, LPCWSTR pszKey2) { return !_wcsicmp(pszKey1, pszKey2); }
static void AddRefRecord(MIME_MAP_ENTRY *pMme, int nIncr) { if (nIncr < 0) { delete pMme; } }
BOOL IsValid() { return m_fValid; }
HRESULT InitMimeMap();
//
// Used to map FileExtension-->MimeEntry
// The function returns a single mime entry.
// the mapping from file-extension to mime entry is unique.
// Users should lock and unlock MIME_MAP before and after usage.
//
// Returns HRESULT
//
const MIME_MAP_ENTRY *LookupMimeEntryForFileExt( IN LPWSTR pszPathName);
private:
BOOL m_fValid; MIME_MAP_ENTRY *m_pMmeDefault;
BOOL AddMimeMapEntry(IN MIME_MAP_ENTRY *pMmeNew);
BOOL CreateAndAddMimeMapEntry( IN LPWSTR pszMimeType, IN LPWSTR pszExtension);
HRESULT InitFromMetabase();
HRESULT InitFromRegistryChicagoStyle();
}; // class MIME_MAP
HRESULT InitializeMimeMap(IN LPWSTR pszRegEntry);
VOID CleanupMimeMap();
HRESULT SelectMimeMappingForFileExt(IN WCHAR *pszFilePath, IN MIME_MAP *pMimeMap, OUT STRA *pstrMimeType);
# endif // _MIMEMAP_HXX_
|