// IPSetUp.cpp : implementation file // #include "stdafx.h" #include "udpadmintool.h" #include "IPSetUp.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #include "common.h" #include "md5.h" #include "util.hpp" #include "util_local.h" #include "login.h" #include "message.h" #include "DlgLogin.h" ///////////////////////////////////////////////////////////////////////////// // CIPSetUp dialog CIPSetUp::CIPSetUp(CWnd* pParent /*=NULL*/) : CDialog(CIPSetUp::IDD, pParent) { //{{AFX_DATA_INIT(CIPSetUp) m_sNickName = _T(""); //}}AFX_DATA_INIT } void CIPSetUp::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CIPSetUp) DDX_Control(pDX, IDC_STATIC_MYINFOR, m_stMyinfo); DDX_Control(pDX, IDC_TAB_NETWORK, m_tabNetwork); DDX_Control(pDX, IDC_IPADDRESS_DNS, m_ctrlDns); DDX_Control(pDX, IDC_IPADDRESS_GATE, m_ctrlGate); DDX_Control(pDX, IDC_IPADDRESS_SUB, m_ctrlSub); DDX_Control(pDX, IDC_IPADDRESS_IP, m_ctrlIp); DDX_Text(pDX, IDC_EDIT_NICK, m_sNickName); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CIPSetUp, CDialog) //{{AFX_MSG_MAP(CIPSetUp) ON_BN_CLICKED(IDC_BUTTON_SETUP, OnButtonSetup) ON_BN_CLICKED(IDC_RADIO_STATIC, OnRadioStatic) ON_BN_CLICKED(IDC_RADIO_DHCP, OnRadioDhcp) ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_NETWORK, OnSelchangeTabNetwork) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CIPSetUp message handlers BOOL CIPSetUp::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here //GetDlgItem(IDC_STATIC_DEVICENAME)->SetWindowText(theApp.cinfo[theApp.m_iListNum[theApp.m_iNowDevice]].Name); GetDlgItem(IDC_STATIC_DEVICENAME)->SetWindowText(theApp.m_info.Name); InitDns(); InitSub(); InitGate(); InitIp(); InitNickName(); InitDhcp(); // bug? m_ctrlIp.SetFieldRange(0, 0, 255); m_ctrlIp.SetFieldRange(1, 0, 255); m_ctrlIp.SetFieldRange(2, 0, 255); m_ctrlIp.SetFieldRange(3, 0, 255); m_ctrlSub.SetFieldRange(0, 0, 255); m_ctrlSub.SetFieldRange(1, 0, 255); m_ctrlSub.SetFieldRange(2, 0, 255); m_ctrlSub.SetFieldRange(3, 0, 255); m_ctrlGate.SetFieldRange(0, 0, 255); m_ctrlGate.SetFieldRange(1, 0, 255); m_ctrlGate.SetFieldRange(2, 0, 255); m_ctrlGate.SetFieldRange(3, 0, 255); m_ctrlDns.SetFieldRange(0, 0, 255); m_ctrlDns.SetFieldRange(1, 0, 255); m_ctrlDns.SetFieldRange(2, 0, 255); m_ctrlDns.SetFieldRange(3, 0, 255); // get network information CNetBios Net; m_count_info = Net.GetNetCount(); m_info = new NetBiosinfo[m_count_info]; memset(m_info, 0, sizeof(CNetBios)*m_count_info); int i = 0; for(i = 0; i < m_count_info; ++i) { Net.GetNetBios(i, m_info[i]); // get dns infomation // Net.GetDns2(i, m_info[i]); CString name; name.Format("Net %d", i+1); m_tabNetwork.InsertItem(9999, name); } LRESULT hr; OnSelchangeTabNetwork(NULL, &hr); //refresh_network_info(0); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } BOOL CIPSetUp::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->wParam == VK_RETURN) { return TRUE; } return CDialog::PreTranslateMessage(pMsg); } void CIPSetUp::OnButtonSetup() { // TODO: Add your control notification handler code here unsigned char ip[20]; unsigned char sub[20]; unsigned char gate[20]; unsigned char dns[20]; //unsigned char nick[64]; unsigned char dhcp[2]; CString Message; memset(ip, 0x00, sizeof(ip)); memset(sub, 0x00, sizeof(sub)); memset(gate, 0x00, sizeof(gate)); memset(dns, 0x00, sizeof(dns)); //memset(nick, 0x00, sizeof(nick)); memset(dhcp, 0x00, sizeof(dhcp)); m_ctrlIp.GetWindowText((char *)ip, 20); m_ctrlSub.GetWindowText((char *)sub, 20); m_ctrlGate.GetWindowText((char *)gate, 20); m_ctrlDns.GetWindowText((char *)dns, 20); // check valid ip address BYTE i1, i2, i3, i4; m_ctrlIp.GetAddress(i1,i2,i3,i4); if(i1 == 0 && i2 == 0 && i3 == 0 && i4 == 0) { AfxMessageBox("Invalid ip address", MB_OK | MB_ICONWARNING); return; } m_ctrlSub.GetAddress(i1,i2,i3,i4); if(i1 == 0 && i2 == 0 && i3 == 0 && i4 == 0) { AfxMessageBox("Invalid subnetmask", MB_OK | MB_ICONWARNING); return; } m_ctrlGate.GetAddress(i1,i2,i3,i4); if(i1 == 0 && i2 == 0 && i3 == 0 && i4 == 0) { AfxMessageBox("Invalid gateway", MB_OK | MB_ICONWARNING); return; } UpdateData(TRUE); //sprintf((char *)nick, "%s", m_sNickName); // dhcp¿©ºÎ - cjy, 07_0409 11:22 //if(theApp.m_info.dhcp == 0) //{ // old device // dhcp[0] = 0; //} //else { // dhcp change support device int nt = this->GetCheckedRadioButton(IDC_RADIO_DHCP, IDC_RADIO_STATIC); if(nt == IDC_RADIO_DHCP) { dhcp[0] = 'y'; } else { dhcp[0] = 'n'; } } if(strcmp(m_sSubmask, (char *)sub)!=0) Message.Format("Subnet Mask is not matched with client PC\nDo you want to continue?"); else Message.Format("Do you really want to change Network configuration?"); // ¾Æ·¡ÀÇ ÄÚµå¿Í bUnknown Ç÷¯±×°¡ È°¼ºÈ­ µÇ¾î ÀÖÀ»¶§ ÇÏ´Â »¹ÁþÀº // ¼³Á¤ÀÇ ÀÎÁõ ±â´ÉÀÌ kernel 620ºÎÅÍ Ãß°¡µÇ¾ú´Âµ¥ TCPÁ¢¼ÓÀÌ ¾ÈµÇ´Â °æ¿ì // Ä¿³Î¹öÁ¯À» °Ë»çÇÒ¼ö°¡ ¾ø´Ù. ±×·¡¼­ ±âº»Àº ÀÎÁõ¸ðµå·Î Ç쵂 ºñÀÎÁõ ÆÐŶÀ» Çѹø // ´õ ³¯·ÁÁÖ´Â ½ÄÀ¸·Î ó¸®ÇÑ´Ù.(TCPÁ¢¼ÓÀÌ ¾ÈµÇ´Â °æ¿ì¿¡¸¸ Àû¿ë) - cjy, 08_0107 15:08 BOOL bUnknown = FALSE; if(strlen(theApp.m_info.FirmwareVersion) == 0) { bUnknown = TRUE; } if(AfxMessageBox(Message, MB_ICONEXCLAMATION | MB_OKCANCEL) == 1) { for(int login = 0; login <= 3; ++login) { // kernel version check char id[1024] = {0,}; char pw_hash[16] = {0,}; char out_mac[1024]; // firmware¹öÁ¯À» ±âÁØÀ¸·Î ·Î±×ÀÎÀÌ ÇÊ¿äÇÑÁö ¿©ºÎ¸¦ ÆÇ´ÜÇÏ°í, // ÇÊ¿äÇÑ °æ¿ì id¿Í md5(md5(id+pw)+mac)°ªÀ» ¾ò¾î¿É´Ï´Ù. - cjy, 07_1203 16:21 int hr = proc_login(theApp.m_info.FirmwareVersion, theApp.m_info.MAC, theApp.GetSelectDeviceName(), theApp.m_info.sIp, id, pw_hash, out_mac); if(hr <= 0) { // cancel return; } // ip setting //if(!CtrlDevice(theApp.cinfo[theApp.m_iListNum[theApp.m_iNowDevice]].sIp, 0x10, ip, strlen((char *)ip))) hr = CtrlDeviceEx(theApp.m_info.sIp, id, pw_hash, 0x10, ip, strlen((char *)ip)); if(bUnknown) { hr = CtrlDeviceEx(theApp.m_info.sIp, NULL, NULL, 0x10, ip, strlen((char *)ip)); } if(hr <= 0) { // login °ü·Ã ¿À·ù´Â ´Ù½Ã ½ÃµµÇÕ´Ï´Ù. // -1041: broken packet received // -1042: access level lowwer than request operation // -1043: not match pw // -1061: not exists user id // -167: it's need login process switch(hr) { case -1042: // access level error AfxMessageBox(MSG_LOGIN_ACCESS_LEVEL); theApp.clear_login_info(); continue; case -1043: // not match pw AfxMessageBox(MSG_LOGIN_NOT_MATCH_PW); theApp.clear_login_info(); continue; case -1061: // not exists user id AfxMessageBox(MSG_LOGIN_NOT_EXISTS_USER); theApp.clear_login_info(); continue; } //AfxMessageBox("Failed to change Ip Address", MB_ICONEXCLAMATION); CString msg; msg.Format("Failed to change Network configuration with error[%d]", hr); AfxMessageBox(msg, MB_ICONEXCLAMATION); return; } // subnet, gateway, dns setting CtrlDeviceEx(theApp.m_info.sIp, id, pw_hash, 0x11, sub, strlen((char *)sub)); CtrlDeviceEx(theApp.m_info.sIp, id, pw_hash, 0x12, gate, strlen((char *)gate)); CtrlDeviceEx(theApp.m_info.sIp, id, pw_hash, 0x13, dns, strlen((char *)dns)); // send change command, if device support to change dhcp mode if(dhcp[0] != 0) { CtrlDeviceEx(theApp.m_info.sIp, id, pw_hash, 0x14, dhcp, strlen((char *)dhcp)); // dhcp? - cjy, 07_0409 11:23 } if(bUnknown) { CtrlDeviceEx(theApp.m_info.sIp, NULL, NULL, 0x11, sub, strlen((char *)sub)); CtrlDeviceEx(theApp.m_info.sIp, NULL, NULL, 0x12, gate, strlen((char *)gate)); CtrlDeviceEx(theApp.m_info.sIp, NULL, NULL, 0x13, dns, strlen((char *)dns)); if(dhcp[0] != 0) { CtrlDeviceEx(theApp.m_info.sIp, NULL, NULL, 0x14, dhcp, strlen((char *)dhcp)); // dhcp? - cjy, 07_0409 11:23 } } //CtrlDeviceEx(theApp.m_info.sIp, id, pw_hash, // 0x30, nick, strlen((char *)nick)); //if(AfxMessageBox("You need to press ¡°OK¡± for restarting NVE/IPC series to apply new configuration, otherwise press ¡°cancel¡±", MB_ICONEXCLAMATION|MB_OKCANCEL)==1) //if(AfxMessageBox("Press OK to restart NVE/IPC series, press Cancel to abort.\nNew configuration will take effect upon system reboot.", MB_ICONEXCLAMATION|MB_OKCANCEL)==1) if(AfxMessageBox("Press OK to restart the device, press Cancel to abort.\nNew configuration will take effect upon system reboot.", MB_ICONEXCLAMATION|MB_OKCANCEL)==1) { Sleep(2); CtrlDeviceEx(theApp.m_info.sIp, id, pw_hash, 1, ip, 5); if(bUnknown) { CtrlDeviceEx(theApp.m_info.sIp, NULL, NULL, 1, ip, 5); } } OnOK(); // success break; } } } void CIPSetUp::InitDhcp() { if(theApp.m_info.dhcp == 0) { // ¿¾³¯ Àåºñ // °ËÃâÀÌ ¾ÈµÇ´Â °æ¿ìµµ mdns·Î static, dhcpº¯°æÀ» ÇÒ¼ö ÀÖµµ·Ï // ¸ð¸£´Â °æ¿ì´Â staticÀ» ±âº» »óÅ·ΠÇÑ´Ù. - cjy, 08_0702 13:00 //AfxMessageBox("don't know internet mode of this device"); //GetDlgItem(IDC_RADIO_DHCP)->EnableWindow(FALSE); //GetDlgItem(IDC_RADIO_STATIC)->EnableWindow(FALSE); CheckRadioButton(IDC_RADIO_DHCP, IDC_RADIO_STATIC, IDC_RADIO_STATIC); } else { if(theApp.m_info.dhcp == 'y') { CheckRadioButton(IDC_RADIO_DHCP, IDC_RADIO_STATIC, IDC_RADIO_DHCP); } else { CheckRadioButton(IDC_RADIO_DHCP, IDC_RADIO_STATIC, IDC_RADIO_STATIC); } } } /* // move to util.c - cjy, 07_0529 11:41 void int_ip_address(char* ip, int* i1, int* i2, int* i3, int* i4) { *i1 = 0; *i2 = 0; *i3 = 0; *i4 = 0; int len = strlen(ip); if(len < 10) return; int cnt = 0; int scnt = 0; char temp[4]; memset(temp, 0x00, sizeof(temp)); int ipn[5]; // bug~ - cjy, 07_0503 12:59 for(int i = 0; i < len; i++) { if(ip[i] == '.') { ipn[cnt++] = atoi(temp); memset(temp, 0x00, sizeof(temp)); scnt = 0; } else { temp[scnt++] = ip[i]; } } ipn[cnt++] = atoi(temp); *i1 = ipn[0]; *i2 = ipn[1]; *i3 = ipn[2]; *i4 = ipn[3]; } */ void CIPSetUp::InitIp() { int i1,i2,i3,i4; parse_ip(theApp.m_info.sIp, &i1, &i2, &i3, &i4); m_ctrlIp.SetAddress(i1, i2, i3, i4); } void CIPSetUp::InitGate() { int i1,i2,i3,i4; parse_ip(theApp.m_info.Gate, &i1, &i2, &i3, &i4); // default value - cjy, 08_0125 15:53 if(i1 == 0 && i2 == 0 && i3 == 0 && i4 == 0) { i1 = 192; i2 = 168; i3 = 0; i4 = 1; } m_ctrlGate.SetAddress(i1, i2, i3, i4); } void CIPSetUp::InitSub() { int i1,i2,i3,i4; parse_ip(theApp.m_info.Subnet, &i1, &i2, &i3, &i4); // default value - cjy, 08_0125 15:53 if(i1 == 0 && i2 == 0 && i3 == 0 && i4 == 0) { i1 = 255; i2 = 255; i3 = 0; i4 = 0; } m_ctrlSub.SetAddress(i1, i2, i3, i4); } void CIPSetUp::InitDns() { int i1,i2,i3,i4; parse_ip(theApp.m_info.Dns, &i1, &i2, &i3, &i4); m_ctrlDns.SetAddress(i1, i2, i3, i4); } void CIPSetUp::refresh_network_info(int index) { CString temp; temp.Format( "Client Network Information\n" "Adapter Info:\t%s\n" "Adapter Name:\t%s\n" "MAC Address:\t%s\n" "IP Address:\t%s\n" "Subnet Mask:\t%s\n" "Gateway:\t%s\n" "DNS:\t\t%s", m_info[index].Desc, m_info[index].Name, m_info[index].MAC, m_info[index].Ip, m_info[index].Subnet, m_info[index].Gate, m_info[index].Dns); sprintf(m_sSubmask, "%s", m_info[index].Subnet); m_stMyinfo.SetWindowText(temp); // GetDlgItem(IDC_STATIC_MYINFOR)->SetWindowText(temp); } void CIPSetUp::InitNickName() { m_sNickName = theApp.m_info.NickName; UpdateData(FALSE); } void CIPSetUp::OnRadioStatic() { // TODO: Add your control notification handler code here // enable ip setting control GetDlgItem(IDC_IPADDRESS_IP)->EnableWindow(true); GetDlgItem(IDC_IPADDRESS_SUB)->EnableWindow(true); GetDlgItem(IDC_IPADDRESS_GATE)->EnableWindow(true); GetDlgItem(IDC_IPADDRESS_DNS)->EnableWindow(true); } void CIPSetUp::OnRadioDhcp() { // TODO: Add your control notification handler code here // disable ip setting control GetDlgItem(IDC_IPADDRESS_IP)->EnableWindow(false); GetDlgItem(IDC_IPADDRESS_SUB)->EnableWindow(false); GetDlgItem(IDC_IPADDRESS_GATE)->EnableWindow(false); GetDlgItem(IDC_IPADDRESS_DNS)->EnableWindow(false); } void CIPSetUp::OnSelchangeTabNetwork(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here //this->PostMessage(WM_PAINT); m_tabNetwork.Invalidate(FALSE); int index = m_tabNetwork.GetCurSel(); refresh_network_info(index); m_stMyinfo.Invalidate(FALSE); *pResult = 0; }