/* -*- Mode: C; tab-width: 4 -*-
 *
 * Copyright (c) 2009 Apple Computer, Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.

    Change History (most recent first):
    
$Log: DLLX.idl,v $
Revision 1.1  2009/05/26 04:43:54  herscher
<rdar://problem/3948252> COM component that can be used with any .NET language and VB.


*/

// This file will be processed by the MIDL tool to
// produce the type library (DLLComponent.tlb) and marshalling code.

typedef [ uuid(4085DD59-D0E1-4efe-B6EE-DDBF7631B9C0) ]
enum DNSSDFlags
{
	kDNSSDFlagsMoreComing			= 0x0001,
	kDNSSDFlagsDefault				= 0x0004,
	kDNSSDFlagsNoAutoRename			= 0x0008,
	kDNSSDFlagsShared				= 0x0010,
	kDNSSDFlagsUnique				= 0x0020,
	kDNSSDFlagsBrowseDomains		= 0x0040,
	kDNSSDFlagsRegistrationDomains	= 0x0080,
	kDNSSDFlagsLongLivedQuery		= 0x0100,
	kDNSSDFlagsAllowRemoteQuery		= 0x0200,
	kDNSSDFlagsForceMulticast		= 0x0400,
	kDNSSDFlagsForce				= 0x0800,
	kDNSSDFlagsReturnIntermediates	= 0x1000,
	kDNSSDFlagsNonBrowsable			= 0x2000
} DNSSDFlags;


typedef [ uuid(30CDF335-CA52-4b17-AFF2-E83C64C450D4) ]
enum DNSSDAddressFamily
{
	kDNSSDAddressFamily_IPv4 = 0x1,
	kDNSSDAddressFamily_IPv6 = 0x2
} DNSSDAddressFamily;


typedef [ uuid(98FB4702-7374-4b16-A8DB-AD35BFB8364D) ]
enum DNSSDProtocol
{
	kDNSSDProtocol_UDP	= 0x10,
	kDNSSDProtocol_TCP	= 0x20
} DNSSDProtocol;


typedef [ uuid(72BF3EC3-19BC-47e5-8D95-3B73FF37D893) ]
enum DNSSDRRClass
{
	kDNSSDClass_IN = 1
} DNSSDRRClass;


typedef [ uuid(08E362DF-5468-4c9a-AC66-FD4747B917BD) ]
enum DNSSDRRType
{
	kDNSSDType_A         = 1,
    kDNSSDType_NS        = 2,
    kDNSSDType_MD        = 3,
    kDNSSDType_MF        = 4,
    kDNSSDType_CNAME     = 5,
    kDNSSDType_SOA       = 6,
    kDNSSDType_MB        = 7,
    kDNSSDType_MG        = 8,
    kDNSSDType_MR        = 9,
    kDNSSDType_NULL      = 10,
    kDNSSDType_WKS       = 11,
    kDNSSDType_PTR       = 12,
    kDNSSDType_HINFO     = 13,
    kDNSSDType_MINFO     = 14,
    kDNSSDType_MX        = 15,
    kDNSSDType_TXT       = 16,
    kDNSSDType_RP        = 17,
    kDNSSDType_AFSDB     = 18,
    kDNSSDType_X25       = 19,
    kDNSSDType_ISDN      = 20,
    kDNSSDType_RT        = 21,
    kDNSSDType_NSAP      = 22,
    kDNSSDType_NSAP_PTR  = 23,
    kDNSSDType_SIG       = 24,
    kDNSSDType_KEY       = 25,
    kDNSSDType_PX        = 26,
    kDNSSDType_GPOS      = 27,
    kDNSSDType_AAAA      = 28,
    kDNSSDType_LOC       = 29,
    kDNSSDType_NXT       = 30,
    kDNSSDType_EID       = 31,
    kDNSSDType_NIMLOC    = 32,
    kDNSSDType_SRV       = 33,
    kDNSSDType_ATMA      = 34,
    kDNSSDType_NAPTR     = 35,
    kDNSSDType_KX        = 36,
    kDNSSDType_CERT      = 37,
    kDNSSDType_A6        = 38,
    kDNSSDType_DNAME     = 39,
    kDNSSDType_SINK      = 40,
    kDNSSDType_OPT       = 41,
    kDNSSDType_APL       = 42,
    kDNSSDType_DS        = 43,
    kDNSSDType_SSHFP     = 44,
    kDNSSDType_IPSECKEY  = 45,
    kDNSSDType_RRSIG     = 46,
    kDNSSDType_NSEC      = 47,
    kDNSSDType_DNSKEY    = 48,
    kDNSSDType_DHCID     = 49,
    kDNSSDType_NSEC3     = 50,
    kDNSSDType_NSEC3PARAM= 51,
    kDNSSDType_HIP       = 55,
    kDNSSDType_SPF       = 99,
    kDNSSDType_UINFO     = 100,
    kDNSSDType_UID       = 101,
    kDNSSDType_GID       = 102,
    kDNSSDType_UNSPEC    = 103,
    kDNSSDType_TKEY      = 249,
    kDNSSDType_TSIG      = 250,
    kDNSSDType_IXFR      = 251,
    kDNSSDType_AXFR      = 252,
    kDNSSDType_MAILB     = 253,
    kDNSSDType_MAILA     = 254,
    kDNSSDType_ANY       = 255
} DNSSDRRType;


typedef [ uuid(3B0059E7-5297-4301-9AAB-1522F31EC8A7) ]
enum DNSSDError
{
	kDNSSDError_NoError                   = 0,
	kDNSSDError_Unknown                   = -65537,
	kDNSSDError_NoSuchName                = -65538,
    kDNSSDError_NoMemory                  = -65539,
    kDNSSDError_BadParam                  = -65540,
    kDNSSDError_BadReference              = -65541,
    kDNSSDError_BadState                  = -65542,
    kDNSSDError_BadFlags                  = -65543,
    kDNSSDError_Unsupported               = -65544,
    kDNSSDError_NotInitialized            = -65545,
    kDNSSDError_AlreadyRegistered         = -65547,
    kDNSSDError_NameConflict              = -65548,
    kDNSSDError_Invalid                   = -65549,
    kDNSSDError_Firewall                  = -65550,
    kDNSSDError_Incompatible              = -65551,
    kDNSSDError_BadInterfaceIndex         = -65552,
    kDNSSDError_Refused                   = -65553,
    kDNSSDError_NoSuchRecord              = -65554,
    kDNSSDError_NoAuth                    = -65555,
    kDNSSDError_NoSuchKey                 = -65556,
    kDNSSDError_NATTraversal              = -65557,
    kDNSSDError_DoubleNAT                 = -65558,
    kDNSSDError_BadTime                   = -65559,
    kDNSSDError_BadSig                    = -65560,
    kDNSSDError_BadKey                    = -65561,
    kDNSSDError_Transient                 = -65562,
    kDNSSDError_ServiceNotRunning         = -65563,  /* Background daemon not running */
    kDNSSDError_NATPortMappingUnsupported = -65564,  /* NAT doesn't support NAT-PMP or UPnP */
    kDNSSDError_NATPortMappingDisabled    = -65565,  /* NAT supports NAT-PMP or UPnP but it's disabled by the administrator */
    kDNSSDError_NoRouter                  = -65566,  /* No router currently configured (probably no network connectivity) */
    kDNSSDError_PollingMode               = -65567
} DNSSDError;

import "oaidl.idl";
import "ocidl.idl";


[
	object,
	uuid(8FA0889C-5973-4FC9-970B-EC15C925D0CE),
	dual,
	nonextensible,
	helpstring("ITXTRecord Interface"),
	pointer_default(unique)
]
interface ITXTRecord : IDispatch{
	[id(1), helpstring("method SetValue")] HRESULT SetValue([in] BSTR key, [in] VARIANT value);
	[id(2), helpstring("method RemoveValue")] HRESULT RemoveValue([in] BSTR key);
	[id(3), helpstring("method ContainsKey")] HRESULT ContainsKey([in] BSTR key, [out,retval] VARIANT_BOOL* retval);
	[id(4), helpstring("method GetValueForKey")] HRESULT GetValueForKey([in] BSTR key, [out,retval] VARIANT* value);
	[id(5), helpstring("method GetCount")] HRESULT GetCount([out,retval] ULONG* count);
	[id(6), helpstring("method GetKeyAtIndex")] HRESULT GetKeyAtIndex([in] ULONG index, [out,retval] BSTR* retval);
	[id(7), helpstring("method GetValueAtIndex")] HRESULT GetValueAtIndex([in] ULONG index, [out,retval] VARIANT* retval);
};
[
	object,
	uuid(9CE603A0-3365-4DA0-86D1-3F780ECBA110),
	dual,
	nonextensible,
	helpstring("IDNSSDRecord Interface"),
	pointer_default(unique)
]
interface IDNSSDRecord : IDispatch{
	[id(1), helpstring("method Update")] HRESULT Update([in] DNSSDFlags flags, [in] VARIANT rdata, [in] ULONG ttl);
	[id(2), helpstring("method Remove")] HRESULT Remove([in] DNSSDFlags flags);
};
[
	object,
	uuid(7FD72324-63E1-45AD-B337-4D525BD98DAD),
	dual,
	nonextensible,
	helpstring("IDNSSDEventManager Interface"),
	pointer_default(unique)
]
interface IDNSSDEventManager : IDispatch{
};
[
	object,
	uuid(29DE265F-8402-474F-833A-D4653B23458F),
	dual,
	nonextensible,
	helpstring("IDNSSDService Interface"),
	pointer_default(unique)
]
interface IDNSSDService : IDispatch{
	[id(1), helpstring("method EnumerateDomains")] HRESULT EnumerateDomains([in] DNSSDFlags flags, [in] ULONG ifIndex, [in] IDNSSDEventManager* eventManager, [out,retval] IDNSSDService** service);
	[id(2), helpstring("method Browse"), local] HRESULT Browse([in] DNSSDFlags flags, [in] ULONG interfaceIndex, [in] BSTR regtype, [in] BSTR domain, [in] IDNSSDEventManager* eventManager, [out,retval] IDNSSDService** sdref);
	[id(3), helpstring("method Resolve")] HRESULT Resolve([in] DNSSDFlags flags, [in] ULONG ifIndex, [in] BSTR serviceName, [in] BSTR regType, [in] BSTR domain, [in] IDNSSDEventManager* eventManager, [out,retval] IDNSSDService** service);
	[id(4), helpstring("method Register")] HRESULT Register([in] DNSSDFlags flags, [in] ULONG ifIndex, [in] BSTR name, [in] BSTR regType, [in] BSTR domain, [in] BSTR host, [in] USHORT port, [in] ITXTRecord* record, [in] IDNSSDEventManager* eventManager, [out,retval] IDNSSDService** service);
	[id(5), helpstring("method QueryRecord")] HRESULT QueryRecord([in] DNSSDFlags flags, [in] ULONG ifIndex, [in] BSTR fullname, [in] DNSSDRRType rrtype, [in] DNSSDRRClass rrclass, [in] IDNSSDEventManager* eventManager, [out,retval] IDNSSDService** service);
	[id(6), helpstring("method RegisterRecord")] HRESULT RegisterRecord([in] DNSSDFlags flags, [in] ULONG ifIndex, [in] BSTR fullname, [in] DNSSDRRType rrtype, [in] DNSSDRRClass rrclass, [in] VARIANT rdata, [in] ULONG ttl, [in] IDNSSDEventManager* eventManager, [out,retval] IDNSSDRecord** record);
	[id(7), helpstring("method AddRecord")] HRESULT AddRecord([in] DNSSDFlags flags, [in] DNSSDRRType rrtype, [in] VARIANT rdata, [in] ULONG ttl, [out,retval] IDNSSDRecord** record);
	[id(8), helpstring("method ReconfirmRecord")] HRESULT ReconfirmRecord([in] DNSSDFlags flags, [in] ULONG ifIndex, [in] BSTR fullname, [in] DNSSDRRType rrtype, [in] DNSSDRRClass rrclass, [in] VARIANT rdata);
	[id(9), helpstring("method GetProperty")] HRESULT GetProperty([in] BSTR prop, [in,out] VARIANT * value );	
	[id(10), helpstring("method GetAddrInfo")] HRESULT GetAddrInfo([in] DNSSDFlags flags, [in] ULONG ifIndex, [in] DNSSDAddressFamily addressFamily, [in] BSTR hostname, [in] IDNSSDEventManager* eventManager, [out,retval] IDNSSDService** service);
	[id(11), helpstring("method NATPortMappingCreate")] HRESULT NATPortMappingCreate([in] DNSSDFlags flags, [in] ULONG ifIndex, [in] DNSSDAddressFamily addressFamily, [in] DNSSDProtocol protocol, [in] USHORT internalPort, [in] USHORT externalPort, [in] ULONG ttl, [in] IDNSSDEventManager* eventManager, [out,retval] IDNSSDService** service);
	[id(12), helpstring("method Stop"), local] HRESULT Stop(void);
};
[
	uuid(18FBED6D-F2B7-4EC8-A4A4-46282E635308),
	version(1.0),
	helpstring("Apple Bonjour Library 1.0")
]
library Bonjour
{
	importlib("stdole2.tlb");
	[
		uuid(21AE8D7F-D5FE-45cf-B632-CFA2C2C6B498),
		helpstring("_IDNSSDEvents Interface")
	]
	dispinterface _IDNSSDEvents
	{
		properties:
		methods:
		[id(1), helpstring("method DomainFound")] void DomainFound([in] IDNSSDService* service, [in] DNSSDFlags flags, [in] ULONG ifIndex, [in] BSTR domain);
		[id(2), helpstring("method DomainLost")] void DomainLost([in] IDNSSDService* service, [in] DNSSDFlags flags, [in] ULONG ifIndex, [in] BSTR domain);
		[id(3), helpstring("method ServiceFound")] void ServiceFound([in] IDNSSDService* browser, [in] DNSSDFlags flags, [in] ULONG ifIndex, [in] BSTR serviceName, [in] BSTR regType, [in] BSTR domain);
		[id(4), helpstring("method ServiceLost")] void ServiceLost([in] IDNSSDService* browser, [in] DNSSDFlags flags, [in] ULONG ifIndex, [in] BSTR serviceName, [in] BSTR regType, [in] BSTR domain);
		[id(5), helpstring("method ServiceResolved")] void ServiceResolved([in] IDNSSDService* service, [in] DNSSDFlags flags, [in] ULONG ifIndex, [in] BSTR fullName, [in] BSTR hostName, [in] USHORT port, [in] ITXTRecord* record);
		[id(6), helpstring("method ServiceRegistered")] void ServiceRegistered([in] IDNSSDService* service, [in] DNSSDFlags flags, [in] BSTR name, [in] BSTR regType, [in] BSTR domain);
		[id(7), helpstring("method QueryRecordAnswered")] void QueryRecordAnswered([in] IDNSSDService* service, [in] DNSSDFlags flags, [in] ULONG ifIndex, [in] BSTR fullName, [in] DNSSDRRType rrtype, [in] DNSSDRRClass rrclass, [in] VARIANT rdata, [in] ULONG ttl);
		[id(8), helpstring("method RecordRegistered")] void RecordRegistered([in] IDNSSDRecord* record, [in] DNSSDFlags flags);
		[id(9), helpstring("method AddressFound")] void AddressFound([in] IDNSSDService* service, [in] DNSSDFlags flags, [in] ULONG ifIndex, [in] BSTR hostname, [in] DNSSDAddressFamily addressFamily, [in] BSTR address, [in] ULONG ttl);
		[id(10), helpstring("method MappingCreated")] void MappingCreated([in] IDNSSDService* service, [in] DNSSDFlags flags, [in] ULONG ifIndex, [in] ULONG externalAddress, [in] DNSSDAddressFamily addressFamily, [in] DNSSDProtocol protocol, [in] USHORT internalPort, [in] USHORT externalPort, [in] ULONG ttl);
		[id(11), helpstring("method OperationFailed")] void OperationFailed([in] IDNSSDService* service, [in] DNSSDError error);
	};
	[
		uuid(24CD4DE9-FF84-4701-9DC1-9B69E0D1090A),
		helpstring("DNSSDService Class")
	]
	coclass DNSSDService
	{
		[default] interface IDNSSDService;
	};
	[
		uuid(AFEE063C-05BA-4248-A26E-168477F49734),
		helpstring("TXTRecord Class")
	]
	coclass TXTRecord
	{
		[default] interface ITXTRecord;
	};
	[
		uuid(5E93C5A9-7516-4259-A67B-41A656F6E01C),
		helpstring("DNSSDRecord Class")
	]
	coclass DNSSDRecord
	{
		[default] interface IDNSSDRecord;
	};
	[
		uuid(BEEB932A-8D4A-4619-AEFE-A836F988B221),
		helpstring("DNSSDEventManager Class")
	]
	coclass DNSSDEventManager
	{
		[default] interface IDNSSDEventManager;
		[default, source] dispinterface _IDNSSDEvents;
	};
	enum DNSSDFlags;
	enum DNSSDAddressFamily;
	enum DNSSDProtocol;
	enum DNSSDRRClass;
	enum DNSSDRRType;
	enum DNSSDError;
};
