123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- /* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
- /* vim:expandtab:shiftwidth=4:tabstop=4:
- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
- /*
- * This interface allows any module to access the routine
- * for MIME header parameter parsing (RFC 2231/5987)
- */
- #include "nsISupports.idl"
- [scriptable, uuid(9c9252a1-fdaf-40a2-9c2b-a3dc45e28dde)]
- interface nsIMIMEHeaderParam : nsISupports {
- /**
- * 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/5987-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>, the locale charset as fallback if
- * <code>TryLocaleCharset</code> is set, and null-padding as last resort
- * if all else fails.
- *
- * <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 put RFC 2047-encoded parameters. 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.
- *
- * <p>
- * Note that GetParameterHTTP skips some of the workarounds used for
- * mail (MIME) header fields, and thus SHOULD be used from non-mail
- * code.
- *
- *
- * @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
- * 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);
- /**
- * Like getParameter, but disabling encodings and workarounds specific to
- * MIME (as opposed to HTTP).
- */
- AString getParameterHTTP(in ACString aHeaderVal,
- in string aParamName,
- in ACString aFallbackCharset,
- in boolean aTryLocaleCharset,
- out string aLang);
- /**
- * Given the value of a header field parameter using the encoding
- * defined in RFC 5987, decode the value into a Unicode string, and extract
- * the optional language parameter.
- *
- * <p>
- * This function is purposefully picky; it will abort for all (most?)
- * invalid inputs. This is by design. In particular, it does not support
- * any character encodings other than UTF-8, in order not to promote
- * non-interoperable usage.
- *
- * <p>
- * Code that parses HTTP header fields (as opposed to MIME header fields)
- * should use this function.
- *
- * @param aParamVal a header field parameter to decode.
- * @param aLang will be set to the language part (possibly
- * empty).
- * @return the decoded parameter value.
- */
- AString decodeRFC5987Param(in ACString aParamVal,
- out ACString 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 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 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);
- /**
- * 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,
- * bool override, bool 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 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);
- };
|