target.cpp
上传用户:ets1996
上传日期:2014-09-30
资源大小:353k
文件大小:12k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. /*_############################################################################
  2.   _## 
  3.   _##  target.cpp  
  4.   _##
  5.   _##  SNMP++v3.2.22
  6.   _##  -----------------------------------------------
  7.   _##  Copyright (c) 2001-2007 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, Wed May  2 23:22:30 CEST 2007 
  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:  Peter E Mellquist
  44.   LANGUAGE:         ANSI C++
  45.   DESCRIPTION:      Target class defines target SNMP agents.
  46. =====================================================================*/
  47. char target_cpp_version[]="#(@) SNMP++ $Id: target.cpp 292 2007-04-30 12:49:55Z katz $";
  48. #include "snmp_pp/target.h"
  49. #include "snmp_pp/v3.h"
  50. #ifdef SNMP_PP_NAMESPACE
  51. namespace Snmp_pp {
  52. #endif
  53. #define PUBLIC "public"
  54. // class variables for default behavior control
  55. unsigned long SnmpTarget::default_timeout = 100;
  56. int SnmpTarget::default_retries = 1;
  57. //----------------------------------------------------------------------
  58. //--------[ Abstract SnmpTarget Member Functions ]----------------------
  59. //----------------------------------------------------------------------
  60. // get the address
  61. int SnmpTarget::get_address(GenAddress &address) const
  62. {
  63.   if (validity == false) return FALSE;
  64.   address = my_address;
  65.   return TRUE;
  66. }
  67. // set the address
  68. int SnmpTarget::set_address(const Address &address)
  69. {
  70.    my_address = address;
  71.    if ( my_address.valid())
  72.       validity = true;
  73.    else
  74.       validity = false;
  75.    return validity;
  76. }
  77. SnmpTarget* SnmpTarget::clone() const
  78. {
  79.   GenAddress addr = my_address;
  80.   SnmpTarget* res = new SnmpTarget;
  81.   res->set_timeout(timeout);
  82.   res->set_retry(retries);
  83.   res->set_address(addr);
  84.   res->set_version(version);
  85.   return res;
  86. }
  87. //=============[ int operator == SnmpTarget, SnmpTarget ]======================
  88. // equivlence operator overloaded
  89. int SnmpTarget::operator==( const SnmpTarget &rhs) const
  90. {
  91.   if (my_address != rhs.my_address) return 0;
  92.   if (version    != rhs.version)    return 0;
  93.   if (timeout    != rhs.timeout)    return 0;
  94.   if (retries    != rhs.retries)    return 0;
  95.   return 1;  // they are equal
  96. }
  97. // reset the object
  98. void SnmpTarget::clear()
  99. {
  100.   validity = false;
  101.   timeout  = default_timeout;
  102.   retries  = default_retries;
  103.   version  = version1;
  104.   ttype    = type_base;
  105.   my_address.clear();
  106. }
  107. //----------------------------------------------------------------------
  108. //--------[ CTarget Member Functions ]----------------------------------
  109. //----------------------------------------------------------------------
  110. //---------[ CTarget::CTarget( void) ]----------------------------------
  111. // CTarget constructor no args
  112. CTarget::CTarget( void)
  113.   : read_community(PUBLIC), write_community(PUBLIC)
  114. {
  115.   ttype = type_ctarget; // overwrite value set in SnmpTarget()
  116. }
  117. //-----------[ CTarget:: CTarget ]-------------------------------------
  118. // CTarget constructor with args
  119. CTarget::CTarget(const Address &address,
  120.                  const char *read_community_name,
  121.                  const char *write_community_name)
  122.   : SnmpTarget(address),
  123.     read_community(read_community_name), write_community(write_community_name)
  124. {
  125.   ttype = type_ctarget; // overwrite value set in SnmpTarget()
  126. }
  127. //-----------[ CTarget:: CTarget ]-----------------------------------
  128. // CTarget constructor with args
  129. CTarget::CTarget(const Address &address,
  130.  const OctetStr& read_community_name,
  131.  const OctetStr& write_community_name)
  132.   : SnmpTarget(address),
  133.     read_community(read_community_name), write_community(write_community_name)
  134. {
  135.   ttype = type_ctarget; // overwrite value set in SnmpTarget()
  136. }
  137. //-----------[ CTarget:: CTarget( Address &address) ]--------------
  138. // CTarget constructor with args
  139. CTarget::CTarget(const Address &address)
  140.   : SnmpTarget(address), read_community(PUBLIC), write_community(PUBLIC)
  141. {
  142.   ttype = type_ctarget; // overwrite value set in SnmpTarget()
  143. }
  144. //-----------[ CTarget:: CTarget( const CTarget &target) ]-------
  145. // CTarget constructor with args
  146. CTarget::CTarget( const CTarget &target)
  147. {
  148.    read_community  = target.read_community;
  149.    write_community = target.write_community;
  150.    my_address      = target.my_address;
  151.    timeout         = target.timeout;
  152.    retries         = target.retries;
  153.    version         = target.version;
  154.    validity        = target.validity;
  155.    ttype           = type_ctarget;
  156. }
  157. //----------[ CTarget::resolve_to_V1 ]---------------------------------
  158. // resolve entity
  159. // common interface for Community based targets
  160. int CTarget::resolve_to_C ( OctetStr &read_comm,
  161.                             OctetStr &write_comm,
  162.                             GenAddress &address,
  163.                             unsigned long &t,
  164.                             int &r,
  165.                             unsigned char &v) const
  166. {
  167.    // if the target is invalid then return false
  168.    if ( !validity)
  169.      return FALSE;
  170.    read_comm = read_community;
  171.    write_comm = write_community;
  172.    address = my_address;
  173.    t = timeout;
  174.    r = retries;
  175.    v = version;
  176.    return TRUE;
  177. }
  178. // overloaded assignment
  179. CTarget& CTarget::operator=( const CTarget& target)
  180. {
  181.   if (this == &target) return *this;  // check for self assignment
  182.   timeout         = target.timeout;
  183.   retries         = target.retries;
  184.   read_community  = target.read_community;
  185.   write_community = target.write_community;
  186.   validity        = target.validity;
  187.   my_address      = target.my_address;
  188.   version         = target.version;
  189.   return *this;
  190. }
  191. //=============[ int operator == CTarget, CTarget ]==========================
  192. // equivlence operator overloaded
  193. int CTarget::operator==( const CTarget &rhs) const
  194. {
  195.   if (SnmpTarget::operator==(rhs) == 0)       return 0;
  196.   // need to compare all the members of a CTarget
  197.   if (read_community  != rhs.read_community)  return 0;
  198.   if (write_community != rhs.write_community) return 0;
  199.   return 1; // equal
  200. }
  201. // reset the object
  202. void CTarget::clear()
  203. {
  204.   SnmpTarget::clear();
  205.   read_community.clear();
  206.   write_community.clear();
  207.   ttype = type_ctarget; // overwrite value set in SnmpTarget::clear()
  208. }
  209. //----------------------------------------------------------------------
  210. //--------[ UTarget Member Functions ]----------------------------------
  211. //----------------------------------------------------------------------
  212. //---------[ UTarget::UTarget( void) ]----------------------------------
  213. // UTarget constructor no args
  214. UTarget::UTarget()
  215.   : security_name(INITIAL_USER),
  216. #ifdef _SNMPv3
  217.   security_model(SecurityModel_USM), engine_id("")
  218. #else
  219.   security_model(SecurityModel_v1)
  220. #endif
  221. {
  222. #ifdef _SNMPv3
  223.   version = version3;
  224. #endif
  225.   ttype = type_utarget;
  226. }
  227. //-----------[ UTarget:: UTarget ]-------------------------------------
  228. // UTarget constructor with args
  229. UTarget::UTarget( const Address &address,
  230.                   const char *sec_name,
  231.                   const int sec_model)
  232.   : SnmpTarget(address), security_name(sec_name), security_model(sec_model)
  233. #ifdef _SNMPv3
  234.     ,engine_id("")
  235. #endif
  236. {
  237. #ifdef _SNMPv3
  238.   version = version3;
  239. #endif
  240.   ttype = type_utarget;
  241. }
  242. //-----------[ UTarget:: UTarget ]-----------------------------------
  243. // UTarget constructor with args
  244. UTarget::UTarget( const Address &address,
  245.                   const OctetStr &sec_name,
  246.                   const int sec_model)
  247.   : SnmpTarget(address), security_name(sec_name), security_model(sec_model)
  248. #ifdef _SNMPv3
  249.     ,engine_id("")
  250. #endif
  251. {
  252. #ifdef _SNMPv3
  253.   version = version3;
  254. #endif
  255.   ttype = type_utarget;
  256. }
  257. //-----------[ UTarget:: UTarget( Address &address) ]--------------
  258. // UTarget constructor with args
  259. UTarget::UTarget( const Address &address)
  260.   : SnmpTarget(address), security_name(INITIAL_USER),
  261. #ifdef _SNMPv3
  262.     security_model(SecurityModel_USM), engine_id("")
  263. #else
  264.     security_model(SecurityModel_v1)
  265. #endif
  266. {
  267. #ifdef _SNMPv3
  268.   version = version3;
  269. #endif
  270.   ttype = type_utarget;
  271. }
  272. //-----------[ UTarget:: UTarget( const UTarget &target) ]-------
  273. // UTarget constructor with args
  274. UTarget::UTarget( const UTarget &target)
  275. {
  276. #ifdef _SNMPv3
  277.   engine_id = target.engine_id;
  278. #endif
  279.   security_name = target.security_name;
  280.   security_model = target.security_model;
  281.   my_address = target.my_address;
  282.   timeout = target.timeout;
  283.   retries = target.retries;
  284.   version = target.version;
  285.   validity = target.validity;
  286.   ttype = type_utarget;
  287. }
  288. // set the address
  289. int UTarget::set_address(const Address &address)
  290. {
  291. #ifdef _SNMPv3
  292.    engine_id = ""; // delete engine_id
  293. #endif
  294.    return SnmpTarget::set_address(address);
  295. }
  296. int UTarget::resolve_to_U( OctetStr&  sec_name,
  297.                            int &sec_model,
  298.                            GenAddress &address,
  299.                            unsigned long &t,
  300.                            int &r,
  301.                            unsigned char &v) const
  302. {
  303.   // if the target is invalid then return false
  304.   if ( !validity)
  305.     return FALSE;
  306.   sec_name = security_name;
  307.   sec_model = security_model;
  308.   address = my_address;
  309.   t = timeout;
  310.   r = retries;
  311.   v = version;
  312.   return TRUE;
  313. }
  314. // overloaded assignment
  315. UTarget& UTarget::operator=(const UTarget& target)
  316. {
  317.   if (this == &target) return *this;  // check for self assignment
  318.   timeout = target.timeout;
  319.   retries = target.retries;
  320. #ifdef _SNMPv3
  321.   engine_id = target.engine_id;
  322. #endif
  323.   security_name = target.security_name;
  324.   security_model = target.security_model;
  325.   version = target.version;
  326.   validity = target.validity;
  327.   my_address = target.my_address;
  328.   return *this;
  329. }
  330. //=============[ int operator == UTarget, UTarget ]==========================
  331. // equivlence operator overloaded
  332. int UTarget::operator==(const UTarget &rhs) const
  333. {
  334.   if (SnmpTarget::operator==(rhs) == 0)     return 0;
  335.   // need to compare all the members of a UTarget
  336.   // but don`t compare engine_id
  337.   if (security_name  != rhs.security_name)  return 0;
  338.   if (security_model != rhs.security_model) return 0;
  339.   return 1;  // they are equal
  340. }
  341. // reset the object
  342. void UTarget::clear()
  343. {
  344.   SnmpTarget::clear();
  345.   security_name = INITIAL_USER;
  346. #ifdef _SNMPv3
  347.   security_model = SecurityModel_USM;
  348.   engine_id.clear();
  349.   version = version3;
  350. #else
  351.   security_model = SecurityModel_v1;
  352. #endif
  353.   ttype = type_utarget;
  354. }
  355. #ifdef SNMP_PP_NAMESPACE
  356. }; // end of namespace Snmp_pp
  357. #endif