/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM nsIImapProtocol.idl
 */

#ifndef __gen_nsIImapProtocol_h__
#define __gen_nsIImapProtocol_h__


#ifndef __gen_nsISupports_h__
#include "nsISupports.h"
#endif

#ifndef __gen_nsIStreamListener_h__
#include "nsIStreamListener.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif
class nsIUrlListener; /* forward declaration */

class nsIURI; /* forward declaration */

class nsIImapUrl; /* forward declaration */

class nsIEventTarget; /* forward declaration */

class nsIImapProtocol; /* forward declaration */

class nsIImapIncomingServer; /* forward declaration */

class nsIMsgFolder; /* forward declaration */

class nsIImapHostSessionList; /* forward declaration */

class nsIMsgWindow; /* forward declaration */


/* starting interface:    nsIImapProtocol */
#define NS_IIMAPPROTOCOL_IID_STR "49816377-9319-48f8-8c90-7efadff8e628"

#define NS_IIMAPPROTOCOL_IID \
  {0x49816377, 0x9319, 0x48f8, \
    { 0x8c, 0x90, 0x7e, 0xfa, 0xdf, 0xf8, 0xe6, 0x28 }}

class NS_NO_VTABLE NS_SCRIPTABLE nsIImapProtocol : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IIMAPPROTOCOL_IID)

  /* void LoadImapUrl (in nsIURI aUrl, in nsISupports aConsumer); */
  NS_SCRIPTABLE NS_IMETHOD LoadImapUrl(nsIURI *aUrl, nsISupports *aConsumer) = 0;

  /**
   * IsBusy returns true if the connection is currently processing a url
   * and false otherwise.
   */
  /* void IsBusy (out boolean aIsConnectionBusy, out boolean isInboxConnection); */
  NS_SCRIPTABLE NS_IMETHOD IsBusy(PRBool *aIsConnectionBusy NS_OUTPARAM, PRBool *isInboxConnection NS_OUTPARAM) = 0;

  /** Protocol instance examines the url, looking at the host name,
   * user name and folder the action would be on in order to figure out
   * if it can process this url. I decided to push the semantics about
   * whether a connection can handle a url down into the connection level
   * instead of in the connection cache.
   */
  /* void CanHandleUrl (in nsIImapUrl aImapUrl, out boolean aCanRunUrl, out boolean hasToWait); */
  NS_SCRIPTABLE NS_IMETHOD CanHandleUrl(nsIImapUrl *aImapUrl, PRBool *aCanRunUrl NS_OUTPARAM, PRBool *hasToWait NS_OUTPARAM) = 0;

  /**
   * Right now, initialize requires the event queue of the UI thread,
   * or more importantly the event queue of the consumer of the imap
   * protocol data. The protocol also needs a host session list.
   */
  /* void Initialize (in nsIImapHostSessionList aHostSessionList, in nsIImapIncomingServer aServer, in nsIEventTarget aSinkEventTarget); */
  NS_SCRIPTABLE NS_IMETHOD Initialize(nsIImapHostSessionList *aHostSessionList, nsIImapIncomingServer *aServer, nsIEventTarget *aSinkEventTarget) = 0;

  /* void NotifyHdrsToDownload (out unsigned long keys, in unsigned long keyCount); */
  NS_SCRIPTABLE NS_IMETHOD NotifyHdrsToDownload(PRUint32 *keys NS_OUTPARAM, PRUint32 keyCount) = 0;

  /* void NotifyBodysToDownload (out unsigned long keys, in unsigned long count); */
  NS_SCRIPTABLE NS_IMETHOD NotifyBodysToDownload(PRUint32 *keys NS_OUTPARAM, PRUint32 count) = 0;

  /* void GetFlagsForUID (in unsigned long uid, out boolean foundIt, out unsigned short flags, out string customFlags); */
  NS_SCRIPTABLE NS_IMETHOD GetFlagsForUID(PRUint32 uid, PRBool *foundIt NS_OUTPARAM, PRUint16 *flags NS_OUTPARAM, char **customFlags NS_OUTPARAM) = 0;

  /* void GetSupportedUserFlags (out unsigned short flags); */
  NS_SCRIPTABLE NS_IMETHOD GetSupportedUserFlags(PRUint16 *flags NS_OUTPARAM) = 0;

  /* void GetRunningImapURL (out nsIImapUrl aImapUrl); */
  NS_SCRIPTABLE NS_IMETHOD GetRunningImapURL(nsIImapUrl **aImapUrl NS_OUTPARAM) = 0;

  /* void GetRunningUrl (out nsIURI aUrl); */
  NS_SCRIPTABLE NS_IMETHOD GetRunningUrl(nsIURI **aUrl NS_OUTPARAM) = 0;

  /**
   * Tell thread to die - only call from the UI thread
   *
   * @param aIsSafeToClose false if we're dropping a timed out connection.
   */
  /* void tellThreadToDie (in boolean aIsSafeToClose); */
  NS_SCRIPTABLE NS_IMETHOD TellThreadToDie(PRBool aIsSafeToClose) = 0;

  /* void GetLastActiveTimeStamp (out PRTime aTimeStamp); */
  NS_SCRIPTABLE NS_IMETHOD GetLastActiveTimeStamp(PRTime *aTimeStamp NS_OUTPARAM) = 0;

  /* void pseudoInterruptMsgLoad (in nsIMsgFolder imapFolder, in nsIMsgWindow aMsgWindow, out boolean interrupted); */
  NS_SCRIPTABLE NS_IMETHOD PseudoInterruptMsgLoad(nsIMsgFolder *imapFolder, nsIMsgWindow *aMsgWindow, PRBool *interrupted NS_OUTPARAM) = 0;

  /* void GetSelectedMailboxName (out string folderName); */
  NS_SCRIPTABLE NS_IMETHOD GetSelectedMailboxName(char **folderName NS_OUTPARAM) = 0;

  /* void ResetToAuthenticatedState (); */
  NS_SCRIPTABLE NS_IMETHOD ResetToAuthenticatedState(void) = 0;

  /* void OverrideConnectionInfo (in wstring pHost, in unsigned short pPort, in string pCookieData); */
  NS_SCRIPTABLE NS_IMETHOD OverrideConnectionInfo(const PRUnichar *pHost, PRUint16 pPort, const char *pCookieData) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIImapProtocol, NS_IIMAPPROTOCOL_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIIMAPPROTOCOL \
  NS_SCRIPTABLE NS_IMETHOD LoadImapUrl(nsIURI *aUrl, nsISupports *aConsumer); \
  NS_SCRIPTABLE NS_IMETHOD IsBusy(PRBool *aIsConnectionBusy NS_OUTPARAM, PRBool *isInboxConnection NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD CanHandleUrl(nsIImapUrl *aImapUrl, PRBool *aCanRunUrl NS_OUTPARAM, PRBool *hasToWait NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD Initialize(nsIImapHostSessionList *aHostSessionList, nsIImapIncomingServer *aServer, nsIEventTarget *aSinkEventTarget); \
  NS_SCRIPTABLE NS_IMETHOD NotifyHdrsToDownload(PRUint32 *keys NS_OUTPARAM, PRUint32 keyCount); \
  NS_SCRIPTABLE NS_IMETHOD NotifyBodysToDownload(PRUint32 *keys NS_OUTPARAM, PRUint32 count); \
  NS_SCRIPTABLE NS_IMETHOD GetFlagsForUID(PRUint32 uid, PRBool *foundIt NS_OUTPARAM, PRUint16 *flags NS_OUTPARAM, char **customFlags NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GetSupportedUserFlags(PRUint16 *flags NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GetRunningImapURL(nsIImapUrl **aImapUrl NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GetRunningUrl(nsIURI **aUrl NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD TellThreadToDie(PRBool aIsSafeToClose); \
  NS_SCRIPTABLE NS_IMETHOD GetLastActiveTimeStamp(PRTime *aTimeStamp NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD PseudoInterruptMsgLoad(nsIMsgFolder *imapFolder, nsIMsgWindow *aMsgWindow, PRBool *interrupted NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD GetSelectedMailboxName(char **folderName NS_OUTPARAM); \
  NS_SCRIPTABLE NS_IMETHOD ResetToAuthenticatedState(void); \
  NS_SCRIPTABLE NS_IMETHOD OverrideConnectionInfo(const PRUnichar *pHost, PRUint16 pPort, const char *pCookieData); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIIMAPPROTOCOL(_to) \
  NS_SCRIPTABLE NS_IMETHOD LoadImapUrl(nsIURI *aUrl, nsISupports *aConsumer) { return _to LoadImapUrl(aUrl, aConsumer); } \
  NS_SCRIPTABLE NS_IMETHOD IsBusy(PRBool *aIsConnectionBusy NS_OUTPARAM, PRBool *isInboxConnection NS_OUTPARAM) { return _to IsBusy(aIsConnectionBusy, isInboxConnection); } \
  NS_SCRIPTABLE NS_IMETHOD CanHandleUrl(nsIImapUrl *aImapUrl, PRBool *aCanRunUrl NS_OUTPARAM, PRBool *hasToWait NS_OUTPARAM) { return _to CanHandleUrl(aImapUrl, aCanRunUrl, hasToWait); } \
  NS_SCRIPTABLE NS_IMETHOD Initialize(nsIImapHostSessionList *aHostSessionList, nsIImapIncomingServer *aServer, nsIEventTarget *aSinkEventTarget) { return _to Initialize(aHostSessionList, aServer, aSinkEventTarget); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyHdrsToDownload(PRUint32 *keys NS_OUTPARAM, PRUint32 keyCount) { return _to NotifyHdrsToDownload(keys, keyCount); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyBodysToDownload(PRUint32 *keys NS_OUTPARAM, PRUint32 count) { return _to NotifyBodysToDownload(keys, count); } \
  NS_SCRIPTABLE NS_IMETHOD GetFlagsForUID(PRUint32 uid, PRBool *foundIt NS_OUTPARAM, PRUint16 *flags NS_OUTPARAM, char **customFlags NS_OUTPARAM) { return _to GetFlagsForUID(uid, foundIt, flags, customFlags); } \
  NS_SCRIPTABLE NS_IMETHOD GetSupportedUserFlags(PRUint16 *flags NS_OUTPARAM) { return _to GetSupportedUserFlags(flags); } \
  NS_SCRIPTABLE NS_IMETHOD GetRunningImapURL(nsIImapUrl **aImapUrl NS_OUTPARAM) { return _to GetRunningImapURL(aImapUrl); } \
  NS_SCRIPTABLE NS_IMETHOD GetRunningUrl(nsIURI **aUrl NS_OUTPARAM) { return _to GetRunningUrl(aUrl); } \
  NS_SCRIPTABLE NS_IMETHOD TellThreadToDie(PRBool aIsSafeToClose) { return _to TellThreadToDie(aIsSafeToClose); } \
  NS_SCRIPTABLE NS_IMETHOD GetLastActiveTimeStamp(PRTime *aTimeStamp NS_OUTPARAM) { return _to GetLastActiveTimeStamp(aTimeStamp); } \
  NS_SCRIPTABLE NS_IMETHOD PseudoInterruptMsgLoad(nsIMsgFolder *imapFolder, nsIMsgWindow *aMsgWindow, PRBool *interrupted NS_OUTPARAM) { return _to PseudoInterruptMsgLoad(imapFolder, aMsgWindow, interrupted); } \
  NS_SCRIPTABLE NS_IMETHOD GetSelectedMailboxName(char **folderName NS_OUTPARAM) { return _to GetSelectedMailboxName(folderName); } \
  NS_SCRIPTABLE NS_IMETHOD ResetToAuthenticatedState(void) { return _to ResetToAuthenticatedState(); } \
  NS_SCRIPTABLE NS_IMETHOD OverrideConnectionInfo(const PRUnichar *pHost, PRUint16 pPort, const char *pCookieData) { return _to OverrideConnectionInfo(pHost, pPort, pCookieData); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIIMAPPROTOCOL(_to) \
  NS_SCRIPTABLE NS_IMETHOD LoadImapUrl(nsIURI *aUrl, nsISupports *aConsumer) { return !_to ? NS_ERROR_NULL_POINTER : _to->LoadImapUrl(aUrl, aConsumer); } \
  NS_SCRIPTABLE NS_IMETHOD IsBusy(PRBool *aIsConnectionBusy NS_OUTPARAM, PRBool *isInboxConnection NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsBusy(aIsConnectionBusy, isInboxConnection); } \
  NS_SCRIPTABLE NS_IMETHOD CanHandleUrl(nsIImapUrl *aImapUrl, PRBool *aCanRunUrl NS_OUTPARAM, PRBool *hasToWait NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->CanHandleUrl(aImapUrl, aCanRunUrl, hasToWait); } \
  NS_SCRIPTABLE NS_IMETHOD Initialize(nsIImapHostSessionList *aHostSessionList, nsIImapIncomingServer *aServer, nsIEventTarget *aSinkEventTarget) { return !_to ? NS_ERROR_NULL_POINTER : _to->Initialize(aHostSessionList, aServer, aSinkEventTarget); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyHdrsToDownload(PRUint32 *keys NS_OUTPARAM, PRUint32 keyCount) { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyHdrsToDownload(keys, keyCount); } \
  NS_SCRIPTABLE NS_IMETHOD NotifyBodysToDownload(PRUint32 *keys NS_OUTPARAM, PRUint32 count) { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyBodysToDownload(keys, count); } \
  NS_SCRIPTABLE NS_IMETHOD GetFlagsForUID(PRUint32 uid, PRBool *foundIt NS_OUTPARAM, PRUint16 *flags NS_OUTPARAM, char **customFlags NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFlagsForUID(uid, foundIt, flags, customFlags); } \
  NS_SCRIPTABLE NS_IMETHOD GetSupportedUserFlags(PRUint16 *flags NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSupportedUserFlags(flags); } \
  NS_SCRIPTABLE NS_IMETHOD GetRunningImapURL(nsIImapUrl **aImapUrl NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRunningImapURL(aImapUrl); } \
  NS_SCRIPTABLE NS_IMETHOD GetRunningUrl(nsIURI **aUrl NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRunningUrl(aUrl); } \
  NS_SCRIPTABLE NS_IMETHOD TellThreadToDie(PRBool aIsSafeToClose) { return !_to ? NS_ERROR_NULL_POINTER : _to->TellThreadToDie(aIsSafeToClose); } \
  NS_SCRIPTABLE NS_IMETHOD GetLastActiveTimeStamp(PRTime *aTimeStamp NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetLastActiveTimeStamp(aTimeStamp); } \
  NS_SCRIPTABLE NS_IMETHOD PseudoInterruptMsgLoad(nsIMsgFolder *imapFolder, nsIMsgWindow *aMsgWindow, PRBool *interrupted NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->PseudoInterruptMsgLoad(imapFolder, aMsgWindow, interrupted); } \
  NS_SCRIPTABLE NS_IMETHOD GetSelectedMailboxName(char **folderName NS_OUTPARAM) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSelectedMailboxName(folderName); } \
  NS_SCRIPTABLE NS_IMETHOD ResetToAuthenticatedState(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->ResetToAuthenticatedState(); } \
  NS_SCRIPTABLE NS_IMETHOD OverrideConnectionInfo(const PRUnichar *pHost, PRUint16 pPort, const char *pCookieData) { return !_to ? NS_ERROR_NULL_POINTER : _to->OverrideConnectionInfo(pHost, pPort, pCookieData); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsImapProtocol : public nsIImapProtocol
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIIMAPPROTOCOL

  nsImapProtocol();

private:
  ~nsImapProtocol();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsImapProtocol, nsIImapProtocol)

nsImapProtocol::nsImapProtocol()
{
  /* member initializers and constructor code */
}

nsImapProtocol::~nsImapProtocol()
{
  /* destructor code */
}

/* void LoadImapUrl (in nsIURI aUrl, in nsISupports aConsumer); */
NS_IMETHODIMP nsImapProtocol::LoadImapUrl(nsIURI *aUrl, nsISupports *aConsumer)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void IsBusy (out boolean aIsConnectionBusy, out boolean isInboxConnection); */
NS_IMETHODIMP nsImapProtocol::IsBusy(PRBool *aIsConnectionBusy NS_OUTPARAM, PRBool *isInboxConnection NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void CanHandleUrl (in nsIImapUrl aImapUrl, out boolean aCanRunUrl, out boolean hasToWait); */
NS_IMETHODIMP nsImapProtocol::CanHandleUrl(nsIImapUrl *aImapUrl, PRBool *aCanRunUrl NS_OUTPARAM, PRBool *hasToWait NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void Initialize (in nsIImapHostSessionList aHostSessionList, in nsIImapIncomingServer aServer, in nsIEventTarget aSinkEventTarget); */
NS_IMETHODIMP nsImapProtocol::Initialize(nsIImapHostSessionList *aHostSessionList, nsIImapIncomingServer *aServer, nsIEventTarget *aSinkEventTarget)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void NotifyHdrsToDownload (out unsigned long keys, in unsigned long keyCount); */
NS_IMETHODIMP nsImapProtocol::NotifyHdrsToDownload(PRUint32 *keys NS_OUTPARAM, PRUint32 keyCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void NotifyBodysToDownload (out unsigned long keys, in unsigned long count); */
NS_IMETHODIMP nsImapProtocol::NotifyBodysToDownload(PRUint32 *keys NS_OUTPARAM, PRUint32 count)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void GetFlagsForUID (in unsigned long uid, out boolean foundIt, out unsigned short flags, out string customFlags); */
NS_IMETHODIMP nsImapProtocol::GetFlagsForUID(PRUint32 uid, PRBool *foundIt NS_OUTPARAM, PRUint16 *flags NS_OUTPARAM, char **customFlags NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void GetSupportedUserFlags (out unsigned short flags); */
NS_IMETHODIMP nsImapProtocol::GetSupportedUserFlags(PRUint16 *flags NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void GetRunningImapURL (out nsIImapUrl aImapUrl); */
NS_IMETHODIMP nsImapProtocol::GetRunningImapURL(nsIImapUrl **aImapUrl NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void GetRunningUrl (out nsIURI aUrl); */
NS_IMETHODIMP nsImapProtocol::GetRunningUrl(nsIURI **aUrl NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void tellThreadToDie (in boolean aIsSafeToClose); */
NS_IMETHODIMP nsImapProtocol::TellThreadToDie(PRBool aIsSafeToClose)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void GetLastActiveTimeStamp (out PRTime aTimeStamp); */
NS_IMETHODIMP nsImapProtocol::GetLastActiveTimeStamp(PRTime *aTimeStamp NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void pseudoInterruptMsgLoad (in nsIMsgFolder imapFolder, in nsIMsgWindow aMsgWindow, out boolean interrupted); */
NS_IMETHODIMP nsImapProtocol::PseudoInterruptMsgLoad(nsIMsgFolder *imapFolder, nsIMsgWindow *aMsgWindow, PRBool *interrupted NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void GetSelectedMailboxName (out string folderName); */
NS_IMETHODIMP nsImapProtocol::GetSelectedMailboxName(char **folderName NS_OUTPARAM)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void ResetToAuthenticatedState (); */
NS_IMETHODIMP nsImapProtocol::ResetToAuthenticatedState()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void OverrideConnectionInfo (in wstring pHost, in unsigned short pPort, in string pCookieData); */
NS_IMETHODIMP nsImapProtocol::OverrideConnectionInfo(const PRUnichar *pHost, PRUint16 pPort, const char *pCookieData)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


#endif /* __gen_nsIImapProtocol_h__ */
