167 lines
5.3 KiB
Plaintext
167 lines
5.3 KiB
Plaintext
|
{
|
||
|
$Project$
|
||
|
$Workfile$
|
||
|
$Revision$
|
||
|
$DateUTC$
|
||
|
$Id$
|
||
|
|
||
|
This file is part of the Indy (Internet Direct) project, and is offered
|
||
|
under the dual-licensing agreement described on the Indy website.
|
||
|
(http://www.indyproject.org/)
|
||
|
|
||
|
Copyright:
|
||
|
(c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
|
||
|
}
|
||
|
{
|
||
|
$Log$
|
||
|
}
|
||
|
{
|
||
|
Rev 1.1 2004.02.03 5:44:08 PM czhower
|
||
|
Name changes
|
||
|
|
||
|
Rev 1.0 11/13/2002 07:57:36 AM JPMugaas
|
||
|
|
||
|
2000-Mar-27 Pete Mee
|
||
|
- ReturnMIMETypes should return the most relevant MIME type+encoding pair
|
||
|
to the values passed - i.e., removes x- where it is unnecessary & modifies
|
||
|
the type if it is known to be incorrect. (Stupid-)Example:
|
||
|
application/octet-stream + x-base64 should be application/octet-stream +
|
||
|
base64... Warning: this file is expected to grow to become mainly constants!!
|
||
|
}
|
||
|
|
||
|
unit IdMIMETypes;
|
||
|
|
||
|
interface
|
||
|
{$i IdCompilerDefines.inc}
|
||
|
|
||
|
const
|
||
|
MIMESplit = '/'; {Do not Localize}
|
||
|
MIMEXVal = 'x-'; {Do not Localize}
|
||
|
|
||
|
MIMETypeApplication = 'application' + MIMESplit; {Do not Localize}
|
||
|
MIMETypeAudio = 'audio' + MIMESplit; {Do not Localize}
|
||
|
MIMETypeImage = 'image' + MIMESplit; {Do not Localize}
|
||
|
MIMETypeMessage = 'message' + MIMESplit; {Do not Localize}
|
||
|
MIMETypeMultipart = 'multipart' + MIMESplit; {Do not Localize}
|
||
|
MIMETypeText = 'text' + MIMESplit; {Do not Localize}
|
||
|
MIMETypeVideo = 'video' + MIMESplit; {Do not Localize}
|
||
|
MaxMIMEType = 6;
|
||
|
|
||
|
// MIME Sub-Types
|
||
|
MIMESubOctetStream = 'octet-stream'; {Do not Localize}
|
||
|
MIMESubMacBinHex40 = 'mac-binhex40'; {Do not Localize}
|
||
|
MaxMIMESubTypes = 1;
|
||
|
|
||
|
// BinToASCII
|
||
|
MIMEEncBase64 = 'base64'; // Correct MIME type {Do not Localize}
|
||
|
MIMEEncUUEncode = MIMEXVal + 'uu'; // A guess... {Do not Localize}
|
||
|
MIMEEncXXEncode = MIMEXVal + 'xx'; // A guess... {Do not Localize}
|
||
|
MaxMIMEBinToASCIIType = 2;
|
||
|
|
||
|
// Message Digests - a MIME type probably doesn't exist for these... {Do not Localize}
|
||
|
MIMEEncRSAMD2 = MIMEXVal + 'rsa-md2'; {Do not Localize}
|
||
|
MIMEEncRSAMD4 = MIMEXVal + 'rsa-md4'; {Do not Localize}
|
||
|
MIMEEncRSAMD5 = MIMEXVal + 'rsa-md5'; {Do not Localize}
|
||
|
MIMEEncNISTSHA = MIMEXVal + 'nist-sha'; {Do not Localize}
|
||
|
MaxMIMEMessageDigestType = 3;
|
||
|
|
||
|
// Compression Types
|
||
|
MIMEEncRLECompress = MIMEXVal + 'rle-compress'; // Probably doesn't exist {Do not Localize}
|
||
|
MaxMIMECompressType = 0;
|
||
|
|
||
|
MaxMIMEEncType = MaxMIMEBinToASCIIType + MaxMIMEMessageDigestType + 1 + MaxMIMECompressType + 1;
|
||
|
|
||
|
// Only put long, frequent full values in. Keep this list short, otherwise
|
||
|
// it'll be a nightmare & produce HUGE .exe files with LARGE useless {Do not Localize}
|
||
|
// sections (the above is bad enough on it's own!). {Do not Localize}
|
||
|
MIMEFullApplicationOctetStream = MIMETypeApplication + MIMESubOctetStream;
|
||
|
|
||
|
// Returns true if matched, false if not. If true, vars may be altered.
|
||
|
function ReturnMIMEType(var MediaType, EncType : String) : Boolean;
|
||
|
|
||
|
var
|
||
|
MIMEMediaType : array [0..MaxMIMEType] of String;
|
||
|
|
||
|
implementation
|
||
|
|
||
|
uses
|
||
|
IdGlobal,
|
||
|
IdGlobalProtocols;
|
||
|
|
||
|
function ReturnMIMEType(var MediaType, EncType : String) : Boolean;
|
||
|
var
|
||
|
MType, SType, EType : String;
|
||
|
i : LongWord;
|
||
|
begin
|
||
|
i := IndyPos(MIMESplit, MediaType);
|
||
|
MType := Copy(MediaType, 1, i);
|
||
|
SType := Copy(MediaType, i + 1, MaxInt);
|
||
|
EType := EncType;
|
||
|
|
||
|
i := PosInStrArray(MType, MIMEMediaType, False);
|
||
|
case i of
|
||
|
0 : begin end; // MIMETypeApplication - application/
|
||
|
1 : begin end; // MIMETypeAudio - audio/
|
||
|
2 : begin end; // MIMETypeImage - image/
|
||
|
3 : begin end; // MIMETypeMessage - message/
|
||
|
4 : begin end; // MIMETypeMultipart - multipart/
|
||
|
5 : begin end; // MIMETypeText - text/
|
||
|
6 : begin end; // MIMETypeVideo - video/
|
||
|
else
|
||
|
begin
|
||
|
if TextStartsWith(MType, MIMEXVal) then begin
|
||
|
i := PosInStrArray(Copy(MType, 3, MaxInt), MIMEMediaType, False);
|
||
|
case i of
|
||
|
0 :
|
||
|
begin
|
||
|
// MIMETypeApplication - application/
|
||
|
MType := MIMETypeApplication;
|
||
|
end;
|
||
|
1 :
|
||
|
begin
|
||
|
// MIMETypeAudio - audio/
|
||
|
MType := MIMETypeAudio;
|
||
|
end;
|
||
|
2 :
|
||
|
begin
|
||
|
// MIMETypeImage - image/
|
||
|
MType := MIMETypeImage;
|
||
|
end;
|
||
|
3 :
|
||
|
begin
|
||
|
// MIMETypeMessage - message/
|
||
|
MType := MIMETypeMessage;
|
||
|
end;
|
||
|
4 :
|
||
|
begin
|
||
|
// MIMETypeMultipart - multipart/
|
||
|
MType := MIMETypeMultipart;
|
||
|
end;
|
||
|
5 :
|
||
|
begin
|
||
|
// MIMETypeText - text/
|
||
|
MType := MIMETypeText;
|
||
|
end;
|
||
|
6 :
|
||
|
begin
|
||
|
// MIMETypeVideo - video/
|
||
|
MType := MIMETypeVideo;
|
||
|
end;
|
||
|
end;
|
||
|
end;
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
Result := False;
|
||
|
end;
|
||
|
|
||
|
initialization
|
||
|
MIMEMediaType[0] := MIMETypeApplication;
|
||
|
MIMEMediaType[1] := MIMETypeAudio;
|
||
|
MIMEMediaType[2] := MIMETypeImage;
|
||
|
MIMEMediaType[3] := MIMETypeMessage;
|
||
|
MIMEMediaType[4] := MIMETypeMultipart;
|
||
|
MIMEMediaType[5] := MIMETypeText;
|
||
|
MIMEMediaType[6] := MIMETypeVideo;
|
||
|
end.
|