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

📄 getbulk.cpp

📁 HP公司的SNMP++的Win32版本源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*============================================================================
  Copyright (c) 1996
  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. 

=============================================================================*/

#include "stdafx.h"
#include "browser.h"
#include "GetBulk.h"
#include "db_cls.h"
#include "tarfact.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// GetBulk dialog


GetBulk::GetBulk(CWnd* pParent /*=NULL*/)
	: CDialog(GetBulk::IDD, pParent)
{
	//{{AFX_DATA_INIT(GetBulk)
	m_mgmt_proto = _T("");
	m_net_proto = _T("");
	m_oid = _T("");
	m_output = _T("");
	m_read_community = _T("");
	m_retries = _T("");
	m_timeouts = _T("");
	m_write_community = _T("");
	m_max_repititions = 1;
	m_non_repeaters = 0;
	//}}AFX_DATA_INIT

	int cstatus = Create(IDD, pParent);

	// create a snmp++ object
	int status;
	snmp = new Snmp( status);
	if ( status != SNMP_CLASS_SUCCESS)
	{
		AfxMessageBox("Unable To Create Snmp Object!");
		snmp = NULL;
	}

		    // load up the target list
    CComboBox * target_cb = ( CComboBox *) GetDlgItem( IDC_TARGETS);
    target_cb->ResetContent();

    // get the db file name from the ini file
    CString filename = theApp.GetProfileString( BROWSER_VALUE,DB_NAME,DEF_DB_NAME);

	// access the target database
    Db target_db;
	TargetDb_Rec db_rec;
    target_db.set_attributtes( filename, sizeof( TargetDb_Rec));
    int nr = target_db.get_num_recs();
	if ( nr==0)
		AfxMessageBox("You Have No Targets Defined\n Please Define a Target");



	// for all records, get and display
    for (int i=1;i<=nr;i++)
    {
       if ((status = target_db.retrieve((long int) (i-1), &db_rec))!= DB_OK)
       {
          MessageBox("Unable to Read Target DB Record", ERR_MSG,MB_ICONSTOP);
          return;
       }

	   CString target_name;
	   if ( strcmp( db_rec.alias,"") ==0)
         target_cb->AddString((char*)  db_rec.key);
	   else
	   {
		 target_name = db_rec.alias;
		 target_name += " @ ";
		 target_name += db_rec.key;
		 target_cb->AddString(target_name);
	   }

       if ( i==1)
       {
          target_cb->SetCurSel(0);
          load_target_attribs( db_rec);
       }
	}
}


// load the current target view
void GetBulk::load_target_attribs( TargetDb_Rec db_rec)
{
   char buffer[20];
   m_read_community = db_rec.read_community;
   m_write_community = db_rec.write_community;
   sprintf( buffer,"%d",db_rec.retries);
   m_retries = buffer;
   sprintf( buffer,"%d",db_rec.timeout);
   m_timeouts = buffer;
   m_mgmt_proto = (db_rec.snmp_type == SNMPV1) ? V1 :V2C;
   m_net_proto =  (db_rec.address_type == IP_TYPE) ? "IP" : "IPX";
   UpdateData( FALSE);
};



void GetBulk::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(GetBulk)
	DDX_Text(pDX, IDC_MGMTPROTO, m_mgmt_proto);
	DDX_Text(pDX, IDC_NETPROTO, m_net_proto);
	DDX_Text(pDX, IDC_OID, m_oid);
	DDV_MaxChars(pDX, m_oid, 200);
	DDX_Text(pDX, IDC_OUTPUT, m_output);
	DDV_MaxChars(pDX, m_output, 1000);
	DDX_Text(pDX, IDC_READ_COMMUNITY, m_read_community);
	DDX_Text(pDX, IDC_RETRIES, m_retries);
	DDX_Text(pDX, IDC_TIMEOUTS, m_timeouts);
	DDX_Text(pDX, IDC_WRITE_COMMUNITY, m_write_community);
	DDX_Text(pDX, IDC_MAX_REPS, m_max_repititions);
	DDV_MinMaxInt(pDX, m_max_repititions, 0, 10);
	DDX_Text(pDX, IDC_NON_REPS, m_non_repeaters);
	DDV_MinMaxInt(pDX, m_non_repeaters, 0, 10);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(GetBulk, CDialog)
	//{{AFX_MSG_MAP(GetBulk)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_ADDOID, OnAddoid)
	ON_NOTIFY(NM_DBLCLK, IDC_MIBTREE, OnDblclkMibtree)
	ON_BN_CLICKED(IDC_REMOVE, OnRemove)
	ON_BN_CLICKED(IDC_STOP, OnStop)
	ON_BN_CLICKED(IDGETBULK, OnGetbulk)
	ON_WM_DESTROY()
	ON_CBN_SELCHANGE(IDC_TARGETS, OnSelchangeTargets)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// GetBulk message handlers

void GetBulk::OnCancel() 
{
	DestroyWindow();
}

// enable the controls
void GetBulk::enable_controls( int state)
{
   CWnd *control;

   control = GetDlgItem( IDC_TARGETS);
   control->EnableWindow( state ? TRUE : FALSE);

   control = GetDlgItem( IDC_MIBTREE);
   control->EnableWindow( state ? TRUE : FALSE);

   control = GetDlgItem( IDC_ADD);
   control->EnableWindow( state ? TRUE : FALSE);

   control = GetDlgItem( IDC_REMOVE);
   control->EnableWindow( state ? TRUE : FALSE);

   control = GetDlgItem( IDC_PDU);
   control->EnableWindow( state ? TRUE : FALSE);

   control = GetDlgItem( IDC_OID);
   control->EnableWindow( state ? TRUE : FALSE);

   control = GetDlgItem( IDC_ADDOID);
   control->EnableWindow( state ? TRUE : FALSE);

   control = GetDlgItem( IDC_ALL_DETAILS);
   control->EnableWindow( state ? TRUE : FALSE);

   control = GetDlgItem( IDC_NON_REPS);
   control->EnableWindow( state ? TRUE : FALSE);

   control = GetDlgItem( IDC_MAX_REPS);
   control->EnableWindow( state ? TRUE : FALSE);

   control = GetDlgItem( IDC_AUTOWALK);
   control->EnableWindow( state ? TRUE : FALSE);


};


void GetBulk::getbulk_another()
{
	OnGetbulk();
}




//====================================================================
// SNMP++ callback function for async events
// this callback is used for all async requests 
void my_getbulkcallback( int reason,
                  Snmp* snmp,
                  Pdu &pdu,
                  SnmpTarget &target,
                  void * callback_data)
                               
{  
   // resolve the callback data to a MFC Get Window Handle
   GetBulk * getbulk_window = (GetBulk *) callback_data;
   CButton * mib_walk = (CButton*) getbulk_window->GetDlgItem( IDC_AUTOWALK);

   // based on the reason handle the reason
   switch ( reason)
   { 
	  // an asynchronous response has arrived
      case SNMP_CLASS_ASYNC_RESPONSE:
	  getbulk_window->display_response( pdu, target, snmp);
	  // look for continuos mode
      if (( mib_walk->GetCheck()) &&(pdu.get_error_status()==0))
		  getbulk_window->getbulk_another();
	  else
		  getbulk_window->enable_controls( TRUE);
	  break;
     
	  // a timeout has occured
      case SNMP_CLASS_TIMEOUT:
	  getbulk_window->display_timeout( target);
	  getbulk_window->enable_controls( TRUE);
	  break;
     
   } // end switch
};   


// display the response value
void GetBulk::display_response( Pdu &pdu, SnmpTarget &target, Snmp *snmp)
{

   GenAddress address;	  // SNMP++ generic Address
   char buffer[150];
   Vb vb;
   int error_status = pdu.get_error_status();


   // show the result status
   m_output = "Status = ";
   m_output += snmp->error_msg( error_status);
   m_output += "\r\n";

   // show the details if check box is selected
   CButton * all_details = (CButton*) GetDlgItem( IDC_ALL_DETAILS);
   if ( all_details->GetCheck())
   {
      target.get_address( address);
      m_output += "Response from ";
	  m_output += address.get_printable();
	  m_output += "\r\n";
      sprintf( buffer,"Error Status = %d, %s\r\n",pdu.get_error_status(), snmp->error_msg(pdu.get_error_status()));
      m_output += buffer;
      sprintf( buffer,"Error Index  = %d\r\n", pdu.get_error_index());
      m_output += buffer;
	  sprintf( buffer,"Request ID 	= %ld\r\n",pdu.get_request_id());
	  m_output += buffer;
      sprintf( buffer,"Variable Binding Count = %d\r\n",pdu.get_vb_count());
      m_output += buffer;
   }

   // clear the pdu selection box
   CListBox *lb;
   lb = ( CListBox*) GetDlgItem( IDC_PDU);
   lb->ResetContent();

   // show the Vbs
   for ( int x=0;x<pdu.get_vb_count();x++)
   {
      pdu.get_vb( vb,x);
	  sprintf( buffer,"Vb #%d\r\n",x+1);
	  m_output += buffer;
	  m_output += "  Oid   = ";
	  m_output += vb.get_printable_oid();
	  m_output += "\r\n";
	  m_output += "  Value = ";
	  m_output +=  vb.get_printable_value();
	  m_output += "\r\n";


	  // update each vb in the Pdu selection box
	  CString nextoid;

⌨️ 快捷键说明

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