⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdu.cpp

📁 JdonFramework need above jdk 1.4.0 This version has passed under Tomcat 4.x/5.x JBoss 3.x/JBoss 4.0
💻 CPP
字号:
/*===================================================================  Copyright (c) 1999  Hewlett-Packard Company  ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.  Permission to use, copy, modify, distribute and/or sell this software   and/or its documentation is hereby granted without fee. User agrees   to display the above copyright notice and this license notice in all   copies of the software and any documentation of the software. User   agrees to assume all liability for the use of the software; Hewlett-Packard   makes no representations about the suitability of this software for any   purpose. It is provided "AS-IS without warranty of any kind,either express   or implied. User hereby grants a royalty-free license to any and all   derivatives based upon this software code base.     P D U . C P P  PDU CLASS IMPLEMENTATION  VERSION:  2.8  DESIGN:  Peter E Mellquist  AUTHOR:  Peter E Mellquist  LANGUAGE:  ANSI C++  OPERATING SYSTEMS:  MS-Windows Win32  BSD UNIX  DESCRIPTION:  Pdu class implementation. Encapsulation of an SMI Protocol  Data Unit (PDU) in C++.=====================================================================*/char pdu_cpp_version[]="#(@)SNMP++ 2.8 $Header: pdu.cpp,v 1.14 96/03/07 08:14:52 hmgr Exp $";#include "pdu.h"       // include Pdu class definition//=====================[ constructor no args ]=========================Pdu::Pdu( void){   // init all instance vars to null and invalid   vb_count = 0;   pdu_type = 0;   validity = TRUE;   error_status = 0;   error_index = 0;   request_id = 0;   notify_timestamp = 0;};//=====================[ constructor with vbs and count ]==============Pdu::Pdu( Vb* pvbs, const int pvb_count){   int z;  // looping variable   // Initialize all mv's   vb_count = 0;   pdu_type = 0;   error_status = 0;   error_index = 0;   request_id = 0;   notify_timestamp = 0;   // zero is ok   if ( pvb_count == 0)    {      validity = TRUE;      return;   }   // check for over then max   if ( pvb_count > MAX_VBS)    {       validity = FALSE;       return;   }   // loop through and assign internal vbs   for (z=0;z<pvb_count;z++)    {     vbs[z] = new Vb( pvbs[z]);     // check for new fail     if ( vbs[z] == 0)      {        validity = FALSE;        return;     }   }   // assign the vb count   vb_count = pvb_count;   validity = TRUE;   return;};//=====================[ constructor with another Pdu instance ]========Pdu::Pdu( const Pdu &pdu){   vb_count = 0;   *this = pdu;   return;};//=====================[ destructor ]====================================Pdu::~Pdu(){  for ( int z=0;z<vb_count;z++)     delete vbs[z];};//=====================[ assignment to another Pdu object overloaded ]===Pdu& Pdu::operator=( const Pdu &pdu){   int z;   // looping variable   // Initialize all mv's   error_status = pdu.error_status;   error_index = pdu.error_index;   request_id = pdu.request_id;   pdu_type = pdu.pdu_type;   notify_id = pdu.notify_id;   notify_timestamp = pdu.notify_timestamp;   notify_enterprise = pdu.notify_enterprise;   validity = TRUE;   // free up old vbs   for ( z=0;z<vb_count;z++)     delete vbs[z];   vb_count = 0;   // check for zero case   if ( pdu.vb_count == 0)   {      return *this;   }   // loop through and fill em up   for (z=0;z<pdu.vb_count;z++)   {     vbs[z] = new Vb ( *(pdu.vbs[z]));     // new failure     if ( vbs[z] == 0)     {        validity = FALSE;        return *this;     }   }   vb_count = pdu.vb_count;   return *this;};// append operator, appends a stringPdu& Pdu::operator+=( Vb &vb){  // do we have room?  if ( vb_count+1> MAX_VBS)    return *this;        // add the new one  vbs[vb_count] = new Vb (vb);  // up the vb count  vb_count++;  // set up validity  validity = TRUE;  // return self reference  return *this;};//=====================[ extract Vbs from Pdu ]==========================// how do you know that the caler has enough memory???// should I self allocate this in here and require the// caller then to free it up at soem later timeint Pdu::get_vblist( Vb* pvbs, const int pvb_count){   if ((!pvbs) || ( pvb_count < 0) || ( pvb_count > vb_count))      return FALSE;   // loop through all vbs and assign to params   for (int z=0;z<pvb_count;z++)      pvbs[z] = *vbs[z];   return TRUE;};//=====================[ deposit Vbs ]===================================int Pdu::set_vblist( Vb* pvbs, const int pvb_count){   int z;   // if invalid then don't destroy   if ((!pvbs) || ( pvb_count < 0) || ( pvb_count > MAX_VBS))     return FALSE;   // free up current vbs   for ( z=0;z<vb_count;z++)     delete vbs[z];   vb_count = 0;   // check for zero case   if ( pvb_count == 0)   {        validity = TRUE;      error_status = 0;      error_index = 0;      request_id = 0;      return FALSE;   }        // loop through all vbs and reassign them   for ( z=0;z<pvb_count;z++)   {     vbs[z] = new Vb (pvbs[z]);     // check for new fail     if ( vbs[z] == 0)     {         validity = FALSE;         return FALSE;     }   }      vb_count = pvb_count;   // clear error status and index since no longer valid   // request id may still apply so don't reassign it   error_status = 0;   error_index = 0;   validity = TRUE;   return TRUE;};//===================[ get a particular vb ]=============================// here the caller has already instantiated a vb object// index is zero basedint Pdu::get_vb( Vb &vb, const int index) const{   // can't have an index less than 0   if ( index < 0)      return FALSE;   // can't ask for something not there   if ( index > (vb_count-1))      return FALSE;   // asssign it   vb = *vbs[index];   return TRUE;};//===================[ set a particular vb ]=============================int Pdu::set_vb( Vb &vb, const int index){   // can't set a vb at index less than 0   if ( index < 0)     return FALSE;   // can't ask for something not there   if ( index > (vb_count-1))      return FALSE;   // delete what is there   delete vbs[index];   // assign it   vbs[index] = new Vb (vb);   return TRUE;};//=====================[ return number of vbs ]==========================int Pdu::get_vb_count() const{   return vb_count;};//=====================[ return the error status ]=======================int Pdu::get_error_status(){   return error_status;};//=====================[ set the error status ]==========================// friendvoid set_error_status( Pdu *pdu, const int status){   if (pdu)     pdu->error_status = status;};//=====================[ return the error index ]========================int Pdu::get_error_index(){   return error_index;};//=====================[ set the error index ]===========================// friendvoid set_error_index( Pdu *pdu, const int index){   if (pdu)     pdu->error_index = index;};//=====================[ clear error status ]=============================void clear_error_status( Pdu *pdu){   if (pdu)     pdu->error_status = 0;};//=====================[ clear error index ]==============================void clear_error_index( Pdu *pdu){   if (pdu)     pdu->error_index = 0;};//=====================[ return the request id ]==========================unsigned long Pdu::get_request_id(){   return request_id;};//=====================[ set the request id ]=============================// friend functionvoid set_request_id( Pdu *pdu, const unsigned long rid){   if (pdu)     pdu->request_id = rid;};//=====================[ returns validity of Pdu instance ]===============int Pdu::valid() const {   return validity;};//=====================[ get the pdu type ]===============================unsigned short Pdu::get_type(){   return pdu_type;};// set the pdu typevoid Pdu::set_type( unsigned short type){   pdu_type = type;};// trim off the last vbint Pdu::trim(const int p){   int lp = p;   // verify that lp is legal   if ( lp < 0 || lp > vb_count)     return FALSE;   while ( lp !=0)      {     if ( vb_count > 0)     {         delete vbs[vb_count-1];         vb_count--;     }     lp--;   }   return TRUE;};// delete a Vb anywhere within the Pduint Pdu::delete_vb( const int p){   // position has to be in range   if (( p<0) || (p>(vb_count-1)))      return FALSE;   // safe to remove it   delete vbs[ p];   for ( int z=p;z < (vb_count-1);z++)   {      vbs[z] = vbs[z+1];   }     vb_count--;   return TRUE;};// set notify timestampvoid Pdu::set_notify_timestamp( const TimeTicks & timestamp){   notify_timestamp = timestamp;};// get notify timestampvoid Pdu::get_notify_timestamp( TimeTicks & timestamp){    timestamp = notify_timestamp;};// set the notify idvoid Pdu::set_notify_id( const Oid id){    notify_id = id;};// get the notify idvoid Pdu::get_notify_id( Oid &id){   id = notify_id;};// set the notify enterprisevoid Pdu::set_notify_enterprise( const Oid &enterprise){   notify_enterprise = enterprise;};// get the notify enterprisevoid Pdu::get_notify_enterprise( Oid & enterprise){    enterprise = notify_enterprise;};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -