/*===================================================================
Microsoft Denali

Microsoft Confidential.
Copyright 1996 Microsoft Corporation. All Rights Reserved.

Component: ODL

File: DENA0000.ODL

Neutral/English Denali Type Library

"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 1.0 Object Library")
	, lcid(0x0000)
	, version(1.0)
]
library ASPTypeLibrary
	{
	#ifdef WIN32
	importlib("STDOLE2.TLB");
	#else
	importlib("STDOLE.TLB");
	#endif

	/*
	 * 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);
		};


	/*
	 * 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("Collection of query string values")]
			HRESULT QueryString([out, retval] IRequestDictionary **ppDictReturn);

		// Form (r/o)
		[propget, helpstring("Collection of form elements")]
			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("Collection 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)")]
			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("Total number of bytes the client will return in the request body")]
		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("Information from an HTTP client 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] boolean *pfHasKeys);

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


	/*
	 * 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] boolean fSecure);

		// HasKeys (r/o)
		[propget, helpstring("Indicates whether the cookie has keys (is a cookie dictionary)")]
			HRESULT HasKeys([out, retval] boolean *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 buffered")]
			HRESULT Buffer([out, retval] boolean* fIsBuffering);
		[propput]
			HRESULT Buffer([in] boolean fIsBuffering);

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

		// Expires (r/w)
		[propget, helpstring("The length of time in minutes until the Response expires")]
			HRESULT Expires([out, retval] VARIANT *pvarExpiresMinutesRet);
		[propput]
			HRESULT Expires([in] long lExpiresMinutes);

		// ExpiresAbsolute (r/w)
		[propget, helpstring("The absolute date and time that the Response expires")]
			HRESULT ExpiresAbsolute([out, retval] VARIANT *pvarExpiresRet);
		[propput]
			HRESULT ExpiresAbsolute([in] DATE dtExpires);

		[helpstring("Collection of cookies sent as part of the Response (write only)"), propget]
			HRESULT Cookies([out, retval] IRequestDictionary **ppCookies);

		// Status (r/w)
		[propget, helpstring("The HTTP server status line")]
			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")]
			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")]
			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("Sends a '302 Redirect' status line")]
			HRESULT Redirect([in] BSTR bstrURL);

		// Write
		[helpstring("Writes content with character (Unicode to ANSI) conversion")]
			HRESULT Write([in] VARIANT varText);

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

		// IsClientConnected
		[helpstring("Is the client connection still valid")]
			HRESULT IsClientConnected([out, retval] boolean *pfIsClientConnected);

		// CharSet (r/w)
		[propget, helpstring("The HTTP Character set header")]
			HRESULT CharSet([out, retval] BSTR *pbstrCharSetRet);
		[propput]
			HRESULT CharSet([in] BSTR bstrCharSet);

		// Pics - Adds a pics Header
		[helpstring("Adds an HTTP pics header")]
			HRESULT Pics( [in] BSTR bstrHeaderValue );

		// CacheControl (r/w)
		[propget, helpstring("The HTTP Cache-control header")]
			HRESULT CacheControl([out, retval] BSTR *pbstrCacheControl);
		[propput]
			HRESULT CacheControl([in] BSTR bstrCacheControl);


		}


	/*
	 * CLSID_Response
	 *
	 * The Response class
	 */
	[
	uuid(46E19BA0-25DD-11D0-A55F-00A0C90C2091),
		, helpstring("Manipulates information for the HTTP client response")
		, 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 Var, [out, retval] VARIANT *pvar);

		// Name (r/o)
		[propget]
			HRESULT Name([in] VARIANT Var, [out, retval] BSTR *pbstrRet);

		// 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_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("The length of time in minutes before session state is destroyed after non-use by an individual user")]
			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("The code page used when writing text to, or reading text from, the browser.")]
			HRESULT CodePage([out, retval] long *plvar );
		[propput]
			HRESULT CodePage( [in] long lvar );

		// LCID (r/w)
		[propget, helpstring("The LCID used when writing text to, or reading text from, the browser.")]
			HRESULT LCID([out, retval] long *plvar );
		[propput]
			HRESULT LCID( [in] long lvar );

		// Tagged Objects (r/o)
		[propget, helpstring("Collection of tagged objects associated with session")]
			HRESULT Objects([out, retval] IVariantDictionary **ppTaggedObjects);
		
		// Properties (r/o)
		[propget, helpstring("Collection of variants associated with Session")]
			HRESULT Properties([out, retval] IVariantDictionary **ppProperties);

}


	/*
	 * CLSID_Session
	 *
	 * The Session class
	 */
	[
	uuid(509F8F20-25DE-11D0-A55F-00A0C90C2091)
		, helpstring("Persistent collection for one user of an application")
		, 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 Active Server Pages from modifying the Application object")]
			HRESULT Lock();

		// Unlock
		[helpstring("Enables other Active Server Pages to modify the Application object")]
			HRESULT UnLock();
				
		// Properties (r/o)
		[propget, helpstring("Collection of variants associated with application")]
			HRESULT Properties([out, retval] IVariantDictionary **ppProperties);

		// Properties (r/o)
		[propget, helpstring("Collection of tagged objects associated with application")]
			HRESULT Objects([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_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("The maximum length of time in seconds before a script is terminated")]
			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);
}


	/*
	 * CLSID_Server
	 *
	 * The Server class
	 */
	[
	uuid(A506D160-25E0-11D0-A55F-00A0C90C2091)
		, helpstring("Server-side processing 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("Active Server Page Scripting Context")
		, noncreatable
	]
	coclass ScriptingContext
		{
		interface IScriptingContext;
		}
	}