// UDPAdminToolDlg.cpp : implementation file // #include "stdafx.h" #include "UDPAdminTool.h" #include "UDPAdminToolDlg.h" #include "common.h" #include "util_local.h" #include "DeviceInformation.h" #include "IPSetUp.h" #include "Upgrade.h" #include "WebUpdate.h" #include "NickName.h" #include "WebPageRoot.h" #include "OCXUpdate.h" #include "UserFileUpdate.h" #include "DlgAddManualIP.h" #include "DlgImageRec.h" #include "DlgDomeUpdate.h" #include "DlgProtectUpdate.h" #include "util_firmware.h" #include "util.hpp" #include "login.h" //#define warn(msg) AfxMessageBox(msg) #ifdef MULTI #include "DlgPath.h" #include "DlgBurn.h" #include "util_path.hpp" #endif #include "verinfo.h" #include "message.h" //#include "define_common.h" struct ListDeviceItem { ClientInformation* m_info; int m_nIndex; }; void clear_list_selected(CListCtrlEx* list) { int cnt = list->GetItemCount(); for(int i = 0; i < cnt; ++i) { list->SetItemState(i, ~(LVIS_SELECTED|LVIS_FOCUSED), LVIS_SELECTED|LVIS_FOCUSED); } } int comp_int(int v1, int v2) { if(v1 > v2) return 1; if(v1 < v2) return -1; return 0; } #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CUDPAdminToolDlg dialog CUDPAdminToolDlg::CUDPAdminToolDlg(CWnd* pParent /*=NULL*/) : CDialog(CUDPAdminToolDlg::IDD, pParent) { //{{AFX_DATA_INIT(CUDPAdminToolDlg) m_chkFilter = FALSE; m_sEdFilter = _T(""); m_stCount = _T(""); m_edSelectIp = _T(""); m_edManual = _T(""); m_chkStop = FALSE; m_bChkRack = FALSE; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); #ifdef MULTI m_pCheckedList = NULL; m_bMultiMode = FALSE; m_uShowMode = SHOW_MODE_ALL; m_uCheckedCount = 0; m_uHiddenCount = 0; ZeroMemory(m_bUpdateItem, sizeof(m_bUpdateItem)); ZeroMemory(m_szItemPath, sizeof(m_szItemPath)); ZeroMemory(m_uItemVer, sizeof(m_uItemVer)); ZeroMemory(m_bUpperVer, sizeof(m_bUpperVer)); #endif } void CUDPAdminToolDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CUDPAdminToolDlg) DDX_Control(pDX, IDC_CHK_ALL, m_chkAll); DDX_Control(pDX, IDC_BUTTON_BURN, m_btnBurn); DDX_Control(pDX, IDC_STATIC_SHOW, m_stShow); DDX_Control(pDX, IDC_COMBO_SHOW, m_cbShow); DDX_Control(pDX, IDC_STATIC_PATH, m_stPath); DDX_Control(pDX, IDC_BUTTON_PATH, m_btnPath); DDX_Control(pDX, IDC_PROGRESS_REFRESH, m_progRefresh); DDX_Control(pDX, IDC_LIST, m_ctlListCtrl); DDX_Check(pDX, IDC_CHK_FILTER, m_chkFilter); DDX_Text(pDX, IDC_EDIT_FILTER, m_sEdFilter); DDX_Text(pDX, IDC_STATIC_COUNT, m_stCount); DDX_Text(pDX, IDC_EDIT_SELECT_IP, m_edSelectIp); DDX_Check(pDX, IDC_CHK_STOP, m_chkStop); DDX_Check(pDX, IDC_CHK_RACK, m_bChkRack); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CUDPAdminToolDlg, CDialog) //{{AFX_MSG_MAP(CUDPAdminToolDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_BN_CLICKED(IDC_BUTTON_INITSOCKET, OnButtonInitsocket) ON_BN_CLICKED(IDC_BUTTON_END, OnButtonEnd) ON_BN_CLICKED(IDC_BUTTON_REFRESH, OnButtonRefresh) ON_BN_CLICKED(IDC_BUTTON_IPSET, OnButtonIpset) ON_BN_CLICKED(IDC_BUTTON_INFOR, OnButtonInfor) ON_BN_CLICKED(IDC_BUTTON_REBOOT, OnButtonReboot) ON_BN_CLICKED(IDC_BUTTON_UG, OnButtonUpgrade) ON_COMMAND(ID_MENUITEM_CLOSE, OnMenuitemClose) ON_COMMAND(ID_MENUITEM_DEVICEINFO, OnMenuitemDeviceinfo) ON_COMMAND(ID_MENUITEM_FWUPDATE, OnMenuitemFwupdate) ON_COMMAND(ID_MENUITEM_IPSET, OnMenuitemIpset) ON_COMMAND(ID_MENUITEM_REBOOT, OnMenuitemReboot) ON_COMMAND(ID_MENUITEM_REFRESH, OnMenuitemRefresh) ON_COMMAND(ID_MENUITEM_WEBROOT, OnMenuitemWebroot) ON_COMMAND(ID_MENUITEM_WEBUPDATE, OnMenuitemWebupdate) ON_COMMAND(ID_MENUITEM_NICKNAME, OnMenuitemNickname) ON_BN_CLICKED(IDC_BUTTON_CALLBACK, OnButtonCallback) ON_COMMAND(ID_MENUITEM_OCXUPDATE, OnMenuitemOcxupdate) ON_UPDATE_COMMAND_UI(ID_MENUITEM_USERFILEUPDATE, OnUpdateMenuitemUserfileupdate) ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST, OnColumnclickList) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST, OnItemchangedList) ON_NOTIFY(NM_DBLCLK, IDC_LIST, OnDblclkList) ON_WM_CLOSE() ON_BN_CLICKED(IDC_CHK_FILTER, OnChkFilter) ON_BN_CLICKED(IDC_BUTTON_FILTER, OnButtonFilter) ON_WM_KEYDOWN() ON_WM_SIZE() ON_WM_DESTROY() ON_COMMAND(ID_MENUITEM_ADD_MANUALIP, OnMenuitemAddManualip) ON_NOTIFY(NM_RCLICK, IDC_LIST, OnRclickList) ON_COMMAND(ID_POPITEM_WEB_VIEW, OnPopitemWebView) ON_COMMAND(ID_POPITEM_REBOOT, OnPopitemReboot) ON_COMMAND(ID_POPITEM_IP_ADDRESS, OnPopitemIpAddress) ON_COMMAND(ID_POPITEM_WEB_ROOT, OnPopitemWebRoot) ON_COMMAND(ID_POPITEM_NICKNAME, OnPopitemNickname) ON_COMMAND(ID_POPITEM_FIRMWARE_UPDATE, OnPopitemFirmwareUpdate) ON_COMMAND(ID_POPITEM_WEB_UPDATE, OnPopitemWebUpdate) ON_COMMAND(ID_POPITEM_OCX_UPDATE, OnPopitemOcxUpdate) ON_COMMAND(ID_POPITEM_DEVICE_INFO, OnPopitemDeviceInfo) ON_BN_CLICKED(IDC_CHK_STOP, OnChkStop) ON_COMMAND(ID_MENUITEM_IMAGE_REC, OnMenuitemImageRec) ON_COMMAND(ID_MENUITEM_DOME_UPDATE, OnMenuitemDomeUpdate) ON_COMMAND(ID_MENUITEM_PROTECT_UPDATE, OnMenuitemProtectUpdate) ON_COMMAND(ID_POPITEM_PROTECT_UPDATE, OnPopitemProtectUpdate) ON_BN_CLICKED(IDC_CHK_SHOW_RACK, OnChkShowRack) ON_COMMAND(ID_MENUITEM_MODE_SINGLE, OnMenuitemModeSingle) ON_COMMAND(ID_MENUITEM_MODE_MULTI, OnMenuitemModeMulti) ON_BN_CLICKED(IDC_BUTTON_PATH, OnButtonPath) ON_BN_CLICKED(IDC_BUTTON_BURN, OnButtonBurn) ON_CBN_SELCHANGE(IDC_COMBO_SHOW, OnSelchangeComboShow) ON_BN_CLICKED(IDC_CHK_ALL, OnChkAll) ON_COMMAND(ID_MENUITEM_LOGIN, OnMenuitemLogin) //}}AFX_MSG_MAP ON_WM_SIZING() ON_MESSAGE(WM_DELETECLIENT, OnDeleteClient) ON_MESSAGE(WM_ADDCLIENT, OnAddClient) ON_MESSAGE(WM_INFORMATION, OnInfoClient) END_MESSAGE_MAP() //ON_NOTIFY(HDN_ITEMCHANGED, IDC_LIST, OnItemchangedList) /* LPCTSTR GetToken(LPCTSTR psz, int n) { for(int i = 0; i < n; i++) psz += _tcslen(psz)+1; return psz; } */ int CALLBACK CompareList(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { bool bComplementResult; int result = 0; ListDeviceItem* item1 = reinterpret_cast(lParam1); ListDeviceItem* item2 = reinterpret_cast(lParam2); ClientInformation* p1 = item1->m_info; ClientInformation* p2 = item2->m_info; if(lParamSort < 0) { lParamSort = -lParamSort; bComplementResult = true; } else bComplementResult = false; // _T("Device NAME"), _T("IP address"), _T("MAC address"), _T("Nickname"), _T("Firmware")}; // Sort window data by predefined sort criterion // (secondary sort criterion is always the window handle) for (;; lParamSort = 1, bComplementResult = false) { switch(lParamSort) { case 1: result = strcmp(p1->Name, p2->Name); // != 0; break; case 2: result = comp_ip(p1->sIp, p2->sIp); // != 0; result = -result; // ¿À¸§Â÷¼ø ³»¸²Â÷¼ø ¹ö±× - cjy, 07_0629 17:59 break; case 3: //result = comp_ip(p1->MAC, p2->MAC); // != 0; result = strcmp(p1->MAC, p2->MAC); // macÀº strcmp·Î ºñ±³... - cjy, 07_0629 17:59 break; case 4: result = strcmp(p1->NickName, p2->NickName); // != 0; break; case 5: result = strcmp(p1->FirmwareVersion, p2->FirmwareVersion); // != 0; break; case 6: // uptime if(p1->uptime > p2->uptime) result = 1; else result = -1; break; // ÀÌ°Ç ¿É¼Ç üũ¹Ú½º¿¡ µû¶ó¼­ µÉ¼öµµ ¾ÈµÉ¼öµµ ÀÖ´Ù. case 7: // rack, blade case 8: if(p1->rack == -1 || p2->rack == -1) { if(p1->rack == -1) result = 1; if(p2->rack == -1) result = -1; // Çѹø ´õ µÚÁý¾î¿ä. if (bComplementResult) result = -result; } else { // µÑ´Ù ¾ÆÀ̵𰡠ÀÖ´Â °æ¿ì result = comp_int(p1->rack, p2->rack); // != 0; if(result == 0) { result = comp_int(p1->blade, p2->blade); } } break; } if(result == 0) result = 1; /* switch (lParamSort) { case 0: { // LPCTSTR psz10 = GetToken(psz1, lParamSort); LPCTSTR psz20 = GetToken(psz2, lParamSort); VERIFY((result = _tcscmp(psz10, psz20)) != 0); break; } case 1: { result = _ttoi(GetToken(psz1, lParamSort)) - _ttoi(GetToken(psz2, lParamSort)); if (result == 0) continue; break; } case 2: { LPCTSTR psz10 = GetToken(psz1, lParamSort); LPCTSTR psz20 = GetToken(psz2, lParamSort); VERIFY((result = _tcscmp(psz10, psz20)) != 0); double pop1 = _tstof(GetToken(psz1, POPULATION-1)); double pop2 = _tstof(GetToken(psz2, POPULATION-1)); double fResult = pop1 - pop2; if (fResult > 0) result = static_cast(fResult + 1.0); else if (fResult < 0) result = static_cast(fResult - 1.0); else result = 0; if (result == 0) continue; break; } case 3: { LPCTSTR psz13 = GetToken(psz1, CAPITAL-1); LPCTSTR psz23 = GetToken(psz2, CAPITAL-1); result = _tcscmp(psz13, psz23); if (result == 0) continue; break; } case 3: { LPCTSTR psz13 = GetToken(psz1, CAPITAL-1); LPCTSTR psz23 = GetToken(psz2, CAPITAL-1); result = _tcscmp(psz13, psz23); if (result == 0) continue; break; } default: ASSERT(false); break; } */ break; } // - cjy, 07_1024 16:02 if(lParamSort == 6) { if(p1->uptime == -1) { result = 1; } if(p2->uptime == -1) { result = -1; } if(p1->uptime != -1 && p2->uptime != -1) { if (bComplementResult) result = -result; } } else { if (bComplementResult) result = -result; } return result; } ///////////////////////////////////////////////////////////////////////////// // CUDPAdminToolDlg message handlers BOOL CUDPAdminToolDlg::OnInitDialog() { bInfor_ = FALSE; CDialog::OnInitDialog(); INIT_EASYSIZE; // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); /* -- remove about box -- cjy 07_0822 CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } */ // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here //m_ctlListCtrl.SetWnd(m_hWnd); //m_ctlListCtrl.PrepareControl(0); // get version information from the resource for main dialog caption // - cjy, 07_1101 17:57 CFileVersionInfo version; version.Open(theApp.m_hInstance); int v1 = version.GetFileVersionMajor(); int v2 = version.GetFileVersionMinor(); int v3 = version.GetFileVersionBuild(); CString caption; caption.Format("IPAdminTool Ver%d.%d.%d", v1, v2, v3); this->SetWindowText(caption); // new style list ctrl UpdateData(); m_ctlListCtrl.EnableSortIcon(true); m_ctlListCtrl.ColorSortColumn(true); //m_ctlListCtrl.SetExtendedStyle(m_ctlListCtrl.GetExtendedStyle() | LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT); //m_ctlListCtrl.SetExtendedStyle(m_ctlListCtrl.GetExtendedStyle() | ~(LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT) ); m_ctlListCtrl.SetExtendedStyle( LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_INFOTIP | LVS_EX_LABELTIP); m_ctlListCtrl.KeepLabelLeft (); m_ctlListCtrl.EnableSubItemTips(); //m_ctlListCtrl.EnableSortIcon (m_bEnableSortIcon); //m_ctlListCtrl.ColorSortColumn (m_bColorSortColumn); //m_ctlListCtrl.RestoreState (_T("Settings"), _T("Overview")); // SetHeaderItem(); // sort m_ctlListCtrl.SetSortColumn(1); m_sortedBy = m_ctlListCtrl.GetSortColumn(); m_ctlListCtrl.SortItems(CompareList, m_sortedBy); //m_iListCnt = 0; OnButtonInitsocket(); for(int i=0; i<100; i++) { memset(&theApp.cinfo[i], 0, sizeof(Clientinfo)); } // load filter value UpdateData(); m_sEdFilter = theApp.get_filter(); #ifdef MULTI m_cbShow.AddString("All"); m_cbShow.AddString("Selected"); m_cbShow.AddString("Unselected"); OnMenuitemModeSingle(); CString strLogPath = path_program2(LOG_PATH); CreateDirectory(strLogPath, NULL); strncpy(m_szItemPath[UPDATE_ITEM_OCX], (LPSTR)(LPCSTR)theApp.get_ocx_path(), sizeof(m_szItemPath[UPDATE_ITEM_OCX])); strncpy(m_szItemPath[UPDATE_ITEM_WEB], (LPSTR)(LPCSTR)theApp.get_web_path(), sizeof(m_szItemPath[UPDATE_ITEM_WEB])); strncpy(m_szItemPath[UPDATE_ITEM_FW], (LPSTR)(LPCSTR)theApp.get_fw_path(), sizeof(m_szItemPath[UPDATE_ITEM_FW])); strncpy(m_szItemPath[UPDATE_ITEM_BL], (LPSTR)(LPCSTR)theApp.get_value("PATH", "Bootloader"), sizeof(m_szItemPath[UPDATE_ITEM_BL])); m_uItemVer[UPDATE_ITEM_FW] = theApp.get_fw_ver(); m_bUpperVer[UPDATE_ITEM_FW] = theApp.get_fw_cond(); m_uItemVer[UPDATE_ITEM_BL] = atoi((LPSTR)(LPCSTR)theApp.get_value("VER", "Bootloader")); m_bUpperVer[UPDATE_ITEM_BL] = atoi((LPSTR)(LPCSTR)theApp.get_value("COND", "Bootloader")); m_bUpdateItem[UPDATE_ITEM_OCX] = atoi((LPSTR)(LPCSTR)theApp.get_value("ENV", "UpOCX")); m_bUpdateItem[UPDATE_ITEM_WEB] = atoi((LPSTR)(LPCSTR)theApp.get_value("ENV", "UpWeb")); m_bUpdateItem[UPDATE_ITEM_FW] = atoi((LPSTR)(LPCSTR)theApp.get_value("ENV", "UpFW")); m_bUpdateItem[UPDATE_ITEM_BL] = atoi((LPSTR)(LPCSTR)theApp.get_value("ENV", "UpBL")); #endif UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control } void CUDPAdminToolDlg::OnSysCommand(UINT nID, LPARAM lParam) { /* if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else */ { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CUDPAdminToolDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } void CUDPAdminToolDlg::OnButtonInitsocket() { // TODO: Add your control notification handler code here // -1 : tcp socket bind error // -2 : setsockopt error for add membership int hr = InitSocket2(this->m_hWnd); if(hr <= 0) { CString msg; msg.Format("InitSocket failed with error[%d]", hr); AfxMessageBox(msg); } } void CUDPAdminToolDlg::OnButtonEnd() { // TODO: Add your control notification handler code here CloseDll(); Sleep(100); OnOK(); } LRESULT CUDPAdminToolDlg::OnAddClient(WPARAM wParam, LPARAM lParam) { Clientinfo receive; SearchDevice(receive, lParam); if(receive.isFlag == FALSE) { TRACE("IGNORE ITEM : index[%d]\n", lParam); return S_OK; } //TRACE("ADD[%d] Client index:%d %s %s %s\n", GetCurrentThreadId(), lParam, receive.Name, receive.sIp, receive.MAC); //m_iMaxDevice = wParam; //theApp.cinfo[lParam] = receive; ClientInformation& info = theApp.cinfo[lParam]; memcpy(&info, &receive, sizeof(Clientinfo)); // ext info info.rack = -1; info.blade = -1; info.uptime = -1; // stop? UpdateData(); if(m_chkStop) return S_OK; AddDataToList(lParam); //TRACE("ADD Client finish\n"); return S_OK; } void CUDPAdminToolDlg::RearrangeFilter() { // save filter value for reuse theApp.set_filter(m_sFilter); //m_ctlListCtrl.LockWindowUpdate(); //m_ctlListCtrl.ShowWindow(SW_HIDE); m_ctlListCtrl.SetRedraw(false); m_progRefresh.ShowWindow(SW_SHOW); m_progRefresh.SetShowPercent(true); m_progRefresh.SetWindowText(""); m_progRefresh.SetRange(0, MAXCLIENT); m_progRefresh.SetPos(0); #ifdef MULTI SaveCheckedList(); #endif ClearList(); #ifdef MULTI for (ULONG index=0; indexm_info, sizeof(checkedInfo[m_uCheckedCount])); m_uCheckedCount++; } } #endif delete item; } #ifdef MULTI memcpy(theApp.m_checkedInfo, checkedInfo, sizeof(theApp.m_checkedInfo)); #endif m_ctlListCtrl.DeleteAllItems(); ASSERT(m_ctlListCtrl.GetItemCount() == 0); //TRACE("ClearList---------------------\n\n\n\n"); } // void, UINT, LONG LRESULT CUDPAdminToolDlg::OnDeleteClient(WPARAM wParam, LPARAM lParam) { //TRACE("DELETE %d/%d\n", lParam, wParam); // OnButtonRefresh(); theApp.cinfo[lParam].isFlag = FALSE; /* m_ctlListCtrl.DeleteAllItems(); m_iListCnt = -1; for(int i=0; i<100; i++) { if(theApp.cinfo[i].isFlag) { m_iListCnt++; theApp.m_iListNum[m_iListCnt] = i; AddDataToList(m_iListCnt, i); } } */ // stop? UpdateData(); if(m_chkStop) return S_OK; int index = GetDeviceItemPosition(theApp.cinfo[lParam].MAC); if(index == -1) { // if don't find it?? // TRACE("DONT EXIST : %d\n", lParam); return S_OK; } // delete ListDeviceItem* item = (ListDeviceItem*)m_ctlListCtrl.GetItemData(index); delete item; m_ctlListCtrl.DeleteItem(index); UpdateState(); return S_OK; } #ifdef MULTI void CUDPAdminToolDlg::AddDataToList(int index, BOOL bChecked) #else void CUDPAdminToolDlg::AddDataToList(int index) #endif { int i; ClientInformation* info = &theApp.cinfo[index]; #ifdef MULTI BOOL bCheck = FALSE; if (GetSelectedIndex(info->MAC) >= 0 && !bChecked) { return; } if (bChecked) { info = &theApp.m_checkedInfo[index]; bCheck = TRUE; } if (m_uShowMode == SHOW_MODE_CHECKED && !bCheck) { return; } else if (m_uShowMode == SHOW_MODE_UNCHECKED && bCheck) { memcpy(&theApp.m_hiddenInfo[m_uHiddenCount], info, sizeof(theApp.m_hiddenInfo[m_uHiddenCount])); m_uHiddenCount++; return; } #endif //TRACE("Add-0 %d, IP:%s\n", index, info->sIp); if(m_bApplyFilter) { if(strstr(info->sIp, m_sFilter) == 0) { return; } } // check already exists -- ¾ÆÁ÷µµ ÀÌ·±°æ¿ì°¡ ÀÖ³ª? - cjy, 07_0420 17:09 // À̷ðæ¿ì°¡ ³ª¿À´Â°Å °°Àºµ¥ Á¤»óÀÎÁö È®ÀÎ ÇÊ¿ä. - cjy, 07_0420 17:50 int list_pos = -1; //if(strcmp(info->MAC, "") != 0) //{ // ¸ÆÀÌ ºñ¾îÀÖ´Â °æ¿ìµµ °Ë»öÇÑ´Ù. MACÀÌ ºñ¾îÀÖ´Â °æ¿ì(K620~K640)´Â Àåºñ¸¦ ÇÑ°³¸¸ Ãß°¡ÇÒ¼ö ÀÖ°Ô Á¦ÇÑÀ» ÇÏ´Â°Ô ¸Â´Ù. // MACÀÌ ºñ¾îÀÖ´Â °æ¿ì(K620 ~ K640À» Á÷Á¢ ¾ÆÀÌÇÇ ÀÔ·ÂÀ¸·Î Ãß°¡ÇÑ °æ¿ì)´Â È®ÀÎÇÏÁö ¾Ê´Â´Ù. - cjy, 08_0506 14:04 list_pos = GetDeviceItemPosition(info->MAC); if(list_pos != -1) { ListDeviceItem* item = (ListDeviceItem*)m_ctlListCtrl.GetItemData(list_pos); if(item->m_nIndex != index) { // macÀº °°Àºµ¥ index°¡ ´Ù¸¥°Ô Á¸ÀçÇÏ¸é ¾ÊµÈ´Ù. ASSERT(FALSE); } // °°Àº ¸ÆÀ¸·Î ÀÌ¹Ì Á¸ÀçÇÏ¸é ¹«½Ã TRACE("ALREADY exists : %d\n", list_pos); return; } //} #if 0 // mb if (m_uShowMode == SHOW_MODE_CHECKED) { if (!IsChecked(info->MAC)) { return; } else { bCheck = TRUE; } } else if (m_uShowMode == SHOW_MODE_UNCHECKED) { if (IsChecked(info->MAC), FALSE) { return; } } #endif // check same ip address in list BOOL bExistsSameIP = FALSE; for(i = 0; i < m_ctlListCtrl.GetItemCount(); ++i) { CString ipip = m_ctlListCtrl.GetItemText(i, 1); CString mac = m_ctlListCtrl.GetItemText(i, 2); if(ipip == info->sIp) { // °°Àºµ¥ ÀÌ¹Ì Á¸ÀçÇÏ´Â Á¤º¸ÀÇ macÀÌ ""¶ó¸é manual·Î Ãß°¡µÈ °æ¿ì´Ù // ÀÌ °æ¿ì ¹«½ÃÇÑ´Ù. if(mac == "") { return; } bExistsSameIP = TRUE; break; } } LV_ITEM lvitem; //lvitem.iItem = cnt; lvitem.iItem = m_ctlListCtrl.GetItemCount(); lvitem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_INDENT|LVIF_PARAM; lvitem.iSubItem = 0; lvitem.iImage = 0; lvitem.stateMask = LVIS_STATEIMAGEMASK; lvitem.state = INDEXTOSTATEIMAGEMASK(1); // lparam ListDeviceItem* item = new ListDeviceItem; item->m_nIndex = index; item->m_info = info; lvitem.lParam = (long)(item); // save index - cjy, 07_0402 16:16 // text lvitem.pszText = (LPSTR)(LPCTSTR)info->Name; #ifdef _DEBUG1111 for(i = 0; i < m_ctlListCtrl.GetItemCount(); ++i) { CString ipip = m_ctlListCtrl.GetItemText(i, 1); ASSERT(ipip != info->sIp); } #endif #ifdef MULTI int iListIndex = m_ctlListCtrl.InsertItem(&lvitem); #else m_ctlListCtrl.InsertItem(&lvitem); #endif //m_ctlListCtrl.SetItemText(lvitem.iItem, 0, theApp.cinfo[index].Name); m_ctlListCtrl.SetItemText(lvitem.iItem, 1, info->sIp); m_ctlListCtrl.SetItemText(lvitem.iItem, 2, info->MAC); m_ctlListCtrl.SetItemText(lvitem.iItem, 3, info->NickName); // firmware versionÀ» krbuild°ª°ú °°ÀÌ »Ñ·ÁÁÖµµ·Ï - cjy, 08_0411 14:00 //m_ctlListCtrl.SetItemText(lvitem.iItem, 4, info->FirmwareVersion); CString firmware_ver; firmware_ver = info->FirmwareVersion; if(info->krbuild != 0) // - cjy, 08_0404 17:29 { char krbuild[100]; sprintf(krbuild, ".%d", info->krbuild); firmware_ver += krbuild; } m_ctlListCtrl.SetItemText(lvitem.iItem, 4, firmware_ver); ////////////////////////////////////////////////////////////////////////// // filter Àû¿ëÇϸé uptime ¾ÊÂïÈ÷´Â ¹ö±× - cjy, 07_1101 17:02 // up time, rack id char ss[1024]; // uptime if(info->uptime != -1) { //sprintf(ss, " %d", info.uptime); convert_time_string(info->uptime, ss); m_ctlListCtrl.SetItemText(lvitem.iItem, 5, ss); } // rack id - cjy, 07_0521 15:33 int check = ((CButton*)GetDlgItem(IDC_CHK_SHOW_RACK))->GetCheck(); bool bRack = (check == 1 ? true:false); if(bRack) { if(info->rack != -1) { sprintf(ss, " %d", info->rack); m_ctlListCtrl.SetItemText(list_pos, 6, ss); sprintf(ss, " %d", info->blade); m_ctlListCtrl.SetItemText(list_pos, 7, ss); } } ////////////////////////////////////////////////////////////////////////// UpdateState(); if(bExistsSameIP == TRUE) { // filter same ip setting if(m_chkFilter == FALSE) { if(m_sEdFilter != info->sIp) { // int hr = AfxMessageBox("Exists same ip already\nDo you want to view these device?", MB_YESNO|MB_ICONQUESTION, 0); int hr = AfxMessageBox("This IP Address is already used by another device.\nDo you want to see that device?", MB_YESNO|MB_ICONQUESTION, 0); if(hr == IDYES) { // delete item CString ip2, mac2; ip2 = m_ctlListCtrl.GetItemText(i, 1); mac2 = m_ctlListCtrl.GetItemText(i, 2); //m_ctlListCtrl.DeleteItem(i); CString msg; msg.Format("[%s] and [%s] have the same IP address [%s]\n" "Please change the IP address", info->MAC, mac2, info->sIp); AfxMessageBox(msg, MB_OK|MB_ICONWARNING); // show~ m_sEdFilter = info->sIp; m_chkFilter = TRUE; UpdateData(false); // refresh all device OnButtonRefresh(); OnChkFilter(); } } } } #ifdef MULTI if (!bExistsSameIP) { if (IsChecked(item->m_info->MAC) || bCheck) { m_ctlListCtrl.SetCheck(iListIndex); } } #endif } void CUDPAdminToolDlg::UpdateState() { UpdateData(); // update count m_stCount.Format("Cnt : %d", m_ctlListCtrl.GetItemCount()); // display select device m_edSelectIp = theApp.GetSelectDeviceName(); UpdateData(false); } void CUDPAdminToolDlg::SetHeaderItem() { TCHAR rgtsz[8][12] = {_T("Device NAME"), _T("IP Address"), _T("MAC Address"), _T("Hostname"), _T("Firmware"), _T("Uptime"), _T("Rack ID"), _T("Blade ID")}; LV_COLUMN lvcolumn; CRect rect; m_ctlListCtrl.GetWindowRect( &rect ); int i; for(i = 7; i >= 0; --i) { m_ctlListCtrl.DeleteColumn(i); } int check = ((CButton*)GetDlgItem(IDC_CHK_SHOW_RACK))->GetCheck(); bool bRack = (check == 1 ? true:false); int column = 5+1; if(bRack) { column += 2; } for(i = 0; i < column; i++) { lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVCF_ORDER; lvcolumn.fmt = LVCFMT_LEFT; lvcolumn.pszText = rgtsz[i]; lvcolumn.iSubItem = i; lvcolumn.iOrder = i; switch(i) { case 0: lvcolumn.cx = 170; break; case 1: lvcolumn.cx = 120; break; case 2: lvcolumn.cx = 140; break; case 3: lvcolumn.cx = 165; break; case 4: // firmware field lvcolumn.cx = 135; break; case 5: // uptime lvcolumn.cx = 80; break; case 6: // rack lvcolumn.cx = 70; break; case 7: // blade lvcolumn.cx = 70; break; } m_ctlListCtrl.InsertColumn(i, &lvcolumn); } } void CUDPAdminToolDlg::OnButtonRefresh() { // TODO: Add your control notification handler code here #ifdef MULTI SaveCheckedList(); #endif ClearList(); Refresh(); for(int i = 0; i < MAXCLIENT; ++i) { memset(&theApp.cinfo[i], 0, sizeof(ClientInformation)); } TRACE("Refresh------------------------cnt[%d]\n", m_ctlListCtrl.GetItemCount()); #ifdef MULTI for (ULONG index=0; indexmessage == WM_KEYDOWN) { if(pMsg->wParam == VK_RETURN) { if(pMsg->hwnd == GetDlgItem(IDC_EDIT_FILTER)->GetSafeHwnd()) { OnButtonFilter(); return FALSE; } return TRUE; } else if(pMsg->wParam == VK_ESCAPE) { return TRUE; } } return CDialog::PreTranslateMessage(pMsg); } int CUDPAdminToolDlg::GetDeviceItemPosition(CString mac) { int cnt = m_ctlListCtrl.GetItemCount(); for(int i = 0; i < cnt; ++i) { ListDeviceItem* item = (ListDeviceItem*)(m_ctlListCtrl.GetItemData(i)); if(mac == item->m_info->MAC) { // TRACE("findout - index:%d, ip:%s\n", i, item->m_info->sIp); // TRACE("total - %d\n", m_ctlListCtrl.GetItemCount()); return i; } } return -1; } LRESULT CUDPAdminToolDlg::OnInfoClient(WPARAM wParam, LPARAM lParam) { bInfor_ = TRUE; Clientinfo receive; SearchDevice(receive, lParam); //TRACE("INFO[%d] Client index:%d %s %s %s\n", GetCurrentThreadId(), lParam, receive.Name, receive.sIp, receive.MAC); if(receive.isFlag == FALSE || receive.info == FALSE) { TRACE("IGNORE ITEM : index[%d]\n", lParam); return S_OK; } // m_iMaxDevice = wParam; if(strlen(receive.RTSP)==0) sprintf(receive.RTSP, "(554)"); if(strlen(receive.wwwroot) < 3) sprintf(receive.wwwroot, "(/boawww)"); //theApp.cinfo[lParam] = receive; ClientInformation& info = theApp.cinfo[lParam]; memcpy(&info, &receive, sizeof(receive)); //info.rack = -1; //info.blade = -1; //info.uptime = -1; // firmware ¹öÁ¯ÀÌ 509º¸´Ù Å©¸é È®ÀåÁ¤º¸¸¦ Áö¿øÇÕ´Ï´Ù. BOOL bExtSupport = FALSE; int firm = get_firm_version(info.FirmwareVersion); // UPTIMEÀÌ Ãß°¡µÈ Ä¿³ÎÀÌ È®Á¤ÀÌ µÇÁú ¾Ê¾Æ¼­ ÀÏ´ÜÀº ¸·´Â´Ù. - CJY, 07_1012 09:45 if(firm >= 591) { bExtSupport = TRUE; } #if 0 // for debuging if(strstr(info.sIp, ".21.42") != 0) { bExtSupport = TRUE; } if(strstr(info.sIp, ".15.71") != 0) { bExtSupport = TRUE; } #endif int check = ((CButton*)GetDlgItem(IDC_CHK_SHOW_RACK))->GetCheck(); bool bRack = (check == 1 ? true:false); if(bExtSupport) { int cnt = 0; BYTE infobuf[1024]; infobuf[cnt++] = 0x01; // rev infobuf[cnt++] = 0x03; // uptime infobuf[cnt++] = 0x04; // krbuild - cjy, 08_0404 17:27 // - cjy, 08_0502 15:38 // macÀÌ ¾ø´Â °æ¿ì´Â add manual ip·Î Ãß°¡ÇÑ °æ¿ì´Ù. 620ÀÌÈÄ¿¡¼­´Â ÀÎÁõÀÌ Ãß°¡µÇ¾î¼­ // ÀÎÁõ ÀýÂ÷¿¡¼­ MAC°ªÀ» ÇÊ¿ä·Î ÇÑ´Ù. manual ipÀÎ °æ¿ì MAC°ªÀÌ ¾øÀ¸¹Ç·Î ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­ // µÎ°¡Áö ÀýÂ÷¸¦ º¸¿ÏÇß´Ù. TCP extend informationÀ¸·Î MAC°ªÀ» ¾ò´Â Ä¿¸àµå¸¦ Ãß°¡ÇßÀ¸¸ç, // ÀÎÁõ ½ÃµµÇÒ¶§ MAC°ªÀÌ ¾øÀ¸¸é cgi·Î ¾ò¾î¿À°í ±×·¡µµ ¸ø±¸ÇÏ¸é »ç¿ëÀÚ¿¡°Ô ÀÔ·ÂÀ» ¹Þµµ·Ï Çß´Ù. if(info.MAC[0] == 0) { infobuf[cnt++] = 0x05; } if(bRack) { infobuf[cnt++] = 0x02; // rack/blade id } int nOut; BYTE pOut[1024]; int hr = GetDeviceInfo2(info.sIp, infobuf, cnt, pOut, &nOut, 1024); if(hr > 0) { // success/ int pos = 0; for(; pos < nOut;) { int type, nData; BYTE pData[1024]; int data_size = _get_info(pOut, pos, nOut, &type, pData, &nData); if(data_size == -1) { // broken packet break; } pos += data_size; if(nData == 0) { // nve°¡ ¸ð¸£´Â °ªÀÌ´Ù. continue; } switch(type) { case 0x01: // rev if(nData != 2) { TRACE0("invalid value rev"); continue; } info.rev = *((WORD*)pData); break; case 0x02: // rack/blade id if(nData != 4) { TRACE0("invalid value rack/blade"); continue; } info.rack = *((short*)(pData+0)); info.blade = *((short*)(pData+2)); break; case 0x03: // uptime if(nData != 4) { TRACE0("invalid value rack/blade"); continue; } info.uptime = *((DWORD*)(pData+0)); break; case 0x04: // krbuild - cjy, 08_0404 17:27 if(nData != 4) { TRACE0("invalid value krbuild"); continue; } info.krbuild = *((DWORD*)(pData+0)); break; case 0x05: // MAC Address - cjy, 08_0404 17:27 if(nData != 17) { TRACE0("invalid mac address"); continue; } strncpy(info.MAC, (char*)pData, 17); info.MAC[17] = 0; break; default: // skip when don't know value ; } } } } // MAC°ªÀÌ ""ÀÎ °æ¿ìµµ Á¸ÀçÇÕ´Ï´Ù.(K620~K640ÀÌ°í Á÷Á¢ ¾ÆÀÌÇÇ ÀÔ·ÂÇÑ °æ¿ì // ÀÌ °æ¿ì¸¦ º¸¿ÏÇϱâ À§Çؼ­ MAC°ªÀ» ¾ò¾î¿À´Âµ¥ ¸®½ºÆ®»ó¿¡¼­ // ¹Ì¸® °Ë»çÇϱâ À§Çؼ­ È®ÀåÁ¤º¸·Î MAC°ªÀ» ¾ò±âÀü¿¡ À§Ä¡¸¦ ÆľÇÇÕ´Ï´Ù. - cjy, 08_0506 14:40 // update ui int list_pos = GetDeviceItemPosition(info.MAC); if(list_pos == -1) { TRACE(""); return S_OK; } // if selected device, should update info if(strcmp(theApp.m_info.sIp, receive.sIp) == 0) { memcpy(&theApp.m_info, &info, sizeof(info)); } // update m_ctlListCtrl.SetItemText(list_pos, 0, info.Name); // for manual add device - cjy, 07_0403 14:30 m_ctlListCtrl.SetItemText(list_pos, 3, info.NickName); CString firmware_ver; firmware_ver = info.FirmwareVersion; if(info.krbuild != 0) // - cjy, 08_0404 17:29 { char krbuild[100]; sprintf(krbuild, ".%d", info.krbuild); firmware_ver += krbuild; } m_ctlListCtrl.SetItemText(list_pos, 4, firmware_ver); // rack id /* int rack, blade; int n = GetRackID(receive.sIp, &rack, &blade); if(n >= 0) { info.rack = rack; info.blade = blade; } */ char ss[1024]; // uptime if(info.uptime != -1) { //sprintf(ss, " %d", info.uptime); convert_time_string(info.uptime, ss); m_ctlListCtrl.SetItemText(list_pos, 5, ss); // data // m_ctlListCtrl.SetItemData(list_pos, info.uptime); } // rack id - cjy, 07_0521 15:33 if(bRack) { if(info.rack != -1) { sprintf(ss, " %d", info.rack); m_ctlListCtrl.SetItemText(list_pos, 6, ss); sprintf(ss, " %d", info.blade); m_ctlListCtrl.SetItemText(list_pos, 7, ss); } } if(strcmp(info.MAC, "") != 0) { m_ctlListCtrl.SetItemText(list_pos, 2, info.MAC); } return S_OK; } void CUDPAdminToolDlg::OnButtonUpgrade() { // TODO: Add your control notification handler code here if(!CheckSelected()) return; // ±âº»°ªÀ» Firmware update¿¡¼­ Protect update·Î ¹Ù²Û´Ù. - cjy, 08_0408 17:37 int kernel_ver = get_firm_version(theApp.m_info.FirmwareVersion); BOOL new_ker = FALSE; if(kernel_ver >= 600) { // >= 6XX new_ker = TRUE; } if(new_ker) { CDlgProtectUpdate dlg; dlg.DoModal(); } else { // old kernel? CUpgrade pDI; pDI.DoModal(); } // // ¸ÞÀÎ Åø¹ÙÀÇ Protect update¹öÆ°µµ È°¼ºÈ­ ºñÈ°¼ºÈ­ ½ÃŲ´Ù. // // Ä¿³Î ¹öÁ¯¿¡ µû¶ó¼­ ÀûÀýÇÑ ¾÷µ¥ÀÌÆ®·Î µ¿ÀÛÇϵµ·Ï ÇÏÀÚ - cjy, 08_0408 17:41 // CButton* btn = GetDlgItem(IDC_BUTTON_UG); // btn->SetWindowText(new_ker ? "Protect update":"Firmware update"); } void CUDPAdminToolDlg::OnMenuitemClose() { // TODO: Add your command handler code here OnButtonEnd(); } void CUDPAdminToolDlg::OnMenuitemDeviceinfo() { // TODO: Add your command handler code here OnButtonInfor(); } void CUDPAdminToolDlg::OnMenuitemFwupdate() { // TODO: Add your command handler code here OnButtonUpgrade(); } void CUDPAdminToolDlg::OnMenuitemIpset() { // TODO: Add your command handler code here OnButtonIpset(); } void CUDPAdminToolDlg::OnMenuitemReboot() { // TODO: Add your command handler code here OnButtonReboot(); } void CUDPAdminToolDlg::OnMenuitemRefresh() { // TODO: Add your command handler code here OnButtonRefresh(); } void CUDPAdminToolDlg::OnMenuitemWebroot() { // TODO: Add your command handler code here if(!CheckSelected()) return; CWebPageRoot pDI; pDI.DoModal(); } void CUDPAdminToolDlg::OnMenuitemWebupdate() { // TODO: Add your command handler code here if(!CheckSelected()) return; CWebUpdate pDI; pDI.DoModal(); } void CUDPAdminToolDlg::OnMenuitemNickname() { // TODO: Add your command handler code here if(!CheckSelected()) return; CNickName pDI; pDI.DoModal(); } void testAddClientCallback(Clientinfo _info) { CString tmp; tmp.Format("%s, %d, %d", _info.sIp, _info.isFlag, _info.info); AfxMessageBox(tmp); } void CUDPAdminToolDlg::OnButtonCallback() { // TODO: Add your control notification handler code here SetCallback(&testAddClientCallback); } void CUDPAdminToolDlg::OnMenuitemOcxupdate() { // TODO: Add your command handler code here if(!CheckSelected()) return; COCXUpdate pDI; pDI.DoModal(); } void CUDPAdminToolDlg::OnUpdateMenuitemUserfileupdate(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here if(!CheckSelected()) return; CUserFileUpdate pDI; pDI.DoModal(); } void CUDPAdminToolDlg::OnColumnclickList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here int sortBy = pNMListView->iSubItem+1; if (m_sortedBy == sortBy) m_sortedBy = -sortBy; else m_sortedBy = sortBy; m_ctlListCtrl.SortItems(CompareList, m_sortedBy); m_ctlListCtrl.EnsureVisible(0, FALSE); // - cjy, 07_0529 11:36 // uncheck rack sort when click column for sort list UpdateData(); m_bChkRack = false; UpdateData(FALSE); *pResult = 0; } #define KERNEL_WEBROOT_DISABLE 473 void CUDPAdminToolDlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult) { HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR; // TODO: Add your control notification handler code here // select item~ //LVITEM item; //m_ctlListCtrl.GetItem(&item); // Clientinfo* info = (Clientinfo*)(phdn->pitem->lParam); POSITION pos = m_ctlListCtrl.GetFirstSelectedItemPosition(); while (pos) { int nItem = m_ctlListCtrl.GetNextSelectedItem(pos); ListDeviceItem* item = (ListDeviceItem*)(m_ctlListCtrl.GetItemData(nItem)); // memcpy(&(theApp.m_info), item->m_info, sizeof(Clientinfo)); memcpy(&(theApp.m_info), item->m_info, sizeof(ClientInformation)); theApp.m_bManual = FALSE; // ¼±ÅÃµÈ Àåºñ¿¡ µû¶ó¼­ ¸Þ´º »óÅ °»½Å // ¾ÆÀÌÅÛ »óŸ¦ °»½ÅÇÏ´Â Æ÷ÀÎÆ®´Â µÎ±º´ë ÀÔ´Ï´Ù. // ¾ÆÀÌÅÛÀÌ ¼±ÅõǴ ¼ø°£ ¸ÞÀθ޴º Á¶ÀÛ°ú(ÀÌ°÷) ¸¶¿ì½º ¿À¸¥ÂÊ ¹öÆ°À¸·Î Æ˾÷¸Þ´º ¶ç¿ï¶§ ÀÔ´Ï´Ù. CMenu* menu = this->GetMenu(); CMenu* menu_system = menu->GetSubMenu(3); CMenu* menu_setup = menu->GetSubMenu(2); int kernel_ver = get_firm_version(theApp.m_info.FirmwareVersion); BOOL new_ker = FALSE; if(kernel_ver >= 600) { // >= 6XX new_ker = TRUE; } else { // 4XX, 5XX } menu_system->EnableMenuItem(ID_MENUITEM_FWUPDATE, !new_ker?MF_ENABLED:MF_GRAYED); menu_system->EnableMenuItem(ID_MENUITEM_WEBUPDATE, !new_ker?MF_ENABLED:MF_GRAYED); menu_system->EnableMenuItem(ID_MENUITEM_OCXUPDATE, !new_ker?MF_ENABLED:MF_GRAYED); menu_system->EnableMenuItem(ID_MENUITEM_USERFILEUPDATE, !new_ker?MF_ENABLED:MF_GRAYED); menu_system->EnableMenuItem(ID_MENUITEM_DOME_UPDATE, !new_ker?MF_ENABLED:MF_GRAYED); menu_setup->EnableMenuItem(ID_MENUITEM_WEBROOT, kernel_verEnableMenuItem(ID_MENUITEM_NICKNAME, !new_ker?MF_ENABLED:MF_GRAYED); menu_system->EnableMenuItem(ID_MENUITEM_PROTECT_UPDATE, new_ker?MF_ENABLED:MF_GRAYED); // ¸ÞÀÎ Åø¹ÙÀÇ Protect update¹öÆ°µµ È°¼ºÈ­ ºñÈ°¼ºÈ­ ½ÃŲ´Ù. // Ä¿³Î ¹öÁ¯¿¡ µû¶ó¼­ ÀûÀýÇÑ ¾÷µ¥ÀÌÆ®·Î µ¿ÀÛÇϵµ·Ï ÇÏÀÚ - cjy, 08_0408 17:41 CButton* btn = (CButton*)GetDlgItem(IDC_BUTTON_UG); btn->SetWindowText(new_ker ? "Protect update":"Firmware update"); //theApp.m_iNowDevice = info->; //m_nSelectNum++; } UpdateState(); *pResult = 0; } void CUDPAdminToolDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here CDeviceInformation pDI; pDI.DoModal(); *pResult = 0; } void CUDPAdminToolDlg::OnClose() { // TODO: Add your message handler code here and/or call default CloseDll(); Sleep(500); CDialog::OnClose(); } BOOL CUDPAdminToolDlg::DestroyWindow() { // TODO: Add your specialized code here and/or call the base class ClearList(); #ifdef MULTI ClearCheckedList(); #endif return CDialog::DestroyWindow(); } void CUDPAdminToolDlg::OnChkFilter() { // TODO: Add your control notification handler code here // check state~ go~ UpdateData(); m_bApplyFilter = m_chkFilter; m_sFilter = m_sEdFilter; // stop±â´É ÇØÁ¦ m_chkStop = false; UpdateData(false); // filter Àû¿ë RearrangeFilter(); } void CUDPAdminToolDlg::OnButtonFilter() { // TODO: Add your control notification handler code here UpdateData(); if(m_sEdFilter == "") { m_chkFilter = false; } else { m_chkFilter = true; } UpdateData(false); OnChkFilter(); } void CUDPAdminToolDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default CDialog::OnKeyDown(nChar, nRepCnt, nFlags); } BEGIN_EASYSIZE_MAP(CUDPAdminToolDlg) //EASYSIZE(control,left,top,right,bottom,options) //EASYSIZE(IDC_LIST, ES_BORDER,ES_KEEPSIZE,ES_BORDER,ES_BORDER, ES_HCENTER) EASYSIZE(IDC_LIST, ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER, 0) // ¾Æ·¡ÂÊ 4°³ EASYSIZE(IDC_CHK_FILTER, ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER, 0) EASYSIZE(IDC_EDIT_FILTER, ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER, 0) EASYSIZE(IDC_BUTTON_FILTER, ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER, 0) EASYSIZE(IDC_PROGRESS_REFRESH, ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER, 0) EASYSIZE(IDC_STATIC_COUNT, ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,ES_BORDER, 0) #ifdef MULTI EASYSIZE(IDC_STATIC_SHOW, ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER, 0) EASYSIZE(IDC_COMBO_SHOW, ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER, 0) EASYSIZE(IDC_CHK_ALL, ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER, 0) EASYSIZE(IDC_BUTTON_BURN, ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER, 0) #endif // left, top 3 EASYSIZE(IDC_BUTTON_END, ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE, 0) END_EASYSIZE_MAP void CUDPAdminToolDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: Add your message handler code here UPDATE_EASYSIZE; } void CUDPAdminToolDlg::OnSizing(UINT fwSide, LPRECT pRect) { CDialog::OnSizing(fwSide, pRect); EASYSIZE_MINSIZE(770,400, fwSide,pRect); } void CUDPAdminToolDlg::OnDestroy() { CDialog::OnDestroy(); // TODO: Add your message handler code here } void CUDPAdminToolDlg::OnMenuitemAddManualip() { // TODO: Add your command handler code here CDlgAddManualIP dlg; if(dlg.DoModal() == IDOK) { // manual add UpdateData(); CString manualip = dlg.m_ip; // uncheck filter function m_chkFilter = false; UpdateData(FALSE); OnChkFilter(); // should add custom ip manualy if can't find memset(&theApp.m_info, 0, sizeof(theApp.m_info)); strncpy(theApp.m_info.sIp, manualip, 64); theApp.m_bManual = TRUE; int hr = AddManualIP(manualip); if(hr < 0) { // reference to common.h warn("Failed to get information by entering the ip with error[%d]", hr); return; /* // 1 : success // 2 : already exists same ip // -1 : don't exists empty slot // -2 : can't connect ip(or timeout) switch(hr) { case -1: } */ } PumpMessages(); // first, search same ip in listctrl int cnt = m_ctlListCtrl.GetItemCount(); for(int i = 0; i < cnt; ++i) { CString ip = m_ctlListCtrl.GetItemText(i, 1); if(ip == manualip) { // find out~ //m_ctlListCtrl.SetHotItem(i); clear_list_selected(&m_ctlListCtrl); m_ctlListCtrl.SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED); m_ctlListCtrl.EnsureVisible(i, TRUE); } } } } void CUDPAdminToolDlg::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here // popup menu POINT pt; GetCursorPos(&pt); CMenu menu; menu.LoadMenu(IDR_POP_DEVICE); // ÇöÀç ¼±ÅÃµÈ µð¹ÙÀ̽º¿¡ µû¶ó¼­ ¸Þ´º È°¼ºÈ­ CMenu* sub; sub = menu.GetSubMenu(0); //sub->EnableMenuItem(, MF_DISABLED); int kernel_ver = get_firm_version(theApp.m_info.FirmwareVersion); if(kernel_ver >= 600) { // >= 6XX sub->EnableMenuItem(ID_POPITEM_FIRMWARE_UPDATE, MF_GRAYED); sub->EnableMenuItem(ID_POPITEM_WEB_UPDATE, MF_GRAYED); sub->EnableMenuItem(ID_POPITEM_OCX_UPDATE, MF_GRAYED); } else { // 4XX, 5XX sub->EnableMenuItem(ID_POPITEM_PROTECT_UPDATE, MF_GRAYED); } // 473Ä¿³Î ÀÌÇÏÀÎ °æ¿ì´Â web root¸¦ ¹Ù²Ü¼ö ¾ø´Ù. - cjy, 08_0305 16:55 if(kernel_ver >= KERNEL_WEBROOT_DISABLE) sub->EnableMenuItem(ID_POPITEM_WEB_ROOT, MF_GRAYED); sub->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, pt.x, pt.y, this); *pResult = 0; } void CUDPAdminToolDlg::OnPopitemWebView() { // TODO: Add your command handler code here // ¼±ÅÃµÈ ¾ÆÀÌÅÛÀÇ ie·Î ¶ç¿öÁÖ±â char str[10240]; sprintf(str, "http://%s", theApp.m_info.sIp); ShellExecute(NULL, NULL, str, NULL, NULL, SW_SHOW); } void CUDPAdminToolDlg::OnPopitemReboot() { // TODO: Add your command handler code here OnMenuitemReboot(); } void CUDPAdminToolDlg::OnPopitemIpAddress() { // TODO: Add your command handler code here OnMenuitemIpset(); } void CUDPAdminToolDlg::OnPopitemWebRoot() { // TODO: Add your command handler code here OnMenuitemWebroot(); } void CUDPAdminToolDlg::OnPopitemNickname() { // TODO: Add your command handler code here OnMenuitemNickname(); } void CUDPAdminToolDlg::OnPopitemFirmwareUpdate() { // TODO: Add your command handler code here OnMenuitemFwupdate(); } void CUDPAdminToolDlg::OnPopitemWebUpdate() { // TODO: Add your command handler code here OnMenuitemWebupdate(); } void CUDPAdminToolDlg::OnPopitemOcxUpdate() { // TODO: Add your command handler code here OnMenuitemOcxupdate(); } void CUDPAdminToolDlg::OnPopitemDeviceInfo() { // TODO: Add your command handler code here OnMenuitemDeviceinfo(); } void CUDPAdminToolDlg::OnChkStop() { // TODO: Add your control notification handler code here UpdateData(); if(m_chkStop == false) { /* // refresh information for(int i = 0; i < cnt; ++i) { Clientinfo receive; SearchDevice(receive, lParam); // TRACE("ADD[%d] Client index:%d %s %s %s\n", GetCurrentThreadId(), lParam, receive.Name, receive.sIp, receive.MAC); // m_iMaxDevice = wParam; // memcpy(&theApp.cinfo[lParam], &receive, sizeof(Clientinfo)); theApp.cinfo[lParam] = receive; } */ RearrangeFilter(); return; } } void CUDPAdminToolDlg::OnMenuitemImageRec() { // TODO: Add your command handler code here // CDlgImageRec dlg; dlg.DoModal(); } /* void CUDPAdminToolDlg::OnChkRack() { // TODO: Add your control notification handler code here UpdateData(); int sortBy; if(m_bChkRack) { sortBy = 6; } else { sortBy = 1; } // check already sort column // if (m_sortedBy == sortBy) // m_sortedBy = -sortBy; // else // m_sortedBy = sortBy; m_sortedBy = sortBy; // m_ctlListCtrl.m_iSortColumn = sortBy; m_ctlListCtrl.SortItems(CompareList, m_sortedBy); m_ctlListCtrl.EnsureVisible(0, FALSE); UpdateData(FALSE); } */ void CUDPAdminToolDlg::OnMenuitemDomeUpdate() { // TODO: Add your command handler code here // version check //int nCurVer = fw_version_n(theApp.m_info.FirmwareVersion); int nCurVer = get_firm_version(theApp.m_info.FirmwareVersion); if(nCurVer < 551) { // don't support firmware version to update dome firmware // AfxMessageBox("This firmware don't supports to update dome", MB_OK | MB_ICONWARNING); AfxMessageBox("This firmware version doesn't support dome update", // - cjy, 07_0810 10:00 MB_OK | MB_ICONWARNING); return; } // AfxMessageBox("µ¼Ä«¸Þ¶ó¸¸ ¾÷µ¥ÀÌÆ® °¡´É, µ¼À» ¾÷µ¥ÀÌÆ® ÇÒ¶§ ¹Ýµå½Ã IPC¿¡ ¿¬°áµÈ 485¿¬°áÀ» ¸ðµÎ Á¦°ÅÇÒ°Í," // "µ¼À» ¾÷µ¥ÀÌÆ® ÇÏ´Ù°¡ ¹®Á¦°¡ ¹ß»ýÇϸé 485ÄÁ¹öÅ͸¦ »ç¿ëÇؼ­ º°µµÀÇ ÇÁ·Î±×·¥À¸·Î ¾÷µ¥ÀÌÆ®¸¦ ÇØ¾ß ÇÔ"); CDlgDomeUpdate dlg; dlg.DoModal(); } void CUDPAdminToolDlg::OnMenuitemProtectUpdate() { // TODO: Add your command handler code here CDlgProtectUpdate dlg; dlg.DoModal(); } void CUDPAdminToolDlg::OnPopitemProtectUpdate() { // TODO: Add your command handler code here OnMenuitemProtectUpdate(); } void CUDPAdminToolDlg::OnChkShowRack() { // TODO: Add your control notification handler code here // show? SetHeaderItem(); OnButtonRefresh(); } #ifdef MULTI void CUDPAdminToolDlg::OnMenuitemModeSingle() { // TODO: Add your command handler code here CMenu *pMenu = GetMenu(); if (pMenu) { pMenu->CheckMenuItem(ID_MENUITEM_MODE_SINGLE, MF_CHECKED | MF_BYCOMMAND); pMenu->CheckMenuItem(ID_MENUITEM_MODE_MULTI, MF_UNCHECKED | MF_BYCOMMAND); } m_ctlListCtrl.SetExtendedStyle( LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_INFOTIP | LVS_EX_LABELTIP); m_btnPath.ShowWindow(FALSE); m_stPath.ShowWindow(FALSE); m_cbShow.ShowWindow(FALSE); m_stShow.ShowWindow(FALSE); m_cbShow.SetCurSel(0); m_btnBurn.ShowWindow(FALSE); m_chkAll.ShowWindow(FALSE); ClearCheckedList(); m_bMultiMode = FALSE; } void CUDPAdminToolDlg::OnMenuitemModeMulti() { // TODO: Add your command handler code here CMenu *pMenu = GetMenu(); if (pMenu) { pMenu->CheckMenuItem(ID_MENUITEM_MODE_SINGLE, MF_UNCHECKED | MF_BYCOMMAND); pMenu->CheckMenuItem(ID_MENUITEM_MODE_MULTI, MF_CHECKED | MF_BYCOMMAND); } m_ctlListCtrl.SetExtendedStyle( LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_INFOTIP | LVS_EX_LABELTIP); m_btnPath.ShowWindow(TRUE); m_stPath.ShowWindow(TRUE); m_cbShow.ShowWindow(TRUE); m_stShow.ShowWindow(TRUE); m_btnBurn.ShowWindow(TRUE); m_chkAll.ShowWindow(TRUE); m_bMultiMode = TRUE; } void CUDPAdminToolDlg::OnButtonPath() { // TODO: Add your control notification handler code here CDlgPath dlg; if (dlg.DoModal() == IDOK) { m_bUpdateItem[UPDATE_ITEM_OCX] = dlg.m_bUpOCX; m_bUpdateItem[UPDATE_ITEM_WEB] = dlg.m_bUpWeb; m_bUpdateItem[UPDATE_ITEM_FW] = dlg.m_bUpFW; m_bUpdateItem[UPDATE_ITEM_BL] = dlg.m_bUpBL; strncpy(m_szItemPath[UPDATE_ITEM_OCX], (LPSTR)(LPCSTR)dlg.m_strOCXPath, sizeof(m_szItemPath[UPDATE_ITEM_OCX])); strncpy(m_szItemPath[UPDATE_ITEM_WEB], (LPSTR)(LPCSTR)dlg.m_strWebPath, sizeof(m_szItemPath[UPDATE_ITEM_WEB])); strncpy(m_szItemPath[UPDATE_ITEM_FW], (LPSTR)(LPCSTR)dlg.m_strFWPath, sizeof(m_szItemPath[UPDATE_ITEM_FW])); strncpy(m_szItemPath[UPDATE_ITEM_BL], (LPSTR)(LPCSTR)dlg.m_strBLPath, sizeof(m_szItemPath[UPDATE_ITEM_BL])); m_uItemVer[UPDATE_ITEM_OCX] = dlg.m_uVerOCX; m_uItemVer[UPDATE_ITEM_WEB] = dlg.m_uVerWeb; m_uItemVer[UPDATE_ITEM_FW] = dlg.m_uVerFW; m_uItemVer[UPDATE_ITEM_BL] = dlg.m_uVerBL; m_bUpperVer[UPDATE_ITEM_OCX] = dlg.m_iCondOCX; m_bUpperVer[UPDATE_ITEM_WEB] = dlg.m_iCondWeb; m_bUpperVer[UPDATE_ITEM_FW] = dlg.m_iCondFW; m_bUpperVer[UPDATE_ITEM_BL] = dlg.m_iCondBL; } } void CUDPAdminToolDlg::OnButtonBurn() { // TODO: Add your control notification handler code here CDlgBurn dlg(this); dlg.parent_ = this; dlg.m_bUpdateOcx = m_bUpdateItem[UPDATE_ITEM_OCX]; dlg.m_bUpdateWeb = m_bUpdateItem[UPDATE_ITEM_WEB]; dlg.m_bUpdateFirmware = m_bUpdateItem[UPDATE_ITEM_FW]; dlg.m_bUpdateBootloader = m_bUpdateItem[UPDATE_ITEM_BL]; dlg.DoModal(); } void CUDPAdminToolDlg::SaveCheckedList() { if (m_bMultiMode) { int iCnt = m_ctlListCtrl.GetItemCount(); CHECKED_LIST *pCheckedList = m_pCheckedList; CHECKED_LIST *pPreList = NULL; for(int i = 0; i < iCnt; i++) { ListDeviceItem* item = (ListDeviceItem*)m_ctlListCtrl.GetItemData(i); if (!m_ctlListCtrl.GetCheck(i)) { continue; } if (!m_pCheckedList) { m_pCheckedList = new CHECKED_LIST; m_pCheckedList->pNext = NULL; pCheckedList = m_pCheckedList; } else { while (pCheckedList) { pPreList = pCheckedList; pCheckedList = (CHECKED_LIST*)pCheckedList->pNext; } pPreList->pNext = new CHECKED_LIST; pCheckedList = (CHECKED_LIST*)pPreList->pNext; pCheckedList->pNext = NULL; } strncpy(pCheckedList->szMac, item->m_info->MAC, sizeof(pCheckedList->szMac)); pCheckedList->bCheck = m_ctlListCtrl.GetCheck(i); } } } void CUDPAdminToolDlg::ClearCheckedList() { CHECKED_LIST *pCheckedList = m_pCheckedList; while (pCheckedList) { CHECKED_LIST *pNext = (CHECKED_LIST*)pCheckedList->pNext; delete pCheckedList; pCheckedList = pNext; } } BOOL CUDPAdminToolDlg::IsChecked(char *pszMac, BOOL bDelete) { CHECKED_LIST *pCheckedList = m_pCheckedList; CHECKED_LIST *pPreList = NULL; while (pCheckedList) { if (strcmp(pCheckedList->szMac, pszMac) == 0 && pCheckedList->bCheck) { if (bDelete) { if (!pPreList) { CHECKED_LIST *pNext = (CHECKED_LIST*)m_pCheckedList->pNext; delete m_pCheckedList; m_pCheckedList = pNext; } else { CHECKED_LIST *pNext = (CHECKED_LIST*)pCheckedList->pNext; delete pCheckedList; pPreList->pNext = (void*)pNext; } } return TRUE; } pPreList = pCheckedList; pCheckedList = (CHECKED_LIST*)pCheckedList->pNext; } return FALSE; } void CUDPAdminToolDlg::OnSelchangeComboShow() { // TODO: Add your control notification handler code here m_uShowMode = m_cbShow.GetCurSel(); RearrangeFilter(); } int CUDPAdminToolDlg::GetSelectedIndex(char *pszMac) { for (ULONG i=0; i