// DecalNet.idl : IDL source for DecalNet.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (DecalNet.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";
import "Decal.idl";

interface IMessage;

	[
		object,
		uuid(05D14E34-0A23-4A9F-95CF-9DB24B3CFB9F),
		dual,
		helpstring("IMessageMember Interface"),
		pointer_default(unique)
	]
	interface IMessageMember : IDispatch
	{
		[id(5), propget, helpstring("property Member"), defaultcollelem] HRESULT Member(VARIANT vIndex, [out, retval] VARIANT *pVal);
		[id(6), propget, helpstring("property MemberName")] HRESULT MemberName(long Index, [out, retval] BSTR *pVal);
		[id(7), propget, helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
	};

	[
		object,
		uuid(23EE0804-EAC7-493B-BB9D-2298FD44FFA1),
		dual,
		helpstring("IMessage Interface"),
		pointer_default(unique)
	]
	interface IMessage : IDispatch
	{
		[id(2), propget, helpstring("property Type")] HRESULT Type([out, retval] long *pVal);
		[id(3), propget, helpstring("property Data")] HRESULT Data([out, retval] VARIANT *pVal);
		[id(5), propget, helpstring("property Member"), defaultcollelem] HRESULT Member(VARIANT vElement, [out, retval] VARIANT *pVal);
		[id(6), propget, helpstring("property MemberName")] HRESULT MemberName(long Index, [out, retval] BSTR *pVal);
		[id(7), propget, helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
	};

	[
		object,
		uuid(853BFE61-6C14-4244-8B96-96F0C9647DE6),
		dual,
		helpstring("IMessageMember Interface"),
		pointer_default(unique)
	]
	interface IMessageIterator : IDispatch
	{
		[propget, id(10), helpstring("Move the cursor to the next position")] HRESULT Next([optional] VARIANT vIndex, [out, retval] VARIANT *pbValue);
		[propget, id(1), helpstring("Data at the current position")] HRESULT Current([out, retval] VARIANT *pData);
		[propget, id(2), helpstring("Name of a member at a particular index")] HRESULT MemberName([out, retval] BSTR *pVal);
		[propget, id(3), helpstring("Current index of the iterator")] HRESULT Index([out,retval] long *pIndex);
		[propget, id(4), helpstring("String member by name")] HRESULT NextString (BSTR Name, [out, retval] BSTR *pValue);
		[propget, id(5), helpstring("Integer member by name")] HRESULT NextInt (BSTR Name, [out, retval] long *pValue);
		[propget, id(6), helpstring("Float member by name")] HRESULT NextFloat (BSTR Name, [out, retval] float *pValue);
		[propget, id(7), helpstring("Object member by name")] HRESULT NextObject (BSTR Name, [out, retval] IMessageIterator **pValue);
		[propget, id(8), helpstring("Object member by index")] HRESULT NextObjectIndex ([out, retval] IMessageIterator **pValue);
		[id(9), helpstring("Reset the iterator")] HRESULT Reset();
		[propget, id(11), helpstring("Parent Message Object")] HRESULT Message([out, retval] IMessage **ppMsg);
	};

	[
		object,
		uuid(38AFE740-9189-4f7c-8DE2-E61087DD9F19),
		dual,
		helpstring("IMessage Interface"),
		pointer_default(unique)
	]
	interface IMessage2 : IMessage
	{
		[propget, id(101), helpstring("property Members")] HRESULT Begin([out, retval] IMessageIterator * *pVal);
	};

	[
		object,
		uuid(AA405035-E001-4CC3-B43A-156206843D64),
		helpstring("INetService Interface"),
		pointer_default(unique)
	]
	interface INetService : IUnknown
	{
		[propget, helpstring("property Decal")] HRESULT Decal([out, retval] IDecal * *pVal);
		[propget, helpstring("property Filter")] HRESULT Filter(REFCLSID clsid, REFIID iid, [out, retval, iid_is(iid)] LPVOID *pVal);
		[propget, helpstring("property FilterVB")] HRESULT FilterVB(BSTR strProgID, [out, retval] LPDISPATCH *pVal);
		[propget, helpstring("property Hooks")] HRESULT Hooks([out, retval] IACHooks * *pVal);
	};

	[
		object,
		uuid(EEB0BE9E-46BD-493F-97E2-330670C09F59),
		dual,
		helpstring("INetworkFilter Interface"),
		pointer_default(unique)
	]
	interface INetworkFilter : IDispatch
	{
		[id(1), helpstring("method Dispatch")] HRESULT Dispatch(IMessage *Message);
	};

	[
		object,
		uuid(CE518B62-714F-4993-B0C2-C703A7062F38),
		helpstring("INetworkFilter Interface"),
		pointer_default(unique)
	]
	interface INetworkFilter2 : IUnknown
	{
		[helpstring("method Dispatch")] HRESULT DispatchServer(IMessage2 *Message);
		[helpstring("method Dispatch")] HRESULT DispatchClient(IMessage2 *Message);
		[helpstring("method Initialize")] HRESULT Initialize(INetService *pService);
		[helpstring("method Terminate")] HRESULT Terminate();
	};

	[
		object,
		uuid(03F3E2D0-7026-4C11-988A-4B3C58C71917),
		dual,
		helpstring("IWebRequest Interface"),
		pointer_default(unique)
	]
	interface IWebRequest : IDispatch
	{
		[id(1), helpstring("method Get")] HRESULT Get(BSTR strURL);
		[id(2), helpstring("method Post")] HRESULT Post(BSTR strURL, BSTR strPostData);
	};

[
	uuid(572B87C4-93BD-46B3-A291-CD58181D25DC),
	version(1.0),
	helpstring("DecalNet 1.0 Type Library")
]
library DecalNet
{
	importlib("stdole32.tlb");
	importlib("stdole2.tlb");

	interface IMessageMember;
	interface IMessage;
	interface IMessage2;
	interface INetworkFilter;
	interface INetworkFilter2;
	interface IMessageIterator;

	[
		uuid(C8C406F8-BA2E-4964-8B04-FF38394A8E0E),
		helpstring("NetService Class")
	]
	coclass NetService
	{
		[default] interface INetService;
	};

	[
		uuid(EEFA38DC-15B2-4232-B5BE-5A9ECB8E1A58),
		helpstring("_IWebRequestEvents Interface")
	]
	dispinterface IWebRequestEvents
	{
		properties:
		methods:
		[id(1), helpstring("method Begin")] HRESULT Begin();
		[id(2), helpstring("method End")] HRESULT End(long nResultCode, BSTR strText);
	};

	[
		uuid(15631E36-55CB-4D16-ADE7-74D9F8A5F4B6),
		helpstring("WebRequest Class")
	]
	coclass WebRequest
	{
		[default] interface IWebRequest;
		[default, source] dispinterface IWebRequestEvents;
	};

	[
		uuid(7A85E352-B133-4AB5-A9DA-85978005BF88),
		helpstring("MessageRoot Class"),
		noncreatable
	]
	coclass MessageRoot
	{
		[default] interface IMessageIterator;
	};
};
