📄 managesubnet.cpp
字号:
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 + -