📄 managesubnet.cpp
字号:
/*************************************************
Copyright (C), 2000-2002, Huayue Co., Ltd.
File name: managesubnet.cpp
Module: 主模块
Author: 王华东
Version: 1.0
Created on : 2002.11.04
Description: 主模块、主线程
Global function List:
Modify History:
Date: Author: Modification:
1. 2003.02.19 WHD OID 的输入方式由EDIT 变为ComboBox (v108)
*************************************************/
#include "stdafx.h"
#include "..\nms.h"
#include "ManageSubnet.h"
#include "..\..\Thread\Protocol\CmdProtocol.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// static global variable
static _TCHAR* g_szSubnetLabel[]=
{
"No.",
"IP地址",
"子网号",
"网元数目"
};
static _TCHAR* g_szNELabel[]=
{
"No.",
"网元NEID",
"出厂编号",
"侦听端口",
"告警端口"
};
/////////////////////////////////////////////////////////////////////////////
// CManageSubnet
CManageSubnet::CManageSubnet(CWnd* pParent /*=NULL*/)
: CDialog(CManageSubnet::IDD, pParent)
{
//{{AFX_DATA_INIT(CManageSubnet)
m_StrValue = _T("");
m_StrReturn = _T("");
//}}AFX_DATA_INIT
/* In ListControl */
m_SubnetRow = 0;
m_NERow = 0;
uIDTimer = TIMER_SUBNET;
}
CManageSubnet::~CManageSubnet()
{
}
void CManageSubnet::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CManageSubnet)
DDX_Control(pDX, IDC_CMD_GET_TYPE, m_StrOID);
DDX_Control(pDX, IDC_NE_LIST, m_neList);
DDX_Control(pDX, IDC_LIST1, m_list);
DDX_Text(pDX, IDC_CMD_GET_VALUE, m_StrValue);
DDX_Text(pDX, IDC_VALUE_RETURN, m_StrReturn);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CManageSubnet, CDialog)
//{{AFX_MSG_MAP(CManageSubnet)
ON_WM_SETCURSOR()
ON_BN_CLICKED(ID_SUBNET_UPDATE, OnSubnetUpdate)
ON_BN_CLICKED(IDC_SUBNET_DEL, OnSubnetDel)
ON_BN_CLICKED(IDC_NE_OK, OnNeOk)
ON_BN_CLICKED(ID_NE_UPDATE, OnNeUpdate)
ON_BN_CLICKED(IDC_NE_DEL, OnNeDel)
ON_BN_CLICKED(IDC_CMD_GET, OnGet)
ON_BN_CLICKED(IDC_CMD_SET, OnSet)
ON_WM_TIMER()
ON_MESSAGE(WM_QUERYCOMPELETE, OnMibQuerySet)
ON_WM_DRAWITEM()
ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickSubnetList)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CManageSubnet message handlers
BOOL CManageSubnet::OnInitDialog()
{
CDialog::OnInitDialog();
// 子网
m_list.ModifyStyle(0 , /*LVS_EDITLABELS |*/ LVS_REPORT , 0);
m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
m_list.InsertColumn(0,g_szSubnetLabel[0],LVCFMT_LEFT,30,0);
m_list.InsertColumn(1,g_szSubnetLabel[1],LVCFMT_LEFT,100,1);
m_list.InsertColumn(2,g_szSubnetLabel[2],LVCFMT_LEFT,100,2);
m_list.InsertColumn(3,g_szSubnetLabel[3],LVCFMT_LEFT,100,3);
// 网元
m_neList.ModifyStyle(0 , /* LVS_EDITLABELS |*/ LVS_REPORT , 0);
m_neList.SetExtendedStyle(m_neList.GetExtendedStyle()|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
m_neList.InsertColumn(0,g_szNELabel[0],LVCFMT_LEFT,30,0);
m_neList.InsertColumn(1,g_szNELabel[1],LVCFMT_LEFT,100,1);
m_neList.InsertColumn(2,g_szNELabel[2],LVCFMT_LEFT,100,2);
m_neList.InsertColumn(3,g_szNELabel[3],LVCFMT_LEFT,100,3);
m_neList.InsertColumn(4,g_szNELabel[4],LVCFMT_LEFT,100,4);
// 更新子网列表
UpdateSubnetCtrlList();
if(pApp->m_ProtocolUsed != PROTOCOL_SNMP)
{
::SetWindowText(GetDlgItem(IDC_SUBNET_PROTOCOL)->GetSafeHwnd() ,
"CMD Protocol");
::SetWindowText(GetDlgItem(IDC_CMD_TYPE)->GetSafeHwnd() ,
"Command Type");
::SetWindowText(GetDlgItem(IDC_CMD_VALUE)->GetSafeHwnd() ,
"Command Value");
for(int i=0; g_szCmdType[i] ; i++)
{
m_StrOID.InsertString(i , g_szCmdType[i]);
m_StrOID.SetItemData(i , g_szCmd[i]);
}
}
else
{
::SetWindowText(GetDlgItem(IDC_SUBNET_PROTOCOL)->GetSafeHwnd() ,
"Snmp Protocol");
::SetWindowText(GetDlgItem(IDC_CMD_TYPE)->GetSafeHwnd() ,
"Variable Binding Oid");
::SetWindowText(GetDlgItem(IDC_CMD_VALUE)->GetSafeHwnd() ,
"Variable Binding Value");
// 所有可以使用的MIB信息
CMib *pTempMib=NULL;
m_StrOID.ResetContent();
for(int i=0; ; i++)
{
pTempMib=GetMib(i);
if(!pTempMib)
{
break;
}
m_StrOID.InsertString(i , pTempMib->MibCaption);
}
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/////////////////////////////////////////////////////////////////////////////
// 子网、网元的添加、删除、更新
/*-----------------------------------------------------------------*/
// 改变光标
BOOL CManageSubnet::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(pApp->m_hAniCursor != NULL)
{
SetCursor(pApp->m_hAniCursor);
}
return TRUE;
}
BOOL CManageSubnet::PreTranslateMessage(MSG* pMsg)
{
return CDialog::PreTranslateMessage(pMsg);
}
/*-----------------------------------------------------------------*/
// 添加一个子网、尚未更新-子网添加的消息响应函数
void CManageSubnet::OnOK()
{
CString str;
str.Format("%d" , m_SubnetRow+1);
m_list.InsertItem(m_SubnetRow , str); //插入行
m_SubnetRow++;
}
/*-----------------------------------------------------------------*/
// 添加一个网元、尚未更新-网元添加的消息响应函数
void CManageSubnet::OnNeOk()
{
CString str;
str.Format("%d" , m_NERow+1);
m_neList.InsertItem(m_NERow , str); //插入行
m_NERow++;
}
/*-----------------------------------------------------------------*/
// 删除列表ListCtrl中活动子网-子网删除的消息响应函数
void CManageSubnet::OnSubnetDel()
{
U32 dSubnetID;
int posSubnet=0;
if( GetCurrentSubnetID(&dSubnetID) == FALSE)
{
return ;
}
if( AfxMessageBox("将改变网络结构,请确定!" , MB_YESNO) == IDNO)
{
return;
}
if( DelSubnet(dSubnetID) != TRUE)
{
MyMessageBox("删除子网失败");
WirteLogFile("" , "删除子网失败 , 子网号:" , FALSE , dSubnetID);
}
else
{
MyMessageBox("删除子网成功");
WirteLogFile("" , "删除子网成功 , 子网号:" , FALSE , dSubnetID);
}
UpdateSubnetCtrlList();
}
/*-----------------------------------------------------------------*/
// 删除当前活动子网的活动网元(界面列表ListCtrl中)-网元删除的消息响应函数
void CManageSubnet::OnNeDel()
{
U32 ne_id=0;
CSubnet *pSubnet=NULL;
/* Current Subnet */
if( (pSubnet=GetCurrentSubnet()) == NULL)
{
return ;
}
/* Current NEID */
if( GetCurrentNEID(&ne_id) == FALSE)
{
return;
}
if((U32)ne_id == pSubnet->gw_id)
{
AfxMessageBox("网关网元不能删除");
return ;
}
if( AfxMessageBox("将改变网络结构,请确定!" , MB_YESNO) == IDNO)
{
return;
}
if(ne_id != 0)
{
if( DelNe(ne_id) != TRUE)
{
MyMessageBox("删除网元失败");
WirteLogFile("" , "删除网元失败 , 网元:" , FALSE , ne_id);
}
else
{
MyMessageBox("删除网元成功");
WirteLogFile("" , "删除网元失败 , 网元:" , FALSE , ne_id);
}
UpdateNECtrlList();
}
}
/*-----------------------------------------------------------------*/
// 更新子网列表-子网更新的消息响应函数
void CManageSubnet::OnSubnetUpdate()
{
CSubnet *pSubnet = NULL;
char szItemGWID[MAX_IP_LEN+1] , szItemIP[MAX_IP_LEN+1] ;
int tmp ;
U32 GWID=0;
LVITEM lvItem;
CString str;
/*
* 子网在界面上的排列按照pApp->pSubnetFirst起
*/
for(pSubnet=pApp->pSubnetFirst,tmp=1; tmp <=m_SubnetRow; tmp++)
{
memset(szItemGWID , 0 , sizeof(szItemGWID));
memset(&lvItem, 0, sizeof(LVITEM));
lvItem.mask = LVIF_TEXT;
lvItem.iSubItem = 2; // GWID
lvItem.iItem = tmp-1;
lvItem.pszText = szItemGWID;
lvItem.cchTextMax = MAX_IP_LEN;
m_list.GetItem(&lvItem);
GWID = atol(szItemGWID);
lvItem.iSubItem = 1; // GWIP
lvItem.iItem = tmp-1;
lvItem.pszText = szItemIP;
lvItem.cchTextMax = MAX_IP_LEN;
m_list.GetItem(&lvItem);
if( pSubnet != NULL)
{
/* 修改已存在子网 */
if(strcmp(szItemIP , pSubnet->gw_ip) != 0)
{
str.Format("%s%d%s" , "改变子网" , pSubnet->gw_id , "确定吗?");
if( AfxMessageBox(str , MB_YESNO) == IDYES)
{
memcpy( pSubnet->gw_ip , szItemIP , 20);
}
}
pSubnet = pSubnet->next;
}
else
{
if( (szItemIP[0] == 0) || (GWID == 0) )
{
AfxMessageBox("请将子网信息填写完整!");
continue;
}
else
{
str.Format("%s%d%s" , "增加子网" , GWID , "确定吗?");
if( AfxMessageBox(str , MB_YESNO) == IDYES)
{
if(AddSubnet(szItemIP , GWID , FALSE) == NULL)
{
MyMessageBox("添加子网失败!");
WirteLogFile("" , "添加子网失败 , 子网:" , FALSE , GWID);
}
else
{
MyMessageBox("添加子网成功!");
WirteLogFile("" , "添加子网成功 , 子网:" , FALSE , GWID);
}
}
}
}
}
UpdateSubnetCtrlList();
}
/*-----------------------------------------------------------------*/
// 更新网元列表-网元更新的消息响应函数
void CManageSubnet::OnNeUpdate()
{
CNe *pNe=NULL;
CSubnet *pSubnet=NULL;
char szItemNEID[MAX_IP_LEN+1] , szItem[MAX_IP_LEN+1] ;
int tmp ;
U32 NEID=0 , listen_port=0;
LVITEM lvItem;
CString str;
if( (pSubnet = GetCurrentSubnet()) == NULL)
{
return ;
}
pNe = pSubnet->ne_list;
for(tmp=1; tmp <=m_NERow; tmp++)
{
memset(szItemNEID , 0 , sizeof(szItemNEID));
memset(&lvItem, 0, sizeof(LVITEM));
lvItem.mask = LVIF_TEXT;
lvItem.iSubItem = 2; // NEID:出厂编号
lvItem.iItem = tmp-1;
lvItem.pszText = szItemNEID;
lvItem.cchTextMax = MAX_IP_LEN;
m_neList.GetItem(&lvItem);
NEID = atol(szItemNEID);
lvItem.iSubItem = 3; // listen_port
lvItem.iItem = tmp-1;
lvItem.pszText = szItem;
lvItem.cchTextMax = MAX_IP_LEN;
m_neList.GetItem(&lvItem);
listen_port = atol(szItem);
if( pNe != NULL)
{
/* 修改已存在子网 */
if(listen_port != pNe->listen_port)
{
str.Format("%s%d%s" , "改变网元" , pNe->ne_id , "确定吗?");
if( AfxMessageBox(str , MB_YESNO) == IDYES)
{
pNe->listen_port = listen_port;
}
}
pNe = pNe->subnet_next;
}
else
{
if(NEID <= 0)
{
continue;
}
str.Format("%s%d%s" , "增加网元" , NEID , "确定吗?");
if( AfxMessageBox(str , MB_YESNO) == IDYES)
{
if(AddNe((pSubnet->subnet_id<<16)+NEID) == NULL)
{
MyMessageBox("添加网元失败!");
WirteLogFile("" , "添加网元失败 , 网元:" , FALSE , NEID);
}
else
{
MyMessageBox("添加网元成功!");
WirteLogFile("" , "添加网元成功 , 网元:" , FALSE , NEID);
}
}
}
}
UpdateNECtrlList();
}
/*-----------------------------------------------------------------*/
// 更新子网列表
int CManageSubnet::UpdateSubnetCtrlList()
{
CSubnet* pTemp = NULL;
CString str;
m_list.DeleteAllItems();
m_SubnetRow = 0;
for(pTemp=pApp->pSubnetFirst; pTemp != NULL; pTemp=pTemp->next , m_SubnetRow++)
{
/* Subnet No. */
str.Format("%d" , m_SubnetRow+1);
m_list.InsertItem(m_SubnetRow , str); //插入行
/* Subnet IP */
m_list.SetItemText(m_SubnetRow , 1 , (char*)pTemp->gw_ip);
/* Subnet ID */
str.Format("%d" , pTemp->subnet_id);
m_list.SetItemText(m_SubnetRow , 2 , str);
/* Subnet Ne Number */
str.Format("%d" , pTemp->ne_number);
m_list.SetItemText(m_SubnetRow , 3 , str);
}
str.Format("管理子网-子网数目:%d , 网元数目:%d" , pApp->m_SubnetNum , pApp->m_NeNum );
SetWindowText(str);
return TRUE;
}
/*-----------------------------------------------------------------*/
// 更新网元列表
int CManageSubnet::UpdateNECtrlList()
{
CString str;
CSubnet* pSubnet = NULL;
CNe *pTemp = NULL;
/* Current Subnet */
if( (pSubnet=GetCurrentSubnet()) == NULL)
{
return FALSE;
}
m_neList.DeleteAllItems();
m_NERow = 0;
for(pTemp=pSubnet->ne_list;pTemp != NULL; pTemp=pTemp->subnet_next, m_NERow++)
{
/* NE No. */
str.Format("%d" , m_NERow+1);
m_neList.InsertItem(m_NERow , str); //插入行
/* NEID */
str.Format("%d" , pTemp->ne_id);
m_neList.SetItemText(m_NERow , 1 , str);
/* 出厂编号 */
str.Format("%d" , (pTemp->ne_id<<16)>>16);
m_neList.SetItemText(m_NERow , 2 , str);
/* NE Listen port */
str.Format("%d" , pTemp->listen_port);
m_neList.SetItemText(m_NERow , 3 , str);
/* NE Trap Port */
str.Format("%d" , pTemp->trap_port);
m_neList.SetItemText(m_NERow , 4 , str);
}
return TRUE;
}
/*-----------------------------------------------------------------*/
// 返回当前ListCtrl中活动的子网 网关ID
BOOL CManageSubnet::GetCurrentSubnetID(U32* dSubnetID)
{
char szItemID[MAX_IP_LEN+1] ;
int posSubnet ;
LVITEM lvItem;
POSITION psSubnet = m_list.GetFirstSelectedItemPosition();
if(psSubnet == NULL)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -