📄 demodlg.cpp
字号:
// demoDlg.cpp : implementation file
//
#include "stdafx.h"
#include "demo.h"
#include "demoDlg.h"
//add by ycl 2001.9.26
#include "CmppDlg.h"
//end by ycl
//add by ycl 2001.9.26
//#include "CmppStatusDlg.h"
//end by ycl
#include "export.h"
//#include "smcmacro.h"
#include "RegKey.h"
#include "resource.h"
#define INITIALTIME 3000
#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)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDemoDlg dialog
CDemoDlg::CDemoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDemoDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CDemoDlg)
m_PRI = 0;
m_system_id = _T("923610");
m_password = _T("06110");
m_userdata = _T("短信测试信息");
m_default_id = 0;
m_sm_id = 0;
m_fcs = 0;
m_orgaddr = _T("06110");
m_destaddr = _T("13881868232");
m_schedule = _T("");
m_expire = _T("");
m_final = _T("");
m_status = _T("");
m_error_code = _T("");
m_subname = _T("");
m_subaddr = _T("");
m_subpassword = _T("");
m_subid = _T("");
m_ocos = 10;
m_tcos = 10;
m_replaynum = 1;
m_dir = 0;
m_begintime = _T("");
m_finaltime = _T("");
m_smnum = 0;
m_len = 100;
m_protocol = 2;
m_ip = _T("211.137.85.113");
m_bAutoAck = FALSE;
m_DlvSMNum = _T("0");
m_pid = 0;
m_RegTime = _T("");
m_mstype = _T("");
m_Service = _T("");
m_bSM = _T("");
m_TON = _T("");
m_NPI = _T("");
m_DCS = _T("8");
m_port = 7890;
m_UDHI = 0;
m_Binary = FALSE;
m_iSRR = 0;
m_sServiceType = _T("XW");
m_sMsgID = _T("");
m_bSmNumFlag = TRUE;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
::InitializeCriticalSection(&m_critical);
// Dlv_SMID = 0;
// wait_for_ack = FALSE;
bIsExit = FALSE;
//by ycl 2001.9.26
m_byPKTotal = 1;
m_byPKNumber = 1;
m_byMsgLevel = 0;
memset(m_sSPID, 0, MAX_SPID_LEN);
memset(m_sFeeCode, 0, MAX_FEE_CODE_LEN);
memset(m_sFeeType, 0, MAX_FEE_TYPE_LEN);
m_byUsrNum = 1;
memset(m_sDestAddrs, 0, MAX_ADDRS_LEN);
//end by ycl
//add by ycl 2001.12.8
m_nMTTLMsg = 0;
m_nMTTLusr = 0;
m_nMTScs = 0;
m_nMTWT = 0;
m_nMTFL = 0;
m_nMOScs = 0;
m_nMOWT = 0;
m_nMOFL = 0;
//end by ycl
// 2002.01.31 hyt add
m_byFeeUserType = 0;
memset(m_sFeeAddr, 0, MAX_ADDR_LEN);
m_ulSmNum = 0;
// end add
// 2002-09-09 hyt add for sgip
strcpy(m_sGivenValue, "0");
m_byAgentFlag = 0;
m_byMoreMTFlag = 2;
m_byMsgType = 0;
memset(m_sReserve, 0, sizeof(m_sReserve));
// end 2002-09-09
}
CDemoDlg::~CDemoDlg()
{
::DeleteCriticalSection(&m_critical);
bIsExit = TRUE;
::SetEvent(m_hWaitEvent);
if (::WaitForSingleObject(m_hThread,100) != WAIT_OBJECT_0)
::TerminateThread(m_hThread, -1);
}
void CDemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDemoDlg)
DDX_Control(pDX, IDC_LIST1, m_smidlist);
DDX_Radio(pDX, IDC_RADIO3, m_PRI);
DDX_Text(pDX, IDC_EDIT1, m_system_id);
DDX_Text(pDX, IDC_EDIT2, m_password);
DDX_Text(pDX, IDC_EDIT3, m_userdata);
DDX_Text(pDX, IDC_EDIT5, m_default_id);
DDX_Text(pDX, IDC_EDIT4, m_sm_id);
DDX_Text(pDX, IDC_EDIT12, m_fcs);
DDX_Text(pDX, IDC_EDIT13, m_orgaddr);
DDX_Text(pDX, IDC_EDIT14, m_destaddr);
DDX_Text(pDX, IDC_EDIT6, m_schedule);
DDX_Text(pDX, IDC_EDIT7, m_expire);
DDX_Text(pDX, IDC_EDIT15, m_final);
DDX_Text(pDX, IDC_EDIT16, m_status);
DDX_Text(pDX, IDC_EDIT17, m_error_code);
DDX_Text(pDX, IDC_EDIT8, m_subname);
DDX_Text(pDX, IDC_EDIT9, m_subaddr);
DDX_Text(pDX, IDC_EDIT10, m_subpassword);
DDX_Text(pDX, IDC_EDIT11, m_subid);
DDX_Text(pDX, IDC_EDIT18, m_ocos);
DDX_Text(pDX, IDC_EDIT19, m_tcos);
DDX_Text(pDX, IDC_EDIT20, m_replaynum);
DDX_Radio(pDX, IDC_RADIO6, m_dir);
DDX_Text(pDX, IDC_EDIT21, m_begintime);
DDX_Text(pDX, IDC_EDIT22, m_finaltime);
DDX_Text(pDX, IDC_EDIT23, m_smnum);
DDX_Text(pDX, IDC_EDIT25, m_len);
DDX_Radio(pDX, IDC_RADIO2, m_protocol);
DDX_CBString(pDX, IDC_COMBO1, m_ip);
DDX_Check(pDX, IDC_CHECK2, m_bAutoAck);
DDX_Text(pDX, IDC_STATIC_DLVSM_NUM, m_DlvSMNum);
DDX_Text(pDX, IDC_EDIT24, m_pid);
DDX_Text(pDX, IDC_EDIT27, m_RegTime);
DDX_Text(pDX, IDC_EDIT26, m_mstype);
DDX_Text(pDX, IDC_EDIT28, m_Service);
DDX_Text(pDX, IDC_EDIT29, m_bSM);
DDX_Text(pDX, IDC_EDIT30, m_TON);
DDX_Text(pDX, IDC_EDIT31, m_NPI);
DDX_Text(pDX, IDC_EDIT32, m_DCS);
DDX_Text(pDX, IDC_EDIT33, m_port);
DDX_Text(pDX, IDC_EDIT34, m_UDHI);
DDX_Check(pDX, IDC_CHECK1, m_Binary);
DDX_Text(pDX, IDC_EDIT_SRR, m_iSRR);
DDX_Text(pDX, IDC_SERVICE_SUBTYPE, m_sServiceType);
DDV_MaxChars(pDX, m_sServiceType, 10);
DDX_Text(pDX, IDC_EDIT35, m_sMsgID);
DDV_MaxChars(pDX, m_sMsgID, 16);
DDX_Check(pDX, IDC_CHECKSMNUM, m_bSmNumFlag);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)
ON_WM_CONTEXTMENU()
//{{AFX_MSG_MAP(CDemoDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON1, OnLogin)
ON_BN_CLICKED(IDC_BUTTON2, OnLogout)
ON_BN_CLICKED(IDC_BUTTON3, OnSubmitSM)
ON_BN_CLICKED(IDC_BUTTON7, OnQuerySMDetails)
ON_BN_CLICKED(IDC_BUTTON5, OnCancelSM)
ON_BN_CLICKED(IDC_BUTTON4, OnReplaceSM)
ON_BN_CLICKED(IDC_BUTTON6, OnQueryStatus)
ON_BN_CLICKED(IDC_BUTTON8, OnAddSub)
ON_BN_CLICKED(IDC_BUTTON9, OnDelSub)
ON_BN_CLICKED(IDC_BUTTON10, OnModSub)
ON_BN_CLICKED(IDC_BUTTON11, OnQuerySub)
ON_BN_CLICKED(IDC_BUTTON12, OnQueryMsgs)
ON_LBN_DBLCLK(IDC_LIST1, OnDblclkList1)
ON_BN_CLICKED(IDC_BUTTON13, OnInitialInterface)
ON_BN_CLICKED(IDC_BUTTON14, OnGetDeliverSM)
ON_BN_CLICKED(IDC_CHECK2, OnAutoAck)
ON_MESSAGE(WM_ADDDLVSMNUM, OnDlvSMNum)
ON_EN_KILLFOCUS(IDC_EDIT3, OnKillfocusEdit3)
ON_BN_CLICKED(IDC_BUTTON15, Onvpsubmit)
ON_BN_CLICKED(IDC_BUTTON16, OnLogoutR)
ON_BN_CLICKED(IDC_BUTTON18, OnQueryDetailEx)
ON_BN_CLICKED(IDC_BUTTON17, OnReplaceSMEx)
ON_BN_CLICKED(IDC_BUTTON19, OnExitInterface)
ON_BN_CLICKED(IDC_BUTTON20, OnLoadCmppConfig)
ON_BN_CLICKED(IDC_BUTTON21, OnCmppQuery)
ON_BN_CLICKED(IDC_BUTTON22, OnCmppCancel)
ON_COMMAND(ID_CLEAR, OnClear)
ON_BN_CLICKED(IDC_CHECKSMNUM, OnChecksmnum)
ON_COMMAND(ID_MENUITEM_About, OnMENUITEMAbout)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDemoDlg message handlers
BOOL CDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 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);
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);
}
pSysMenu->EnableMenuItem(SC_MAXIMIZE, MF_DISABLED|MF_GRAYED);
}
// 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
UpdateData(FALSE);
DWORD id;
m_hThread = ::CreateThread(NULL, 0, DSMThread, this, 0,&id);
m_hWaitEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);
LoadRegKey();
return TRUE; // return TRUE unless you set the focus to a control
}
void CDemoDlg::LoadRegKey()
{
CNewRegKey hKey;
HKEY key = HKEY_USERS;
CString Path = DEFAULT_REGKEY;
char szIPAddr[300];
char szValueName[20];
DWORD dwIndex = 0;
DWORD dwType;
DWORD dwNameSize = 20, dwDataSize = 300;
CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO1);
//pComboBox->AddString("129.9.123.8");
//pComboBox->AddString("10.108.19.169");
if(hKey.Open(key,Path) == ERROR_SUCCESS)
{
LONG lRet = RegEnumValue(HKEY(hKey), dwIndex, szValueName, &dwNameSize,
NULL, &dwType, (unsigned char*)szIPAddr, &dwDataSize);
while (lRet == ERROR_SUCCESS)
{
if (dwType == REG_SZ)
{
pComboBox->AddString(szIPAddr);
};
dwIndex ++;
dwNameSize = 20;
dwDataSize = 300;
lRet = RegEnumValue(HKEY(hKey), dwIndex, szValueName, &dwNameSize,
NULL, &dwType, (unsigned char*)szIPAddr, &dwDataSize);
};
hKey.Close();
}
}
void CDemoDlg::SaveRegKey()
{
CNewRegKey hKey ;
HKEY key = HKEY_USERS;
CString Path = DEFAULT_REGKEY;
CString cc;
CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO1);
int iCount = pComboBox->GetCount();
CString Item;
CString ValueName;
if(hKey.Open(key,Path) == ERROR_SUCCESS)
{
for (int i=0; i < iCount; i++)
{
pComboBox->GetLBText(i, Item);
ValueName.Format("%d", i);
if (Item.IsEmpty()) continue;
hKey.Write(ValueName, (LPCTSTR)Item);
}
hKey.Close();
}
}
DWORD WINAPI CDemoDlg::DSMThread(LPVOID lparam)
{
CDemoDlg* p = (CDemoDlg*) lparam;
HWND handle = p->GetSafeHwnd();
while(TRUE)
{
if (!p->m_bAutoAck)
WaitForSingleObject(p->m_hWaitEvent, INFINITE);
if (p->bIsExit) break;
if (HasDeliverMessage(500) != 0)
{
if (!p->m_bAutoAck)
AfxMessageBox("No Deliver SM!");
else
Sleep(500);
continue;
};
ULONG sm_ID;
unsigned char DestTON, DestNPI, OrgTON, OrgNPI, PRI, PID, DCS;
char DestAddr[MAX_ADDR_LEN];
memset(DestAddr, 0, MAX_ADDR_LEN);
char OrgAddr[MAX_ADDR_LEN];
memset(OrgAddr, 0, MAX_ADDR_LEN);
char TimeStamp[MAX_TIMESTAMP_LEN];
memset(TimeStamp, 0, MAX_TIMESTAMP_LEN);
char UserData[MAX_UD_LEN];
memset(UserData, 0, MAX_UD_LEN);
unsigned char MsgID[23];
memset(MsgID, 0, 23);
char sSubmitdate[MAX_SUBMIT_TIME_LEN+1];
memset(sSubmitdate, 0, MAX_SUBMIT_TIME_LEN+1);
char sDonedate[MAX_DONE_TIME_LEN+1];
memset(sDonedate, 0, MAX_DONE_TIME_LEN+1);
char sStatus[MAX_STATE_LEN+1];
memset(sStatus, 0, MAX_STATE_LEN+1);
int iRet;
unsigned char RP;
unsigned char UDHI;
unsigned long UDLen;
unsigned char StatusReport = 0;
/*
iRet = GetDeliverSM(&sm_ID, &DestTON, &DestNPI, DestAddr, &OrgTON, &OrgNPI,
OrgAddr, &PRI, &PID, &DCS, TimeStamp, UserData);*/
if(p->m_protocol == 2)
{
iRet = GetDeliverSMExExEx(&sm_ID, &DestTON, &DestNPI, DestAddr, &OrgTON,
&OrgNPI, OrgAddr, &PRI, &RP, &UDHI, &PID, &DCS, TimeStamp, &UDLen, UserData,
&StatusReport, MsgID, sSubmitdate, sDonedate, sStatus);
CString str;
char errstr[200];
switch(iRet)
{
case E_SUCCESS:
if (!p->m_bAutoAck)
{
str.Format("接收到Deliver消息\n"
"源地址 = %s\n"
"目标地址 = %s\n"
"DCS = 0X%x\n"
"PRI = %d\n"
"UDLen = %d\n"
"PID = 0x%x\n"
"UDHI = %d\n"
"TimeStamp = %s\n"
"正文 = %s\n"
"状态报告标志 = %d\n"
"MsgID = %s\n"
"Submit date = %s\n"
"done date = %s\n"
"stat = %s",
OrgAddr, DestAddr, DCS,
PRI, UDLen, PID, UDHI, TimeStamp,
UserData, StatusReport,
MsgID, sSubmitdate,
sDonedate, sStatus);
AfxMessageBox(str);
};
::PostMessage(handle, WM_ADDDLVSMNUM, 1, 0);
break;
default:
if (GetErrorString(iRet, 200, errstr) > 0)
AfxMessageBox(errstr);
};
}
// beging 2002-10-14 by cfk for sgip
else if(3 == p->m_protocol)
{
CString str;
ULONG ulCommandID;
ULONG ulNodeNum;
ULONG ulTime;
ULONG ulSequenceID;
char sUserNumber[MAX_ADDR_LEN];
char sSPNumber[MAX_ADDR_LEN];
unsigned char byPID;
unsigned char byUDHI;
unsigned char byMsgCoding;
ULONG ulMsgLen; ULONG ulOrgNodeNum;
ULONG ulOrgTime;
ULONG ulOrgSeqID;
unsigned char byReporttype;
unsigned char byState;
unsigned char byErrCode;
unsigned char byUserCondition;
unsigned char byAckResult;
byAckResult= atoi(p->m_error_code);
char sReserve[MAX_RESERVE_LEN];
memset(sUserNumber, 0, MAX_ADDR_LEN);
memset(sSPNumber, 0, MAX_ADDR_LEN);
memset(sReserve, 0, MAX_RESERVE_LEN);
iRet = SgipGetSM(&ulCommandID,
&ulNodeNum,
&ulTime,
&ulSequenceID, // 消息序列号
sUserNumber, //deliver 时发送短消息的手机号,report消息时接收消息手机号
sSPNumber, // 接收该短消息的短消息接入码
&byPID, //协议类型
&byUDHI, //协议类型 UDHI
&byMsgCoding, //编码格式
&ulMsgLen, //消息长度
UserData, //n内容
&ulOrgNodeNum,
&ulOrgTime,
&ulOrgSeqID, //report消息消息序列号
&byReporttype, // Report命令类型
&byState, // 短消息执行状态
&byErrCode, //错误码值
&byUserCondition,
sReserve,
byAckResult);
char errstr[200];
switch(iRet)
{
case E_SUCCESS:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -