/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 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/. */

#include "nsISupports.idl"

typedef unsigned long nsMsgKey;
typedef unsigned long nsMsgViewIndex;

typedef long nsMsgSearchScopeValue;

typedef long nsMsgPriorityValue;
typedef long nsMsgSocketTypeValue;
typedef long nsMsgAuthMethodValue;

typedef unsigned long nsMsgJunkStatus;

typedef unsigned long nsMsgJunkScore;

[scriptable, uuid(94C0D8D8-2045-11d3-8A8F-0060B0FC04D2)]
interface nsMsgPriority : nsISupports {
    const nsMsgPriorityValue notSet = 0;
    const nsMsgPriorityValue none = 1;
    const nsMsgPriorityValue lowest = 2;
    const nsMsgPriorityValue low = 3;
    const nsMsgPriorityValue normal = 4;
    const nsMsgPriorityValue high = 5;
    const nsMsgPriorityValue highest = 6;
    //the default priority (if none) is set in the message
    const nsMsgPriorityValue Default = 4;
};

/**
 * Defines whether to use SSL or STARTTLS or not.
 * Used by @see nsIMsgIncomingServer.socketType
 * and @see nsISmtpServer.socketType
 */
[scriptable, uuid(bc78bc74-1b34-48e8-ac2b-968e8dff1aeb)]
interface nsMsgSocketType : nsISupports {
    /// No SSL or STARTTLS
    const nsMsgSocketTypeValue plain = 0;
    /// Use TLS via STARTTLS, but only if server offers it.
    /// @deprecated This is vulnerable to MITM attacks
    const nsMsgSocketTypeValue trySTARTTLS = 1;
    /// Insist on TLS via STARTTLS.
    /// Uses normal port.
    const nsMsgSocketTypeValue alwaysSTARTTLS = 2;
    /// Connect via SSL.
    /// Needs special SSL port.
    const nsMsgSocketTypeValue SSL = 3;
};

/**
 * Defines which authentication schemes we should try.
 * Used by @see nsIMsgIncomingServer.authMethod
 * and @see nsISmtpServer.authMethod
 */
[scriptable, uuid(4a10e647-d179-4a53-b7ef-df575ff5f405)]
interface nsMsgAuthMethod : nsISupports {
    // 0 is intentionally undefined and invalid
    /// No login needed. E.g. IP-address-based.
    const nsMsgAuthMethodValue none = 1;
    /// Do not use AUTH commands (e.g. AUTH=PLAIN),
    /// but the original login commands that the protocol specified
    /// (POP: "USER"/"PASS", IMAP: "login", not valid for SMTP)
    const nsMsgAuthMethodValue old = 2;
    /// password in the clear. AUTH=PLAIN/LOGIN or old-style login.
    const nsMsgAuthMethodValue passwordCleartext = 3;
    /// hashed password. CRAM-MD5, DIGEST-MD5
    const nsMsgAuthMethodValue passwordEncrypted = 4;
    /// Kerberos / GSSAPI (Unix single-signon)
    const nsMsgAuthMethodValue GSSAPI = 5;
    /// NTLM is a Windows single-singon scheme.
    /// Includes MSN / Passport.net, which is the same with a different name.
    const nsMsgAuthMethodValue NTLM = 6;
    /// Auth External is cert-based authentication
    const nsMsgAuthMethodValue External = 7;
    /// Encrypted password or Kerberos / GSSAPI or NTLM.
    /// @deprecated - for migration only.
    const nsMsgAuthMethodValue secure = 8;
    /// Let us pick any of the auth types supported by the server.
    /// Discouraged, because vulnerable to MITM attacks, even if server offers secure auth.
    const nsMsgAuthMethodValue anything = 9;

    /// Use OAuth2 to authenticate.
    const nsMsgAuthMethodValue OAuth2 = 10;
};

typedef long nsMsgViewSortOrderValue;
typedef long nsMsgViewSortTypeValue;
typedef long nsMsgViewTypeValue;
typedef long nsMsgViewFlagsTypeValue;
