target.cpp
上传用户:czjinwang
上传日期:2007-01-12
资源大小:2484k
文件大小:10k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. /*===================================================================
  2.   Copyright (c) 1999
  3.   Hewlett-Packard Company
  4.  
  5.   ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
  6.   Permission to use, copy, modify, distribute and/or sell this software 
  7.   and/or its documentation is hereby granted without fee. User agrees 
  8.   to display the above copyright notice and this license notice in all 
  9.   copies of the software and any documentation of the software. User 
  10.   agrees to assume all liability for the use of the software; Hewlett-Packard 
  11.   makes no representations about the suitability of this software for any 
  12.   purpose. It is provided "AS-IS without warranty of any kind,either express 
  13.   or implied. User hereby grants a royalty-free license to any and all 
  14.   derivatives based upon this software code base. 
  15.   T A R G E T . C P P   
  16.       
  17.   VERSION:
  18.   2.8
  19.        
  20.   DESIGN:
  21.   Peter E Mellquist
  22.                 
  23.   AUTHOR:      
  24.   Peter E Mellquist
  25.               
  26.   LANGUAGE:
  27.   ANSI C++ 
  28.       
  29.   OPERATING SYSTEMS:
  30.   MS-WINDOWS WIN32
  31.   BSD UNIX
  32.       
  33.   DESCRIPTION:
  34.   Target class defines target SNMP agents. 
  35.       
  36. =====================================================================*/
  37. char target_cpp_version[]="#(@) SNMP++ 2.8 $Header: target.cpp,v 1.18 96/09/11 14:02:10 hmgr Exp $"; 
  38. #include "target.h"
  39.                                          
  40. #define PUBLIC "public"
  41. inline int MIN(int a, int b) { return a<b?a:b;} 
  42. // class variables for default behavior control                             
  43. unsigned long default_timeout=100;
  44. int default_retries=1; 
  45. //----------------------------------------------------------------------
  46. //--------[ Abstract SnmpTarget Member Functions ]----------------------
  47. //----------------------------------------------------------------------
  48. // allow destruction of derived classes
  49. SnmpTarget::~SnmpTarget() 
  50. {};
  51. // change the default timeout   
  52. void SnmpTarget::set_default_timeout( const unsigned long t)
  53. {  default_timeout = t; };
  54.                                  
  55. // change the default retries                             
  56. void SnmpTarget::set_default_retries( const int r)
  57. { default_retries = r; };
  58. // return validity of target
  59. int SnmpTarget::valid() const
  60. { return validity;}; 
  61. // set the retry value       
  62. void SnmpTarget::set_retry( const int r)
  63. { retries = r; };   
  64.        
  65. // get the retry value
  66. int SnmpTarget::get_retry()
  67. { return retries; };
  68.        
  69. // set the timeout   
  70. void SnmpTarget::set_timeout( const unsigned long t)
  71. { timeout = t; };
  72.        
  73. // get the timeout
  74. unsigned long SnmpTarget::get_timeout()
  75. { return timeout; };  
  76. //---------------------------------------------------------------------- 
  77. //--------[ CTarget Member Functions ]----------------------------------
  78. //----------------------------------------------------------------------
  79. //---------[ CTarget::CTarget( void) ]---------------------------------- 
  80. // CTarget constructor no args
  81. CTarget::CTarget( void)
  82. {
  83.   read_community = PUBLIC;
  84.   write_community = PUBLIC;
  85.   timeout = default_timeout;   
  86.   retries = default_retries;
  87.   version = version1;     
  88.   validity = FALSE;
  89. };
  90. //-----------[ CTarget:: CTarget ]-------------------------------------
  91. // CTarget constructor with args
  92. CTarget:: CTarget(  const Address &address,
  93.                     const char *read_community_name,
  94.                     const char *write_community_name)
  95. {
  96.    GenAddress tmpaddr(address);
  97.    read_community = read_community_name;
  98.    write_community = write_community_name;
  99.    timeout = default_timeout;   
  100.    retries = default_retries;     
  101.    version = version1;
  102.    
  103.    // initialize local address object
  104.    my_address = tmpaddr;
  105.    if ( my_address.valid())
  106.       validity = TRUE;
  107.    else
  108.       validity = FALSE;      
  109. };
  110. //-----------[ CTarget:: CTarget ]-----------------------------------
  111. // CTarget constructor with args
  112. CTarget:: CTarget(  const Address &address,
  113.                     const OctetStr& read_community_name,
  114.                     const OctetStr& write_community_name)
  115. {
  116.    GenAddress tmpaddr(address);
  117.    read_community = read_community_name;
  118.    write_community = write_community_name;
  119.    timeout = default_timeout;   
  120.    retries = default_retries;     
  121.    version = version1;
  122.    
  123.    // initialize local address object
  124.    my_address = tmpaddr;
  125.    if ( my_address.valid())
  126.       validity = TRUE;
  127.    else
  128.       validity = FALSE;      
  129. };
  130. //-----------[ CTarget:: CTarget( Address &address) ]--------------
  131. // CTarget constructor with args
  132. CTarget:: CTarget( const Address &address)
  133. {   
  134.    GenAddress tmpaddr(address);
  135.    read_community =  PUBLIC;
  136.    write_community = PUBLIC;
  137.    // initialize local address object
  138.    
  139.    timeout = default_timeout;   
  140.    retries = default_retries;  
  141.    my_address = tmpaddr;
  142.    version = version1;
  143.       
  144.    if ( my_address.valid())
  145.       validity = TRUE;
  146.    else
  147.       validity = FALSE;      
  148. };
  149. //-----------[ CTarget:: CTarget( const CTarget &target) ]-------
  150. // CTarget constructor with args
  151. CTarget:: CTarget( const CTarget &target)
  152. {   
  153.    GenAddress tmpaddr(target.my_address);
  154.    read_community = target.read_community;
  155.    write_community = target.write_community;
  156.    my_address = tmpaddr;
  157.    timeout = target.timeout;   
  158.    retries = target.retries;  
  159.    version = target.version;
  160.    validity = target.validity;
  161. };
  162.   
  163. //-----------[ CTarget::~CTarget() ]--------------------------------
  164. CTarget::~CTarget() 
  165. {};
  166. //-----------[ CTarget::clone() ]--------------------------------
  167. SnmpTarget * CTarget::clone() const
  168. { return (SnmpTarget *) new CTarget(*this); };
  169. //-----------[ CTarget::get_version() ]--------------------------------
  170. snmp_version CTarget::get_version()
  171. { return version;};
  172. //-----------[ CTarget::set_version() ]--------------------------------
  173. void CTarget::set_version( const snmp_version v)
  174. { version = v; };
  175. //----------[ CTarget::get_readcommunity() ]----------------------  
  176. // get the read community name
  177. char * CTarget::get_readcommunity()
  178. {
  179.    return (char *) read_community.get_printable();
  180. };   
  181.    
  182. //----------[ CTarget::get_readcommunity( OctetStr& read_community)]--   
  183. // get the read community name as an unsigned char and len
  184. void CTarget::get_readcommunity( OctetStr& read_community_oct)
  185. {  
  186.    read_community_oct = read_community; 
  187. };   
  188.  
  189. //------[ CTarget::set_writecommunity( const char * new_get_community)]----    
  190. // set the write community name
  191. void CTarget::set_readcommunity( const char * new_read_community)
  192.    read_community = new_read_community;
  193. }; 
  194. //---------[ CTarget::set_getcommunity ]---------------------------------
  195. // set the read community name
  196. void CTarget::set_readcommunity( const OctetStr& new_read_community)
  197. {
  198.    read_community = new_read_community;
  199. }; 
  200. //--------[ CTarget::get_writecommunity() ]--------------------------        
  201. // get the write community
  202. char * CTarget::get_writecommunity()
  203. {
  204.    return (char *) write_community.get_printable();
  205. };
  206. //---------[ CTarget::get_writecommunity ]----------------------------
  207. // get the write community
  208. void CTarget::get_writecommunity( OctetStr &write_community_oct)
  209. {
  210.    write_community_oct = write_community;
  211. };
  212. //----------[ CTarget::set_writecommunity ]---------------------------
  213. // set the write community
  214. void CTarget::set_writecommunity( const char * new_write_community)
  215. {
  216.    write_community = new_write_community;
  217. };
  218.  
  219. //-----------[ CTarget::set_writecommunity ]--------------------------- 
  220. // set the write community
  221. void CTarget::set_writecommunity( const OctetStr& write_community_oct)
  222. {
  223.    write_community = write_community_oct;
  224. };
  225.  
  226. //------------[ Address& CTarget::get_address() ]---------------------    
  227. // get the address
  228. int CTarget::get_address( GenAddress &address)
  229. {  
  230.    address = my_address;
  231.    return TRUE;
  232. };
  233. //-------------[ CTarget::set_address ]--------------------------------    
  234. // set the address
  235. int CTarget::set_address( Address &address)
  236. {  
  237.    my_address = address;
  238.    if ( my_address.valid())
  239.       validity = TRUE;
  240.    else
  241.       validity = FALSE;      
  242.    return validity;
  243. };  
  244.  
  245. //----------[ CTarget::resolve_to_V1 ]--------------------------------- 
  246. // resolve entity
  247. // common interface for Community based targets
  248. int CTarget::resolve_to_C ( OctetStr &read_comm,
  249.                             OctetStr &write_comm,
  250.                             GenAddress &address,
  251.                             unsigned long &t,
  252.                             int &r,
  253.                             unsigned char &v) 
  254. {  
  255.    // if the target is invalid then return false    
  256.    if ( !validity)
  257.      return FALSE;  
  258.    read_comm = read_community;
  259.    write_comm = write_community;
  260.    address = my_address;  
  261.              
  262.    t = timeout;       
  263.    r = retries;      
  264.    v = version;
  265.    
  266.    return TRUE;
  267. };                             
  268. // overloaded assignment    
  269. CTarget& CTarget::operator=( const CTarget& target)
  270. {
  271.    GenAddress tmpaddr(target.my_address);
  272.    timeout = target.timeout;
  273.    retries = target.retries;
  274.    read_community = target.read_community;
  275.    write_community = target.write_community;
  276.    validity = target.validity;
  277.    my_address = tmpaddr;
  278.    version = target.version;
  279.    
  280.    return *this;
  281. }; 
  282. //=============[ int operator == CTarget, CTarget ]==========================
  283. // equivlence operator overloaded
  284. int operator==( const CTarget &lhs,const CTarget &rhs)
  285. {   
  286.    // need to compare all the members of a CTarget
  287.    if ( lhs.read_community != rhs.read_community)
  288.       return 0;  // !=
  289.    if ( lhs.write_community != rhs.write_community)
  290.       return 0;  // != 
  291.    if ( lhs.my_address != rhs.my_address)
  292.       return 0;
  293.    if ( lhs.timeout != rhs.timeout)
  294.       return 0;
  295.    if ( lhs.retries != rhs.retries)
  296.       return 0;
  297.    return 1;  // they are equal
  298. };