// BillingTestModuleDlg.cpp : ±¸Çö ÆÄÀÏ // #include "stdafx.h" #include "BillingTestModule.h" #include "BillingTestModuleDlg.h" #include ".\billingtestmoduledlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif #include #include // ÀÀ¿ë ÇÁ·Î±×·¥ Á¤º¸¿¡ »ç¿ëµÇ´Â CAboutDlg ´ëÈ­ »óÀÚÀÔ´Ï´Ù. class CAboutDlg : public CDialog { public: CAboutDlg(); // ´ëÈ­ »óÀÚ µ¥ÀÌÅÍ enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿ø // ±¸Çö protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // CBillingTestModuleDlg ´ëÈ­ »óÀÚ const int ID_PROCESS_PACKET_TIMER = 1000; CBillingTestModuleDlg::CBillingTestModuleDlg(CWnd* pParent /*=NULL*/) : CDialog(CBillingTestModuleDlg::IDD, pParent) , m_LoginAckDelay(0) , m_BillAuthAckDelay(0) , m_nSocketNum(0) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CBillingTestModuleDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_CURRENT_USER_LIST, m_ctrlCurrentUserList); DDX_Control(pDX, IDC_LOGIN_IP_LIST, m_ctrlLoginIPList); DDX_Control(pDX, IDC_IP_START, m_StartIP); DDX_Control(pDX, IDC_IP_END, m_EndIP); DDX_Control(pDX, IDC_LOGIN_ACK_TYPE, m_LoginAckType); DDX_Control(pDX, IDC_BILL_AUTH_ACK_TYPE, m_BillAuthAckType); DDX_Text(pDX, IDC_LOGIN_ACK_DELAY, m_LoginAckDelay); DDX_Text(pDX, IDC_BILL_AUTH_ACK_DELAY, m_BillAuthAckDelay); DDX_Control(pDX, IDC_LOG_LIST, m_BillingLog); DDX_Control(pDX, IDC_LOGIN_ACK_DELAY, m_LoginAckDelayDlg); DDX_Control(pDX, IDC_BILL_AUTH_ACK_DELAY, m_BillAuthAckDelayDlg); } BEGIN_MESSAGE_MAP(CBillingTestModuleDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_WM_CONTEXTMENU() ON_COMMAND(ID_DISCONNECT_USER, OnDisconnectUser) ON_COMMAND(ID_SEND_MSG_USER, OnSendMsgUser) ON_COMMAND(ID_IP_DELETE, OnIpDelete) ON_BN_CLICKED(IDC_IP_ADD, OnBnClickedIPAdd) ON_BN_CLICKED(IDC_SAVELOG, OnBnClickedSaveLog) ON_BN_CLICKED(IDC_CLEARLOG, OnBnClickedClearLog) ON_WM_TIMER() ON_WM_DESTROY() ON_CBN_SELCHANGE(IDC_LOGIN_ACK_TYPE, OnCbnSelchangeLoginAckType) ON_CBN_SELCHANGE(IDC_BILL_AUTH_ACK_TYPE, OnCbnSelchangeBillAuthAckType) END_MESSAGE_MAP() // CBillingTestModuleDlg ¸Þ½ÃÁö 󸮱â BOOL CBillingTestModuleDlg::OnInitDialog() { CDialog::OnInitDialog(); // ½Ã½ºÅÛ ¸Þ´º¿¡ "Á¤º¸..." ¸Þ´º Ç׸ñÀ» Ãß°¡ÇÕ´Ï´Ù. // IDM_ABOUTBOX´Â ½Ã½ºÅÛ ¸í·É ¹üÀ§¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); 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); } } // ÀÌ ´ëÈ­ »óÀÚÀÇ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ Ã¢ÀÌ ´ëÈ­ »óÀÚ°¡ ¾Æ´Ò °æ¿ì¿¡´Â // ÇÁ·¹ÀÓ¿öÅ©°¡ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù. SetIcon(m_hIcon, TRUE); // Å« ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. SetIcon(m_hIcon, FALSE); // ÀÛÀº ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. // TODO: ¿©±â¿¡ Ãß°¡ ÃʱâÈ­ ÀÛ¾÷À» Ãß°¡ÇÕ´Ï´Ù. m_ctrlCurrentUserList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB); m_ctrlCurrentUserList.InsertColumn( 0, "ID", LVCFMT_LEFT, 200); m_ctrlCurrentUserList.InsertColumn( 1, "Á¢¼ÓÁßÀÎ IP", LVCFMT_LEFT, 200); m_ctrlLoginIPList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB); m_ctrlLoginIPList.InsertColumn( 0, "IP ´ë¿ª ½ÃÀÛ", LVCFMT_LEFT, 200); m_ctrlLoginIPList.InsertColumn( 1, "IP ´ë¿ª ³¡", LVCFMT_LEFT, 200); m_BillingLog.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB); m_BillingLog.InsertColumn(0, "·Î±×", LVCFMT_LEFT, 500); LoadAddress(); m_LoginAckType.InsertString(NORMAL_PROCESS, "±âº» ó¸®"); m_LoginAckType.InsertString(SUCCESS_ALL_PROCESS, "¸ðµÎ ¼º°ø"); m_LoginAckType.InsertString(FAIL_ALL_PROCESS, "¸ðµÎ ½ÇÆÐ"); m_LoginAckType.InsertString(DELAY_ALL_PROCESS, "Áö¿¬ ó¸®"); m_LoginAckType.InsertString(DROP_ALL_PROCESS, "¿äû ¹ö¸²"); m_LoginAckType.SetCurSel(NORMAL_PROCESS); m_LoginAckDelayDlg.SetReadOnly(); m_BillAuthAckType.InsertString(NORMAL_PROCESS, "±âº» ó¸®"); m_BillAuthAckType.InsertString(SUCCESS_ALL_PROCESS, "¸ðµÎ ¼º°ø"); m_BillAuthAckType.InsertString(FAIL_ALL_PROCESS, "¸ðµÎ ½ÇÆÐ"); m_BillAuthAckType.InsertString(DELAY_ALL_PROCESS, "Áö¿¬ ó¸®"); m_BillAuthAckType.InsertString(DROP_ALL_PROCESS, "¿äû ¹ö¸²"); m_BillAuthAckType.SetCurSel(NORMAL_PROCESS); m_BillAuthAckDelayDlg.SetReadOnly(); m_LoginAckDelay = 0; m_BillAuthAckDelay = 0; CString windowName; windowName.Format("BillingTestModule : Port(%u)", CBillingTestModuleApp::LISTEN_PORT); SetWindowText(windowName); UpdateData(false); theApp.SetMainDlg(*this); SetTimer(ID_PROCESS_PACKET_TIMER, 200, 0); return TRUE; // ÄÁÆ®·Ñ¿¡ ´ëÇÑ Æ÷Ä¿½º¸¦ ¼³Á¤ÇÏÁö ¾ÊÀ» °æ¿ì TRUE¸¦ ¹ÝȯÇÕ´Ï´Ù. } void CBillingTestModuleDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // ´ëÈ­ »óÀÚ¿¡ ÃÖ¼ÒÈ­ ´ÜÃ߸¦ Ãß°¡ÇÒ °æ¿ì ¾ÆÀÌÄÜÀ» ±×¸®·Á¸é // ¾Æ·¡ Äڵ尡 ÇÊ¿äÇÕ´Ï´Ù. ¹®¼­/ºä ¸ðµ¨À» »ç¿ëÇÏ´Â MFC ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â // ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù. void CBillingTestModuleDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // ±×¸®±â¸¦ À§ÇÑ µð¹ÙÀ̽º ÄÁÅØ½ºÆ® SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // Ŭ¶óÀÌ¾ðÆ® »ç°¢Çü¿¡¼­ ¾ÆÀÌÄÜÀ» °¡¿îµ¥¿¡ ¸ÂÃä´Ï´Ù. 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; // ¾ÆÀÌÄÜÀ» ±×¸³´Ï´Ù. dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // »ç¿ëÀÚ°¡ ÃÖ¼ÒÈ­µÈ âÀ» ²ô´Â µ¿¾È¿¡ Ä¿¼­°¡ Ç¥½ÃµÇµµ·Ï ½Ã½ºÅÛ¿¡¼­ // ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. HCURSOR CBillingTestModuleDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } void CBillingTestModuleDlg::OnContextMenu(CWnd* pWnd, CPoint point) { if( (pWnd->GetSafeHwnd() == m_ctrlCurrentUserList.GetSafeHwnd()) && (0 < m_ctrlCurrentUserList.GetSelectedCount()) ) { CMenu muTemp, *pContextMenu; muTemp.LoadMenu(IDR_CONTEXT_MENU); pContextMenu = muTemp.GetSubMenu(0); pContextMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); } else if( (pWnd->GetSafeHwnd() == m_ctrlLoginIPList.GetSafeHwnd()) && (0 < m_ctrlLoginIPList.GetSelectedCount()) ) { CMenu muTemp, *pContextMenu; muTemp.LoadMenu(IDR_CONTEXT_MENU); pContextMenu = muTemp.GetSubMenu(1); pContextMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); } } void CBillingTestModuleDlg::OnOK() { //CDialog::OnOK(); } BOOL CBillingTestModuleDlg::PreTranslateMessage(MSG* pMsg) { if( ( WM_KEYDOWN == pMsg->message ) && ( VK_RETURN == pMsg->wParam ) ) { if( (GetFocus() == GetDlgItem(IDC_IP_END)->GetFocus()) ) { // ¿©±â¼­ IP Ãß°¡ } } return CDialog::PreTranslateMessage(pMsg); } void CBillingTestModuleDlg::OnDisconnectUser() { // °­Á¦·Î Á¢¼Ó²÷±â POSITION pos = m_ctrlCurrentUserList.GetFirstSelectedItemPosition(); int nPos = m_ctrlCurrentUserList.GetNextSelectedItem(pos); int nLength = 0; while(-1 != nPos) { HanUnitedBilling::GLTransStruct glTransStruct; memset(&glTransStruct, 0, sizeof(HanUnitedBilling::GLTransStruct)); nLength = m_ctrlCurrentUserList.GetItemText(nPos, 1, glTransStruct.Data, HanUnitedBilling::MAX_IP_LEN); glTransStruct.Data[nLength] = 0; nLength = m_ctrlCurrentUserList.GetItemText(nPos, 0, glTransStruct.Data + HanUnitedBilling::MAX_IP_LEN, HanUnitedBilling::MAX_ID_LEN); glTransStruct.Data[nLength + HanUnitedBilling::MAX_IP_LEN] = 0; glTransStruct.HeaderMsg = htons(HanUnitedBilling::CUT_IP); glTransStruct.DataSize = htons( HanUnitedBilling::MAX_ID_LEN + HanUnitedBilling::MAX_IP_LEN); glTransStruct.SeqID = 0; theApp.SendPendingAll(glTransStruct); nPos = m_ctrlLoginIPList.GetNextSelectedItem(pos); } } void CBillingTestModuleDlg::OnSendMsgUser() { // À¯Àú¿¡°Ô ¸Þ¼¼Áö º¸³»±â // °­Á¦·Î Á¢¼Ó²÷±â POSITION pos = m_ctrlCurrentUserList.GetFirstSelectedItemPosition(); int nPos = m_ctrlCurrentUserList.GetNextSelectedItem(pos); int nLength = 0; while(-1 != nPos) { HanUnitedBilling::GLTransStruct glTransStruct; memset(&glTransStruct, 0, sizeof(HanUnitedBilling::GLTransStruct)); nLength = m_ctrlCurrentUserList.GetItemText(nPos, 1, glTransStruct.Data, HanUnitedBilling::MAX_IP_LEN); glTransStruct.Data[nLength] = 0; nLength = m_ctrlCurrentUserList.GetItemText(nPos, 0, glTransStruct.Data + HanUnitedBilling::MAX_IP_LEN, HanUnitedBilling::MAX_ID_LEN); glTransStruct.Data[nLength + HanUnitedBilling::MAX_IP_LEN] = 0; nLength = _sntprintf(glTransStruct.Data + HanUnitedBilling::MAX_IP_LEN + HanUnitedBilling::MAX_ID_LEN, HanUnitedBilling::MAX_MSG_LEN - 1, "ÀÌ °¡³­¹ðÀÌ ³à¼®, µ·À» Á¦¶§ ³ÖÀ¸¶õ ¸»ÀÌ´Ù. ¿ìÇÏÇÏÇÏ"); glTransStruct.Data[nLength + HanUnitedBilling::MAX_IP_LEN + HanUnitedBilling::MAX_ID_LEN] = 0; glTransStruct.HeaderMsg = htons(HanUnitedBilling::WARNNOTICE); glTransStruct.DataSize = htons( HanUnitedBilling::MAX_ID_LEN + HanUnitedBilling::MAX_IP_LEN + HanUnitedBilling::MAX_MSG_LEN); glTransStruct.SeqID = 0; theApp.SendPendingAll(glTransStruct); nPos = m_ctrlLoginIPList.GetNextSelectedItem(pos); } } void CBillingTestModuleDlg::OnIpDelete() { // IP ´ë¿ª »èÁ¦ POSITION pos = m_ctrlLoginIPList.GetFirstSelectedItemPosition(); std::vector deletePos; int nPos = m_ctrlLoginIPList.GetNextSelectedItem(pos); while(-1 != nPos) { deletePos.push_back(nPos); nPos = m_ctrlLoginIPList.GetNextSelectedItem(pos); } std::sort(deletePos.begin(), deletePos.end(), std::greater()); std::vector::iterator pos_delete = deletePos.begin(); std::vector::iterator end_delete = deletePos.end(); for(; pos_delete != end_delete; ++pos_delete) { m_ctrlLoginIPList.DeleteItem(*pos_delete); } SaveAddress(); } void CBillingTestModuleDlg::OnBnClickedIPAdd() { // IP ´ë¿ª Ãß°¡ if(!m_StartIP.IsBlank() && !m_EndIP.IsBlank()) { DWORD dwStartAddress = 0; DWORD dwEndAddress = 0; m_StartIP.GetAddress(dwStartAddress); m_EndIP.GetAddress(dwEndAddress); std::pair addressPair; addressPair.first.S_un.S_addr = htonl(dwStartAddress); addressPair.second.S_un.S_addr = htonl(dwEndAddress); AddAddress(addressPair.first, addressPair.second); SaveAddress(); } } void CBillingTestModuleDlg::AddAddress(in_addr addressStart, in_addr addressEnd) { int nMaxCount = m_ctrlLoginIPList.GetItemCount(); m_ctrlLoginIPList.InsertItem(nMaxCount, 0); m_ctrlLoginIPList.SetItemText(nMaxCount, 0, inet_ntoa(addressStart)); m_ctrlLoginIPList.SetItemText(nMaxCount, 1, inet_ntoa(addressEnd)); } const TCHAR* g_szBillingAddress = "BillingAddress.txt"; void CBillingTestModuleDlg::SaveAddress() { FILE* file = fopen(g_szBillingAddress, "wt"); if(0 != file) { int nMaxCount = m_ctrlLoginIPList.GetItemCount(); for(int nCount = 0; nCount < nMaxCount; ++nCount) { fprintf(file, "%s\t%s\n", m_ctrlLoginIPList.GetItemText(nCount, 0), m_ctrlLoginIPList.GetItemText(nCount, 1)); } fclose(file); } } void CBillingTestModuleDlg::LoadAddress() { FILE* file = fopen(g_szBillingAddress, "rt"); if(0 != file) { const int MAX_BUFFER = 4096; char szBuffer[MAX_BUFFER]; char szIPStart[MAX_BUFFER]; char szIPEnd[MAX_BUFFER]; in_addr addrStart; in_addr addrEnd; while(fgets(szBuffer, MAX_BUFFER - 1, file)) { szBuffer[MAX_BUFFER - 1] = 0; if(EOF != sscanf(szBuffer, "%s\t%s\n", szIPStart, szIPEnd)) { addrStart.S_un.S_addr = inet_addr(szIPStart); addrEnd.S_un.S_addr = inet_addr(szIPEnd); AddAddress(addrStart, addrEnd); } } } } void CBillingTestModuleDlg::OnBnClickedSaveLog() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. const int MAX_LOG_LINE = 4096; TCHAR szLogText[MAX_LOG_LINE]; const char* szLogFileName = "HanUnitedBillingLog.log"; FILE* file = fopen(szLogFileName, "at"); if(0 != file) { int nMAXCount = m_BillingLog.GetItemCount(); for(int nCount = 0; nCount < nMAXCount; ++nCount) { int nLength = m_BillingLog.GetItemText(nCount, 0, szLogText, MAX_LOG_LINE - 1); if(0 < nLength && nLength < MAX_LOG_LINE) { szLogText[nLength] = 0; fprintf(file, "%s\n", szLogText); } } fclose(file); } m_BillingLog.DeleteAllItems(); AfxMessageBox("·Î±×¸¦ ÀúÀåÇÏ´Â µ¥ ¼º°øÇß½À´Ï´Ù."); } void CBillingTestModuleDlg::OnBnClickedClearLog() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. m_BillingLog.DeleteAllItems(); } void CBillingTestModuleDlg::AddLog(DlgLogType eDlgLogType, const TCHAR* szFormat, ...) { const int MAX_LOG_LINE = 4096; TCHAR szLogText[MAX_LOG_LINE]; SYSTEMTIME sysTime; GetLocalTime(&sysTime); const TCHAR* szLogType = _T("UNK"); switch(eDlgLogType) { case NORMAL_LOG: szLogType = _T("NOR"); break; case ERROR_LOG: szLogType = _T("ERR"); break; } int nTotalLength = _sntprintf(szLogText, MAX_LOG_LINE - 1, _T("[%s][%04d-%02d-%02d %02d:%02d:%02d] "), szLogType, sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond); va_list arglist; va_start(arglist, szFormat); int nLength = _vsntprintf(szLogText + nTotalLength, MAX_LOG_LINE - nTotalLength - 1, szFormat, arglist); va_end(arglist); if(0 < nLength && nTotalLength + nLength < MAX_LOG_LINE) { nTotalLength += nLength; szLogText[nTotalLength] = 0; m_BillingLog.InsertItem(m_BillingLog.GetItemCount(), szLogText); } } bool CBillingTestModuleDlg::Login(CBillingAsyncSocket& billingAsyncSocket, unsigned long dwSeqID, const char* szID, const char* szIP) { HanUnitedBilling::GLTransStruct glTransStruct; memset(&glTransStruct, 0, sizeof(HanUnitedBilling::GLTransStruct)); unsigned short usSuccess = 0; switch(GetLoginAckType()) { case SUCCESS_ALL_PROCESS: usSuccess = 1; AddLog(NORMAL_LOG, "ID:%s/IP:%s/SeqID:%u/À¯Àú ·Î±×ÀΠó¸® ¹«Á¶°Ç ¼º°ø", szID, szIP, dwSeqID); break; case FAIL_ALL_PROCESS: usSuccess = 0; AddLog(NORMAL_LOG, "ID:%s/IP:%s/SeqID:%u/À¯Àú ·Î±×ÀΠó¸® ¹«Á¶°Ç ½ÇÆÐ", szID, szIP, dwSeqID); break; default: if(-1 != FindCurrentUserPos(szID, szIP)) { usSuccess = 0; AddLog(ERROR_LOG, "ID:%s/IP:%s/SeqID:%u/À¯Àú ·Î±×ÀΠó¸® ½ÇÆÐ(Áߺ¹ ·Î±×ÀÎ)", szID, szIP, dwSeqID); } else if(!CheckIPList(szIP)) { usSuccess = 0; AddLog(ERROR_LOG, "ID:%s/IP:%s/SeqID:%u/À¯Àú ·Î±×ÀΠó¸® ½ÇÆÐ(IP¸®½ºÆ®¿¡ ¾øÀ½)", szID, szIP, dwSeqID); } else { usSuccess = 1; AddLog(NORMAL_LOG, "ID:%s/IP:%s/SeqID:%u/À¯Àú ·Î±×ÀΠó¸® ¼º°ø", szID, szIP, dwSeqID); int nCount = m_ctrlCurrentUserList.GetItemCount(); m_ctrlCurrentUserList.InsertItem(nCount, ""); m_ctrlCurrentUserList.SetItemText(nCount, 0, szID); m_ctrlCurrentUserList.SetItemText(nCount, 1, szIP); } break; } glTransStruct.HeaderMsg = htons(HanUnitedBilling::AUTH_RESULT); glTransStruct.DataSize = htons( HanUnitedBilling::MAX_ID_LEN + HanUnitedBilling::MAX_IP_LEN + sizeof(unsigned short)); glTransStruct.SeqID = htonl(dwSeqID); _snprintf(glTransStruct.Data, HanUnitedBilling::MAX_IP_LEN, "%s", szIP); _snprintf(glTransStruct.Data + HanUnitedBilling::MAX_IP_LEN, HanUnitedBilling::MAX_ID_LEN, "%s", szID); usSuccess = htons(usSuccess); memcpy(glTransStruct.Data + HanUnitedBilling::MAX_IP_LEN + HanUnitedBilling::MAX_ID_LEN, &usSuccess, sizeof(unsigned short)); billingAsyncSocket.SendPending(glTransStruct); return true; } bool CBillingTestModuleDlg::Logout(CBillingAsyncSocket& billingAsyncSocket, unsigned long dwSeqID, const char* szID, const char* szIP) { int nPos = FindCurrentUserPos(szID, szIP); if(-1 != nPos) { m_ctrlCurrentUserList.DeleteItem(nPos); AddLog(NORMAL_LOG, "ID:%s/IP:%s/À¯Àú ·Î±×¾Æ¿ô ó¸® ¼º°ø", szID, szIP); return true; } AddLog(ERROR_LOG, "ID:%s/IP:%s/À¯Àú ·Î±×¾Æ¿ô ó¸® ½ÇÆÐ. À¯Àú°¡ ¾ø½À´Ï´Ù.", szID, szIP); return false; } bool CBillingTestModuleDlg::BillAuth(CBillingAsyncSocket& billingAsyncSocket, unsigned long dwSeqID, const char* szID, const char* szIP) { HanUnitedBilling::GLTransStruct glTransStruct; memset(&glTransStruct, 0, sizeof(HanUnitedBilling::GLTransStruct)); unsigned short usSuccess = 0; switch(GetLoginAckType()) { case SUCCESS_ALL_PROCESS: usSuccess = 1; AddLog(NORMAL_LOG, "ID:%s/IP:%s/SeqID:%u/À¯Àú °ú±Ý °¡´É ¿©ºÎ ¹«Á¶°Ç ¼º°ø", szID, szIP, dwSeqID); break; case FAIL_ALL_PROCESS: usSuccess = 0; AddLog(NORMAL_LOG, "ID:%s/IP:%s/SeqID:%u/À¯Àú °ú±Ý °¡´É ¿©ºÎ ¹«Á¶°Ç ½ÇÆÐ", szID, szIP, dwSeqID); break; default: if(-1 != FindCurrentUserPos(szID, szIP)) { usSuccess = 0; AddLog(ERROR_LOG, "ID:%s/IP:%s/SeqID:%u/À¯Àú °ú±Ý ºÒ°¡´É (Áߺ¹ ·Î±×ÀÎ)", szID, szIP, dwSeqID); } else if(!CheckIPList(szIP)) { usSuccess = 0; AddLog(ERROR_LOG, "ID:%s/IP:%s/SeqID:%u/À¯Àú °ú±Ý ºÒ°¡´É (°ú±Ý ³»¿ª ¾øÀ½)", szID, szIP, dwSeqID); } else { usSuccess = 1; AddLog(NORMAL_LOG, "ID:%s/IP:%s/SeqID:%u/À¯Àú °ú±Ý °¡´É", szID, szIP, dwSeqID); } break; } glTransStruct.HeaderMsg = htons(HanUnitedBilling::BILL_AUTH_RESULT); glTransStruct.DataSize = htons( HanUnitedBilling::MAX_ID_LEN + HanUnitedBilling::MAX_IP_LEN + sizeof(unsigned short)); glTransStruct.SeqID = htonl(dwSeqID); _snprintf(glTransStruct.Data, HanUnitedBilling::MAX_IP_LEN, "%s", szIP); _snprintf(glTransStruct.Data + HanUnitedBilling::MAX_IP_LEN, HanUnitedBilling::MAX_ID_LEN, "%s", szID); usSuccess = htons(usSuccess); memcpy(glTransStruct.Data + HanUnitedBilling::MAX_IP_LEN + HanUnitedBilling::MAX_ID_LEN, &usSuccess, sizeof(unsigned short)); billingAsyncSocket.SendPending(glTransStruct); return true; } int CBillingTestModuleDlg::FindCurrentUserPos(const char* szID, const char* szIP) { int nMaxCount = m_ctrlCurrentUserList.GetItemCount(); TCHAR szUserID[HanUnitedBilling::MAX_ID_LEN + 1]; TCHAR szUserIP[HanUnitedBilling::MAX_IP_LEN + 1]; int nLength = 0; for(int nCount = 0; nCount < nMaxCount; ++nCount) { nLength = m_ctrlCurrentUserList.GetItemText(nCount, 0, szUserID, HanUnitedBilling::MAX_ID_LEN); szUserID[nLength] = 0; nLength = m_ctrlCurrentUserList.GetItemText(nCount, 1, szUserIP, HanUnitedBilling::MAX_IP_LEN); szUserIP[nLength] = 0; if(0 == _tcsncmp(szID, szUserID, HanUnitedBilling::MAX_ID_LEN) && 0 == _tcsncmp(szIP, szUserIP, HanUnitedBilling::MAX_IP_LEN)) { return nCount; } } return -1; } bool CBillingTestModuleDlg::CheckIPList(const char* szIP) { in_addr address; address.S_un.S_addr = inet_addr(szIP); char szIPStart[HanUnitedBilling::MAX_IP_LEN + 1]; char szIPEnd[HanUnitedBilling::MAX_IP_LEN + 1]; in_addr addr_start; in_addr addr_end; int nLength = 0; int nMaxCount = m_ctrlLoginIPList.GetItemCount(); for(int nCount = 0; nCount < nMaxCount; ++nCount) { nLength = m_ctrlLoginIPList.GetItemText(nCount, 0, szIPStart, HanUnitedBilling::MAX_IP_LEN); szIPStart[nLength] = 0; nLength = m_ctrlLoginIPList.GetItemText(nCount, 1, szIPEnd, HanUnitedBilling::MAX_IP_LEN); szIPEnd[nLength] = 0; addr_start.S_un.S_addr = inet_addr(szIPStart); addr_end.S_un.S_addr = inet_addr(szIPEnd); if(addr_start.S_un.S_un_b.s_b1 <= address.S_un.S_un_b.s_b1 && address.S_un.S_un_b.s_b1 <= addr_end.S_un.S_un_b.s_b1 && addr_start.S_un.S_un_b.s_b2 <= address.S_un.S_un_b.s_b2 && address.S_un.S_un_b.s_b2 <= addr_end.S_un.S_un_b.s_b2 && addr_start.S_un.S_un_b.s_b3 <= address.S_un.S_un_b.s_b3 && address.S_un.S_un_b.s_b3 <= addr_end.S_un.S_un_b.s_b3 && addr_start.S_un.S_un_b.s_b3 <= address.S_un.S_un_b.s_b3 && address.S_un.S_un_b.s_b3 <= addr_end.S_un.S_un_b.s_b3) { return true; } } return false; } void CBillingTestModuleDlg::OnTimer(UINT nIDEvent) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. if(nIDEvent == ID_PROCESS_PACKET_TIMER) { theApp.ProcessPacket(); size_t nSocketNum = theApp.GetConnectedSocketNum(); if(m_nSocketNum != nSocketNum) { CString windowName; windowName.Format("BillingTestModule : Port(%u) - %d Connection now.", CBillingTestModuleApp::LISTEN_PORT, nSocketNum); SetWindowText(windowName); m_nSocketNum = nSocketNum; } } CDialog::OnTimer(nIDEvent); } void CBillingTestModuleDlg::OnDestroy() { CDialog::OnDestroy(); // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. KillTimer(ID_PROCESS_PACKET_TIMER); theApp.ResetMainDlg(*this); } void CBillingTestModuleDlg::OnCbnSelchangeLoginAckType() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if(DELAY_ALL_PROCESS != GetLoginAckType()) { m_LoginAckDelayDlg.SetReadOnly(); } else { m_LoginAckDelayDlg.SetReadOnly(false); } } void CBillingTestModuleDlg::OnCbnSelchangeBillAuthAckType() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if(DELAY_ALL_PROCESS != GetBillAuthAckType()) { m_BillAuthAckDelayDlg.SetReadOnly(); } else { m_BillAuthAckDelayDlg.SetReadOnly(false); } }