DnsRecord.hxx
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:6k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #ifndef DnsRecord_HXX
  2. #define DnsRecord_HXX
  3. /* ====================================================================
  4.  * The Vovida Software License, Version 1.0 
  5.  * 
  6.  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  7.  * 
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in
  17.  *    the documentation and/or other materials provided with the
  18.  *    distribution.
  19.  * 
  20.  * 3. The names "VOCAL", "Vovida Open Communication Application Library",
  21.  *    and "Vovida Open Communication Application Library (VOCAL)" must
  22.  *    not be used to endorse or promote products derived from this
  23.  *    software without prior written permission. For written
  24.  *    permission, please contact vocal@vovida.org.
  25.  *
  26.  * 4. Products derived from this software may not be called "VOCAL", nor
  27.  *    may "VOCAL" appear in their name, without prior written
  28.  *    permission of Vovida Networks, Inc.
  29.  * 
  30.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  31.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  32.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  33.  * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  34.  * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  35.  * IN EXCESS OF ,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  36.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  37.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  38.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  39.  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  40.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  41.  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  42.  * DAMAGE.
  43.  * 
  44.  * ====================================================================
  45.  * 
  46.  * This software consists of voluntary contributions made by Vovida
  47.  * Networks, Inc. and many individuals on behalf of Vovida Networks,
  48.  * Inc.  For more information on Vovida Networks, Inc., please see
  49.  * <http://www.vovida.org/>.
  50.  *
  51.  */
  52. static const char* const DnsRecord_hxx_Version =
  53.     "$Id: DnsRecord.hxx,v 1.1 2001/03/27 23:51:38 wbreu Exp $";
  54. /*
  55.  *
  56.  */
  57. #include <stdlib.h>
  58. #include <stdio.h>
  59. #include <sys/types.h>
  60. #include <string>
  61. #include "cpLog.h"
  62. /** simple 5-tuple DNS SRV/A  record:
  63.  *  priority and weight do no apply to A record
  64.  */
  65. class DnsRecord {
  66.   public:
  67. /// constructor:
  68. DnsRecord(): myQtype(0), myPriority(0), myWeight(0),
  69.                  myPort(0), myTarget(""), myAddress("")
  70. {
  71. #if 0
  72. // the following was used for debugging
  73. myTimesSelected[0] = myTimesSelected[1] =      
  74. myTimesSelected[2] = myTimesSelected[3] = 0;
  75. #endif
  76.      }
  77.     // copy constructor
  78.     DnsRecord( const DnsRecord& rhs );
  79.     // assignment operator
  80.     DnsRecord& operator=( const DnsRecord& rhs );
  81.     /// destructor:
  82. virtual ~DnsRecord() 
  83. {
  84.         cpLog( LOG_DEBUG, "~DnsRecord() invoked" ); 
  85. }
  86.     /// accessors:
  87.     int getQtype()    const { return myQtype; }
  88.     ///
  89. int getPriority() const { return myPriority; }
  90.     ///
  91.     int getWeight()   const { return myWeight; }
  92.     ///
  93. int getPort()     const { return myPort; }
  94.     ///
  95.     const char*  getTarget() const { return myTarget.c_str(); }
  96.     ///
  97. const char* getAddress() const { return myAddress.c_str(); }
  98.  
  99. /// mutators:
  100.     void setQtype( int qt )      { myQtype = qt; }
  101.     ///
  102. void setPriority( int prio ) { myPriority = prio; }
  103.     ///
  104. void setWeight( int wt ) { myWeight = wt; }
  105.     ///
  106. void setPort( int prt ) { myPort = prt; }
  107.     ///
  108. void setTarget( const string& name ) { myTarget.assign( name ); }
  109.     ///
  110. void setAddress( const string& addr ){ myAddress.assign( addr ); }
  111.     /// to display content of this record:
  112. void printRecord( ) {
  113.     cpLog( LOG_DEBUG,
  114. "t=%3d   p=%3d    w=%4d  port=%5d  target=%s addr=%sn",
  115.     myQtype, myPriority, myWeight, myPort, myTarget.c_str(),
  116. myAddress.c_str());
  117. }
  118. /// increment myTimesSelected[ place ]
  119. void incrTimesSelected( int idx ) 
  120. {
  121. #if 0
  122. myTimesSelected[idx]++;
  123. #endif
  124.     }
  125. /// clear myTimesSelected[]
  126. void clearTimesSelected( ) 
  127. #if 0
  128.     myTimesSelected[0] = myTimesSelected[1] =
  129. myTimesSelected[2] = myTimesSelected[3] = 0;
  130. #endif
  131. }
  132.     
  133.     /// to verifiy the load balancing algorithm works for SRV records
  134. void printTally( ) {
  135. #if 0
  136.     int sum = myTimesSelected[1]+myTimesSelected[2]+myTimesSelected[3];
  137.     cpLog( LOG_DEBUG,
  138. "p=%3d    w=%4d   1st=%4d   2nd=%4d   3rd=%4d   sum=%4d   t=%sn",
  139.     myPriority, myWeight, myTimesSelected[1], myTimesSelected[2],
  140. myTimesSelected[3], sum, myTarget.c_str());
  141. #endif
  142. }
  143.   private:
  144.     /// equality operator - suppressed
  145.     bool operator==( const DnsRecord& rhs );
  146. int myQtype;                // SRV or A record type
  147.     int myPriority;             // appl. to SRV record only
  148.     int myWeight;               // appl. to SRV record only
  149. int myPort;                 // appl. to SRV record only
  150.     string myTarget;            // server or host name: "xxx.yy.com"
  151. string myAddress;           // "a.b.c.d" notation
  152. #if 0
  153. /** for debug only:
  154.  *  used by printTally()
  155.  */
  156. int myTimesSelected[4];     // # myTimes this record gets picked first,
  157.                           // second or third (0 not used)
  158. #endif
  159. };
  160. #endif