?? mime.h
字號:
/* * mime.h * * Multipurpose Internet Mail Extensions support classes. * * Portable Windows Library * * Copyright (c) 1993-1998 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions are Copyright (C) 1993 Free Software Foundation, Inc. * All Rights Reserved. * * Contributor(s): ______________________________________. * * $Log: mime.h,v $ * Revision 1.13 1999/03/09 08:01:46 robertj * Changed comments for doc++ support (more to come). * * Revision 1.12 1999/02/16 08:07:10 robertj * MSVC 6.0 compatibility changes. * * Revision 1.11 1998/11/30 02:50:52 robertj * New directory structure * * Revision 1.10 1998/09/23 06:19:42 robertj * Added open source copyright license. * * Revision 1.9 1997/02/05 11:53:11 robertj * Changed construction of MIME dictionary to be delayed untill it is used. * * Revision 1.8 1996/09/14 13:09:15 robertj * Major upgrade: * rearranged sockets to help support IPX. * added indirect channel class and moved all protocols to descend from it, * separating the protocol from the low level byte transport. * * Revision 1.7 1996/07/15 10:28:31 robertj * Changed memory block base64 conversion functions to be void *. * * Revision 1.6 1996/03/16 04:38:09 robertj * Fixed bug in MIME write function, should be const. * * Revision 1.5 1996/02/25 03:04:32 robertj * Added decoding of Base64 to a block of memory instead of PBYTEArray. * * Revision 1.4 1996/01/28 14:14:30 robertj * Further implementation of secure config. * * Revision 1.3 1996/01/28 02:46:07 robertj * Removal of MemoryPointer classes as usage didn't work for GNU. * * Revision 1.2 1996/01/26 02:24:27 robertj * Further implemetation. * * Revision 1.1 1996/01/23 13:06:18 robertj * Initial revision * */#ifndef _PMIME#define _PMIME#ifdef __GNUC__#pragma interface#endif#include <ptclib/inetprot.h>//////////////////////////////////////////////////////////////////////////////// PMIMEInfo/** This class contains the Multipurpose Internet Mail Extensions parameters and variables. */
#ifdef DOC_PLUS_PLUS
class PMIMEInfo : public PStringToString {
#endifPDECLARE_STRING_DICTIONARY(PMIMEInfo, PCaselessString); public: PMIMEInfo( istream &strm // Stream to read the objects contents from. ); PMIMEInfo( PInternetProtocol & socket // Application socket to read MIME info. ); // Construct a MIME infromation dictionary from the specified source. // Overrides from class PObject /** Output the contents of the MIME dictionary to the stream. This is primarily used by the standard ##operator<<## function. */ virtual void PrintOn( ostream &strm // Stream to print the object into. ) const; /** Input the contents of the MIME dictionary from the stream. This is primarily used by the standard ##operator>>## function. */ virtual void ReadFrom( istream &strm // Stream to read the objects contents from. ); // New functions for class. /** Read MIME information from the socket. @return TRUE if the MIME information was successfully read. */ BOOL Read( PInternetProtocol & socket // Application socket to read MIME info. ); /** Write MIME information to the socket. @return TRUE if the MIME information was successfully read. */ BOOL Write( PInternetProtocol & socket // Application socket to write MIME info. ) const; /** Determine if the specified key is present in the MIME information set. @return TRUE if the MIME variable is present. */ BOOL HasKey( const PString & key // Key into MIME dictionary to get info. ) const { return GetAt(PCaselessString(key)) != NULL; } /** Get a string for the particular MIME info field with checking for existance. The #dflt# parameter is substituted if the field does not exist in the MIME information read in. @return String for the value of the MIME variable. */ PString GetString( const PString & key, // Key into MIME dictionary to get info. const PString & dflt // Default value of field if not in MIME info. ) const; /** Get an integer value for the particular MIME info field with checking for existance. The #dflt# parameter is substituted if the field does not exist in the MIME information read in. @return Integer value for the MIME variable. */ long GetInteger( const PString & key, // Key into MIME dictionary to get info. long dflt // Default value of field if not in MIME info. ) const; /** Set an association between a file type and a MIME content type. The content type is then sent for any file in the directory sub-tree that has the same extension. Note that if the #merge# parameter if TRUE then the dictionary is merged into the current association list and is not a simple replacement. The default values placed in this dictionary are:\begin{verbatim}
".txt", "text/plain" ".text", "text/plain" ".html", "text/html" ".htm", "text/html" ".aif", "audio/aiff" ".aiff", "audio/aiff" ".au", "audio/basic" ".snd", "audio/basic" ".wav", "audio/wav" ".gif", "image/gif" ".xbm", "image/x-bitmap" ".tif", "image/tiff" ".tiff", "image/tiff" ".jpg", "image/jpeg" ".jpe", "image/jpeg" ".jpeg", "image/jpeg" ".avi", "video/avi" ".mpg", "video/mpeg" ".mpeg", "video/mpeg" ".qt", "video/quicktime" ".mov", "video/quicktime"\end{verbatim}
The default content type will be "application/octet-stream". */ static void SetAssociation( const PStringToString & allTypes, // MIME content type associations. BOOL merge = TRUE // Flag for merging associations. ); static void SetAssociation( const PString & fileType, // File type (extension) to match. const PString & contentType // MIME content type string. ) { GetContentTypes().SetAt(fileType, contentType); } /** Look up the file type to MIME content type association dictionary and return the MIME content type string. If the file type is not found in the dictionary then the string "application/octet-stream" is returned. @return MIME content type for file type. */ static PString GetContentType( const PString & fileType // File type (extension) to look up. ); private: static PStringToString & GetContentTypes();};/** This class is used to encode/decode data using the MIME standard base64 encoding mechanism as defined in RFC1521. To encode a large block of data use the following seqeunce:\begin{verbatim} PBase64 base; base.StartEncoding(); while (Read(dataChunk)) { base.ProcessEncoding(dataChunk); out << base.GetEncodedString(); } out << base.CompleteEncoding();\end{verbatim}
if smaller blocks that fit easily in memory are to be encoded the #Encode()# functions can be used to everything in one go. To decode a large block of data use the following sequence:\begin{verbatim}
PBase64 base; base.StartDecoding(); while (Read(str) && ProcessDecoding(str)) Write(base.GetDecodedData()); Write(base.GetDecodedData());\end{verbatim}
if smaller blocks that fit easily in memory are to be decoded the #Decode()# functions can be used to everything in one go. */class PBase64 : public PObject{ PCLASSINFO(PBase64, PObject); public: /** Construct a base 64 encoder/decoder and initialise both encode and decode members as in #StartEncoding()# and #StartDecoding()#. */ PBase64(); void StartEncoding( BOOL useCRLFs = TRUE // Use CR, LF pairs in end of line characters. ); // Begin a base 64 encoding operation, initialising the object instance. void ProcessEncoding( const PString & str // String to be encoded ); void ProcessEncoding( const char * cstr // C String to be encoded ); void ProcessEncoding( const PBYTEArray & data // Data block to be encoded ); void ProcessEncoding( const void * dataBlock, // Pointer to data to be encoded PINDEX length // Length of the data block. ); // Incorporate the specified data into the base 64 encoding. /** Get the partial Base64 string for the data encoded so far. @return Base64 encoded string for the processed data. */ PString GetEncodedString(); /** Complete the base 64 encoding and return the remainder of the encoded Base64 string. Previous data may have been already removed by the #GetInterim()# function. @return Base64 encoded string for the processed data. */ PString CompleteEncoding(); static PString Encode( const PString & str // String to be encoded to Base64 ); static PString Encode( const char * cstr // C String to be encoded to Base64 ); static PString Encode( const PBYTEArray & data // Data block to be encoded to Base64 ); static PString Encode( const void * dataBlock, // Pointer to data to be encoded to Base64 PINDEX length // Length of the data block. ); // Encode the data in memory to Base 64 data returnin the string. void StartDecoding(); // Begin a base 64 decoding operation, initialising the object instance. /** Incorporate the specified data into the base 64 decoding. @return TRUE if block was last in the Base64 encoded string. */ BOOL ProcessDecoding( const PString & str // String to be encoded ); BOOL ProcessDecoding( const char * cstr // C String to be encoded ); /** Get the data decoded so far from the Base64 strings processed. @return Decoded data for the processed Base64 string. */ BOOL GetDecodedData( void * dataBlock, // Pointer to data to be decoded from base64 PINDEX length // Length of the data block. ); PBYTEArray GetDecodedData(); /** Return a flag to indicate that the input was decoded without any extraneous or illegal characters in it that were ignored. This does not mean that the data is not valid, only that it is suspect. @return Decoded data for the processed Base64 string. */ BOOL IsDecodeOK() { return perfectDecode; } /** Convert a printable text string to binary data using the Internet MIME standard base 64 content transfer encoding. The base64 string is checked and TRUE returned if all perfectly correct. If FALSE is returned then the string had extraneous or illegal characters in it that were ignored. This does not mean that the data is not valid, only that it is suspect. @return Base 64 string decoded from input string. */ static PString Decode( const PString & str // Encoded base64 string to be decoded. ); static BOOL Decode( const PString & str, // Encoded base64 string to be decoded. PBYTEArray & data // Converted binary data from base64. ); static BOOL Decode( const PString & str, // Encoded base64 string to be decoded. void * dataBlock, // Pointer to data to be decoded from base64 PINDEX length // Length of the data block. ); private: void OutputBase64(const BYTE * data); PString encodedString; PINDEX encodeLength; BYTE saveTriple[3]; PINDEX saveCount; PINDEX nextLine; BOOL useCRLFs; BOOL perfectDecode; PINDEX quadPosition; PBYTEArray decodedData; PINDEX decodeSize;};#endif// End Of File ///////////////////////////////////////////////////////////////
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -