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

📄 managesubnet.cpp

📁 我们的网管程序的后台软件,主要是网络方面的内容.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*************************************************
	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 + -