target.cpp
上传用户:cnryan
上传日期:2008-12-15
资源大小:260k
文件大小:12k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*_############################################################################
  2.   _## 
  3.   _##  target.cpp  
  4.   _##
  5.   _##  SNMP++v3.2.21
  6.   _##  -----------------------------------------------
  7.   _##  Copyright (c) 2001-2006 Jochen Katz, Frank Fock
  8.   _##
  9.   _##  This software is based on SNMP++2.6 from Hewlett Packard:
  10.   _##  
  11.   _##    Copyright (c) 1996
  12.   _##    Hewlett-Packard Company
  13.   _##  
  14.   _##  ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
  15.   _##  Permission to use, copy, modify, distribute and/or sell this software 
  16.   _##  and/or its documentation is hereby granted without fee. User agrees 
  17.   _##  to display the above copyright notice and this license notice in all 
  18.   _##  copies of the software and any documentation of the software. User 
  19.   _##  agrees to assume all liability for the use of the software; 
  20.   _##  Hewlett-Packard and Jochen Katz make no representations about the 
  21.   _##  suitability of this software for any purpose. It is provided 
  22.   _##  "AS-IS" without warranty of any kind, either express or implied. User 
  23.   _##  hereby grants a royalty-free license to any and all derivatives based
  24.   _##  upon this software code base. 
  25.   _##  
  26.   _##  Stuttgart, Germany, Fri Jun 16 17:48:57 CEST 2006 
  27.   _##  
  28.   _##########################################################################*/
  29. /*===================================================================
  30.   Copyright (c) 1999
  31.   Hewlett-Packard Company
  32.   ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
  33.   Permission to use, copy, modify, distribute and/or sell this software
  34.   and/or its documentation is hereby granted without fee. User agrees
  35.   to display the above copyright notice and this license notice in all
  36.   copies of the software and any documentation of the software. User
  37.   agrees to assume all liability for the use of the software; Hewlett-Packard
  38.   makes no representations about the suitability of this software for any
  39.   purpose. It is provided "AS-IS" without warranty of any kind,either express
  40.   or implied. User hereby grants a royalty-free license to any and all
  41.   derivatives based upon this software code base.
  42.   T A R G E T . C P P
  43.   DESIGN + AUTHOR:
  44.   Peter E Mellquist
  45.   LANGUAGE:
  46.   ANSI C++
  47.   OPERATING SYSTEMS:
  48.   MS-WINDOWS WIN32
  49.   BSD UNIX
  50.   DESCRIPTION:
  51.   Target class defines target SNMP agents.
  52. =====================================================================*/
  53. char target_cpp_version[]="#(@) SNMP++ $Id: target.cpp,v 1.6 2004/06/20 18:49:21 katz Exp $";
  54. #include "snmp_pp/target.h"
  55. #include "snmp_pp/v3.h"
  56. #ifdef SNMP_PP_NAMESPACE
  57. namespace Snmp_pp {
  58. #endif
  59. #define PUBLIC "public"
  60. // class variables for default behavior control
  61. unsigned long SnmpTarget::default_timeout = 100;
  62. int SnmpTarget::default_retries = 1;
  63. //----------------------------------------------------------------------
  64. //--------[ Abstract SnmpTarget Member Functions ]----------------------
  65. //----------------------------------------------------------------------
  66. // get the address
  67. int SnmpTarget::get_address( GenAddress &address) const
  68. {
  69.   if (validity == false) return FALSE;
  70.   address = my_address;
  71.   return TRUE;
  72. }
  73. // set the address
  74. int SnmpTarget::set_address( const Address &address)
  75. {
  76.    my_address = address;
  77.    if ( my_address.valid())
  78.       validity = true;
  79.    else
  80.       validity = false;
  81.    return validity;
  82. }
  83. SnmpTarget* SnmpTarget::clone() const
  84. {
  85.   GenAddress addr = my_address;
  86.   SnmpTarget* res = new SnmpTarget;
  87.   res->set_timeout(timeout);
  88.   res->set_retry(retries);
  89.   res->set_address(addr);
  90.   res->set_version(version);
  91.   return res;
  92. }
  93. //=============[ int operator == SnmpTarget, SnmpTarget ]======================
  94. // equivlence operator overloaded
  95. int SnmpTarget::operator==( const SnmpTarget &rhs) const
  96. {
  97.   if (my_address != rhs.my_address) return 0;
  98.   if (version    != rhs.version)    return 0;
  99.   if (timeout    != rhs.timeout)    return 0;
  100.   if (retries    != rhs.retries)    return 0;
  101.   return 1;  // they are equal
  102. }
  103. // reset the object
  104. void SnmpTarget::clear()
  105. {
  106.   validity = false;
  107.   timeout  = default_timeout;
  108.   retries  = default_retries;
  109.   version  = version1;
  110.   ttype    = type_base;
  111.   my_address.clear();
  112. }
  113. //----------------------------------------------------------------------
  114. //--------[ CTarget Member Functions ]----------------------------------
  115. //----------------------------------------------------------------------
  116. //---------[ CTarget::CTarget( void) ]----------------------------------
  117. // CTarget constructor no args
  118. CTarget::CTarget( void)
  119.   : read_community(PUBLIC), write_community(PUBLIC)
  120. {
  121.   ttype = type_ctarget; // overwrite value set in SnmpTarget()
  122. }
  123. //-----------[ CTarget:: CTarget ]-------------------------------------
  124. // CTarget constructor with args
  125. CTarget::CTarget( const Address &address,
  126.                   const char *read_community_name,
  127.                   const char *write_community_name)
  128.   : SnmpTarget(address),
  129.     read_community(read_community_name), write_community(write_community_name)
  130. {
  131.   ttype = type_ctarget; // overwrite value set in SnmpTarget()
  132. }
  133. //-----------[ CTarget:: CTarget ]-----------------------------------
  134. // CTarget constructor with args
  135. CTarget::CTarget( const Address &address,
  136.   const OctetStr& read_community_name,
  137.   const OctetStr& write_community_name)
  138.   : SnmpTarget(address),
  139.     read_community(read_community_name), write_community(write_community_name)
  140. {
  141.   ttype = type_ctarget; // overwrite value set in SnmpTarget()
  142. }
  143. //-----------[ CTarget:: CTarget( Address &address) ]--------------
  144. // CTarget constructor with args
  145. CTarget::CTarget( const Address &address)
  146.   : SnmpTarget(address), read_community(PUBLIC), write_community(PUBLIC)
  147. {
  148.   ttype = type_ctarget; // overwrite value set in SnmpTarget()
  149. }
  150. //-----------[ CTarget:: CTarget( const CTarget &target) ]-------
  151. // CTarget constructor with args
  152. CTarget::CTarget( const CTarget &target)
  153. {
  154.    read_community  = target.read_community;
  155.    write_community = target.write_community;
  156.    my_address      = target.my_address;
  157.    timeout         = target.timeout;
  158.    retries         = target.retries;
  159.    version         = target.version;
  160.    validity        = target.validity;
  161.    ttype           = type_ctarget;
  162. }
  163. //----------[ CTarget::resolve_to_V1 ]---------------------------------
  164. // resolve entity
  165. // common interface for Community based targets
  166. int CTarget::resolve_to_C ( OctetStr &read_comm,
  167.                             OctetStr &write_comm,
  168.                             GenAddress &address,
  169.                             unsigned long &t,
  170.                             int &r,
  171.                             unsigned char &v) const
  172. {
  173.    // if the target is invalid then return false
  174.    if ( !validity)
  175.      return FALSE;
  176.    read_comm = read_community;
  177.    write_comm = write_community;
  178.    address = my_address;
  179.    t = timeout;
  180.    r = retries;
  181.    v = version;
  182.    return TRUE;
  183. }
  184. // overloaded assignment
  185. CTarget& CTarget::operator=( const CTarget& target)
  186. {
  187.   if (this == &target) return *this;  // check for self assignment
  188.   timeout         = target.timeout;
  189.   retries         = target.retries;
  190.   read_community  = target.read_community;
  191.   write_community = target.write_community;
  192.   validity        = target.validity;
  193.   my_address      = target.my_address;
  194.   version         = target.version;
  195.   return *this;
  196. }
  197. //=============[ int operator == CTarget, CTarget ]==========================
  198. // equivlence operator overloaded
  199. int CTarget::operator==( const CTarget &rhs) const
  200. {
  201.   if (SnmpTarget::operator==(rhs) == 0)       return 0;
  202.   // need to compare all the members of a CTarget
  203.   if (read_community  != rhs.read_community)  return 0;
  204.   if (write_community != rhs.write_community) return 0;
  205.   return 1; // equal
  206. }
  207. // reset the object
  208. void CTarget::clear()
  209. {
  210.   SnmpTarget::clear();
  211.   read_community.clear();
  212.   write_community.clear();
  213. }
  214. //----------------------------------------------------------------------
  215. //--------[ UTarget Member Functions ]----------------------------------
  216. //----------------------------------------------------------------------
  217. //---------[ UTarget::UTarget( void) ]----------------------------------
  218. // UTarget constructor no args
  219. UTarget::UTarget()
  220.   : security_name(INITIAL_USER),
  221. #ifdef _SNMPv3
  222.   security_model(SecurityModel_USM), engine_id("")
  223. #else
  224.   security_model(SecurityModel_v1)
  225. #endif
  226. {
  227. #ifdef _SNMPv3
  228.   version = version3;
  229. #endif
  230.   ttype = type_utarget;
  231. }
  232. //-----------[ UTarget:: UTarget ]-------------------------------------
  233. // UTarget constructor with args
  234. UTarget::UTarget( const Address &address,
  235.                   const char *sec_name,
  236.                   const int sec_model)
  237.   : SnmpTarget(address), security_name(sec_name), security_model(sec_model)
  238. #ifdef _SNMPv3
  239.     ,engine_id("")
  240. #endif
  241. {
  242. #ifdef _SNMPv3
  243.   version = version3;
  244. #endif
  245.   ttype = type_utarget;
  246. }
  247. //-----------[ UTarget:: UTarget ]-----------------------------------
  248. // UTarget constructor with args
  249. UTarget::UTarget( const Address &address,
  250.                   const OctetStr &sec_name,
  251.                   const int sec_model)
  252.   : SnmpTarget(address), security_name(sec_name), security_model(sec_model)
  253. #ifdef _SNMPv3
  254.     ,engine_id("")
  255. #endif
  256. {
  257. #ifdef _SNMPv3
  258.   version = version3;
  259. #endif
  260.   ttype = type_utarget;
  261. }
  262. //-----------[ UTarget:: UTarget( Address &address) ]--------------
  263. // UTarget constructor with args
  264. UTarget::UTarget( const Address &address)
  265.   : SnmpTarget(address), security_name(INITIAL_USER),
  266. #ifdef _SNMPv3
  267.     security_model(SecurityModel_USM), engine_id("")
  268. #else
  269.     security_model(SecurityModel_v1)
  270. #endif
  271. {
  272. #ifdef _SNMPv3
  273.   version = version3;
  274. #endif
  275.   ttype = type_utarget;
  276. }
  277. //-----------[ UTarget:: UTarget( const UTarget &target) ]-------
  278. // UTarget constructor with args
  279. UTarget::UTarget( const UTarget &target)
  280. {
  281. #ifdef _SNMPv3
  282.   engine_id = target.engine_id;
  283. #endif
  284.   security_name = target.security_name;
  285.   security_model = target.security_model;
  286.   my_address = target.my_address;
  287.   timeout = target.timeout;
  288.   retries = target.retries;
  289.   version = target.version;
  290.   validity = target.validity;
  291.   ttype = type_utarget;
  292. }
  293. // set the address
  294. int UTarget::set_address(const Address &address)
  295. {
  296. #ifdef _SNMPv3
  297.    engine_id = ""; // delete engine_id
  298. #endif
  299.    return SnmpTarget::set_address(address);
  300. }
  301. int UTarget::resolve_to_U( OctetStr&  sec_name,
  302.                            int &sec_model,
  303.                            GenAddress &address,
  304.                            unsigned long &t,
  305.                            int &r,
  306.                            unsigned char &v) const
  307. {
  308.   // if the target is invalid then return false
  309.   if ( !validity)
  310.     return FALSE;
  311.   sec_name = security_name;
  312.   sec_model = security_model;
  313.   address = my_address;
  314.   t = timeout;
  315.   r = retries;
  316.   v = version;
  317.   return TRUE;
  318. }
  319. // overloaded assignment
  320. UTarget& UTarget::operator=(const UTarget& target)
  321. {
  322.   if (this == &target) return *this;  // check for self assignment
  323.   timeout = target.timeout;
  324.   retries = target.retries;
  325. #ifdef _SNMPv3
  326.   engine_id = target.engine_id;
  327. #endif
  328.   security_name = target.security_name;
  329.   security_model = target.security_model;
  330.   version = target.version;
  331.   validity = target.validity;
  332.   my_address = target.my_address;
  333.   return *this;
  334. }
  335. //=============[ int operator == UTarget, UTarget ]==========================
  336. // equivlence operator overloaded
  337. int UTarget::operator==( const UTarget &rhs) const
  338. {
  339.   if (SnmpTarget::operator==(rhs) == 0)     return 0;
  340.   // need to compare all the members of a UTarget
  341.   // but don`t compare engine_id
  342.   if (security_name  != rhs.security_name)  return 0;
  343.   if (security_model != rhs.security_model) return 0;
  344.   return 1;  // they are equal
  345. }
  346. // reset the object
  347. void UTarget::clear()
  348. {
  349.   SnmpTarget::clear();
  350.   security_name = INITIAL_USER;
  351. #ifdef _SNMPv3
  352.   security_model = SecurityModel_USM;
  353.   engine_id.clear();
  354.   version = version3;
  355. #else
  356.   security_model = SecurityModel_v1;
  357. #endif
  358.   ttype = type_utarget;
  359. }
  360. #ifdef SNMP_PP_NAMESPACE
  361. }; // end of namespace Snmp_pp
  362. #endif