// PageDDNS.cpp : implementation file // #include "stdafx.h" #include "mgrnve.h" #include "ConnectionManager.h" #include "PageDDNS.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define DDNS_CUSTOM01 0x00010001 #define DDNS_CUSTOM02 0x00010002 #define DDNS_CUSTOM03 0x00010003 #define DDNS_CUSTOM03_PORT 3495 ///////////////////////////////////////////////////////////////////////////// // CPageDDNS dialog CPageDDNS::CPageDDNS(CWnd* pParent, CMgrNVE* pMgrCM, CConnectionManager *pConnMgr) : CParamDlg(CPageDDNS::IDD, pParent, pMgrCM, pConnMgr) { //{{AFX_DATA_INIT(CPageDDNS) m_strAddr = _T(""); m_strDnsName = _T(""); m_uUpdateTime = 0; m_strUserID = _T(""); m_strUserPW = _T(""); m_uPort = 0; //}}AFX_DATA_INIT m_pNet5Api = NULL; m_pMsgMgr = NULL; } void CPageDDNS::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPageDDNS) DDX_Control(pDX, IDC_CB_IP_TYPE, m_cbIPType); DDX_Control(pDX, IDC_EDT_PORT, m_edtPort); DDX_Control(pDX, IDC_CB_DDNS_COMMAND, m_cbCommand); DDX_Control(pDX, IDC_CB_DDNS_SERVER_TYPE, m_cbServerType); DDX_Text(pDX, IDC_EDT_DDNS_ADDR, m_strAddr); DDX_Text(pDX, IDC_EDT_DDNS_DNS_NAME, m_strDnsName); DDX_Text(pDX, IDC_EDT_DDNS_UP_TIME, m_uUpdateTime); DDX_Text(pDX, IDC_EDT_DDNS_USER_ID, m_strUserID); DDX_Text(pDX, IDC_EDT_DDNS_USER_PW, m_strUserPW); DDX_Text(pDX, IDC_EDT_PORT, m_uPort); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPageDDNS, CDialog) //{{AFX_MSG_MAP(CPageDDNS) ON_BN_CLICKED(IDC_BTN_DDNS_SET, OnBtnDdnsSet) ON_CBN_SELCHANGE(IDC_CB_DDNS_SERVER_TYPE, OnSelchangeCbDdnsServerType) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPageDDNS message handlers BOOL CPageDDNS::SaveSetting() { return TRUE; } BOOL CPageDDNS::ResetSetting() { return TRUE; } BOOL CPageDDNS::UpdateSetting() { return TRUE; } BOOL CPageDDNS::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_pNet5Api = m_pConnection->GetNet5Api(); m_pMsgMgr = m_pConnection->GetMgrNVE()->GetMsgManager(); m_cbServerType.AddString("DynDNS"); m_cbServerType.AddString("DirServer"); m_cbServerType.AddString("Custom01"); m_cbServerType.AddString("Custom02"); m_cbServerType.AddString("Custom03"); m_cbServerType.SetCurSel(0); m_cbCommand.AddString("Add"); m_cbCommand.AddString("Delete"); m_cbCommand.AddString("Modify"); m_cbCommand.SetCurSel(0); m_cbIPType.AddString("LOCAL"); m_cbIPType.AddString("REAL"); m_cbIPType.SetCurSel(1); m_edtPort.EnableWindow(FALSE); ULONG uSize, uNum; CHECK_AND_RETURN_FALSE(m_pNet5Api->Net5Command(NET5_NC_QUERY_EVENT_AUTOMATION_SIZE, &uSize, &uNum, NULL, NULL), "Cannot get event automation infomation"); if (uSize == 0 || uNum == 0) { return FALSE; } BYTE *pBuff = new BYTE[uSize]; NET5_EVENT_AUTOMATION_INFO_DDNS DDNS; if (!m_pNet5Api->Net5Command(NET5_NC_GET_ALL_EVENT_AUTOMATION, &uSize, (ULONG*)pBuff, NULL, NULL)) { m_pMsgMgr->PushErrorCodeF("Cannot get DDNS infomation"); m_pMsgMgr->Show(TRUE); delete[] pBuff; return FALSE; } ULONG uIndex = 0; for (ULONG i=0; iuAutomationType == NET5_EAT_DDNS) { CopyMemory(&DDNS, pBuff+uIndex, sizeof(DDNS)); break; } uIndex += pHeader->uStructSize; } delete[] pBuff; if (DDNS.uDdnsServiceType == NET5_DDNS_SERVICE_TYPE_DYNDNS) { m_cbServerType.SetCurSel(0); } else if (DDNS.uDdnsServiceType == DDNS_CUSTOM01) { m_cbServerType.SetCurSel(2); } else if (DDNS.uDdnsServiceType == DDNS_CUSTOM02) { m_cbServerType.SetCurSel(3); } else if (DDNS.uDdnsServiceType == DDNS_CUSTOM03) { m_cbServerType.SetCurSel(4); } m_strAddr = DDNS.DdnsServerAddr; m_strUserID = DDNS.DdnsUserName; m_strUserPW = DDNS.DdnsPassword; m_strDnsName = DDNS.DomainName; m_uUpdateTime = DDNS.uUpdateIntervalMin; char szCmd[NVE_SHORT_EXT_CMD_LENGTH]; _snprintf(szCmd, sizeof(szCmd), "EXT_CMD / RTSP/1.0\r\n" "CSeq: 1\r\n" "CmdCount: 1\r\n" "GET DDNS ip_type, port\r\n\r\n"); CHECK_AND_RETURN_FALSE(m_pNet5Api->Net5Command(NET5_NC_SEND_RTSP_REQUEST, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot get DDNS"); CHECK_AND_RETURN_FALSE(m_pNet5Api->Net5Command(NET5_NC_RECV_RTSP_RESPONSE, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot receive response(DDNS)"); NVE_RTSP_VALUE RtspValue[NVE_MAX_RTSP_VALUE]; char szIPType[NVE_MAX_STR_LENGTH]; ULONG uPort; ParseRTSPResponse(szCmd, RtspValue, NVE_MAX_RTSP_VALUE); FindRTSPValue(RtspValue, "ip_type", szIPType, NVE_RTSP_VALUE_STR); FindRTSPValue(RtspValue, "port", &uPort, NVE_RTSP_VALUE_INT); if (strcmp("local", szIPType) == 0) { m_cbIPType.SetCurSel(0); } else if (strcmp("real", szIPType) == 0) { m_cbIPType.SetCurSel(1); } if (m_cbServerType.GetCurSel() == 4) { m_edtPort.EnableWindow(TRUE); if (m_uPort == 0) { m_uPort = DDNS_CUSTOM03_PORT; } } NET5_DIR_SERVER_INFO DirInfo; CHECK_AND_RETURN_FALSE(m_pNet5Api->Net5Command(NET5_NC_GET_DIR_SERVER_INFO, (ULONG*)&DirInfo, NULL, NULL, NULL), "Cannot get directory server infomation"); if (DirInfo.bEnable) { m_edtPort.EnableWindow(TRUE); m_cbServerType.SetCurSel(1); m_strAddr = DirInfo.szIP; m_strUserID = DirInfo.szID; m_strUserPW = DirInfo.szPassword; m_strDnsName = ""; m_uUpdateTime = 0; m_uPort = DirInfo.uPort; } UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPageDDNS::OnBtnDdnsSet() { // TODO: Add your control notification handler code here UpdateData(TRUE); NET5_DIR_SERVER_INFO DirInfo; if (m_cbServerType.GetCurSel() == 1) { DirInfo.bEnable = TRUE; if (m_cbCommand.GetCurSel() == 1) { DirInfo.bEnable = FALSE; } DirInfo.uPort = m_uPort; safe_strcpy(DirInfo.szIP, (LPSTR)(LPCSTR)m_strAddr); safe_strcpy(DirInfo.szID, (LPSTR)(LPCSTR)m_strUserID); safe_strcpy(DirInfo.szPassword, (LPSTR)(LPCSTR)m_strUserPW); CHECK_AND_RETURN(m_pNet5Api->Net5Command(NET5_NC_SET_DIR_SERVER_INFO, (ULONG*)&DirInfo, NULL, NULL, NULL), "Cannot set Directory server"); return; } NET5_EVENT_AUTOMATION_INFO_DDNS DDNS; ULONG uNum = 1; DDNS.uAutomationType = NET5_EAT_DDNS; DDNS.uStructSize = sizeof(DDNS); DDNS.uCommand = m_cbCommand.GetCurSel()+1; switch(m_cbServerType.GetCurSel()) { case 0: DDNS.uDdnsServiceType = NET5_DDNS_SERVICE_TYPE_DYNDNS; break; case 2: DDNS.uDdnsServiceType = DDNS_CUSTOM01; break; case 3: DDNS.uDdnsServiceType = DDNS_CUSTOM02; break; case 4: DDNS.uDdnsServiceType = DDNS_CUSTOM03; break; } safe_strcpy(DDNS.DdnsServerAddr, (LPSTR)(LPCSTR)m_strAddr); safe_strcpy(DDNS.DdnsUserName, (LPSTR)(LPCSTR)m_strUserID); safe_strcpy(DDNS.DdnsPassword, (LPSTR)(LPCSTR)m_strUserPW); safe_strcpy(DDNS.DomainName, (LPSTR)(LPCSTR)m_strDnsName); DDNS.uUpdateIntervalMin = m_uUpdateTime; char szIPType[NVE_MAX_STR_LENGTH]; if (m_cbIPType.GetCurSel() == 0) { strncpy(szIPType, "local", sizeof(szIPType)); } else if (m_cbIPType.GetCurSel() == 1) { strncpy(szIPType, "real", sizeof(szIPType)); } char szCmd[NVE_SHORT_EXT_CMD_LENGTH]; _snprintf(szCmd, sizeof(szCmd), "EXT_CMD / RTSP/1.0\r\n" "CSeq: 1\r\n" "CmdCount: 1\r\n" "SET DDNS ip_type=%s, port=%d\r\n\r\n", szIPType, m_uPort); CHECK_AND_RETURN(m_pNet5Api->Net5Command(NET5_NC_SEND_RTSP_REQUEST, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot set DDNS"); CHECK_AND_RETURN(m_pNet5Api->Net5Command(NET5_NC_RECV_RTSP_RESPONSE, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot receive response(DDNS)"); CHECK_AND_RETURN(m_pNet5Api->Net5Command(NET5_NC_SET_EVENT_AUTOMATION, &uNum, (ULONG*)&DDNS, NULL, NULL), "Cannot set DDNS"); } void CPageDDNS::OnSelchangeCbDdnsServerType() { // TODO: Add your control notification handler code here UpdateData(TRUE); if (m_cbServerType.GetCurSel() == 1 || m_cbServerType.GetCurSel() == 4) { if (m_uPort == 0) { m_uPort = DDNS_CUSTOM03_PORT; } m_edtPort.EnableWindow(TRUE); } else { m_edtPort.EnableWindow(FALSE); } UpdateData(FALSE); }