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

📄 managesubnet.cpp

📁 我们的网管程序的后台软件,主要是网络方面的内容.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		AfxMessageBox("请选择一个活动子网!");
		return FALSE;
	}

	posSubnet = m_list.GetNextSelectedItem(psSubnet);

	memset(szItemID , 0 , sizeof(szItemID));

	memset(&lvItem, 0, sizeof(LVITEM));

	lvItem.mask			 = LVIF_TEXT;
	lvItem.iSubItem	 	 = 2;			// Subnet ID
	lvItem.iItem		 = posSubnet;
	lvItem.pszText		 = szItemID;
	lvItem.cchTextMax	 = MAX_IP_LEN;

	m_list.GetItem(&lvItem);

	*dSubnetID = atol(szItemID);

	return TRUE;
}

/*-----------------------------------------------------------------*/
// 返回当前ListCtrl中活动的子网

CSubnet* CManageSubnet::GetCurrentSubnet()
{
	U32		dSubnetID;

	if(GetCurrentSubnetID(&dSubnetID) == TRUE)
	{
		return GetSubnetBySubnetID(dSubnetID);
	}
	return NULL;
}

/*-----------------------------------------------------------------*/
// 当前活动的网元ne-id(子网号+出厂编号)

BOOL CManageSubnet::GetCurrentNEID(U32 *ne_id)
{
	char	szItemNEID[MAX_IP_LEN] ;

	int		posNE;

	LVITEM  lvItem;

	POSITION psNE = m_neList.GetFirstSelectedItemPosition();

	if( (psNE == NULL) || (ne_id == NULL))
	{
		AfxMessageBox("请选择一个活动网元!");
		return FALSE;
	}

	posNE = m_neList.GetNextSelectedItem(psNE);

	memset(szItemNEID , 0 , sizeof(szItemNEID));

	memset(&lvItem, 0, sizeof(LVITEM));

	lvItem.mask			 = LVIF_TEXT;
	lvItem.iSubItem		 = 1;			//	NEID
	lvItem.iItem		 = posNE;
	lvItem.pszText		 = szItemNEID;
	lvItem.cchTextMax	 = MAX_IP_LEN;

	m_neList.GetItem(&lvItem);

	*ne_id = atol(szItemNEID);

	return TRUE;
}

/*-----------------------------------------------------------------*/
// 当前活动的网元

CNe* CManageSubnet::GetCurrentNE()
{
	U32 ne_id;

	if( GetCurrentNEID(&ne_id) != TRUE)
	{
		return NULL;
	}
	return GetNeByNEID(ne_id);
}

/////////////////////////////////////////////////////////////////////////////
// 对某一个网元SNMP管理(MIB变量查询)-实现简单的MIB Browser
// 对整个程序无影响,为调试、测试、观察用

/*-----------------------------------------------------------------*/
// Get NE Value

void CManageSubnet::OnGet()
{
	if(pApp->m_ProtocolUsed == PROTOCOL_SNMP)
	{
		SnmpProtocolGet();
	}
	else if(pApp->m_ProtocolUsed == PROTOCOL_NOT_SNMP)
	{
		UdpSocketProtocolGet();
	}
	else
	{
		;
	}

}

/*-----------------------------------------------------------------*/
// Set NE Value

void CManageSubnet::OnSet()
{
	if(pApp->m_ProtocolUsed == PROTOCOL_SNMP)
	{
		SnmpProtocolSet();
	}
	else if(pApp->m_ProtocolUsed == PROTOCOL_NOT_SNMP)
	{
		UdpSocketProtocolGet();
	}
	else
	{
		;
	}
}

/*-----------------------------------------------------------------*/

void CManageSubnet::SnmpProtocolSet()
{
	U32		ne_id=0;

	CSubnet	*pSubnet=NULL;
	CNe*	pNe=NULL;
	CButton *pBtn1=NULL , *pBtn2=NULL;

	QueryNMS spQueryNMS;

	CMib	*pTempMib=NULL;

	char	tempOID[MAX_OID_LEN+1];

	m_StrOID.GetWindowText(tempOID , MAX_OID_LEN);
	pTempMib=GetMib(tempOID);
	if(pTempMib)
		strcpy(tempOID , pTempMib->MibOID);

	if(! UpdateData())
	{
		AfxMessageBox("数据输入错误!");
		return ;
	}

	/* Current Subnet */
	if( (pSubnet=GetCurrentSubnet()) == NULL)
		return ;

	/* Current NE */
	if( (pNe=GetCurrentNE()) == NULL)
		return;

	/*
	 *		Snmp Set -- Send Request Msg to Snmp Wnd(Thread NMS)
	*/

	memset(&spQueryNMS , 0 , sizeof(QueryNMS));

	spQueryNMS.query.snmp_query.action = ACTION_MIB_SET;

	memcpy( spQueryNMS.query.snmp_query.gw_ip  , pSubnet->gw_ip , 20);
	spQueryNMS.query.snmp_query.listen_port = pNe->listen_port;	

	spQueryNMS.cb_func = 0;
	spQueryNMS.hWnd		= m_hWnd;

	strcpy( spQueryNMS.query.snmp_query.oid , tempOID);

	/* Get/Set Value */
	strcpy( spQueryNMS.query.snmp_query.value , (char*)(LPCTSTR)m_StrValue);

	/* Get/Set Value Type */
	pBtn1 = (CButton*)GetDlgItem(IDC_RADIO_STRING);
	pBtn2 = (CButton*)GetDlgItem(IDC_RADIO_INT);

	if(pBtn1 == NULL || pBtn2 == NULL)
		return ;

	if(pBtn1->GetCheck() == 0 && pBtn2->GetCheck() == 0)
	{
		AfxMessageBox("请选择Value Type");
		return ;
	}

	if(pBtn1->GetCheck() != 0)
		spQueryNMS.query.snmp_query.value_type = SNMP_TYPE_STRING;
	else
		spQueryNMS.query.snmp_query.value_type = SNMP_TYPE_INT;

	if( MessageConfirmBox("发出设置命令") == FALSE)
		return ;

	if( (!pApp->pThreadNMS) || (!pApp->pThreadNMS->m_pNMSWnd) )
	{
		AfxMessageBox("网管功能没有启动");
		return ;
	}

	/* Send */
	if( pApp->pThreadNMS->m_pNMSWnd->Query(&spQueryNMS) < 0)
	{
		AfxMessageBox("线程忙,请稍候再次执行操作");
		return ;
	}

	m_StrReturn = "In Processing ...";

	uIDTimer = SetTimer(uIDTimer , 5000 , 0);
	m_pos = 0;

	UpdateData(FALSE);

	GetDlgItem(IDC_MIB_SET)->EnableWindow(FALSE);
	GetDlgItem(IDC_MIB_GET)->EnableWindow(FALSE);

	((CProgressCtrl*)GetDlgItem(IDC_SUBNET_PROGRESS))->SetPos(0);
}

/*-----------------------------------------------------------------*/

void CManageSubnet::SnmpProtocolGet()
{
	U32		ne_id=0;

	CSubnet	*pSubnet=NULL;
	CNe		*pNe=NULL;

	QueryNMS spQueryNMS;

	CMib	*pTempMib=NULL;

	char	tempOID[MAX_OID_LEN+1];

	if(! UpdateData())
	{
		AfxMessageBox("数据输入错误!");
		return ;
	}

	m_StrOID.GetWindowText(tempOID , MAX_OID_LEN);
	pTempMib=GetMib(tempOID);
	if(pTempMib)
	{
		strcpy(tempOID , pTempMib->MibOID);
	}

	/* Current Subnet */
	if( (pSubnet=GetCurrentSubnet()) == NULL)
	{
		return ;
	}

	/* Current NE */
	if( (pNe=GetCurrentNE()) == NULL)
	{
		return;
	}

	/*
	 *		Snmp Get -- Send Request Msg to Snmp Wnd(Thread NMS)
	*/

	memset(&spQueryNMS , 0 , sizeof(QueryNMS));

	/* Snmp Action Type */
	spQueryNMS.query.snmp_query.action = ACTION_MIB_GET;

	/* Target(子网) IP */
	memcpy( spQueryNMS.query.snmp_query.gw_ip  , pSubnet->gw_ip , MAX_IP_LEN);

	/* Target(网元-再定位) No. */
	spQueryNMS.query.snmp_query.listen_port = pNe->listen_port;
	
	/* 查询返回到本窗口 */
	spQueryNMS.cb_func = 0;
	spQueryNMS.hWnd		= m_hWnd;

	/* MIB OID */
	strcpy( spQueryNMS.query.snmp_query.oid , tempOID);

	/* Get/Set Value */
	strcpy( spQueryNMS.query.snmp_query.value , (char*)(LPCTSTR)m_StrValue);

	if( (!pApp->pThreadNMS) || (!pApp->pThreadNMS->m_pNMSWnd) )
	{
		AfxMessageBox("网管功能没有启动");
		return ;
	}

	/* Send Request Msg */
	if( pApp->pThreadNMS->m_pNMSWnd->Query(&spQueryNMS) < 0)
	{
		AfxMessageBox("线程忙,请稍候再次执行查询操作");
		return ;
	}
	
	m_StrReturn = "In Processing ...";

	/* 界面进度条 */
	uIDTimer = SetTimer(uIDTimer , 5000 , 0);
	m_pos = 0;

	((CProgressCtrl*)GetDlgItem(IDC_SUBNET_PROGRESS))->SetPos(0);

	UpdateData(FALSE);
	
	GetDlgItem(IDC_MIB_GET)->EnableWindow(FALSE);
	GetDlgItem(IDC_MIB_SET)->EnableWindow(FALSE);
}

/*-----------------------------------------------------------------*/

void CManageSubnet::UdpSocketProtocolGet()
{
	CSubnet	*pSubnet=NULL;
	CNe		*pNe=NULL;

	char	buf[MAX_COMMON_LEN];
	int		cmd_type=0;

	QueryNMS sQueryNMS;

	UpdateData();

	/* Current Subnet */
	if( (pSubnet=GetCurrentSubnet()) == NULL)
		return ;

	/* Current NE */
	if( (pNe=GetCurrentNE()) == NULL)
		return;

	m_StrOID.GetWindowText(buf , MAX_COMMON_LEN);
	cmd_type = atol(buf);
	if(cmd_type == 0)
		cmd_type = m_StrOID.GetItemData(m_StrOID.GetCurSel()) ;

	if( (cmd_type >= CMD_SET_COPYRIGHT) &&
		(cmd_type <= CMD_SET_KERNEL_UPGRADE)
	)
	{
		if( MessageConfirmBox("发出设置命令") == FALSE)
			return ;
	}


	if(m_StrValue.Compare("LocalConfig") == 0)
	{
		// Set subnet Num
		memset(&sQueryNMS , 0 , sizeof(sQueryNMS));

		// return to me!
		sQueryNMS.hWnd = GetSafeHwnd();

		strcpy( sQueryNMS.query.cmd_query.gw_ip , pNe->current_local_ip);
		sQueryNMS.query.cmd_query.listen_port = 5001;

		
		sQueryNMS.query.cmd_query.cmd_type = CMD_SET_SUBNET_NUM;
		sQueryNMS.query.cmd_query.cmd_len = sizeof(pNe->ne_id);
		sprintf(sQueryNMS.query.cmd_query.cmd_value , "%d" , pNe->ne_id >> 16);

		/*
		 *		CMD Query
		*/
		if( pApp->pThreadNMS->m_pNMSWnd->Query(&sQueryNMS) < 0)
		{
			AfxMessageBox("线程忙,请稍候再次执行查询操作");
			return ;
		}

		// Set subnet Num
		memset(&sQueryNMS , 0 , sizeof(sQueryNMS));

		// return to me!
		sQueryNMS.hWnd = GetSafeHwnd();

		strcpy( sQueryNMS.query.cmd_query.gw_ip , pNe->current_local_ip);
		sQueryNMS.query.cmd_query.listen_port = 5001;

		
		sQueryNMS.query.cmd_query.cmd_type = CMD_SET_ORIGIN;
		sQueryNMS.query.cmd_query.cmd_len = sizeof(pNe->ne_id);
		sprintf(sQueryNMS.query.cmd_query.cmd_value , "%d" , (pNe->ne_id<<16) >> 16);

		/*
		 *		CMD Query
		*/
		if( pApp->pThreadNMS->m_pNMSWnd->Query(&sQueryNMS) < 0)
		{
			AfxMessageBox("线程忙,请稍候再次执行查询操作");
			return ;
		}
	}

	memset(&sQueryNMS , 0 ,sizeof(QueryNMS));

	sQueryNMS.hWnd = GetSafeHwnd();

	strcpy(sQueryNMS.query.cmd_query.cmd_value , (char*)(LPCTSTR)m_StrValue);
	sQueryNMS.query.cmd_query.cmd_len = m_StrValue.GetLength() ;
	sQueryNMS.query.cmd_query.cmd_type = cmd_type;
	
	if(m_StrValue.Compare("LocalConfig") == 0)
		strcpy(sQueryNMS.query.cmd_query.gw_ip , pNe->current_local_ip);
	else
		strcpy(sQueryNMS.query.cmd_query.gw_ip , pNe->gw_ip);
	
	if(m_StrValue.Compare("LocalConfig") == 0)
		sQueryNMS.query.cmd_query.listen_port = 5001;
	else
		sQueryNMS.query.cmd_query.listen_port = pNe->listen_port;

	if(pApp->pThreadNMS->m_pNMSWnd->Query(&sQueryNMS) < 0)
	{
		AfxMessageBox("线程忙,请稍候再次执行查询操作");
		return ;
	}
	
	m_StrReturn = "In Processing ...";

	/* 界面进度条 */
	uIDTimer = SetTimer(uIDTimer , 2500 , 0);
	m_pos = 0;

	((CProgressCtrl*)GetDlgItem(IDC_SUBNET_PROGRESS))->SetPos(0);

	UpdateData(FALSE);
	
	GetDlgItem(IDC_MIB_GET)->EnableWindow(FALSE);
	GetDlgItem(IDC_MIB_SET)->EnableWindow(FALSE);
}

/*-----------------------------------------------------------------*/
// 接收到Snmp 查询的返回From Snmp Wnd (Thread NMS)

LRESULT CManageSubnet::OnMibQuerySet(WPARAM wParam, LPARAM lParam)
{
	AnswerQuery_S sAnSwerQuery = *(PAnswerQuery_S)lParam;

	CProgressCtrl	*pCtrl = (CProgressCtrl*)GetDlgItem(IDC_SUBNET_PROGRESS);

	if(m_pos < 0)
	{
		/* 超时 */
		return FALSE;
	}

	pCtrl->SetPos(100);

	m_pos = -1;
	KillTimer(uIDTimer);

	GetDlgItem(IDC_MIB_SET)->EnableWindow(TRUE);
	GetDlgItem(IDC_MIB_GET)->EnableWindow(TRUE);
	m_StrReturn.Empty();


	/* Is Query return right? */
	if( (pApp->m_ProtocolUsed == PROTOCOL_SNMP) && 
		(sAnSwerQuery.snmp.error != 0) 
	 )
	{
		switch(sAnSwerQuery.snmp.error)
		{
		case ERR_SNMP_RECVMSG:
			m_StrReturn.LoadString(IDS_SNMP_RECV_ERR);
			break;
		case ERR_SNMP_AGENT_REPORT_ERR:
			m_StrReturn.LoadString(IDS_SNMP_AGENT_REPORT_ERR);
			break;
		case ERR_SNMP_PACKET:
			m_StrReturn.LoadString(IDS_SNMP_PACKET_ERR);
			break;
		case ERR_SNMP_START_FAIL:
			m_StrReturn.LoadString(IDS_SNMP_NOT_START);
			break;
		case ERR_SNMP_ERR_ACTION:
			m_StrReturn.LoadString(IDS_SNMP_ERR_ACTION);
			break;
		case ERR_SNMP_PREPARE_SEND:
			m_StrReturn.LoadString(IDS_SNMP_PREPARE_SEND_ERR);
			break;
		case ERR_SNMP_SEND_OUT:
			m_StrReturn.LoadString(IDS_SNMP_SEND_OUT_ERR);
			break;
		case ERR_NE_NOT_EXIST:
			m_StrReturn.LoadString(IDS_NE_NOT_EXIST_ERR);
			break;
		default:
			m_StrReturn.LoadString(IDS_UNKOWN_ERR);
			break;
		}
	}
	else if( (pApp->m_ProtocolUsed == PROTOCOL_SNMP) && 
		(sAnSwerQuery.snmp.error == 0) 
	 )
	{
		/*
		 *		Ok , Print Query Value
		*/
		switch(sAnSwerQuery.snmp.value_type)
		{
		case SNMP_TYPE_STRING:
			m_StrReturn.Format("%s" , sAnSwerQuery.snmp.value);
			break;
		case SNMP_TYPE_INT:
			m_StrReturn.Format("%d" , *(int*)sAnSwerQuery.snmp.value);
			break;
		}
	}
	else if( (pApp->m_ProtocolUsed == PROTOCOL_NOT_SNMP) )
	{
		if(sAnSwerQuery.cmd.cmd_type == CMD_GET_KERNEL_VERSION)
			m_StrReturn.Format("%s" , sAnSwerQuery.cmd.cmd_value);
		else
			m_StrReturn.Format("%s" , sAnSwerQuery.cmd.cmd_value);
	}
	else 
	{
		m_StrReturn.LoadString(IDS_UNKOWN_ERR);
	}


	UpdateData(FALSE);

	return TRUE;
}

/*-----------------------------------------------------------------*/
// 查询进度

void CManageSubnet::OnTimer(UINT nIDEvent) 
{
	CProgressCtrl	*pCtrl = (CProgressCtrl*)GetDlgItem(IDC_SUBNET_PROGRESS);

	if( (m_pos+25) <= 100)
	{
		pCtrl->SetPos(m_pos+25);
		m_pos += 25;
	}
	else
	{
		m_pos = -1;
		KillTimer(nIDEvent);
		pCtrl->SetPos(100);

		GetDlgItem(IDC_MIB_SET)->EnableWindow(TRUE);
		GetDlgItem(IDC_MIB_GET)->EnableWindow(TRUE);

		m_StrReturn.LoadString(IDS_UNKOWN_ERR);
		UpdateData(FALSE);
	}
	CDialog::OnTimer(nIDEvent);
}

void CManageSubnet::OnClickSubnetList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	UpdateNECtrlList();

	*pResult = 0;
}

⌨️ 快捷键说明

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