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

SNMP编程

开发平台:

Visual C++

  1. /*============================================================================
  2.    Copyright (c) 1996
  3.   Hewlett-Packard Company
  4.   ATTENTION: USE OF THIS SOFTWARE IS SUBJECT TO THE FOLLOWING TERMS.
  5.   Permission to use, copy, modify, distribute and/or sell this software 
  6.   and/or its documentation is hereby granted without fee. User agrees 
  7.   to display the above copyright notice and this license notice in all 
  8.   copies of the software and any documentation of the software. User 
  9.   agrees to assume all liability for the use of the software; Hewlett-Packard 
  10.   makes no representations about the suitability of this software for any 
  11.   purpose. It is provided "AS-IS without warranty of any kind,either express 
  12.   or implied. User hereby grants a royalty-free license to any and all 
  13.   derivatives based upon this software code base. 
  14. =============================================================================*/
  15. #include "stdafx.h"
  16. #include "browser.h"
  17. #include "TarEdit.h" 
  18. #include "tarinc.h"
  19. #include "snmp_pp.h"
  20. #ifdef _DEBUG
  21. #define new DEBUG_NEW
  22. #undef THIS_FILE
  23. static char THIS_FILE[] = __FILE__;
  24. #endif
  25. /////////////////////////////////////////////////////////////////////////////
  26. // TarEdit property page
  27. IMPLEMENT_DYNCREATE(TarEdit, CPropertyPage)
  28. TarEdit::TarEdit() : CPropertyPage(TarEdit::IDD)
  29. {
  30. //{{AFX_DATA_INIT(TarEdit)
  31. m_address = _T("");
  32. m_alias = _T("");
  33. m_read_community = _T("");
  34. m_write_community = _T("");
  35. m_timeout = 50;
  36. m_retries = 0;
  37. //}}AFX_DATA_INIT
  38. }
  39. void TarEdit::toggle_controls(int state)
  40. {
  41.      CWnd *ctl;
  42.                                      
  43.  ctl = GetDlgItem( IDC_AGENTINFO);
  44.      ctl->EnableWindow( state);
  45.  ctl = GetDlgItem( IDC_AGENT_ADDR_NAME);
  46.      ctl->EnableWindow( state);
  47.  ctl = GetDlgItem( IDC_AGENT_ADDR);
  48.      ctl->EnableWindow( state);
  49.  ctl = GetDlgItem( IDC_PROTO_NAME);
  50.      ctl->EnableWindow( state);
  51.  ctl = GetDlgItem( IDC_RADIO_IP);
  52.      ctl->EnableWindow( state);
  53.  ctl = GetDlgItem( IDC_RADIO_IPX);
  54.      ctl->EnableWindow( state);
  55.  ctl = GetDlgItem( IDC_ALIAS_NAME);
  56.      ctl->EnableWindow( state);
  57.  ctl = GetDlgItem( IDC_ALIAS);
  58.      ctl->EnableWindow( state);
  59.  ctl = GetDlgItem( IDC_TIMEOUT_NAME);
  60.      ctl->EnableWindow( state);
  61.  ctl = GetDlgItem( IDC_RETRIES_NAME);
  62.      ctl->EnableWindow( state);
  63.  ctl = GetDlgItem( IDC_MGR_INFO);
  64.      ctl->EnableWindow( state);
  65.  ctl = GetDlgItem( IDC_RADIO_V1);
  66.      ctl->EnableWindow( state);
  67.  ctl = GetDlgItem( IDC_RADIO_V2C);
  68.      ctl->EnableWindow( state);
  69.  ctl = GetDlgItem( IDC_SNMP_INFO);
  70.      ctl->EnableWindow( state);
  71.  ctl = GetDlgItem( IDC_GETCOMM_NAME);
  72.      ctl->EnableWindow( state);
  73.  ctl = GetDlgItem( IDC_READ_COMMUNITY);
  74.      ctl->EnableWindow( state);
  75.  ctl = GetDlgItem( IDC_WRITE_COMMUNITY);
  76.      ctl->EnableWindow( state);
  77.  ctl = GetDlgItem( IDC_SETCOMM_NAME);
  78.      ctl->EnableWindow( state);
  79.  ctl = GetDlgItem( IDC_BUTTON_SAVE);
  80.      ctl->EnableWindow( state);
  81.  ctl = GetDlgItem ( IDC_SLIDER_TIMEOUT);
  82.  ctl->EnableWindow( state);
  83.  ctl = GetDlgItem ( IDC_SLIDER_RETRIES);
  84.  ctl->EnableWindow( state);
  85. };
  86. TarEdit::~TarEdit()
  87. {
  88. }
  89. void TarEdit::DoDataExchange(CDataExchange* pDX)
  90. {
  91. CPropertyPage::DoDataExchange(pDX);
  92. //{{AFX_DATA_MAP(TarEdit)
  93. DDX_Text(pDX, IDC_AGENT_ADDR, m_address);
  94. DDV_MaxChars(pDX, m_address, 40);
  95. DDX_Text(pDX, IDC_ALIAS, m_alias);
  96. DDV_MaxChars(pDX, m_alias, 40);
  97. DDX_Text(pDX, IDC_READ_COMMUNITY, m_read_community);
  98. DDV_MaxChars(pDX, m_read_community, 80);
  99. DDX_Text(pDX, IDC_WRITE_COMMUNITY, m_write_community);
  100. DDV_MaxChars(pDX, m_write_community, 80);
  101. DDX_Text(pDX, IDC_TIMEOUT, m_timeout);
  102. DDV_MinMaxUInt(pDX, m_timeout, 50, 500);
  103. DDX_Text(pDX, IDC_RETRIES, m_retries);
  104. DDV_MinMaxUInt(pDX, m_retries, 0, 5);
  105. //}}AFX_DATA_MAP
  106. }
  107. BEGIN_MESSAGE_MAP(TarEdit, CPropertyPage)
  108. //{{AFX_MSG_MAP(TarEdit)
  109. ON_BN_CLICKED(IDC_BUTTON_NEW, OnButtonNew)
  110. ON_WM_HSCROLL()
  111. ON_BN_CLICKED(IDC_BUTTON_SAVE, OnButtonSave)
  112. ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)
  113. ON_LBN_DBLCLK(IDC_LIST_TARGETS, OnDblclkListTargets)
  114. ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
  115. ON_WM_KEYDOWN()
  116. //}}AFX_MSG_MAP
  117. END_MESSAGE_MAP()
  118. /////////////////////////////////////////////////////////////////////////////
  119. // TarEdit message handlers
  120. BOOL TarEdit::OnInitDialog() 
  121. {
  122. CPropertyPage::OnInitDialog();
  123. // TODO: Add extra initialization here
  124. // disable the controls to begin with
  125. toggle_controls( FALSE);
  126. load_target_list();
  127. return TRUE;  // return TRUE unless you set the focus to a control
  128.               // EXCEPTION: OCX Property Pages should return FALSE
  129. }
  130. void TarEdit::OnButtonNew() 
  131. {
  132. // TODO: Add your control notification handler code here
  133. CString temp;
  134. // get the defaults
  135. m_read_community = theApp.GetProfileString( BROWSER_VALUE,READ_COMMUNITY,PUBLIC);
  136. m_write_community = theApp.GetProfileString( BROWSER_VALUE,WRITE_COMMUNITY,PUBLIC);
  137. m_timeout = theApp.GetProfileInt( BROWSER_VALUE,TIMEOUT,DEF_TIMEOUT);
  138. m_retries = theApp.GetProfileInt( BROWSER_VALUE,RETRIES,DEF_RETRIES);
  139. temp = theApp.GetProfileString( BROWSER_VALUE,PROTOCOL,IP);
  140. if ( strcmp( temp,IP) == 0)
  141.   CheckRadioButton( IDC_RADIO_IP,IDC_RADIO_IPX,IDC_RADIO_IP);
  142. else
  143.    CheckRadioButton( IDC_RADIO_IP,IDC_RADIO_IPX,IDC_RADIO_IPX);
  144. temp = theApp.GetProfileString( BROWSER_VALUE,SNMPTYPE,V1);
  145. if ( strcmp( temp,V1) == 0)
  146.   CheckRadioButton( IDC_RADIO_V1,IDC_RADIO_V2C,IDC_RADIO_V1);
  147. else
  148.   CheckRadioButton( IDC_RADIO_V1,IDC_RADIO_V2C,IDC_RADIO_V2C);
  149. // set up the slider controls
  150. CSliderCtrl *slider;
  151. slider = (CSliderCtrl *) GetDlgItem( IDC_SLIDER_TIMEOUT);
  152. slider->SetRange(50,500);
  153. slider->SetPos( m_timeout);
  154. slider = (CSliderCtrl *) GetDlgItem( IDC_SLIDER_RETRIES);
  155. slider->SetRange(0,5);
  156. slider->SetPos( m_retries);
  157. m_address = "";
  158. m_alias = "";
  159. UpdateData( FALSE);
  160. // enable all controls
  161. toggle_controls( TRUE);
  162. }
  163. void TarEdit::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  164. {
  165. // TODO: Add your message handler code here and/or call default
  166. // determine which  slider bar it is
  167. CSliderCtrl *slider_retries, *slider_timeouts;
  168. slider_timeouts = (CSliderCtrl *) GetDlgItem( IDC_SLIDER_TIMEOUT);
  169. slider_retries = (CSliderCtrl *) GetDlgItem( IDC_SLIDER_RETRIES);
  170. if ( (CSliderCtrl *) pScrollBar == slider_timeouts)
  171. {
  172.    m_timeout = slider_timeouts->GetPos();
  173.    UpdateData( FALSE);
  174. }
  175. if ( (CSliderCtrl *) pScrollBar == slider_retries)
  176. {
  177.    m_retries = slider_retries->GetPos();
  178.    UpdateData( FALSE);
  179. }
  180. CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar);
  181. }
  182. void TarEdit::load_target_list()
  183. {
  184.    CString filename;
  185.    long int nr,i;
  186.    TargetDb_Rec db_rec;
  187.    int status;
  188.    CListBox * target_lb;
  189.    CString target_name;
  190.    CWnd *ctl;
  191.    // get control handle and reset it
  192.    target_lb = ( CListBox *) GetDlgItem( IDC_LIST_TARGETS);
  193.    target_lb->ResetContent();
  194.    // get the db file name from the ini file
  195.    filename = theApp.GetProfileString( BROWSER_VALUE,DB_NAME,DEF_DB_NAME);
  196.    
  197.    Db target_db;
  198.    target_db.set_attributtes( filename, sizeof( TargetDb_Rec));
  199.    nr = target_db.get_num_recs();
  200.    for (i=1;i<=nr;i++)
  201.    {
  202.       if ((status = target_db.retrieve((long int) (i-1), &db_rec))!= DB_OK)
  203.       {
  204.          MessageBox("Unable to Read Target DB Record", ERR_MSG,MB_ICONSTOP);
  205.          return;
  206.       }
  207.   if ( strcmp( db_rec.alias,"") ==0)
  208.          target_lb->AddString((char*)  db_rec.key);
  209.   else
  210.   {
  211. target_name = db_rec.alias;
  212. target_name += " @ ";
  213. target_name += db_rec.key;
  214. target_lb->AddString(target_name);
  215.   }
  216.    }
  217.    if ( nr >= 1)
  218.    {
  219.  ctl = GetDlgItem( IDC_BUTTON_DELETE);
  220.      ctl->EnableWindow( TRUE);
  221.  ctl = GetDlgItem( IDC_BUTTON_EDIT);
  222.      ctl->EnableWindow( TRUE);
  223.    }
  224.    else
  225.    {
  226.  ctl = GetDlgItem( IDC_BUTTON_DELETE);
  227.      ctl->EnableWindow( FALSE);
  228.  ctl = GetDlgItem( IDC_BUTTON_EDIT);
  229.      ctl->EnableWindow( FALSE);
  230.    }
  231. };
  232. void TarEdit::OnButtonSave() 
  233. {
  234.    // TODO: Add your control notification handler code here
  235.    char buffer[40];
  236.    TargetDb_Rec tdb_rec;
  237.    // verify that all controls have a value
  238.    if ( !UpdateData( TRUE))
  239.       return;
  240.    // check for a read commmunity
  241.    if ( strcmp( m_read_community,"")==0)
  242.    {
  243.       MessageBox("Read Community Not Defined!",ERR_MSG,MB_ICONSTOP);
  244.       return;
  245.    }
  246.    strcpy( buffer, m_read_community);
  247.    strcpy(tdb_rec.read_community, buffer);
  248.    // check for a write community
  249.    if ( strcmp( m_write_community,"")==0)
  250.    {
  251.       MessageBox("Write Community Not Defined!", ERR_MSG,MB_ICONSTOP);
  252.   return;
  253.    }
  254.    strcpy( buffer, m_write_community);
  255.    strcpy(tdb_rec.write_community, buffer);
  256.    
  257.    // check out the address
  258.    if ( strcmp( m_address,"") == 0)
  259.    {
  260.       MessageBox("Address Not Defined!", ERR_MSG,MB_ICONSTOP);
  261.   return;
  262.    }
  263.    strcpy( buffer, m_address);
  264.    strcpy(tdb_rec.key, buffer);
  265.    // verify that address is legal ip address
  266.    if ( GetCheckedRadioButton( IDC_RADIO_IP, IDC_RADIO_IPX) == IDC_RADIO_IP)
  267.    {
  268.       char buffer[40];
  269.       strcpy( buffer, m_address);
  270.       IpAddress my_ip( (char *) buffer);
  271.       if ( !my_ip.valid())
  272.       {
  273.          MessageBox("Invalid IP Address!", ERR_MSG,MB_ICONSTOP); 
  274.        return;
  275.       }
  276.       tdb_rec.address_type = IP_TYPE; 
  277.    }
  278.    // verify that address is a legal ipx address
  279.    if ( GetCheckedRadioButton( IDC_RADIO_IP, IDC_RADIO_IPX) == IDC_RADIO_IPX)
  280.    {
  281.       strcpy( buffer, m_address);
  282.       IpxAddress my_ipx( (char *) buffer);
  283.   if ( !my_ipx.valid())
  284.   {
  285.          MessageBox("Invalid IPX Address!", ERR_MSG,MB_ICONSTOP); 
  286.  return;
  287.   } 
  288.       tdb_rec.address_type = IPX_TYPE; 
  289.    }
  290.    
  291.    if ( GetCheckedRadioButton( IDC_RADIO_V1, IDC_RADIO_V2C) == IDC_RADIO_V1)
  292.   tdb_rec.snmp_type = SNMPV1; 
  293.    else
  294.   tdb_rec.snmp_type = SNMPV2C;
  295.    // get the db file name from the ini file
  296.    CString filename;
  297.    filename = theApp.GetProfileString( BROWSER_VALUE,DB_NAME,DEF_DB_NAME);
  298.    
  299.    // write the record to the db
  300.    // if we have duplicates, then confirm update
  301.    Db target_db;
  302.    target_db.set_attributtes( filename, sizeof(TargetDb_Rec));
  303.    tdb_rec.timeout = m_timeout;
  304.    tdb_rec.retries = m_retries;
  305.    strcpy( tdb_rec.alias, m_alias);
  306.    if (target_db.write( &tdb_rec) != DB_OK)
  307.    {
  308.       MessageBox("Unable to Write to Target DataBase", ERR_MSG,MB_ICONSTOP);
  309.       return;
  310.    }        
  311.    load_target_list();
  312. }
  313. void TarEdit::OnButtonEdit() 
  314. {
  315. // TODO: Add your control notification handler code here
  316. int index;
  317.     char buffer[80];
  318.     TargetDb_Rec read_rec;
  319.     int status;
  320. CListBox *target_lb;
  321. char *ptr,*key;
  322. CSliderCtrl *slider;
  323.     // get currently selected item
  324.     // if we don't have one then wrn user
  325.     target_lb = ( CListBox *) GetDlgItem( IDC_LIST_TARGETS);
  326.     index = target_lb->GetCurSel();
  327.     if ( index == LB_ERR)
  328.     {
  329.        MessageBox("You Must Select a Target", ERR_MSG,MB_ICONSTOP);
  330.        return;
  331.     }
  332.     if ( (target_lb->GetText( index, buffer)) == LB_ERR)
  333.     {
  334.        MessageBox("Cannot Obtain List Box Selection",ERR_MSG,MB_ICONSTOP);
  335.        return;
  336.     }
  337. // trim off the @ sign if present
  338. ptr=buffer;
  339. key=ptr;
  340. while (*ptr!=0)
  341. {
  342. if ( *ptr == '@')
  343.    key = ptr+2;
  344. ptr++;
  345. }
  346.     
  347. // get the db file name from the ini file
  348.     CString filename;
  349.     filename = theApp.GetProfileString( BROWSER_VALUE,DB_NAME,DEF_DB_NAME);
  350.     // read the record
  351.     Db target_db;
  352.     target_db.set_attributtes( filename, sizeof(TargetDb_Rec));
  353.     strcpy( read_rec.key, key);
  354.     status = target_db.read( (TargetDb_Rec*) &read_rec);
  355.     if ( status != DB_OK)
  356.     {
  357.        MessageBox("Unable to Read DB Record",ERR_MSG,MB_ICONSTOP);
  358.        return;
  359.     }
  360.     // got the record, fill up the controls
  361.     toggle_controls( TRUE);
  362. m_read_community = read_rec.read_community;
  363. m_write_community = read_rec.write_community;
  364. m_address = read_rec.key;
  365. m_alias = read_rec.alias;
  366. m_timeout = read_rec.timeout;
  367. slider = (CSliderCtrl *) GetDlgItem( IDC_SLIDER_TIMEOUT);
  368. slider->SetRange(50,500);
  369. slider->SetPos( m_timeout);
  370. m_retries = read_rec.retries;
  371. slider = (CSliderCtrl *) GetDlgItem( IDC_SLIDER_RETRIES);
  372. slider->SetRange(0,5);
  373. slider->SetPos( m_retries);
  374. if ( read_rec.address_type == IP_TYPE)
  375. CheckRadioButton( IDC_RADIO_IP, IDC_RADIO_IPX, IDC_RADIO_IP);
  376. else
  377. CheckRadioButton( IDC_RADIO_IP, IDC_RADIO_IPX, IDC_RADIO_IPX);
  378. if (read_rec.snmp_type == SNMPV1)
  379. CheckRadioButton( IDC_RADIO_V1, IDC_RADIO_V2C, IDC_RADIO_V1);
  380. else
  381. CheckRadioButton( IDC_RADIO_V1, IDC_RADIO_V2C, IDC_RADIO_V2C);
  382.     UpdateData( FALSE);
  383. }
  384. void TarEdit::OnDblclkListTargets() 
  385. {
  386. // TODO: Add your control notification handler code here
  387. OnButtonEdit();
  388. }
  389. void TarEdit::OnCancel() 
  390. {
  391. // TODO: Add your specialized code here and/or call the base class
  392. CWnd *parent;
  393. parent = GetParent();
  394. parent->DestroyWindow();
  395. }
  396. void TarEdit::OnButtonDelete() 
  397. {
  398. // TODO: Add your control notification handler code here
  399. CString file_name;
  400.     char buffer[80];
  401.     char message[80];
  402.     int index;
  403.     int status;
  404.     TargetDb_Rec delete_rec;
  405. CListBox *target_lb;
  406. char *ptr, *key;
  407.     // get currently selected item
  408.     // if we don't have one then wrn user
  409.     target_lb = ( CListBox *) GetDlgItem( IDC_LIST_TARGETS);
  410.     index = target_lb->GetCurSel();
  411.     if ( index == LB_ERR)
  412.     {
  413.        MessageBox("You Must Select a Target", ERR_MSG,MB_ICONSTOP);
  414.        return;
  415.     }
  416.     if ( (target_lb->GetText( index, buffer)) == LB_ERR)
  417.     {
  418.        MessageBox("Can Not Obtain List Box Selection",ERR_MSG,MB_ICONSTOP);
  419.        return;
  420.     }
  421.     // verify that user really wants to delete
  422.     sprintf( message,  "Do You Really Wish to Delete Target: %s",buffer);
  423.     status = MessageBox( message, ERR_MSG,MB_YESNO);
  424.     if ( status == IDNO)
  425.        return;
  426. // trim off the @ sign if present
  427. ptr=buffer;
  428. key=ptr;
  429. while (*ptr!=0)
  430. {
  431. if ( *ptr == '@')
  432.    key = ptr+2;
  433. ptr++;
  434. }
  435. file_name = theApp.GetProfileString( BROWSER_VALUE,DB_NAME,DEF_DB_NAME);
  436.     Db dbt;
  437.     dbt.set_attributtes( file_name, sizeof(TargetDb_Rec));
  438.     strcpy( delete_rec.key, key);
  439.     status = dbt.del( delete_rec.key);
  440.     if ( status != DB_OK)
  441.        MessageBox("Unable to Delete Target Record", "SNMP++ Demo Error",MB_ICONSTOP);
  442.     // update the lb
  443.     load_target_list();
  444. // check to see if currently selected target was deleted
  445. if ( strcmp( key, m_address) == 0)
  446.     {
  447. m_address = "";
  448. m_read_community = "";
  449. m_write_community = "";
  450. m_alias = "";
  451. m_timeout = 0;
  452. m_retries = 0;
  453. UpdateData( FALSE);
  454. toggle_controls( FALSE);
  455. }
  456. }
  457. void TarEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
  458. {
  459. // TODO: Add your message handler code here and/or call default
  460. CPropertyPage::OnKeyDown(nChar, nRepCnt, nFlags);
  461. }