//===================================================================
// Microsoft ASP (Active Server Pages)
//
// Copyright 1996-1999 Microsoft Corporation. All Rights Reserved.
//
// File: asp.idl
//
// Neutral/English ASP Interfaces
//
// "Neutral" language is considered to be English.  We register
// this under LCID of 0 so the lcid before "library" has to match.
//===================================================================



//LIBID_Denali
[
uuid(D97A6DA0-A85C-11cf-83AE-00A0C90C2BD8)
	, helpstring("Microsoft Active Server Pages Object Library")
	, lcid(0x0000)
	, version(3.0)
]
library ASPTypeLibrary
	{
	importlib ("stdole2.tlb");
	/*
	 * IID_IStringList
	 *      intermediate object returned by the Request object
	 */
	[
	uuid(D97A6DA0-A85D-11cf-83AE-00A0C90C2BD8)
		, helpstring("A string containing comma separated values")
		, odl
		, oleautomation
		, dual
		, hidden
	]
	interface IStringList : IDispatch
		{
		// Item (default property) (r/o)
		[propget, id(0)]
			HRESULT Item([optional, in] VARIANT i, [out, retval] VARIANT *pVariantReturn);

		// Count (r/o)
		[propget, helpstring("Number of items in the list of strings")]
			HRESULT Count([out, retval] int *cStrRet);

		// Enumerator (r/o)
		[propget, id(-4), restricted]
			HRESULT _NewEnum([out, retval] IUnknown **ppEnumReturn);
		};


	/*
	 * IID_IRequestDictionary
	 *
	 * QueryString, ServerVariables, Form, and Request.Cookies are all of this type.
	 * Request.Item is not because it does not support an optional key or enumeration.
	 */
	[
	uuid(D97A6DA0-A85F-11df-83AE-00A0C90C2BD8)
		, helpstring("Dictionary for Request collections")
		, odl
		, oleautomation
		, dual
		, hidden
	]
	interface IRequestDictionary : IDispatch
		{
		// Item (r/o)
		[propget, id(0)]
			HRESULT Item([optional, in] VARIANT Var, [out, retval] VARIANT *pVariantReturn);

		// Enumerator (r/o)
		[propget, id(-4), restricted]
			HRESULT _NewEnum([out, retval] IUnknown **ppEnumReturn);

		// Count (r/o)
		[propget, helpstring("Number of items in the dictionary of variants")]
			HRESULT Count([out, retval] int *cStrRet);

		// Key (r/o)
		[propget]
			HRESULT Key([in] VARIANT VarKey, [out, retval] VARIANT *pvar);

		};


	/*
	 * IID_IRequest
	 *
	 * The main (combined) collection
	 */
	[
	uuid(D97A6DA0-A861-11cf-93AE-00A0C90C2BD8)
		, odl
        , oleautomation
        , dual
		, hidden
	]
	interface IRequest : IDispatch
		{
		// Item (r/o)
		[propget, id(0)]
			HRESULT Item([in] BSTR bstrVar, [out, retval] IDispatch **ppObjReturn);

		// QueryString (r/o)
		[propget, helpstring("Retrieves the values of the variables in the HTTP query string.")]
			HRESULT QueryString([out, retval] IRequestDictionary **ppDictReturn);

		// Form (r/o)
		[propget, helpstring("Retrieves the values of form elements posted to the HTTP request body by a form using the POST method.")]
			HRESULT Form([out, retval] IRequestDictionary **ppDictReturn);

		// Body (compatibility hack for MSN) (r/o)
		[propget, hidden]
			HRESULT Body([out, retval] IRequestDictionary **ppDictReturn);

		// ServerVariables (r/o)
		[propget, helpstring("Retrieves the values of predetermined environment variables.")]
			HRESULT ServerVariables([out, retval] IRequestDictionary **ppDictReturn);
		
		// ClientCertificate (r/o)
		[propget, helpstring("Collection of client certificate fields (specified in the X.509 standard) issued by the client.")]
			HRESULT ClientCertificate([out, retval] IRequestDictionary **ppDictReturn);
		
		// Cookies (r/o)
		[propget, helpstring("Collection of cookies sent as part of the Request (read only).")]
			HRESULT Cookies([out, retval] IRequestDictionary **ppDictReturn);

		// BytesTotal (r/o)
		[propget, helpstring("Specifies the total number of bytes the client sent in the body of the request.")]
		HRESULT TotalBytes([out, retval] long *pcbTotal);
	
		//
		//Methods
		//

		// BinaryRead
		[helpstring("Reads data returned by the client in a POST request")]
			HRESULT BinaryRead([in, out] VARIANT *pvarCountToRead, [out, retval] VARIANT *pvarReturn);

		};


	/*
	 * CLSID_Request
	 *
	 * The Request class
	 */
	[
	uuid(920c25d0-25d9-11d0-a55f-00a0c90c2091),
		, helpstring("Retrieves the values that the client browser passed to the server during an HTTP request.")
		, noncreatable
	]
	coclass Request
		{
		interface IRequest;
		}


	/*
	 * IID_IReadCookie
	 *
	 * intermediate object returned by Request.Cookies
	 */
	[
	uuid(71EAF260-0CE0-11D0-A53E-00A0C90C2091),
		, helpstring("Intermediate object for Request.Cookies")
		, odl
		, oleautomation
		, dual
		, hidden
	]
	interface IReadCookie : IDispatch
		{
		// Item (r/o)
		[propget, id(0)]
			HRESULT Item([optional, in] VARIANT Var, [out, retval] VARIANT *pVariantReturn);

		// HasKeys (r/o)
		[propget, helpstring("Indicates whether the cookie has keys (is a cookie dictionary).")]
			HRESULT HasKeys([out, retval] VARIANT_BOOL *pfHasKeys);

		// Enumerator (r/o)
		[propget, id(-4), restricted]
			HRESULT _NewEnum([out, retval] IUnknown **ppEnumReturn);

		// Count (r/o)
		[propget, helpstring("Number of items in the cookie dictionary")]
			HRESULT Count([out, retval] int *cStrRet);

		// Key (r/o)
		[propget]
			HRESULT Key([in] VARIANT VarKey, [out, retval] VARIANT *pvar);
		};


	/*
	 * IID_IWriteCookie
	 *      intermediate object returned by Response.Cookies
	 */
	[
	uuid(D97A6DA0-A862-11cf-84AE-00A0C90C2BD8)
		, helpstring("Intermediate object for Response.Cookies")
		, odl
		, oleautomation
		, dual
		, hidden
	]
	interface IWriteCookie : IDispatch
		{
		// Item (w/o)
		[propput, id(0)]
			HRESULT Item([optional, in] VARIANT key, [in] BSTR bstrValue);

		// Expires (w/o)
		[propput, helpstring("Expires the cookie at the specified date and time.")]
			HRESULT Expires([in] DATE dtExpires);

		// Domain (w/o)
		[propput, helpstring("Limits the cookie to the specified Domain.")]
			HRESULT Domain([in] BSTR bstrDomain);

		// Path (w/o)
		[propput, helpstring("Limits the cookie to the specified Path (defaults to Application path).")]
			HRESULT Path([in] BSTR bstrPath);

		// Secure (w/o)
		[propput, helpstring("Indicates whether the cookie is Secure.")]
			HRESULT Secure([in] VARIANT_BOOL fSecure);

		// HasKeys (r/o)
		[propget, helpstring("Indicates whether the cookie has keys (is a cookie dictionary).")]
			HRESULT HasKeys([out, retval] VARIANT_BOOL *pfHasKeys);

		// Enumerator (r/o)
		[propget, id(-4), restricted]
			HRESULT _NewEnum([out, retval] IUnknown **ppEnumReturn);
		}


	/*
	 * IID_IResponse
	 * 'interface' entries must have 'odl' attribute
	 */
	[
	uuid(D97A6DA0-A864-11cf-83BE-00A0C90C2BD8)
		, odl
	    , oleautomation
        , dual
		, hidden
	]
	interface IResponse : IDispatch
		{

		//
		//
		//Properties
		//
		//

		// Buffer (r/w)
		[propget, helpstring("Indicates whether page output is sent immediately to the client or is held in a buffer until the server has finished processing the page.")]
			HRESULT Buffer([out, retval] VARIANT_BOOL* fIsBuffering);
		[propput]
			HRESULT Buffer([in] VARIANT_BOOL fIsBuffering);

		// ContentType (r/w)
		[propget, helpstring("Specifies the HTTP content type for the response.")]
			HRESULT ContentType([out, retval] BSTR *pbstrContentTypeRet);
		[propput]
			HRESULT ContentType([in] BSTR bstrContentType);

		// Expires (r/w)
		[propget, helpstring("Specifies the length of time (in minutes) before a page cached on a browser expires.")]
			HRESULT Expires([out, retval] VARIANT *pvarExpiresMinutesRet);
		[propput]
			HRESULT Expires([in] long lExpiresMinutes);

		// ExpiresAbsolute (r/w)
		[propget, helpstring("Specifies the date and time at which a page cached on a browser expires.")]
			HRESULT ExpiresAbsolute([out, retval] VARIANT *pvarExpiresRet);
		[propput]
			HRESULT ExpiresAbsolute([in] DATE dtExpires);

		[helpstring("Sets the value of cookies sent as part of the Response."), propget]
			HRESULT Cookies([out, retval] IRequestDictionary **ppCookies);

		// Status (r/w)
		[propget, helpstring("Specifies the value of the status line returned by the server. Status values are defined in the HTTP specification.")]
			HRESULT Status([out, retval] BSTR *pbstrStatusRet);
		[propput]
			HRESULT Status([in] BSTR bstrStatus);

		//
		//Methods
		//

		// Add
		[hidden]
			HRESULT Add([in] BSTR bstrHeaderValue, [in] BSTR bstrHeaderName);

		// AddHeader
		[helpstring("Adds an HTTP header with a specified value.")]
			HRESULT AddHeader([in] BSTR bstrHeaderName, [in] BSTR bstrHeaderValue);

		// AppendToLog
		[helpstring("Adds a string to the end of the Web server log entry for this Request.")]
			HRESULT AppendToLog([in] BSTR bstrLogEntry);

		// BinaryWrite
		[helpstring("Writes content without any character (Unicode to ANSI) conversion.")]
			HRESULT BinaryWrite([in] VARIANT varInput);

		// Clear
		[helpstring("Erases any buffered content, leaving the HTTP headers intact.")]
			HRESULT Clear(void);

		// End
		[helpstring("Causes Active Server Pages to stop processing and return any buffered output.")]
			HRESULT End(void);

		// Flush
		[helpstring("Sends buffered output immediately.")]
			HRESULT Flush(void);

		// Redirect
		[helpstring("Causes the browser to attempt to connect to a different URL.")]
			HRESULT Redirect([in] BSTR bstrURL);

		// Write
		[helpstring("Writes specified text to the current HTTP output.")]
			HRESULT Write([in] VARIANT varText);

		// WriteBlock
		[hidden]
			HRESULT WriteBlock([in] short iBlockNumber);

		// IsClientConnected
		[helpstring("A read-only property that indicates if the client has disconnected from the server.")]
			HRESULT IsClientConnected([out, retval] VARIANT_BOOL *pfIsClientConnected);

		// CharSet (r/w)
		[propget, helpstring("Appends the name of the character set (for example, ISO-LATIN-7) to the content-type header in the response object.")]
			HRESULT CharSet([out, retval] BSTR *pbstrCharSetRet);
		[propput]
			HRESULT CharSet([in] BSTR bstrCharSet);

		// Pics - Adds a pics Header
		[helpstring("Adds a value to the pics-label field of the HTTP header.")]
			HRESULT Pics( [in] BSTR bstrHeaderValue );

		// CacheControl (r/w)
		[propget, helpstring("Sets the Cache Control header. If set to Public, proxy servers can cache ASP output.")]
			HRESULT CacheControl([out, retval] BSTR *pbstrCacheControl);
		[propput]
			HRESULT CacheControl([in] BSTR bstrCacheControl);

		// Code page (r/w)
		[propget, helpstring("Determines the codepage that will be used to display dynamic content.")]
			HRESULT CodePage([out, retval] long *plvar );
		[propput]
			HRESULT CodePage( [in] long lvar );

		// LCID (r/w)
		[propget, helpstring("Determines the Locale ID that will be used to display dynamic content.")]
			HRESULT LCID([out, retval] long *plvar );
		[propput]
			HRESULT LCID( [in] long lvar );

		}



	/*
	 * CLSID_Response
	 *
	 * The Response class
	 */
	[
	uuid(46E19BA0-25DD-11D0-A55F-00A0C90C2091),
		, helpstring("Sends output to the client.")
		, noncreatable
	]
	coclass Response
		{
		interface IResponse;
		}


	/*
	 * IID_IVariantDictionary
	 */
	[
	uuid(4a7deb90-b069-11d0-b373-00a0c90c2bd8)
		, helpstring("Dictionary for Variant collections.")
		, odl
		, oleautomation
		, dual
		, hidden
	]
	interface IVariantDictionary : IDispatch
		{
		// Item (r/o)
		[propget, id(0)]
			HRESULT Item([in] VARIANT VarKey, [out, retval] VARIANT *pvar);
		[id(0), propput]		
			HRESULT Item([in] VARIANT VarKey, [in] VARIANT var);
		[id(0), propputref]		
			HRESULT Item([in] VARIANT VarKey, [in] VARIANT var);

		// Key (r/o)
		[propget]
			HRESULT Key([in] VARIANT VarKey, [out, retval] VARIANT *pvar);

		// Count (r/o)
		[propget, helpstring("Number of items in the dictionary of variants.")]
			HRESULT Count([out, retval] int *cStrRet);

		// Enumerator (r/o)
		[propget, id(-4), restricted]
			HRESULT _NewEnum([out, retval] IUnknown **ppEnumReturn);

		[helpstring("Deletes an item from the Contents collection.")]
			HRESULT Remove([in] VARIANT VarKey);
			
		[helpstring("Deletes all items from the Contents Collection.")]
			HRESULT RemoveAll();
		};

	// --------------------------------------------------------------------------
	//
	// IID_ISessionObject
	// 'interface' entries must have 'odl' attribute
	//
	// --------------------------------------------------------------------------
	[
	uuid(D97A6DA0-A865-11cf-83AF-00A0C90C2BD8)
		, odl
		, dual
	    , oleautomation
		, hidden
	]
	interface ISessionObject : IDispatch
		{
				
		//
		//Properties
		//
		
		// SessionID (r/o)
		[propget, helpstring("Returns a Session ID for this user.")]
			HRESULT SessionID([out,retval] BSTR *pbstrRet);

		// Value (r/w)
		[id(0), propget]		
			HRESULT Value([in] BSTR bstrValue, [out, retval] VARIANT *pvar);
		[id(0), propput]		
			HRESULT Value([in] BSTR bstrValue, [in] VARIANT var);
		[id(0), propputref]		
			HRESULT Value([in] BSTR bstrValue, [in] VARIANT var);
		
		// Timeout (r/w)
		[propget, helpstring("Specifies the timeout period assigned to the Session object for this Application, in minutes.")]
			HRESULT Timeout([out, retval] long *plvar );
		[propput]
			HRESULT Timeout( [in] long lvar );
		
		//
		//Methods
		//
		
		[helpstring("Destroys a Session object and releases its resources.")]
			HRESULT Abandon();

		// Code page (r/w)
		[propget, helpstring("Determines the codepage that will be used to display dynamic content.")]
			HRESULT CodePage([out, retval] long *plvar );
		[propput]
			HRESULT CodePage( [in] long lvar );

		// LCID (r/w)
		[propget, helpstring("Determines the location identifier that will be used to display dynamic content.")]
			HRESULT LCID([out, retval] long *plvar );
		[propput]
			HRESULT LCID( [in] long lvar );

		// Static Objects (r/o)
		[propget, helpstring("Contains all of the objects created with the <OBJECT> tag within the scope of the Session object.")]
			HRESULT StaticObjects([out, retval] IVariantDictionary **ppTaggedObjects);
		
		// Contents (r/o)
		[propget, helpstring("Collection of all items that have been added to the Session through a script command.")]
			HRESULT Contents([out, retval] IVariantDictionary **ppProperties);

}


	/*
	 * CLSID_Session
	 *
	 * The Session class
	 */
	[
	uuid(509F8F20-25DE-11D0-A55F-00A0C90C2091)
		, helpstring("Stores information needed for a particular user-session.")
		, noncreatable
	]
	coclass Session
		{
		interface ISessionObject;
		}


	// --------------------------------------------------------------------------
	//
	// IID_IApplicationObject
	// 'interface' entries must have 'odl' attribute
	//
	// --------------------------------------------------------------------------
	[
	uuid(D97A6DA0-A866-11cf-83AE-10A0C90C2BD8)
		, odl
	    , oleautomation
        , dual
		, hidden
	]
	interface IApplicationObject : IDispatch
		{
				
		//
		//Properties
		//
		
		// Value (r/w)
		[id(0), propget]		
			HRESULT Value([in] BSTR bstrValue, [out, retval] VARIANT *pvar);
		[id(0), propput]		
			HRESULT Value([in] BSTR bstrValue, [in] VARIANT var);
		[id(0), propputref]		
			HRESULT Value([in] BSTR bstrValue, [in] VARIANT var);

		//
		//Methods
		//
		
		// Lock
		[helpstring("Prevents other clients from modifying the variables stored in the Application object, ensuring that only one client at a time can alter or access the Application variables.")]
			HRESULT Lock();

		// Unlock
		[helpstring("Enables other clients to modify the variables stored in the Application object after it has been locked using the Lock method.")]
			HRESULT UnLock();

		// Static Objects (r/o)
		[propget, helpstring("A collection of all objects that have been added to the Application with the <OBJECT> tag.")]
			HRESULT StaticObjects([out, retval] IVariantDictionary **ppProperties);

		// Contents
		[propget, helpstring("Collection of all items that have been added to the Application through a script command.")]
			HRESULT Contents([out, retval] IVariantDictionary **ppProperties);
	}


	/*
	 * CLSID_Application
	 *
	 * The Application class
	 */
	[
	uuid(7C3BAF00-25DE-11D0-A55F-00A0C90C2091)
		, helpstring("Persistent collection for all users of an Application.")
		, noncreatable
	]
	coclass Application
		{
		interface IApplicationObject;
		}


	/*
	 * IID_IASPError
	 *
	 * intermediate object returned by Server.GetLastError
	 */
	[
	uuid(F5A6893E-A0F5-11d1-8C4B-00C04FC324A4),
		, helpstring("Object describing an error condition.")
		, odl
		, oleautomation
		, dual
		, hidden
	]
	interface IASPError : IDispatch
		{
		// ASPCode (r/o)
		[propget, helpstring("A string that contains an error code generated by IIS.")]
			HRESULT ASPCode([out, retval] BSTR *pbstrASPCode);

		// Number (r/o)
		[propget, helpstring("A long integer that contains the returned error code.")]
			HRESULT Number([out, retval] long *plNumber);
			
		// Source (r/o)
		[propget, helpstring("A string indicating if the error was generated by IIS, a scripting language, or a component.")]
			HRESULT Category([out, retval] BSTR *pbstrSource);

		// FileName (r/o)
		[propget, helpstring("A string that indicates the .asp file that generated the error.")]
			HRESULT File([out, retval] BSTR *pbstrFileName);
			
		// LineNumber (r/o)
		[propget, helpstring("A long integer indicating the number of the line within the .asp file that generated the error.")]
			HRESULT Line([out, retval] long *plLineNumber);
			
		// Description (r/o)
		[propget, helpstring("A string describing the error.")]
			HRESULT Description([out, retval] BSTR *pbstrDescription);
			
		// ASPDescription (r/o)
		[propget, helpstring("A string describing the error, returned by IIS.")]
			HRESULT ASPDescription([out, retval] BSTR *pbstrDescription);
			
		// Column (r/o)
		[propget, helpstring("A long integer indicating the column that the error occured in.")]
			HRESULT Column([out, retval] long *plColumn);
			
		// Source (r/o)
		[propget, helpstring("A string which is the text of the line in the .asp file that caused the error.")]
			HRESULT Source([out, retval] BSTR *pbstrLineText);
		}

	/*
	 * IID_IServer
	 * 'interface' entries must have 'odl' attribute
	 */
	[
	uuid(D97A6DA0-A867-11cf-83AE-01A0C90C2BD8)
		, odl
	    , oleautomation
        , dual
		, hidden
	]
	interface IServer : IDispatch
		{
		
		//
		//
		//Properties
		//
		//

		// ScriptTimeout (r/w)
		[propget, helpstring("Specifies the maximum number of seconds that a script can run before the server terminates it.")]
			HRESULT ScriptTimeout([out, retval] long *plTimeoutSeconds );
		[propput]
			HRESULT ScriptTimeout([in] long lTimeoutSeconds );

		//
		//Methods
		//

		// CreateObject
		[helpstring("Creates an instance of a server component")]
			HRESULT CreateObject([in] BSTR bstrProgID, [out, retval] IDispatch **ppDispObject);

		// HTMLEncode
		[helpstring("Applies HTML encoding to a specified string")]
			HRESULT HTMLEncode([in] BSTR bstrIn, [out, retval] BSTR *pbstrEncoded);

		// MapPath
		[helpstring("Maps the specified relative or virtual path to the corresponding physical directory on the server.")]
			HRESULT MapPath([in] BSTR bstrLogicalPath, [out,retval] BSTR *pbstrPhysicalPath);
	
		// URLEncode
		[helpstring("Applies URL encoding rules, including escape characters, to a specified string.")]
			HRESULT URLEncode([in] BSTR bstrIn, [out, retval] BSTR *pbstrEncoded);

		// URLPathEncode
		[hidden]
			HRESULT URLPathEncode([in] BSTR bstrIn, [out, retval] BSTR *pbstrEncoded);

		// Execute
		[helpstring("Calls an .asp file and processes it as if it were part of the calling .asp.")]
			HRESULT Execute([in] BSTR bstrLogicalPath);
			
		// Transfer
		[helpstring("Sends the request from one .asp file, to a second .asp file.")]
			HRESULT Transfer([in] BSTR bstrLogicalPath);
			
		// GetLastError
		[helpstring("Returns an ASPError object describing the error condition that occurred.")]
			HRESULT GetLastError([out, retval] IASPError **ppASPErrorObject);
}


	/*
	 * CLSID_Server
	 *
	 * The Server class
	 */
	[
	uuid(A506D160-25E0-11D0-A55F-00A0C90C2091)
		, helpstring("Provides access to utility functions.")
		, noncreatable
	]
	coclass Server
		{
		interface IServer;
		}



	//
	// IID_IScriptingContext
	// 'interface' entries must have 'odl' attribute
	//
	[
	uuid(D97A6DA0-A868-11cf-83AE-00B0C90C2BD8)
		, helpstring("Active Server Page Scripting Context")
		, odl
	    , oleautomation
        , dual
		, hidden
	]
	interface IScriptingContext : IDispatch
		{
		//
		//Properties
		//

		// Request
		[propget, helpstring("Returns the Request object.")]
		HRESULT Request([out, retval] IRequest **ppRequest);
		
		// Response
		[propget, helpstring("Returns the Response object.")]
		HRESULT Response([out, retval] IResponse **ppResponse);
		
		// Server
		[propget, helpstring("Returns the Server object.")]
		HRESULT Server([out, retval] IServer **ppServer);
	
		// Session
		[propget, helpstring("Returns the Session object.")]
		HRESULT Session([out, retval] ISessionObject **ppSession);
	
		// Application
		[propget, helpstring("Returns the Application object.")]
		HRESULT Application([out, retval] IApplicationObject **ppApplication);
		}

	//
	// CLSID_ScriptingContext
	//
	[
	uuid(D97A6DA0-A868-11cf-83AE-11B0C90C2BD8)
		, helpstring("An obsolete object for passing the built-in objects to components.")
		, noncreatable
	]
	coclass ScriptingContext
		{
		interface IScriptingContext;
		}
	}

