// NoticeTrans.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include "ConsoleTransfer.h" #include "NoticeTrans.h" #include ".\noticetrans.h" #include "../CommLib/CommLib.h" // CNoticeTrans ´ëÈ­ »óÀÚÀÔ´Ï´Ù. IMPLEMENT_DYNAMIC(CNoticeTrans, CDialog) CNoticeTrans::CNoticeTrans(CWnd* pParent /*=NULL*/) : CDialog(CNoticeTrans::IDD, pParent) { } CNoticeTrans::CNoticeTrans(PTRANPARAM_STRUCT ptp, CString szTargetPath , CWnd* pParent /*=NULL*/ ) : CDialog(CNoticeTrans::IDD, pParent) { m_szTargetPath = szTargetPath; m_NoticeLastFileTrans = false; // m_szTargetPath.Replace("'", "\'"); m_ptp = ptp; } CNoticeTrans::CNoticeTrans(PTRANPARAM_STRUCT ptp, int nNoticeLastFileTrans , CWnd* pParent /*=NULL*/ ) : CDialog(CNoticeTrans::IDD, pParent) { m_szTargetPath = ""; m_NoticeLastFileTrans = true; m_ptp = ptp; } CNoticeTrans::~CNoticeTrans() { delete m_ptp; } void CNoticeTrans::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_PROGRESS1, m_NoticeProgress); DDX_Control(pDX, IDC_NOTICE_MSGBOX, m_NoticeText); } BEGIN_MESSAGE_MAP(CNoticeTrans, CDialog) ON_MESSAGE(WMU_NOTICE_TRANS, OnNoticeTrans) ON_MESSAGE(WMU_NOTICE_LAST_FILE_TRANS, OnNoticeLastFileTrans) ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel) // ON_STN_CLICKED(IDC_NOTICE_MSGBOX, OnStnClickedNoticeMsgbox) END_MESSAGE_MAP() // CNoticeTrans ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. void CNoticeTrans::NoticeTrans(void) { tsvc_req_header_t tsvc_req_header; tsvc_auth_info_t auth_req_body; tsvc_dn_req_body_t dn_req_body; tsvc_rsp_header_t *tsvc_rsp_header_ptr; char recv_buffer[8196]; int result_code; CString ip; CString this_guid; SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock == INVALID_SOCKET) { SetNoticeStep(101); goto EXIT_FUNCTION; } SetNoticeStep(100); bool bRet = false; DWORD dwWritten; char s[1024]; sockaddr_in sa; sa.sin_family = AF_INET; ip = m_sutil.get_first_rcts(m_ptp->szRCTSAddress); if (ip.GetLength()>0) sa.sin_addr.s_addr = m_sutil.conv_addr(ip.GetString()); else goto EXIT_FUNCTION; //sa.sin_addr.s_addr = conv_addr("222.122.181.9"); sa.sin_port = htons(RCTS_NOTICE_PORT); /* int nNonBlocking = 1; ioctlsocket(sock, FIONBIO, (u_long FAR*)&nNonBlocking); */ connect(sock, (SOCKADDR*)&sa, sizeof(sa)); tsvc_req_header.op_num_w = ::htons(OP_NUM_AUTH); tsvc_req_header.op_seq_w = ::htons(OP_SEQ_REQ); ::sprintf(auth_req_body.ua_str, m_ptp->szUserId); ::sprintf(auth_req_body.up_str, m_ptp->szPassword); m_sutil._sh_send(sock, (char*)&tsvc_req_header, sizeof(tsvc_req_header)); m_sutil._sh_send(sock, (char*)&auth_req_body, sizeof(auth_req_body)); memset(recv_buffer , 0x00 , sizeof(recv_buffer)); if (m_sutil._rtxTimer(5 , sock) < 0) goto EXIT_FUNCTION; m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(recv_buffer)); tsvc_rsp_header_ptr = reinterpret_cast(&recv_buffer); result_code = ntohs(tsvc_rsp_header_ptr->op_result_code_w); // ÀÎÁõ if (RSP_CODE_AUTH_SUCCESS==result_code) { SetNoticeStep(200); } else { SetNoticeStep(201); goto EXIT_FUNCTION; } tsvc_req_header.op_num_w = ::htons(OP_NUM_DN); tsvc_req_header.op_seq_w = ::htons(OP_SEQ_REQ); memset(&dn_req_body , 0x00 , sizeof(dn_req_body)); dn_req_body.op_mode_w = htons(OP_DN_MODE_REQ); ::sprintf(dn_req_body.uri_str ,"%s", m_szTargetPath); ::strncpy(dn_req_body.sp_tid_str , m_ptp->szTransGuid , MAX_SIZE_OF_SP_TID-1); m_sutil._sh_send(sock,(char *)&tsvc_req_header, sizeof(tsvc_req_header)); m_sutil._sh_send(sock,(char *)&dn_req_body, sizeof(tsvc_dn_req_body_t)); SetNoticeStep(300); memset(recv_buffer , 0x00 , sizeof(recv_buffer)); if (m_sutil._rtxTimer(5 , sock) < 0) goto EXIT_FUNCTION; m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(recv_buffer)); tsvc_rsp_header_ptr = reinterpret_cast(&recv_buffer); result_code = ntohs(tsvc_rsp_header_ptr->op_result_code_w); int result_opn = ntohs(tsvc_rsp_header_ptr->op_num_w); //¹èÆ÷ if (RSP_CODE_DIST_SUCCESS==result_code) { SetNoticeStep(400); } else { SetNoticeStep(401); goto EXIT_FUNCTION; } EXIT_FUNCTION: if (sock != INVALID_SOCKET) closesocket(sock); PostMessage(WM_CLOSE); } void CNoticeTrans::LastFileTransComplete() { tsvc_req_header_t tsvc_req_header; tsvc_auth_info_t auth_req_body; tsvc_dn_req_body_t dn_req_body; tsvc_ddc_req_body_t dnc_req_body; tsvc_rsp_header_t *tsvc_rsp_header_ptr; char recv_buffer[8196]; int result_code; CString ip; CString this_guid; SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock == INVALID_SOCKET) { SetNoticeStep(103); goto EXIT_FUNCTION; } SetNoticeStep(102); bool bRet = false; DWORD dwWritten; char s[1024]; sockaddr_in sa; sa.sin_family = AF_INET; ip = m_sutil.get_first_rcts(m_ptp->szRCTSAddress); if (ip.GetLength()>0) sa.sin_addr.s_addr = m_sutil.conv_addr(ip.GetString()); else goto EXIT_FUNCTION; sa.sin_port = htons(RCTS_NOTICE_PORT); connect(sock, (SOCKADDR*)&sa, sizeof(sa)); ////////////////////////////////////////////////////////////////////////////////// // ÀÎÁõ ////////////////////////////////////////////////////////////////////////////////// tsvc_req_header.op_num_w = ::htons(OP_NUM_AUTH); tsvc_req_header.op_seq_w = ::htons(OP_SEQ_REQ); ::sprintf(auth_req_body.ua_str, m_ptp->szUserId); ::sprintf(auth_req_body.up_str, m_ptp->szPassword); m_sutil._sh_send(sock, (char*)&tsvc_req_header, sizeof(tsvc_req_header)); m_sutil._sh_send(sock, (char*)&auth_req_body, sizeof(auth_req_body)); memset(recv_buffer , 0x00 , sizeof(recv_buffer)); if (m_sutil._rtxTimer(5 , sock) < 0) goto EXIT_FUNCTION; m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(recv_buffer)); tsvc_rsp_header_ptr = reinterpret_cast(&recv_buffer); result_code = ntohs(tsvc_rsp_header_ptr->op_result_code_w); if (RSP_CODE_AUTH_SUCCESS==result_code) { SetNoticeStep(202); } else { SetNoticeStep(203); goto EXIT_FUNCTION; } ////////////////////////////////////////////////////////////////////////////////// // ÀÎÁõ ³¡ ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// // Àü¼Û¿Ï·á¾Ë¸²////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// tsvc_req_header.op_num_w = ::htons(OP_NUM_DNC); tsvc_req_header.op_seq_w = ::htons(OP_SEQ_REQ); m_sutil._sh_send(sock,(char *)&tsvc_req_header, sizeof(tsvc_req_header)); SetNoticeStep(302); ////////////////////////////////////////////////////////////////////////////////// // Àü¼Û¿Ï·á¾Ë¸² ³¡//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// // °ü¸®ÀÚ Á¤º¸ ////////////////////////////////////////////////////////////////////////////////// memset(&dnc_req_body , 0x00 , sizeof(dnc_req_body)); ::strncpy(dnc_req_body.sp_tid_str , m_ptp->szTransGuid , MAX_SIZE_OF_SP_TID-1); FillAdminInfo(&dnc_req_body); m_sutil._sh_send(sock,(char *)&dnc_req_body, sizeof(tsvc_dn_req_body_t)); memset(recv_buffer , 0x00 , sizeof(recv_buffer)); if (m_sutil._rtxTimer(5 , sock) < 0) goto EXIT_FUNCTION; m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(recv_buffer)); tsvc_rsp_header_ptr = reinterpret_cast(&recv_buffer); result_code = ntohs(tsvc_rsp_header_ptr->op_result_code_w); if (RSP_CODE_DIST_SUCCESS==result_code) { SetNoticeStep(402); } else { SetNoticeStep(403); goto EXIT_FUNCTION; } ////////////////////////////////////////////////////////////////////////////////// // °ü¸®ÀÚ Á¤º¸ ³¡ ////////////////////////////////////////////////////////////////////////////////// EXIT_FUNCTION: if (sock != INVALID_SOCKET) closesocket(sock); PostMessage(WM_CLOSE); } BOOL CNoticeTrans::OnInitDialog() { CDialog::OnInitDialog(); // TODO: ¿©±â¿¡ Ãß°¡ ÃʱâÈ­ ÀÛ¾÷À» Ãß°¡ÇÕ´Ï´Ù. m_NoticeProgress.SetRange(0, 100); m_NoticeProgress.SetStep(1); if (m_NoticeLastFileTrans) this->PostMessage(WMU_NOTICE_LAST_FILE_TRANS , NULL , NULL); else this->PostMessage(WMU_NOTICE_TRANS , NULL , NULL); return TRUE; // return TRUE unless you set the focus to a control // ¿¹¿Ü: OCX ¼Ó¼º ÆäÀÌÁö´Â FALSE¸¦ ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. } LRESULT CNoticeTrans::OnNoticeTrans(WPARAM wParam, LPARAM lParam) { SetNoticeStep(0); while (FALSE==IsWindowVisible()) { m_sutil.MessagePump(100); } this->NoticeTrans(); return 0; } LRESULT CNoticeTrans::OnNoticeLastFileTrans(WPARAM wParam, LPARAM lParam) { SetNoticeStep(2); while (FALSE==IsWindowVisible()) { m_sutil.MessagePump(100); } this->LastFileTransComplete(); return 0; } void CNoticeTrans::OnBnClickedCancel() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. OnCancel(); } void CNoticeTrans::SetNoticeStep(int nStep) { if (0==nStep) { m_NoticeProgress.SetPos(10); m_NoticeText.SetWindowText("¹èÆ÷ ¿äûÁßÀÔ´Ï´Ù...(0/4 ¿äûÁغñ)"); } if (2==nStep) { m_NoticeProgress.SetPos(10); m_NoticeText.SetWindowText("ÇöÀç Àü¼ÛâÀ» Á¾·áÇÕ´Ï´Ù...(0/4 ¿äûÁغñ)"); } else if (100 == nStep) { m_NoticeProgress.SetPos(20); m_NoticeText.SetWindowText("¹èÆ÷ ¿äûÁßÀÔ´Ï´Ù...(1/4 »ç¿ëÀÚÀÎÁõ)"); } else if (102 == nStep) { m_NoticeProgress.SetPos(20); m_NoticeText.SetWindowText("ÇöÀç Àü¼ÛâÀ» Á¾·áÇÕ´Ï´Ù...(1/4 »ç¿ëÀÚÀÎÁõ)"); } else if (200 == nStep) { m_NoticeProgress.SetPos(40); m_NoticeText.SetWindowText("¹èÆ÷ ¿äûÁßÀÔ´Ï´Ù...(2/4 ÀÎÁõ¼º°ø)"); } else if (201 == nStep) { m_NoticeProgress.SetPos(40); m_NoticeText.SetWindowText("¹èÆ÷ ¿äûÀ» Áß´ÜÇÕ´Ï´Ù...(2/4 ÀÎÁõ½ÇÆÐ)"); m_sutil.MessagePump(500); } else if (202 == nStep) { m_NoticeProgress.SetPos(40); m_NoticeText.SetWindowText("ÇöÀç Àü¼ÛâÀ» Á¾·áÇÕ´Ï´Ù...(2/4 ÀÎÁõ¼º°ø)"); } else if (203 == nStep) { m_NoticeProgress.SetPos(40); m_NoticeText.SetWindowText("ÇöÀç Àü¼ÛâÀ» Á¾·áÇÕ´Ï´Ù...(2/4 ÀÎÁõ½ÇÆÐ)"); } else if (300 == nStep) { m_NoticeProgress.SetPos(70); m_NoticeText.SetWindowText("¹èÆ÷ ¿äûÁßÀÔ´Ï´Ù...(3/4 ¹èÆ÷¿äû)"); } else if (302 == nStep) { m_NoticeProgress.SetPos(70); m_NoticeText.SetWindowText("ÇöÀç Àü¼ÛâÀ» Á¾·áÇÕ´Ï´Ù...(3/4 ¾Ë¸²¿äû)"); } else if (303 == nStep) { m_NoticeProgress.SetPos(70); m_NoticeText.SetWindowText("ÇöÀç Àü¼ÛâÀ» Á¾·áÇÕ´Ï´Ù...(3/4 ¿äû½ÇÆÐ)"); } else if (400 == nStep) { m_NoticeProgress.SetPos(100); m_NoticeText.SetWindowText("¹èÆ÷¸¦ ½ÃÀÛÇÕ´Ï´Ù...(4/4 ¿äû¼º°ø)"); m_sutil.MessagePump(500); } else if (401 == nStep) { m_NoticeProgress.SetPos(100); m_NoticeText.SetWindowText("¹èÆ÷ ¿äûÀ» Áß´ÜÇÕ´Ï´Ù...(4/4 ¿äû½ÇÆÐ)"); m_sutil.MessagePump(500); } else if (402 == nStep) { m_NoticeProgress.SetPos(100); m_NoticeText.SetWindowText("ÇöÀç Àü¼ÛâÀ» Á¾·áÇÕ´Ï´Ù...(4/4 ¿äû¼º°ø)"); m_sutil.MessagePump(500); } else if (403 == nStep) { m_NoticeProgress.SetPos(100); m_NoticeText.SetWindowText("ÇöÀç Àü¼ÛâÀ» Á¾·áÇÕ´Ï´Ù...(4/4 ¿äû½ÇÆÐ)"); m_sutil.MessagePump(500); } } void CNoticeTrans::FillAdminInfo(tsvc_ddc_req_body_t* pDncInfo) { strncpy(pDncInfo->name_01 ,m_ptp->name_01 , MAX_SIZE_OF_NAME-1) ; strncpy(pDncInfo->name_02 ,m_ptp->name_02 , MAX_SIZE_OF_NAME-1) ; strncpy(pDncInfo->name_03 ,m_ptp->name_03 , MAX_SIZE_OF_NAME-1) ; strncpy(pDncInfo->phone_01 ,m_ptp->phone_01 , MAX_SIZE_OF_PHONE-1) ; strncpy(pDncInfo->phone_02 ,m_ptp->phone_02 , MAX_SIZE_OF_PHONE-1) ; strncpy(pDncInfo->phone_03 ,m_ptp->phone_03 , MAX_SIZE_OF_PHONE-1) ; strncpy(pDncInfo->mail_01 ,m_ptp->mail_01 , MAX_SIZE_OF_MAIL-1) ; strncpy(pDncInfo->mail_02 ,m_ptp->mail_02 , MAX_SIZE_OF_MAIL-1) ; strncpy(pDncInfo->mail_03 ,m_ptp->mail_03 , MAX_SIZE_OF_MAIL-1) ; }