Leaked source code of windows server 2003
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 Microsoft Corporation
Module Name :
mimemap.hxx
Abstract:
This module defines the classes for mapping for MIME type to file extensions.
Author:
Murali R. Krishnan ( MuraliK ) 09-Jan-1995
Project:
TCP Services common 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 --*/
#ifndef _MIMEMAP_HXX_
#define _MIMEMAP_HXX_
/************************************************************
* Include Headers ************************************************************/
# ifdef __cplusplus
extern "C" { # endif // __cplusplus
# include <nt.h>
# include <ntrtl.h>
# include <nturtl.h>
# include <windows.h>
# ifdef __cplusplus
}; // extern "C"
# endif // __cplusplus
# include "string.hxx"
# include "hashtab.hxx"
# ifndef dllexp
# define dllexp __declspec( dllexport)
# endif
/************************************************************
* Type Definitions ************************************************************/
/*******************************************************************
NAME: MIME_MAP_ENTRY ( short Mme)
SYNOPSIS: Small storage class for the MIME type entry
HISTORY: Johnl 04-Sep-1994 Created MuraliK 09-Jan-1995 Modified to include Gopher Type ********************************************************************/
class MIME_MAP_ENTRY : public HT_ELEMENT {
public:
MIME_MAP_ENTRY( IN LPCTSTR pchMimeType, IN LPCTSTR pchFileExt);
~MIME_MAP_ENTRY( VOID ) { // strings are automatically freed.
}
BOOL IsValid( VOID ) const { return ( m_fValid); }
LPCTSTR QueryMimeType( VOID ) const { return m_strMimeType.QueryStr(); }
LPCTSTR QueryFileExt( VOID ) const { return m_strFileExt.QueryStr(); }
LPCTSTR QueryIconFile( VOID ) const { return NULL; }
LPCTSTR QueryGopherType( VOID) const { return NULL; }
// Virtual functions of HT_ELEMENT are defined here.
dllexp virtual LPCSTR QueryKey(VOID) const { return (m_strFileExt.QueryStr()); } dllexp virtual DWORD QueryKeyLen(VOID) const { return (m_strFileExt.QueryCCH()); }
dllexp virtual LONG Reference( VOID) { return ( InterlockedIncrement( &m_nRefs)); } dllexp virtual LONG Dereference( VOID) { return ( InterlockedDecrement( &m_nRefs)); } dllexp virtual BOOL IsMatch( IN LPCSTR pszKey, IN DWORD cchKey) const { return ((m_strFileExt.QueryCCH() == cchKey) && (0 == _stricmp( m_strFileExt.QueryStr(), pszKey)) ); }
dllexp VOID Print( VOID) const #if DBG
; #else
{ ; } #endif // !DBG
private:
STR m_strFileExt; // key for the mime entry object
STR m_strMimeType; LONG m_nRefs;
//
// TRUE if the object constructed is properly
//
DWORD m_fValid:1; }; // class MIME_MAP_ENTRY
typedef MIME_MAP_ENTRY * PMIME_MAP_ENTRY; typedef const MIME_MAP_ENTRY * PCMIME_MAP_ENTRY;
/*******************************************************************
NAME: MIME_MAP ( short Mm)
SYNOPSIS: Class for containing the list of mime map entries.
HISTORY: MuraliK 09-Jan-1995 Created. ********************************************************************/ class MIME_MAP {
public:
dllexp MIME_MAP( VOID);
~MIME_MAP( VOID) { CleanupThis(); }
BOOL IsValid( VOID) { return ( m_fValid && m_htMimeEntries.IsValid()); }
dllexp VOID CleanupThis( VOID);
dllexp DWORD InitMimeMap( VOID );
//
// Used to map MimeType-->MimeEntry
// The function returns an array of pointers to mime entries
// which match given mime type, as well the count.
// Returns NO_ERROR on success or Win32 error codes
//
dllexp DWORD LookupMimeEntryForMimeType( IN const STR & strMimeType, OUT PCMIME_MAP_ENTRY * prgMme, IN OUT LPDWORD pnMmeEntries);
//
// 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 NO_ERROR on success or Win32 error codes
//
dllexp PCMIME_MAP_ENTRY LookupMimeEntryForFileExt( IN const TCHAR * pchPathName);
#if DBG
dllexp VOID Print( VOID); #else
dllexp VOID Print( VOID) { ; } #endif // !DBG
private:
DWORD m_fValid : 1; HASH_TABLE m_htMimeEntries; PMIME_MAP_ENTRY m_pMmeDefault;
dllexp BOOL AddMimeMapEntry( IN PMIME_MAP_ENTRY pMmeNew);
dllexp BOOL CreateAndAddMimeMapEntry( IN LPCTSTR pszMimeType, IN LPCTSTR pszExtension) ;
dllexp DWORD InitFromMetabase( VOID );
dllexp DWORD InitFromRegistryChicagoStyle( VOID );
}; // class MIME_MAP
typedef MIME_MAP *PMIME_MAP;
BOOL InitializeMimeMap( IN LPCTSTR pszRegEntry );
# endif // _MIMEMAP_HXX
|