Q3DnsAnswer Class Reference

Collaboration diagram for Q3DnsAnswer:

Collaboration graph
[legend]
List of all members.

Detailed Description

Definition at line 208 of file q3dns.cpp.

Public Member Functions

 Q3DnsAnswer (Q3DnsQuery *)
 Q3DnsAnswer (const QByteArray &, Q3DnsQuery *)
 ~Q3DnsAnswer ()
void parse ()
void notify ()

Public Attributes

bool ok

Private Member Functions

QString readString (bool multipleLabels=true)
void parseA ()
void parseAaaa ()
void parseMx ()
void parseSrv ()
void parseCname ()
void parsePtr ()
void parseTxt ()
void parseNs ()

Private Attributes

Q3DnsQueryquery
Q_UINT8 * answer
int size
int pp
Q3PtrList< Q3DnsRR > * rrs
int next
int ttl
QString label
Q3DnsRRrr


Constructor & Destructor Documentation

Q3DnsAnswer::Q3DnsAnswer ( Q3DnsQuery  ) 

Definition at line 264 of file q3dns.cpp.

References answer, Q3PtrList< type >::append(), QString::clear(), Q3DnsRR::current, Q3DnsRR::deleteTime, Q3DnsRR::expireTime, Q3DnsQuery::l, label, next, Q3DnsRR::nxdomain, ok, pp, query, rr, rrs, Q3PtrCollection::setAutoDelete(), size, Q3DnsQuery::started, Q3DnsQuery::t, Q3DnsRR::t, and ttl.

00265 {
00266     ok = true;
00267 
00268     answer = 0;
00269     size = 0;
00270     query = query_;
00271     pp = 0;
00272     rrs = new Q3PtrList<Q3DnsRR>;
00273     rrs->setAutoDelete( false );
00274     next = size;
00275     ttl = 0;
00276     label.clear();
00277     rr = 0;
00278 
00279     Q3DnsRR * newrr = new Q3DnsRR( query->l );
00280     newrr->t = query->t;
00281     newrr->deleteTime = query->started + 10;
00282     newrr->expireTime = query->started + 10;
00283     newrr->nxdomain = true;
00284     newrr->current = true;
00285     rrs->append( newrr );
00286 }

Here is the call graph for this function:

Q3DnsAnswer::Q3DnsAnswer ( const QByteArray ,
Q3DnsQuery  
)

Definition at line 289 of file q3dns.cpp.

References answer, QString::clear(), QByteArray::data(), int, label, next, ok, pp, query, rr, rrs, Q3PtrCollection::setAutoDelete(), QByteArray::size(), size, and ttl.

00291 {
00292     ok = true;
00293 
00294     answer = (Q_UINT8 *)(answer_.data());
00295     size = (int)answer_.size();
00296     query = query_;
00297     pp = 0;
00298     rrs = new Q3PtrList<Q3DnsRR>;
00299     rrs->setAutoDelete( false );
00300     next = size;
00301     ttl = 0;
00302     label.clear();
00303     rr = 0;
00304 }

Here is the call graph for this function:

Q3DnsAnswer::~Q3DnsAnswer (  ) 

Definition at line 307 of file q3dns.cpp.

References Q3PtrListIterator< type >::current(), Q3Dns::None, ok, rrs, and Q3DnsRR::t.

00308 {
00309     if ( !ok && rrs ) {
00310   Q3PtrListIterator<Q3DnsRR> it( *rrs );
00311   Q3DnsRR * tmprr;
00312   while( (tmprr=it.current()) != 0 ) {
00313       ++it;
00314       tmprr->t = Q3Dns::None; // will be deleted soonish
00315   }
00316     }
00317     delete rrs;
00318 }

Here is the call graph for this function:


Member Function Documentation

void Q3DnsAnswer::parse (  ) 

Definition at line 560 of file q3dns.cpp.

References Q3Dns::A, Q3Dns::Aaaa, Q3DnsRR::address, answer, Q3PtrList< type >::append(), Q3PtrList< type >::current(), Q3DnsRR::current, Q3DnsRR::deleteTime, Q3DnsRR::domain, Q3DnsRR::expireTime, Q3PtrList< type >::first(), QString::isNull(), Q3DnsQuery::l, label, QString::length(), Q3DnsDomain::name(), next, Q3PtrList< type >::next(), Q3Dns::None, Q3DnsRR::nxdomain, ok, parseA(), parseAaaa(), parseCname(), parseMx(), parseNs(), parsePtr(), parseSrv(), parseTxt(), Q3DnsRR::port, pp, Q3DnsRR::priority, qDebug(), query, readString(), rr, rrs, Q3DnsDomain::rrs, size, Q3DnsQuery::started, Q3DnsQuery::t, Q3DnsRR::t, Q3DnsRR::target, Q3DnsRR::text, ttl, type, used, and Q3DnsRR::weight.

00561 {
00562     // okay, do the work...
00563     if ( (answer[2] & 0x78) != 0 ) {
00564 #if defined(Q3DNS_DEBUG)
00565   qDebug( "DNS Manager: answer to wrong query type (%d)", answer[1] );
00566 #endif
00567   ok = false;
00568   return;
00569     }
00570 
00571     // AA
00572     bool aa = (answer[2] & 4) != 0;
00573 
00574     // TC
00575     if ( (answer[2] & 2) != 0 ) {
00576 #if defined(Q3DNS_DEBUG)
00577   qDebug( "DNS Manager: truncated answer; pressing on" );
00578 #endif
00579     }
00580 
00581     // RD
00582     bool rd = (answer[2] & 1) != 0;
00583 
00584     // we don't test RA
00585     // we don't test the MBZ fields
00586 
00587     if ( (answer[3] & 0x0f) == 3 ) {
00588 #if defined(Q3DNS_DEBUG)
00589   qDebug( "DNS Manager: saw NXDomain for %s", query->l.ascii() );
00590 #endif
00591   // NXDomain.  cache that for one minute.
00592   rr = new Q3DnsRR( query->l );
00593   rr->t = query->t;
00594   rr->deleteTime = query->started + 60;
00595   rr->expireTime = query->started + 60;
00596   rr->nxdomain = true;
00597   rr->current = true;
00598   rrs->append( rr );
00599   return;
00600     }
00601 
00602     if ( (answer[3] & 0x0f) != 0 ) {
00603 #if defined(Q3DNS_DEBUG)
00604   qDebug( "DNS Manager: error code %d", answer[3] & 0x0f );
00605 #endif
00606   ok = false;
00607   return;
00608     }
00609 
00610     int qdcount = ( answer[4] << 8 ) + answer[5];
00611     int ancount = ( answer[6] << 8 ) + answer[7];
00612     int nscount = ( answer[8] << 8 ) + answer[9];
00613     int adcount = (answer[10] << 8 ) +answer[11];
00614 
00615     pp = 12;
00616 
00617     // read query
00618     while( qdcount > 0 && pp < size ) {
00619   // should I compare the string against query->l?
00620   (void)readString();
00621   if ( !ok )
00622       return;
00623   pp += 4;
00624   qdcount--;
00625     }
00626 
00627     // answers and stuff
00628     int rrno = 0;
00629     // if we parse the answer completely, but there are no answers,
00630     // ignore the entire thing.
00631     int answers = 0;
00632     while( ( rrno < ancount ||
00633        ( ok && answers >0 && rrno < ancount + nscount + adcount ) ) &&
00634      pp < size ) {
00635   label = readString().lower();
00636   if ( !ok )
00637       return;
00638   int rdlength = 0;
00639   if ( pp + 10 <= size )
00640       rdlength = ( answer[pp+8] << 8 ) + answer[pp+9];
00641   if ( pp + 10 + rdlength > size ) {
00642 #if defined(Q3DNS_DEBUG)
00643       qDebug( "DNS Manager: ran out of stuff to parse (%d+%d>%d (%d)",
00644         pp, rdlength, size, rrno < ancount );
00645 #endif
00646       // if we're still in the AN section, we should go back and
00647       // at least down the TTLs.  probably best to invalidate
00648       // the results.
00649       // the rrs list is good for this
00650       ok = ( rrno < ancount );
00651       return;
00652   }
00653   uint type, clas;
00654   type = ( answer[pp+0] << 8 ) + answer[pp+1];
00655   clas = ( answer[pp+2] << 8 ) + answer[pp+3];
00656   ttl = ( answer[pp+4] << 24 ) + ( answer[pp+5] << 16 ) +
00657         ( answer[pp+6] <<  8 ) + answer[pp+7];
00658   pp = pp + 10;
00659   if ( clas != 1 ) {
00660 #if defined(Q3DNS_DEBUG)
00661       qDebug( "DNS Manager: class %d (not internet) for %s",
00662         clas, label.isNull() ? "." : label.ascii() );
00663 #endif
00664   } else {
00665             next = pp + rdlength;
00666       rr = 0;
00667       switch( type ) {
00668       case 1:
00669     parseA();
00670     break;
00671       case 28:
00672     parseAaaa();
00673     break;
00674       case 15:
00675     parseMx();
00676     break;
00677       case 33:
00678     parseSrv();
00679     break;
00680       case 5:
00681     parseCname();
00682     break;
00683       case 12:
00684     parsePtr();
00685     break;
00686       case 16:
00687     parseTxt();
00688     break;
00689       case 2:
00690     parseNs();
00691     break;
00692       default:
00693     // something we don't know
00694 #if defined(Q3DNS_DEBUG)
00695     qDebug( "DNS Manager: type %d for %s", type,
00696       label.isNull() ? "." : label.ascii() );
00697 #endif
00698     break;
00699       }
00700       if ( rr ) {
00701     rr->deleteTime = 0;
00702     if ( ttl > 0 )
00703         rr->expireTime = query->started + ttl;
00704     else
00705         rr->expireTime = query->started + 20;
00706     if ( rrno < ancount ) {
00707         answers++;
00708         rr->deleteTime = rr->expireTime;
00709     }
00710     rr->current = true;
00711     rrs->append( rr );
00712       }
00713         }
00714   if ( !ok )
00715       return;
00716   pp = next;
00717   next = size;
00718   rrno++;
00719     }
00720     if ( answers == 0 ) {
00721 #if defined(Q3DNS_DEBUG)
00722   qDebug( "DNS Manager: answer contained no answers" );
00723 #endif
00724   ok = ( aa && rd );
00725     }
00726 
00727     // now go through the list and mark all the As that are referenced
00728     // by something we care about.  we want to cache such As.
00729     rrs->first();
00730     Q3Dict<void> used( 17 );
00731     used.setAutoDelete( false );
00732     while( (rr=rrs->current()) != 0 ) {
00733   rrs->next();
00734   if ( rr->target.length() && rr->deleteTime > 0 && rr->current )
00735       used.insert( rr->target, (void*)42 );
00736   if ( ( rr->t == Q3Dns::A || rr->t == Q3Dns::Aaaa ) &&
00737        used.find( rr->domain->name() ) != 0 )
00738       rr->deleteTime = rr->expireTime;
00739     }
00740 
00741     // next, for each RR, delete any older RRs that are equal to it
00742     rrs->first();
00743     while( (rr=rrs->current()) != 0 ) {
00744   rrs->next();
00745   if ( rr && rr->domain && rr->domain->rrs ) {
00746       Q3PtrList<Q3DnsRR> * drrs = rr->domain->rrs;
00747       drrs->first();
00748       Q3DnsRR * older;
00749       while( (older=drrs->current()) != 0 ) {
00750     if ( older != rr &&
00751          older->t == rr->t &&
00752          older->nxdomain == rr->nxdomain &&
00753          older->address == rr->address &&
00754          older->target == rr->target &&
00755          older->priority == rr->priority &&
00756          older->weight == rr->weight &&
00757          older->port == rr->port &&
00758          older->text == rr->text ) {
00759         // well, it's equal, but it's not the same. so we kill it,
00760         // but use its expiry time.
00761 #if defined(Q3DNS_DEBUG)
00762         qDebug( "killing off old %d for %s, expire was %d",
00763                             older->t, older->domain->name().latin1(),
00764                             rr->expireTime );
00765 #endif
00766         older->t = Q3Dns::None;
00767         rr->expireTime = QMAX( older->expireTime, rr->expireTime );
00768         rr->deleteTime = QMAX( older->deleteTime, rr->deleteTime );
00769         older->deleteTime = 0;
00770 #if defined(Q3DNS_DEBUG)
00771         qDebug( "    adjusted expire is %d", rr->expireTime );
00772 #endif
00773     }
00774     drrs->next();
00775       }
00776   }
00777     }
00778 
00779 #if defined(Q3DNS_DEBUG)
00780     //qDebug( "DNS Manager: ()" );
00781 #endif
00782 }

Here is the call graph for this function:

void Q3DnsAnswer::notify (  ) 

Definition at line 791 of file q3dns.cpp.

References Q3PtrList< type >::count(), Q3PtrDictIterator< type >::current(), Q3DnsQuery::dns, Q3PtrDict< type >::find(), Q3PtrDict< type >::insert(), Q3DnsQuery::l, Q3Dns::label(), n, ok, qDebug(), query, rrs, Q3PtrCollection::setAutoDelete(), and Q3PtrDictIterator< type >::toFirst().

00792 {
00793     if ( !rrs || !ok || !query || !query->dns )
00794   return;
00795 
00796     Q3PtrDict<void> notified;
00797     notified.setAutoDelete( false );
00798 
00799     Q3PtrDictIterator<void> it( *query->dns );
00800     Q3Dns * dns;
00801     it.toFirst();
00802     while( (dns=(Q3Dns*)(it.current())) != 0 ) {
00803   ++it;
00804   if ( notified.find( (void*)dns ) == 0 ) {
00805       notified.insert( (void*)dns, (void*)42 );
00806       if ( rrs->count() == 0 ) {
00807 #if defined(Q3DNS_DEBUG)
00808     qDebug( "DNS Manager: found no answers!" );
00809 #endif
00810     dns->d->noNames = true;
00811     ((Q3DnsUgleHack*)dns)->ugle( true );
00812       } else {
00813     QStringList n = dns->qualifiedNames();
00814     if ( n.contains(query->l) )
00815         ((Q3DnsUgleHack*)dns)->ugle();
00816 #if defined(Q3DNS_DEBUG)
00817     else
00818         qDebug( "DNS Manager: DNS thing %s not notified for %s",
00819           dns->label().ascii(), query->l.ascii() );
00820 #endif
00821       }
00822   }
00823     }
00824 }

Here is the call graph for this function:

QString Q3DnsAnswer::readString ( bool  multipleLabels = true  )  [private]

Definition at line 321 of file q3dns.cpp.

References answer, b, QString::isNull(), ok, p, pp, and size.

Referenced by parse(), parseCname(), parseMx(), parseNs(), parsePtr(), parseSrv(), and parseTxt().

00322 {
00323     int p = pp;
00324     QString r;
00325     Q_UINT8 b;
00326     for( ;; ) {
00327   b = 128;
00328         // Read one character
00329         if ( p >= 0 && p < size )
00330       b = answer[p];
00331 
00332   switch( b >> 6 ) {
00333   case 0:
00334             // b is less than 64
00335       p++;
00336 
00337             // Detect end of data
00338       if ( b == 0 ) {
00339     if ( p > pp )
00340         pp = p;
00341                 return r.isNull() ? QString( "." ) : r;
00342       }
00343 
00344             // Read a label of size 'b' characters
00345             if ( !r.isNull() )
00346     r += '.';
00347       while( b-- > 0 )
00348                 r += QChar( answer[p++] );
00349 
00350             // Return immediately if we were only supposed to read one
00351             // label.
00352             if (!multipleLabels)
00353                 return r;
00354 
00355       break;
00356   default:
00357             // Ignore unrecognized control character, or p was out of
00358             // range.
00359       goto not_ok;
00360   case 3:
00361             // Use the next character to determine the relative offset
00362             // to jump to before continuing the packet parsing.
00363       int q = ( (answer[p] & 0x3f) << 8 ) + answer[p+1];
00364 
00365       if ( q >= pp || q >= p )
00366     goto not_ok;
00367       if ( p >= pp )
00368     pp = p + 2;
00369       p = q;
00370         }
00371     }
00372 not_ok:
00373     ok = false;
00374     return QString();
00375 }

Here is the call graph for this function:

void Q3DnsAnswer::parseA (  )  [private]

Definition at line 379 of file q3dns.cpp.

References Q3Dns::A, Q3DnsRR::address, answer, label, next, pp, qDebug(), rr, Q3DnsRR::t, QHostAddress::toString(), and ttl.

Referenced by parse().

00380 {
00381     if ( next != pp + 4 ) {
00382 #if defined(Q3DNS_DEBUG)
00383   qDebug( "Q3Dns: saw %d bytes long IN A for %s",
00384     next - pp, label.ascii() );
00385 #endif
00386   return;
00387     }
00388 
00389     rr = new Q3DnsRR( label );
00390     rr->t = Q3Dns::A;
00391     rr->address = QHostAddress( ( answer[pp+0] << 24 ) +
00392         ( answer[pp+1] << 16 ) +
00393         ( answer[pp+2] <<  8 ) +
00394         ( answer[pp+3] ) );
00395 #if defined(Q3DNS_DEBUG)
00396     qDebug( "Q3Dns: saw %s IN A %s (ttl %d)", label.ascii(),
00397       rr->address.toString().ascii(), ttl );
00398 #endif
00399 }

Here is the call graph for this function:

void Q3DnsAnswer::parseAaaa (  )  [private]

Definition at line 402 of file q3dns.cpp.

References Q3Dns::Aaaa, Q3DnsRR::address, answer, label, next, pp, qDebug(), rr, Q3DnsRR::t, QHostAddress::toString(), and ttl.

Referenced by parse().

00403 {
00404     if ( next != pp + 16 ) {
00405 #if defined(Q3DNS_DEBUG)
00406   qDebug( "Q3Dns: saw %d bytes long IN Aaaa for %s",
00407     next - pp, label.ascii() );
00408 #endif
00409   return;
00410     }
00411 
00412     rr = new Q3DnsRR( label );
00413     rr->t = Q3Dns::Aaaa;
00414     rr->address = QHostAddress( answer+pp );
00415 #if defined(Q3DNS_DEBUG)
00416     qDebug( "Q3Dns: saw %s IN Aaaa %s (ttl %d)", label.ascii(),
00417       rr->address.toString().ascii(), ttl );
00418 #endif
00419 }

Here is the call graph for this function:

void Q3DnsAnswer::parseMx (  )  [private]

Definition at line 423 of file q3dns.cpp.

References answer, label, Q3Dns::Mx, next, ok, pp, Q3DnsRR::priority, qDebug(), readString(), rr, Q3DnsRR::t, Q3DnsRR::target, and ttl.

Referenced by parse().

00424 {
00425     if ( next < pp + 2 ) {
00426 #if defined(Q3DNS_DEBUG)
00427   qDebug( "Q3Dns: saw %d bytes long IN MX for %s",
00428     next - pp, label.ascii() );
00429 #endif
00430   return;
00431     }
00432 
00433     rr = new Q3DnsRR( label );
00434     rr->priority = (answer[pp] << 8) + answer[pp+1];
00435     pp += 2;
00436     rr->target = readString().lower();
00437     if ( !ok ) {
00438 #if defined(Q3DNS_DEBUG)
00439   qDebug( "Q3Dns: saw bad string in MX for %s", label.ascii() );
00440 #endif
00441   return;
00442     }
00443     rr->t = Q3Dns::Mx;
00444 #if defined(Q3DNS_DEBUG)
00445     qDebug( "Q3Dns: saw %s IN MX %d %s (ttl %d)", label.ascii(),
00446       rr->priority, rr->target.ascii(), ttl );
00447 #endif
00448 }

Here is the call graph for this function:

void Q3DnsAnswer::parseSrv (  )  [private]

Definition at line 451 of file q3dns.cpp.

References answer, label, next, ok, Q3DnsRR::port, pp, Q3DnsRR::priority, qDebug(), readString(), rr, Q3Dns::Srv, Q3DnsRR::t, Q3DnsRR::target, ttl, and Q3DnsRR::weight.

Referenced by parse().

00452 {
00453     if ( next < pp + 6 ) {
00454 #if defined(Q3DNS_DEBUG)
00455   qDebug( "Q3Dns: saw %d bytes long IN SRV for %s",
00456     next - pp, label.ascii() );
00457 #endif
00458   return;
00459     }
00460 
00461     rr = new Q3DnsRR( label );
00462     rr->priority = (answer[pp] << 8) + answer[pp+1];
00463     rr->weight = (answer[pp+2] << 8) + answer[pp+3];
00464     rr->port = (answer[pp+4] << 8) + answer[pp+5];
00465     pp += 6;
00466     rr->target = readString().lower();
00467     if ( !ok ) {
00468 #if defined(Q3DNS_DEBUG)
00469   qDebug( "Q3Dns: saw bad string in SRV for %s", label.ascii() );
00470 #endif
00471   return;
00472     }
00473     rr->t = Q3Dns::Srv;
00474 #if defined(Q3DNS_DEBUG)
00475     qDebug( "Q3Dns: saw %s IN SRV %d %d %d %s (ttl %d)", label.ascii(),
00476       rr->priority, rr->weight, rr->port, rr->target.ascii(), ttl );
00477 #endif
00478 }

Here is the call graph for this function:

void Q3DnsAnswer::parseCname (  )  [private]

Definition at line 481 of file q3dns.cpp.

References Q3Dns::Cname, label, ok, qDebug(), readString(), rr, Q3DnsRR::t, Q3DnsRR::target, and ttl.

Referenced by parse().

00482 {
00483     QString target = readString().lower();
00484     if ( !ok ) {
00485 #if defined(Q3DNS_DEBUG)
00486   qDebug( "Q3Dns: saw bad cname for for %s", label.ascii() );
00487 #endif
00488   return;
00489     }
00490 
00491     rr = new Q3DnsRR( label );
00492     rr->t = Q3Dns::Cname;
00493     rr->target = target;
00494 #if defined(Q3DNS_DEBUG)
00495     qDebug( "Q3Dns: saw %s IN CNAME %s (ttl %d)", label.ascii(),
00496       rr->target.ascii(), ttl );
00497 #endif
00498 }

Here is the call graph for this function:

void Q3DnsAnswer::parsePtr (  )  [private]

Definition at line 520 of file q3dns.cpp.

References label, ok, Q3Dns::Ptr, qDebug(), readString(), rr, Q3DnsRR::t, Q3DnsRR::target, and ttl.

Referenced by parse().

00521 {
00522     QString target = readString().lower();
00523     if ( !ok ) {
00524 #if defined(Q3DNS_DEBUG)
00525   qDebug( "Q3Dns: saw bad PTR for for %s", label.ascii() );
00526 #endif
00527   return;
00528     }
00529 
00530     rr = new Q3DnsRR( label );
00531     rr->t = Q3Dns::Ptr;
00532     rr->target = target;
00533 #if defined(Q3DNS_DEBUG)
00534     qDebug( "Q3Dns: saw %s IN PTR %s (ttl %d)", label.ascii(),
00535       rr->target.ascii(), ttl );
00536 #endif
00537 }

Here is the call graph for this function:

void Q3DnsAnswer::parseTxt (  )  [private]

Definition at line 540 of file q3dns.cpp.

References label, ok, qDebug(), readString(), rr, Q3DnsRR::t, Q3DnsRR::text, ttl, and Q3Dns::Txt.

Referenced by parse().

00541 {
00542     QString text = readString(false);
00543     if ( !ok ) {
00544 #if defined(Q3DNS_DEBUG)
00545   qDebug( "Q3Dns: saw bad TXT for for %s", label.ascii() );
00546 #endif
00547   return;
00548     }
00549 
00550     rr = new Q3DnsRR( label );
00551     rr->t = Q3Dns::Txt;
00552     rr->text = text;
00553 #if defined(Q3DNS_DEBUG)
00554     qDebug( "Q3Dns: saw %s IN TXT \"%s\" (ttl %d)", label.ascii(),
00555       rr->text.ascii(), ttl );
00556 #endif
00557 }

Here is the call graph for this function:

void Q3DnsAnswer::parseNs (  )  [private]

Definition at line 501 of file q3dns.cpp.

References label, ok, qDebug(), readString(), and ttl.

Referenced by parse().

00502 {
00503     QString target = readString().lower();
00504     if ( !ok ) {
00505 #if defined(Q3DNS_DEBUG)
00506   qDebug( "Q3Dns: saw bad cname for for %s", label.ascii() );
00507 #endif
00508   return;
00509     }
00510 
00511     // parse, but ignore
00512 
00513 #if defined(Q3DNS_DEBUG)
00514     qDebug( "Q3Dns: saw %s IN NS %s (ttl %d)", label.ascii(),
00515       target.ascii(), ttl );
00516 #endif
00517 }

Here is the call graph for this function:


Member Data Documentation

bool Q3DnsAnswer::ok

Definition at line 217 of file q3dns.cpp.

Referenced by notify(), parse(), parseCname(), parseMx(), parseNs(), parsePtr(), parseSrv(), parseTxt(), Q3DnsAnswer(), readString(), and ~Q3DnsAnswer().

Q3DnsQuery* Q3DnsAnswer::query [private]

Definition at line 220 of file q3dns.cpp.

Referenced by notify(), parse(), and Q3DnsAnswer().

Q_UINT8* Q3DnsAnswer::answer [private]

Definition at line 222 of file q3dns.cpp.

Referenced by parse(), parseA(), parseAaaa(), parseMx(), parseSrv(), Q3DnsAnswer(), and readString().

int Q3DnsAnswer::size [private]

Definition at line 223 of file q3dns.cpp.

Referenced by parse(), Q3DnsAnswer(), and readString().

int Q3DnsAnswer::pp [private]

Definition at line 224 of file q3dns.cpp.

Referenced by parse(), parseA(), parseAaaa(), parseMx(), parseSrv(), Q3DnsAnswer(), and readString().

Q3PtrList<Q3DnsRR>* Q3DnsAnswer::rrs [private]

Definition at line 226 of file q3dns.cpp.

Referenced by notify(), parse(), Q3DnsAnswer(), and ~Q3DnsAnswer().

int Q3DnsAnswer::next [private]

Definition at line 229 of file q3dns.cpp.

Referenced by parse(), parseA(), parseAaaa(), parseMx(), parseSrv(), and Q3DnsAnswer().

int Q3DnsAnswer::ttl [private]

Definition at line 230 of file q3dns.cpp.

Referenced by parse(), parseA(), parseAaaa(), parseCname(), parseMx(), parseNs(), parsePtr(), parseSrv(), parseTxt(), and Q3DnsAnswer().

QString Q3DnsAnswer::label [private]

Definition at line 231 of file q3dns.cpp.

Referenced by parse(), parseA(), parseAaaa(), parseCname(), parseMx(), parseNs(), parsePtr(), parseSrv(), parseTxt(), and Q3DnsAnswer().

Q3DnsRR* Q3DnsAnswer::rr [private]

Definition at line 232 of file q3dns.cpp.

Referenced by parse(), parseA(), parseAaaa(), parseCname(), parseMx(), parsePtr(), parseSrv(), parseTxt(), and Q3DnsAnswer().


The documentation for this class was generated from the following file:
Generated on Thu Mar 15 15:51:33 2007 for Qt 4.2 User's Guide by  doxygen 1.5.1