epoc32/include/dns_qry.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
/**
williamr@2
     2
* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     3
* All rights reserved.
williamr@2
     4
* This component and the accompanying materials are made available
williamr@2
     5
* 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
     6
* which accompanies this distribution, and is available
williamr@2
     7
* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
williamr@2
     8
*
williamr@2
     9
* Initial Contributors:
williamr@2
    10
* Nokia Corporation - initial contribution.
williamr@2
    11
*
williamr@2
    12
* Contributors:
williamr@2
    13
*
williamr@2
    14
* Description:
williamr@2
    15
* DNS queries and results definition
williamr@2
    16
* 
williamr@2
    17
*
williamr@2
    18
*/
williamr@2
    19
williamr@2
    20
williamr@2
    21
williamr@2
    22
williamr@2
    23
williamr@2
    24
/**
williamr@2
    25
 @file dns_qry.h
williamr@2
    26
 @publishedPartner
williamr@2
    27
 @released
williamr@2
    28
*/
williamr@2
    29
williamr@2
    30
#ifndef __DNS_QRY_H__
williamr@2
    31
#define __DNS_QRY_H__
williamr@2
    32
williamr@2
    33
#include <e32base.h>
williamr@2
    34
#include <es_sock.h>
williamr@2
    35
#include <in_sock.h>
williamr@2
    36
williamr@2
    37
//-- DNS RR class values, see RFC 1035
williamr@2
    38
const TUint16	KDnsRRClassIN = 1;  ///< Internet class
williamr@2
    39
const TUint16	KDnsRRClassCS = 2;  ///< CSNET class
williamr@2
    40
const TUint16	KDnsRRClassCH = 3;  ///< CHAOS class
williamr@2
    41
const TUint16   KDnsRRClassHS = 4;  ///< Hesiod
williamr@2
    42
williamr@2
    43
williamr@2
    44
//-- DNS RR and query type values, see RFC1035
williamr@2
    45
const TUint16   KDnsRRTypeInvalid   = 0;    ///< invalid terminal value
williamr@2
    46
const TUint16   KDnsRRTypeA         = 1;    ///< host address RR type
williamr@2
    47
const TUint16   KDnsRRTypeNS        = 2;    ///< authoritative name server
williamr@2
    48
const TUint16   KDnsRRTypeCNAME     = 5;    ///< canonical name
williamr@2
    49
const TUint16   KDnsRRTypeWKS       = 11;   ///< well known service description
williamr@2
    50
const TUint16   KDnsRRTypePTR       = 12;   ///< domain name pointer
williamr@2
    51
const TUint16   KDnsRRTypeHINFO     = 13;   ///< host information
williamr@2
    52
const TUint16   KDnsRRTypeMX        = 15;   ///< mail exchange
williamr@2
    53
const TUint16   KDnsRRTypeTXT       = 16;   ///< text strings
williamr@2
    54
williamr@2
    55
const TUint16   KDnsRRTypeAAAA      = 28;   ///< AAAA RR type
williamr@2
    56
const TUint16   KDnsRRTypeSRV       = 33;   ///< SRV RR type
williamr@2
    57
const TUint16   KDnsRRTypeNAPTR     = 35;   ///< NAPTR RR type
williamr@2
    58
williamr@2
    59
//-- DNS RR query values only
williamr@2
    60
const TUint16   KDnsQTypeAXFR       = 252;  ///< request for a transfer of an entire zone
williamr@2
    61
const TUint16   KDnsQTypeMAILB      = 253;  ///< request for mailbox-related records (MB, MG or MR)
williamr@2
    62
const TUint16   KDnsQTypeANY        = 255;  ///< request for all records
williamr@2
    63
williamr@2
    64
/** 
williamr@2
    65
DNS query buffer type 
williamr@2
    66
@internalTechnology
williamr@2
    67
*/
williamr@2
    68
typedef TBuf8<255>  TDnsQryData;
williamr@2
    69
williamr@2
    70
/**
williamr@2
    71
representation of domain name in terms of DNS responses
williamr@2
    72
@internalTechnology
williamr@2
    73
*/
williamr@2
    74
typedef TBuf8<255>  TDnsDomainName;
williamr@2
    75
williamr@2
    76
/**
williamr@2
    77
representation of a label data in terms of DNS responses 
williamr@2
    78
@internalTechnology
williamr@2
    79
*/
williamr@2
    80
typedef TBuf8<63>   TDnsLabel;
williamr@2
    81
williamr@2
    82
/**
williamr@2
    83
representation of a character string in DNS responses 
williamr@2
    84
@internalTechnology
williamr@2
    85
*/
williamr@2
    86
typedef TBuf8<255>  TDnsString;
williamr@2
    87
williamr@2
    88
williamr@2
    89
class   TDnsQuery
williamr@2
    90
/**
williamr@2
    91
DNS query representation.
williamr@2
    92
See RFC1035.
williamr@2
    93
williamr@2
    94
@publishedPartner
williamr@2
    95
@released
williamr@2
    96
*/
williamr@2
    97
    {
williamr@2
    98
    public:    
williamr@2
    99
        inline  TDnsQuery();    //- default constructor
williamr@2
   100
        inline  TDnsQuery(const TDesC8& aQryDomainName, TUint16 aType, TUint16 aClass = KDnsRRClassIN);
williamr@2
   101
williamr@2
   102
        inline  TUint16 Type()        const; 
williamr@2
   103
        inline  TUint16 Class()       const; 
williamr@2
   104
        inline  const TDesC8& Data()  const; 
williamr@2
   105
        
williamr@2
   106
        inline  void SetType(TUint16 aType);
williamr@2
   107
        inline  void SetClass(TUint16 aClass);
williamr@2
   108
        inline  void SetData(const TDesC8& aData);
williamr@2
   109
williamr@2
   110
    protected:
williamr@2
   111
williamr@2
   112
        TUint16     iQryType;   ///< DNS query code
williamr@2
   113
        TUint16     iQryClass;  ///< DNS query class code
williamr@2
   114
        TDnsQryData iQryData;   ///< DNS query data (buffer)
williamr@2
   115
williamr@2
   116
    };
williamr@2
   117
williamr@2
   118
typedef TPckgBuf<TDnsQuery> TDnsQueryBuf;
williamr@2
   119
williamr@2
   120
williamr@2
   121
williamr@2
   122
class TDnsQryRespBase
williamr@2
   123
/**
williamr@2
   124
DNS query response representation.
williamr@2
   125
This is a base class and is not intended to be instantinated.
williamr@2
   126
See RFC1035.
williamr@2
   127
williamr@2
   128
@publishedPartner
williamr@2
   129
@released
williamr@2
   130
*/
williamr@2
   131
    {
williamr@2
   132
    protected:
williamr@2
   133
        //-- protected constructors to make instantination of this class impossible.
williamr@2
   134
        inline  TDnsQryRespBase();
williamr@2
   135
        inline  TDnsQryRespBase(TUint16 aRRespType, TUint16 aRRClass);
williamr@2
   136
williamr@2
   137
    public:
williamr@2
   138
williamr@2
   139
        inline TUint16 RRType()  const; 
williamr@2
   140
        inline TUint16 RRClass() const; 
williamr@2
   141
        inline TUint32 RRTtl()   const; 
williamr@2
   142
williamr@2
   143
        inline void SetRRTtl  (TUint32 aRRTtl);
williamr@2
   144
williamr@2
   145
    protected:
williamr@2
   146
        //-- common data members for all DNS query results
williamr@2
   147
        const TUint16 iRespType;     ///< RR type
williamr@2
   148
        const TUint16 iRespClass;    ///< RR Class
williamr@2
   149
              TUint32 iRespTtl;      ///< RR TTL
williamr@2
   150
williamr@2
   151
    };
williamr@2
   152
williamr@2
   153
williamr@2
   154
class TDnsRespSRV : public TDnsQryRespBase
williamr@2
   155
/**
williamr@2
   156
DNS SRV query response representation.
williamr@2
   157
See RFC2782.
williamr@2
   158
williamr@2
   159
@publishedPartner
williamr@2
   160
@released
williamr@2
   161
*/
williamr@2
   162
    {
williamr@2
   163
    public:
williamr@2
   164
williamr@2
   165
        inline TDnsRespSRV();
williamr@2
   166
williamr@2
   167
        inline TUint16 Priority() const;        
williamr@2
   168
        inline TUint16 Weight() const;          
williamr@2
   169
        inline TUint16 Port() const;            
williamr@2
   170
        inline const TDesC8& Target() const;    
williamr@2
   171
    
williamr@2
   172
        inline void SetPriority(TUint16 aPriority);
williamr@2
   173
        inline void SetWeight  (TUint16 aWeight);
williamr@2
   174
        inline void SetPort    (TUint16 aPort);
williamr@2
   175
        inline void SetTarget (const TDesC8& aTarget);
williamr@2
   176
williamr@2
   177
    protected:
williamr@2
   178
williamr@2
   179
        TUint16         iPriority;  ///< The priority of this target host
williamr@2
   180
        TUint16         iWeight;    ///< the value of the weight field
williamr@2
   181
        TUint16         iPort;      ///< port number
williamr@2
   182
        TDnsDomainName  iTarget;    ///< domain name of the target host.
williamr@2
   183
    };
williamr@2
   184
williamr@2
   185
typedef TPckgBuf<TDnsRespSRV> TDnsRespSRVBuf;
williamr@2
   186
williamr@2
   187
class TDnsRespA : public TDnsQryRespBase
williamr@2
   188
/**
williamr@2
   189
DNS Host Address query response representation.
williamr@2
   190
See RFC1034, 1035.
williamr@2
   191
williamr@2
   192
@publishedPartner
williamr@2
   193
@released
williamr@2
   194
*/
williamr@2
   195
    {
williamr@2
   196
    public:
williamr@2
   197
williamr@2
   198
        TDnsRespA() : TDnsQryRespBase(KDnsRRTypeA, KDnsRRClassIN)  {}
williamr@2
   199
williamr@2
   200
        inline const TInetAddr&  HostAddress() const; 
williamr@2
   201
        inline void  SetHostAddress(const TInetAddr& aInetAddr);
williamr@2
   202
williamr@2
   203
    protected:
williamr@2
   204
        TInetAddr   iInetAddr;  ///< Host address
williamr@2
   205
    };
williamr@2
   206
williamr@2
   207
typedef TPckgBuf<TDnsRespA> TDnsRespABuf;
williamr@2
   208
williamr@2
   209
williamr@2
   210
class TDnsRespAAAA : public TDnsQryRespBase
williamr@2
   211
/**
williamr@2
   212
IPv6 DNS Host Address query response representation.
williamr@2
   213
See RFC1035, RFC1886
williamr@2
   214
williamr@2
   215
@publishedPartner
williamr@2
   216
@released
williamr@2
   217
*/
williamr@2
   218
    {
williamr@2
   219
    public:
williamr@2
   220
williamr@2
   221
        TDnsRespAAAA() : TDnsQryRespBase(KDnsRRTypeAAAA, KDnsRRClassIN) {}
williamr@2
   222
williamr@2
   223
        inline const TInetAddr&  HostAddress() const;   
williamr@2
   224
        inline void SetHostAddress(const TInetAddr& aInetAddr);
williamr@2
   225
williamr@2
   226
    protected:
williamr@2
   227
        TInetAddr   iInetAddr;  ///< Host address
williamr@2
   228
    };
williamr@2
   229
williamr@2
   230
typedef TPckgBuf<TDnsRespAAAA> TDnsRespAAAABuf;
williamr@2
   231
williamr@2
   232
williamr@2
   233
class TDnsRespPTR : public TDnsQryRespBase
williamr@2
   234
/**
williamr@2
   235
DNS Domain Name query response representation.
williamr@2
   236
See RFC1034.
williamr@2
   237
williamr@2
   238
@publishedPartner
williamr@2
   239
@released
williamr@2
   240
*/
williamr@2
   241
    {
williamr@2
   242
    public:
williamr@2
   243
williamr@2
   244
        TDnsRespPTR() : TDnsQryRespBase(KDnsRRTypePTR, KDnsRRClassIN) {}
williamr@2
   245
williamr@2
   246
        inline const TDesC8& HostName() const; 
williamr@2
   247
        inline void  SetHostName(const TDesC8& aHostName);
williamr@2
   248
williamr@2
   249
    protected:
williamr@2
   250
        TDnsDomainName    iName;  ///< domain this RR refers to.
williamr@2
   251
    };
williamr@2
   252
williamr@2
   253
typedef TPckgBuf<TDnsRespPTR> TDnsRespPTRBuf;
williamr@2
   254
williamr@2
   255
williamr@2
   256
class TDnsRespNAPTR : public TDnsQryRespBase
williamr@2
   257
/** 
williamr@2
   258
DNS NAPTR query response representation.
williamr@2
   259
See RFC2915.
williamr@2
   260
williamr@2
   261
@publishedPartner
williamr@2
   262
@released
williamr@2
   263
*/
williamr@2
   264
    {
williamr@2
   265
    public:
williamr@2
   266
williamr@2
   267
        inline TDnsRespNAPTR();
williamr@2
   268
williamr@2
   269
        inline TUint16         Order()       const; 
williamr@2
   270
        inline TUint16         Pref()        const; 
williamr@2
   271
        inline const TDesC8&   Flags()       const; 
williamr@2
   272
        inline const TDesC8&   Service()     const; 
williamr@2
   273
        inline const TDesC8&   Regexp()      const; 
williamr@2
   274
        inline const TDesC8&   Replacement() const; 
williamr@2
   275
williamr@2
   276
        inline void SetOrder(TUint16 aOrder);
williamr@2
   277
        inline void SetPref(TUint16 aPref);
williamr@2
   278
        inline void SetFlags(const TDesC8& aFlags);
williamr@2
   279
        inline void SetService(const TDesC8& aService);
williamr@2
   280
        inline void SetRegexp(const TDesC8& aRegexp);
williamr@2
   281
        inline void SetReplacement(const TDesC8& aReplacement);
williamr@2
   282
williamr@2
   283
    protected:
williamr@2
   284
williamr@2
   285
        TUint16         iOrder;      ///< RR Order field
williamr@2
   286
        TUint16         iPref;       ///< RR Preference field
williamr@2
   287
        TDnsString      iFlags;      ///< RR Flags string
williamr@2
   288
        TDnsString      iService;    ///< service name(s) available
williamr@2
   289
        TDnsString      iRegexp;     ///< RR Regexp field
williamr@2
   290
        TDnsDomainName  iReplacement;///< RR Replacement field
williamr@2
   291
    };
williamr@2
   292
williamr@2
   293
typedef TPckgBuf<TDnsRespNAPTR> TDnsRespNAPTRBuf;
williamr@2
   294
williamr@2
   295
class TDnsRespMX: public TDnsQryRespBase
williamr@2
   296
/**
williamr@2
   297
DNS MX query response representation.
williamr@2
   298
See RFC1035, RFC974.
williamr@2
   299
williamr@2
   300
@publishedPartner
williamr@2
   301
@released
williamr@2
   302
*/
williamr@2
   303
    {
williamr@2
   304
    public:
williamr@2
   305
williamr@2
   306
        TDnsRespMX() : TDnsQryRespBase(KDnsRRTypeMX, KDnsRRClassIN) {}
williamr@2
   307
williamr@2
   308
        inline TUint16         Pref()      const; 
williamr@2
   309
        inline const TDesC8&   HostName()  const; 
williamr@2
   310
williamr@2
   311
        inline void SetPref(TUint16 aPref);
williamr@2
   312
        inline void SetHostName(const TDesC8& aHostName);
williamr@2
   313
williamr@2
   314
    protected:
williamr@2
   315
williamr@2
   316
        TUint16         iPref;       ///< RR Preference field.
williamr@2
   317
        TDnsDomainName  iHostName;   ///< Host name.
williamr@2
   318
williamr@2
   319
    };
williamr@2
   320
williamr@2
   321
typedef TPckgBuf<TDnsRespMX> TDnsRespMXBuf;
williamr@2
   322
williamr@2
   323
// -- DNS query type value, DoCoMo Cache requirement
williamr@2
   324
// This is used in conjunction with RHostResolver::Query
williamr@2
   325
// Example usage:
williamr@2
   326
//
williamr@2
   327
// 		TDnsQueryBuf dnsQryBuf;
williamr@2
   328
//		TDnsRespABuf dummy;
williamr@2
   329
//
williamr@2
   330
//		dnsQryBuf().SetType(KDnsQTypeCacheClear);
williamr@2
   331
//		resolver.Query(dnsQryBuf, dummy, status); 
williamr@2
   332
//		User::WaitForRequest(status);
williamr@2
   333
//
williamr@2
   334
const TUint16   KDnsQTypeCacheClear = 99;   ///< Resolver Cache Clear type
williamr@2
   335
// -- DNS non-recursive look up, DoCoMo requirement
williamr@2
   336
// This is used in conjunction with RHostResolver::GetByName.
williamr@2
   337
// Example usage:
williamr@2
   338
//
williamr@2
   339
//		TNameEntry nameEntry;
williamr@2
   340
//		TBuf<256> hostName(KDnsNonrecursive);
williamr@2
   341
//		hostName.Append(_L("www.symbian.com"));
williamr@2
   342
//
williamr@2
   343
//		resolver.GetByName(hostName,nameEntry, status);
williamr@2
   344
//		User::WaitForRequest(status);
williamr@2
   345
//
williamr@2
   346
_LIT(KDnsNonrecursive, "NONRECURSIVE?");
williamr@2
   347
williamr@2
   348
#include "dns_qry.inl"
williamr@2
   349
williamr@2
   350
#endif //__DNS_QRY_H__