williamr@2: /** williamr@2: * Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: williamr@2: * DNS queries and results definition williamr@2: * williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: @file dns_qry.h williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: williamr@2: #ifndef __DNS_QRY_H__ williamr@2: #define __DNS_QRY_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: //-- DNS RR class values, see RFC 1035 williamr@2: const TUint16 KDnsRRClassIN = 1; ///< Internet class williamr@2: const TUint16 KDnsRRClassCS = 2; ///< CSNET class williamr@2: const TUint16 KDnsRRClassCH = 3; ///< CHAOS class williamr@2: const TUint16 KDnsRRClassHS = 4; ///< Hesiod williamr@2: williamr@2: williamr@2: //-- DNS RR and query type values, see RFC1035 williamr@2: const TUint16 KDnsRRTypeInvalid = 0; ///< invalid terminal value williamr@2: const TUint16 KDnsRRTypeA = 1; ///< host address RR type williamr@2: const TUint16 KDnsRRTypeNS = 2; ///< authoritative name server williamr@2: const TUint16 KDnsRRTypeCNAME = 5; ///< canonical name williamr@2: const TUint16 KDnsRRTypeWKS = 11; ///< well known service description williamr@2: const TUint16 KDnsRRTypePTR = 12; ///< domain name pointer williamr@2: const TUint16 KDnsRRTypeHINFO = 13; ///< host information williamr@2: const TUint16 KDnsRRTypeMX = 15; ///< mail exchange williamr@2: const TUint16 KDnsRRTypeTXT = 16; ///< text strings williamr@2: williamr@2: const TUint16 KDnsRRTypeAAAA = 28; ///< AAAA RR type williamr@2: const TUint16 KDnsRRTypeSRV = 33; ///< SRV RR type williamr@2: const TUint16 KDnsRRTypeNAPTR = 35; ///< NAPTR RR type williamr@2: williamr@2: //-- DNS RR query values only williamr@2: const TUint16 KDnsQTypeAXFR = 252; ///< request for a transfer of an entire zone williamr@2: const TUint16 KDnsQTypeMAILB = 253; ///< request for mailbox-related records (MB, MG or MR) williamr@2: const TUint16 KDnsQTypeANY = 255; ///< request for all records williamr@2: williamr@2: /** williamr@2: DNS query buffer type williamr@2: @internalTechnology williamr@2: */ williamr@2: typedef TBuf8<255> TDnsQryData; williamr@2: williamr@2: /** williamr@2: representation of domain name in terms of DNS responses williamr@2: @internalTechnology williamr@2: */ williamr@2: typedef TBuf8<255> TDnsDomainName; williamr@2: williamr@2: /** williamr@2: representation of a label data in terms of DNS responses williamr@2: @internalTechnology williamr@2: */ williamr@2: typedef TBuf8<63> TDnsLabel; williamr@2: williamr@2: /** williamr@2: representation of a character string in DNS responses williamr@2: @internalTechnology williamr@2: */ williamr@2: typedef TBuf8<255> TDnsString; williamr@2: williamr@2: williamr@2: class TDnsQuery williamr@2: /** williamr@2: DNS query representation. williamr@2: See RFC1035. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: inline TDnsQuery(); //- default constructor williamr@2: inline TDnsQuery(const TDesC8& aQryDomainName, TUint16 aType, TUint16 aClass = KDnsRRClassIN); williamr@2: williamr@2: inline TUint16 Type() const; williamr@2: inline TUint16 Class() const; williamr@2: inline const TDesC8& Data() const; williamr@2: williamr@2: inline void SetType(TUint16 aType); williamr@2: inline void SetClass(TUint16 aClass); williamr@2: inline void SetData(const TDesC8& aData); williamr@2: williamr@2: protected: williamr@2: williamr@2: TUint16 iQryType; ///< DNS query code williamr@2: TUint16 iQryClass; ///< DNS query class code williamr@2: TDnsQryData iQryData; ///< DNS query data (buffer) williamr@2: williamr@2: }; williamr@2: williamr@2: typedef TPckgBuf TDnsQueryBuf; williamr@2: williamr@2: williamr@2: williamr@2: class TDnsQryRespBase williamr@2: /** williamr@2: DNS query response representation. williamr@2: This is a base class and is not intended to be instantinated. williamr@2: See RFC1035. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: protected: williamr@2: //-- protected constructors to make instantination of this class impossible. williamr@2: inline TDnsQryRespBase(); williamr@2: inline TDnsQryRespBase(TUint16 aRRespType, TUint16 aRRClass); williamr@2: williamr@2: public: williamr@2: williamr@2: inline TUint16 RRType() const; williamr@2: inline TUint16 RRClass() const; williamr@2: inline TUint32 RRTtl() const; williamr@2: williamr@2: inline void SetRRTtl (TUint32 aRRTtl); williamr@2: williamr@2: protected: williamr@2: //-- common data members for all DNS query results williamr@2: const TUint16 iRespType; ///< RR type williamr@2: const TUint16 iRespClass; ///< RR Class williamr@2: TUint32 iRespTtl; ///< RR TTL williamr@2: williamr@2: }; williamr@2: williamr@2: williamr@2: class TDnsRespSRV : public TDnsQryRespBase williamr@2: /** williamr@2: DNS SRV query response representation. williamr@2: See RFC2782. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: williamr@2: inline TDnsRespSRV(); williamr@2: williamr@2: inline TUint16 Priority() const; williamr@2: inline TUint16 Weight() const; williamr@2: inline TUint16 Port() const; williamr@2: inline const TDesC8& Target() const; williamr@2: williamr@2: inline void SetPriority(TUint16 aPriority); williamr@2: inline void SetWeight (TUint16 aWeight); williamr@2: inline void SetPort (TUint16 aPort); williamr@2: inline void SetTarget (const TDesC8& aTarget); williamr@2: williamr@2: protected: williamr@2: williamr@2: TUint16 iPriority; ///< The priority of this target host williamr@2: TUint16 iWeight; ///< the value of the weight field williamr@2: TUint16 iPort; ///< port number williamr@2: TDnsDomainName iTarget; ///< domain name of the target host. williamr@2: }; williamr@2: williamr@2: typedef TPckgBuf TDnsRespSRVBuf; williamr@2: williamr@2: class TDnsRespA : public TDnsQryRespBase williamr@2: /** williamr@2: DNS Host Address query response representation. williamr@2: See RFC1034, 1035. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: williamr@2: TDnsRespA() : TDnsQryRespBase(KDnsRRTypeA, KDnsRRClassIN) {} williamr@2: williamr@2: inline const TInetAddr& HostAddress() const; williamr@2: inline void SetHostAddress(const TInetAddr& aInetAddr); williamr@2: williamr@2: protected: williamr@2: TInetAddr iInetAddr; ///< Host address williamr@2: }; williamr@2: williamr@2: typedef TPckgBuf TDnsRespABuf; williamr@2: williamr@2: williamr@2: class TDnsRespAAAA : public TDnsQryRespBase williamr@2: /** williamr@2: IPv6 DNS Host Address query response representation. williamr@2: See RFC1035, RFC1886 williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: williamr@2: TDnsRespAAAA() : TDnsQryRespBase(KDnsRRTypeAAAA, KDnsRRClassIN) {} williamr@2: williamr@2: inline const TInetAddr& HostAddress() const; williamr@2: inline void SetHostAddress(const TInetAddr& aInetAddr); williamr@2: williamr@2: protected: williamr@2: TInetAddr iInetAddr; ///< Host address williamr@2: }; williamr@2: williamr@2: typedef TPckgBuf TDnsRespAAAABuf; williamr@2: williamr@2: williamr@2: class TDnsRespPTR : public TDnsQryRespBase williamr@2: /** williamr@2: DNS Domain Name query response representation. williamr@2: See RFC1034. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: williamr@2: TDnsRespPTR() : TDnsQryRespBase(KDnsRRTypePTR, KDnsRRClassIN) {} williamr@2: williamr@2: inline const TDesC8& HostName() const; williamr@2: inline void SetHostName(const TDesC8& aHostName); williamr@2: williamr@2: protected: williamr@2: TDnsDomainName iName; ///< domain this RR refers to. williamr@2: }; williamr@2: williamr@2: typedef TPckgBuf TDnsRespPTRBuf; williamr@2: williamr@2: williamr@2: class TDnsRespNAPTR : public TDnsQryRespBase williamr@2: /** williamr@2: DNS NAPTR query response representation. williamr@2: See RFC2915. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: williamr@2: inline TDnsRespNAPTR(); williamr@2: williamr@2: inline TUint16 Order() const; williamr@2: inline TUint16 Pref() const; williamr@2: inline const TDesC8& Flags() const; williamr@2: inline const TDesC8& Service() const; williamr@2: inline const TDesC8& Regexp() const; williamr@2: inline const TDesC8& Replacement() const; williamr@2: williamr@2: inline void SetOrder(TUint16 aOrder); williamr@2: inline void SetPref(TUint16 aPref); williamr@2: inline void SetFlags(const TDesC8& aFlags); williamr@2: inline void SetService(const TDesC8& aService); williamr@2: inline void SetRegexp(const TDesC8& aRegexp); williamr@2: inline void SetReplacement(const TDesC8& aReplacement); williamr@2: williamr@2: protected: williamr@2: williamr@2: TUint16 iOrder; ///< RR Order field williamr@2: TUint16 iPref; ///< RR Preference field williamr@2: TDnsString iFlags; ///< RR Flags string williamr@2: TDnsString iService; ///< service name(s) available williamr@2: TDnsString iRegexp; ///< RR Regexp field williamr@2: TDnsDomainName iReplacement;///< RR Replacement field williamr@2: }; williamr@2: williamr@2: typedef TPckgBuf TDnsRespNAPTRBuf; williamr@2: williamr@2: class TDnsRespMX: public TDnsQryRespBase williamr@2: /** williamr@2: DNS MX query response representation. williamr@2: See RFC1035, RFC974. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: williamr@2: TDnsRespMX() : TDnsQryRespBase(KDnsRRTypeMX, KDnsRRClassIN) {} williamr@2: williamr@2: inline TUint16 Pref() const; williamr@2: inline const TDesC8& HostName() const; williamr@2: williamr@2: inline void SetPref(TUint16 aPref); williamr@2: inline void SetHostName(const TDesC8& aHostName); williamr@2: williamr@2: protected: williamr@2: williamr@2: TUint16 iPref; ///< RR Preference field. williamr@2: TDnsDomainName iHostName; ///< Host name. williamr@2: williamr@2: }; williamr@2: williamr@2: typedef TPckgBuf TDnsRespMXBuf; williamr@2: williamr@2: // -- DNS query type value, DoCoMo Cache requirement williamr@2: // This is used in conjunction with RHostResolver::Query williamr@2: // Example usage: williamr@2: // williamr@2: // TDnsQueryBuf dnsQryBuf; williamr@2: // TDnsRespABuf dummy; williamr@2: // williamr@2: // dnsQryBuf().SetType(KDnsQTypeCacheClear); williamr@2: // resolver.Query(dnsQryBuf, dummy, status); williamr@2: // User::WaitForRequest(status); williamr@2: // williamr@2: const TUint16 KDnsQTypeCacheClear = 99; ///< Resolver Cache Clear type williamr@2: // -- DNS non-recursive look up, DoCoMo requirement williamr@2: // This is used in conjunction with RHostResolver::GetByName. williamr@2: // Example usage: williamr@2: // williamr@2: // TNameEntry nameEntry; williamr@2: // TBuf<256> hostName(KDnsNonrecursive); williamr@2: // hostName.Append(_L("www.symbian.com")); williamr@2: // williamr@2: // resolver.GetByName(hostName,nameEntry, status); williamr@2: // User::WaitForRequest(status); williamr@2: // williamr@2: _LIT(KDnsNonrecursive, "NONRECURSIVE?"); williamr@2: williamr@2: #include "dns_qry.inl" williamr@2: williamr@2: #endif //__DNS_QRY_H__