Linux Mac OSX Windows

Implemented by


  
[scriptable, uuid(ddbbdfb8-a1c0-4dd5-a31b-5d2a7a3bb6ec)]
interface nsIMIMEHeaderParam : nsISupports

Methods

 
 Given a header parameter, decodes RFC 2047 style encoding (if it's 
 not obtained from RFC 2231 encoding),  converts it to
 UTF-8 and returns the result in UTF-8 if an attempt to extract 
 charset info. from a few different sources succeeds.
 Otherwise,  returns the input header value (in whatever encoding) 
 as it is except that  RFC 822 (using backslash) quotation is
 stripped off.
 <p>
 For internal use only. The only other place where this needs to be 
 invoked  is  <code>mime_decode_filename</code> in 
 mailnews/mime/src/mimehdrs.cpp defined as
 char * mime_decode_filename(char *name, const char *charset, 
                             MimeDisplayOptions *opt) 

 @param aParamValue      the value of a parameter to decode and convert
 @param aCharset         charset obtained from RFC 2231 decoding  in which 
                         <code>aParamValue</code> is encoded. If null,
                         indicates that it needs to try RFC 2047, instead. 
 @param aDefaultCharset  MIME charset to use when aCharset is null and
                         cannot be obtained per RFC 2047 (most likely 
                         because 'bare' string is  used.)  Besides, it 
                         overrides aCharset/MIME charset obtained from 
                         RFC 2047 if <code>aOverrideCharset</code>  is set.
 @param aOverrideCharset When set, overrides MIME charset specified 
                         in RFC 2047 style encoding with 
                         <code>aDefaultCharset</code>
 @return                 decoded parameter 
[noscript] ACString decodeParameter(in ACString aParamValue, in string aCharset, in string aDefaultCharset, in boolean aOverrideCharset)
 
 Given a header value, decodes RFC 2047-style encoding and
 returns the decoded header value in UTF-8 if either it's
 RFC-2047-encoded or aDefaultCharset is given. Otherwise,
 returns the input header value (in whatever encoding) 
 as it is except that  RFC 822 (using backslash) quotation and 
 CRLF (if aEatContinuation is set) are stripped away
 <p>
 For internal use only. The only other place where this needs to be 
 invoked  is  <code>MIME_DecodeMimeHeader</code> in 
 mailnews/mime/src/mimehdrs.cpp defined as
 char * Mime_DecodeMimeHeader(char *header_val, const char *charset, 
                              PRBool override, PRBool eatcontinuation)

 @param aHeaderVal       a header value to decode
 @param aDefaultCharset  MIME charset to use in place of MIME charset
                         specified in RFC 2047 style encoding
                         when <code>aOverrideCharset</code> is set.
 @param aOverrideCharset When set, overrides MIME charset specified 
                         in RFC 2047 style encoding with <code>aDefaultCharset</code>
 @param aEatContinuation When set, removes CR/LF
 @return                 decoded header value
[noscript] ACString decodeRFC2047Header(in string aHeaderVal, in string aDefaultCharset, in boolean aOverrideCharset, in boolean aEatContinuation)
 
 Given the value of a single header field  (such as
 Content-Disposition and Content-Type) and the name of a parameter
 (e.g. filename, name, charset), returns the value of the parameter.
 The value is obtained by decoding RFC 2231-style encoding,
 RFC 2047-style encoding, and converting to UniChar(UTF-16)
 from charset specified in RFC 2231/2047 encoding, UTF-8, 
 <code>aFallbackCharset</code> and the locale charset as the last
 resort if <code>TryLocaleCharset</code> is set.

 <p> 
 This method internally invokes <code>getParameterInternal</code>, 
 However, it does not stop at decoding RFC 2231 (the task for
 <code>getParameterInternal</code> but tries to cope
 with several non-standard-compliant cases mentioned below.

 <p>
 Note that a lot of MUAs and HTTP servers put RFC 2047-encoded parameters 
 in mail headers and HTTP headers. Unfortunately, this includes Mozilla 
 as of 2003-05-30. Even more standard-ignorant MUAs, web servers and 
 application servers put 'raw 8bit characters'. This will try to cope 
 with all these cases as gracefully as possible. Additionally, it 
 returns the language tag if the parameter is encoded per RFC 2231 and 
 includes lang.



 @param  aHeaderVal        a header string to get the value of a parameter 
                           from.
 @param  aParamName        the name of a MIME header parameter (e.g. 
                           filename, name, charset). If empty,  returns 
                           the first (possibly) _unnamed_ 'parameter'.
 @param  aFallbackCharset  fallback charset to try if  the string after
                           RFC 2231/2047 decoding or the raw 8bit 
                           string is not UTF-8
 @param  aTryLocaleCharset If set, makes yet another attempt 
                           with the locale charset.
 @param  aLang             If non-null, assigns it to a pointer 
                           to a string containing the value of language 
                           obtained from RFC 2231 parsing. Caller has to 
                           nsMemory::Free it.
 @return the value of <code>aParamName</code> in Unichar(UTF-16).
AString getParameter(in ACString aHeaderVal, in string aParamName, in ACString aFallbackCharset, in boolean aTryLocaleCharset, out string aLang)
 
 Given the value of a single header field  (such as
 Content-Disposition and Content-Type) and the name of a parameter
 (e.g. filename, name, charset), returns the value of the parameter 
 after decoding RFC 2231-style encoding. 
 <p>
 For <strong>internal use only</strong>. The only other place where 
 this needs to be  invoked  is  |MimeHeaders_get_parameter| in 
 mailnews/mime/src/mimehdrs.cpp defined as 
 char * MimeHeaders_get_parameter (const char *header_value, 
                                   const char *parm_name,
                                   char **charset, char **language)

 Otherwise, this method would have been made static.

 @param  aHeaderVal  a header string to get the value of a parameter from.
 @param  aParamName  the name of a MIME header parameter (e.g. 
                     filename, name, charset). If empty,  returns 
                     the first (possibly) _unnamed_ 'parameter'.
 @param  aCharset    If non-null, it gets assigned a new pointer
                     to a string containing the value of charset obtained
                     from RFC 2231 parsing. Caller has to nsMemory::Free it.
 @param  aLang       If non-null, it gets assigned a new pointer
                     to a string containing the value of language obtained
                     from RFC 2231 parsing. Caller has to nsMemory::Free it.
 @return             the value of <code>aParamName</code> after
                     RFC 2231 decoding but without charset conversion.
[noscript] string getParameterInternal(in string aHeaderVal, in string aParamName, out string aCharset, out string aLang)