/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Netscape Public
 * License Version 1.1 (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/NPL/
 *
 * 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 mozilla.org code.
 *
 * The Initial Developer of the Original Code is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation. All
 * Rights Reserved.
 *
 * Contributor(s): 
 */

#include "nsISupports.idl"

interface nsIDOMElement;
interface nsISOAPParameter;
interface nsISOAPFault;

[scriptable, uuid(99ec6691-535f-11d4-9a58-000064657374)]
interface nsISOAPResponse : nsISupports {

  /**
   * The DOM element representing the SOAP envelope in the response.
   * DOM methods may be used to access attributes and children of this
   * element. While the element and it's subtree are not readonly,
   * the expectation is that they will not be modified.
   */
  readonly attribute nsIDOMElement envelope;
  
  /**
   * A convenience attribute to obtain the DOM element representing 
   * the response envelope header, if one exists. NULL if no header
   * exists in the response.
   */
  readonly attribute nsIDOMElement header;

  /**
   * A convenience attribute to obtain the DOM element representing
   * the response envelope body. While DOM interfaces and methods may
   * be used to access body entries, the expectation is that the
   * <code>returnValue</code> property will be used if the response
   * represents the result of a RPC call.
   */ 
  readonly attribute nsIDOMElement body;

  /**
   * The status code returned by the underlying transport.
   */
  readonly attribute unsigned long status;

  /**
   * The target object on which the method was invoked. This URI
   * is generally used as the namespace to qualify the tagname of 
   * the element that is the single body entry of the SOAP response.
   */
  readonly attribute string targetObjectURI;

  /**
   * The name of the method that was invoked. The methodName is used as
   * the tagname for the element that is the single body entry of the
   * SOAP message.
   */
  readonly attribute string methodName;   

  /**
   * Did the response generate a fault?
   *
   * @returns Whether a fault was generated a not. If the return value
   *          is <code>true</code>, the fault details can be obtained
   *          from the <code>fault</code> property.
   */
  boolean generatedFault();

  /**
   * The fault returned in the response, if one was generated. NULL
   * if there was no fault.
   */
  readonly attribute nsISOAPFault fault;

  /**
   * The result from the first body entry in the response SOAP message.
   */
  readonly attribute nsISOAPParameter returnValue;

};

%{ C++
#define NS_SOAPRESPONSE_CID                         \
{ /* 87d21ec3-539d-11d4-9a59-00104bdf5339 */        \
  0x87d21ec3, 0x539d, 0x11d4,                       \
 {0x9a, 0x59, 0x00, 0x10, 0x4b, 0xdf, 0x53, 0x39} }
#define NS_SOAPRESPONSE_CONTRACTID \
"@mozilla.org/xmlextras/soap/response;1"
%}
