diff --git a/Doc/广州首易移动业务API使用手册(WebService).doc b/Doc/广州首易移动业务API使用手册(WebService).doc index fae45a8..809cc6f 100644 --- a/Doc/广州首易移动业务API使用手册(WebService).doc +++ b/Doc/广州首易移动业务API使用手册(WebService).doc @@ -14,7 +14,7 @@ 广州首易信息技术有限公司 - 2024年2月 + 2025年2月 目录 一、引言 4 @@ -1513,6 +1513,10 @@ |-110 |短信内容长度不符合要求 |Sms_Send | |-111 |没有发送短信权限 |Sms_Send | |-112 |目标号码数量不符合要求 |Sms_Send | +|-113 |此企业禁止非模板短信 |Sms_Send | +|-114 |此用户禁止非模板短信 |Sms_Send | +|-115 |此企业禁止客户端短信 |Sms_Send | +|-116 |此用户禁止客户端短信 |Sms_Send | |-122 |用户状态异常 |Sms_Send | |-123 |企业状态异常 |Sms_Send | |-124 |用户权限不足 |Sms_Send | diff --git a/Doc/首易HTTP短信接口V3.0.docx b/Doc/首易HTTP短信接口V3.0.docx index 25f6bf5..ffbbddc 100644 --- a/Doc/首易HTTP短信接口V3.0.docx +++ b/Doc/首易HTTP短信接口V3.0.docx @@ -588,6 +588,10 @@ Method不存在 此企业禁止非模板短信 -114 此用户禁止非模板短信 + -115 +此企业禁止客户端短信 + -116 +此用户禁止客户端短信 -122 用户状态异常 -123 diff --git a/FXSend.rc b/FXSend.rc index 2c7b526..e07de46 100644 --- a/FXSend.rc +++ b/FXSend.rc @@ -100,7 +100,6 @@ BEGIN LTEXT "ַ",IDC_STATIC,12,68,17,8 LTEXT "û",IDC_STATIC,12,82,17,8 LTEXT "",IDC_STATIC,85,82,17,8 - EDITTEXT IDC_MSG2,170,9,297,172,ES_MULTILINE | ES_READONLY | ES_WANTRETURN PUSHBUTTON "test",IDC_TEST,4,0,25,15 EDITTEXT IDC_EDIT1,7,33,147,12,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL EDITTEXT IDC_MSG3,170,198,297,155,ES_MULTILINE | ES_READONLY | ES_WANTRETURN @@ -128,12 +127,21 @@ BEGIN LTEXT "Window",IDC_STATIC,12,255,25,8 EDITTEXT IDC_DELAY,117,237,24,12,ES_AUTOHSCROLL | ES_NUMBER LTEXT "Delay",IDC_STATIC,93,239,21,8 - CONTROL "ǿȥǩ",IDC_EXCM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,288,56,10 CONTROL "ǩ",IDC_CHECKCM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,288,48,10 - CONTROL "ʾ־",IDC_SHOWLOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,185,49,10 + CONTROL "ǿȥǩ",IDC_EXCM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,288,56,10 + CONTROL "",IDC_EXCM2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,137,288,24,10 CONTROL "Ret",IDC_NORET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,301,52,10 CONTROL "Report",IDC_NOREPORT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,301,64,10 - CONTROL "",IDC_EXCM2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,137,288,24,10 + CONTROL "",IDC_NORECV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,315,56,10 + CONTROL "ƴӳ",IDC_SUPLONGSMS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,315,56,10 + CONTROL "ȥű",IDC_EXPLONGSMS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,328,64,10 + LTEXT "ݰС",IDC_STATIC,80,330,41,8 + EDITTEXT IDC_ONEPACKSMSCOUNT,123,327,24,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "벻86",IDC_NO86,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,341,54,10 + CONTROL "У鱨ǩ",IDC_VERIFYSIGNNATURE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,342,64,10 + EDITTEXT IDC_MSG2,170,9,297,172,ES_MULTILINE | ES_READONLY | ES_WANTRETURN + LTEXT "йƶ",IDC_TDMSG,12,130,145,8 + CONTROL "ʾ־",IDC_SHOWLOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,185,49,10 PUSHBUTTON "test2",IDC_TEST2,4,16,25,14 PUSHBUTTON "",IDC_0,134,51,24,12,0,WS_EX_STATICEDGE LTEXT "select",IDC_STATIC,12,270,25,8 @@ -147,16 +155,9 @@ BEGIN LTEXT "--",IDC_S_ZD_SEND2,143,105,9,8 LTEXT "A",IDC_SELECT_DB,107,105,8,8 LTEXT "--",IDC_S_ZD_RECV2,143,117,9,8 - LTEXT "йƶ",IDC_TDMSG,12,130,145,8 PUSHBUTTON "Ӫ",IDC_TDSETUP,15,105,56,18 - CONTROL "ƴӳ",IDC_SUPLONGSMS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,79,315,56,10 - CONTROL "ȥű",IDC_EXPLONGSMS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,328,64,10 - LTEXT "ݰС",IDC_STATIC,80,331,41,8 - EDITTEXT IDC_ONEPACKSMSCOUNT,123,328,24,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_NORECV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,315,56,10 CONTROL "ʾϸ־",IDC_SHOWLOG2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,227,185,64,10 LTEXT "Prov",IDC_STATIC,85,68,17,8 - CONTROL "벻86",IDC_NO86,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,341,54,10 END IDD_TDSETUP DIALOGEX 0, 0, 366, 317 diff --git a/FXSendDlg.cpp b/FXSendDlg.cpp index e12b83a..36e67ab 100644 --- a/FXSendDlg.cpp +++ b/FXSendDlg.cpp @@ -83,6 +83,7 @@ CFXSendDlg::CFXSendDlg(CWnd* pParent /*=NULL*/) , m_bNoRecv(FALSE) , m_strDBProvider(_T("")) , m_lCheckReSend(0) + , m_bVerifySignature(FALSE) { //{{AFX_DATA_INIT(CFXSendDlg) m_strIP = _T(""); @@ -297,6 +298,7 @@ void CFXSendDlg::DoDataExchange(CDataExchange* pDX) DDX_Text(pDX, IDC_DBPROVIDER, m_strDBProvider); DDV_MaxChars(pDX, m_strDBProvider, 30); DDX_CBIndex(pDX, IDC_CHECKRESEND, m_lCheckReSend); + DDX_Check(pDX, IDC_VERIFYSIGNNATURE, m_bVerifySignature); } BEGIN_MESSAGE_MAP(CFXSendDlg, CDialog) @@ -399,6 +401,7 @@ BOOL CFXSendDlg::OnInitDialog() m_bCheckBack = m_MCom_Head.bCheckBack; m_bMainReSend = m_MCom_Head.bMainReSend; m_bCheckCM = m_MCom_Head.bCheckCM; + m_bVerifySignature = m_MCom_Head.bVerifySignature; m_bExCM = m_MCom_Head.bExCM; m_bExCM2 = m_MCom_Head.bExCM2; m_bNo86 = m_MCom_Head.bNo86; @@ -612,6 +615,7 @@ void CFXSendDlg::OnSave() m_MCom_Head.lDelay = m_lDelay; m_MCom_Head.bMainReSend=m_bMainReSend; m_MCom_Head.bCheckCM = m_bCheckCM; + m_MCom_Head.bVerifySignature = m_bVerifySignature; m_MCom_Head.bExCM = m_bExCM; m_MCom_Head.bExCM2 = m_bExCM2; m_MCom_Head.bNo86 = m_bNo86; @@ -1485,6 +1489,130 @@ try break; } + if (pDlg->m_MCom_Head.bVerifySignature) //检验报备签名,如果没在运营商报备的签名不能发送,本步骤取出每条短信的签名 + { + for (int i = 0; i < lDelCount; i++) + { + long lSignatureStart = 0; //签名起始位置 + CString strSignatureMsg = pMT[i].Msg; //含签名的内容 + CString strSignature; + //判断内容是否为长信 + if (strSignatureMsg.GetLength() > 7 && + strSignatureMsg.Left(2) == CString(_T("长信")) && + strSignatureMsg.Mid(6, 1) == CString(_T(":"))) + { + + if (strSignatureMsg.Mid(5, 1) != CString(_T("1"))) //不是长信第一条,需要取长信第一条 + { + BOOL bGetSignatureMsg = false; + strSignatureMsg = _T(""); + //先从已读取的内容中取第一条内容 + for (int j = 0; j < lDelCount; j++) + { + if (/*pMT[j].SendNum == pMT[i].SendNum &&*/ + pMT[j].RecvNum == pMT[i].RecvNum && + pMT[j].Msg.GetLength() > 7 && + pMT[j].Msg.Left(2) == CString(_T("长信")) && + pMT[j].Msg.Mid(6, 1) == CString(_T(":")) && + pMT[j].Msg.Mid(5, 1) == CString(_T("1")) && + pMT[j].Msg.Mid(2, 2) == pMT[i].Msg.Mid(2, 2)) + { + strSignatureMsg = pMT[j].Msg; + bGetSignatureMsg = true; + break; + } + } + //再从发送表的内容中取第一条 + if (!bGetSignatureMsg) + { + CSingleLock cl(&pDlg->m_MT_FS_Lock, true); + POSITION pos = pDlg->m_MT_FS.GetHeadPosition(); // 获取链表头部位置 + while (pos != NULL) + { + FXSend_MT mt = pDlg->m_MT_FS.GetNext(pos); // 获取当前元素并移动位置 + // 处理 value + if (/*mt.SendNum == pMT[i].SendNum &&*/ + mt.RecvNum == pMT[i].RecvNum && + mt.Msg.GetLength() > 7 && + mt.Msg.Left(2) == CString(_T("长信")) && + mt.Msg.Mid(6, 1) == CString(_T(":")) && + mt.Msg.Mid(5, 1) == CString(_T("1")) && + mt.Msg.Mid(2, 2) == pMT[i].Msg.Mid(2, 2)) + { + strSignatureMsg = mt.Msg; + bGetSignatureMsg = true; + break; + } + } + cl.Unlock(); + } + //再从已发送表的内容中取第一条 + if (!bGetSignatureMsg) + { + CSingleLock cl(&pDlg->m_MT_YF_Lock, true); + POSITION pos = pDlg->m_MT_YF.GetHeadPosition(); // 获取链表头部位置 + while (pos != NULL) + { + FXSend_MT mt = pDlg->m_MT_YF.GetNext(pos); // 获取当前元素并移动位置 + // 处理 value + if (/*mt.SendNum == pMT[i].SendNum &&*/ + mt.RecvNum == pMT[i].RecvNum && + mt.Msg.GetLength() > 7 && + mt.Msg.Left(2) == CString(_T("长信")) && + mt.Msg.Mid(6, 1) == CString(_T(":")) && + mt.Msg.Mid(5, 1) == CString(_T("1")) && + mt.Msg.Mid(2, 2) == pMT[i].Msg.Mid(2, 2)) + { + strSignatureMsg = mt.Msg; + bGetSignatureMsg = true; + break; + } + } + cl.Unlock(); + } + + //再从数据库中读取第一条内容 + if (strSignatureMsg.GetLength() <= 0) + { + str.Format(_T("select msg from smssend with(nolock) where sendid>%d and sendid<%d and Recvnum='%s' and sendnum='%s' and substring(msg,3,2)='%s' and substring(msg,6,1)='1'"), pMT[i].SendID - 200, pMT[i].SendID + 200, pMT[i].RecvNum, pMT[i].SendNum, pMT[i].Msg.Mid(2, 2)); + if (AdoRS.Open(str) && !AdoRS.IsEOF()) + { + AdoRS.GetCollect(_T("Msg"), strSignatureMsg); + } + else + { + //发送表查不到,需要到已发表查询 + str.Format(_T("select msg from corpsmsm.dbo.smssend with(nolock) where sendid>%d and sendid<%d and Recvnum='%s' and substring(msg,3,2)='%s' and substring(msg,6,1)='1'"), pMT[i].SendID - 200, pMT[i].SendID + 200, pMT[i].RecvNum, pMT[i].Msg.Mid(2, 2)); + if (AdoRS.Open(str) && !AdoRS.IsEOF()) + { + AdoRS.GetCollect(_T("Msg"), strSignatureMsg); + } + } + } + } + //因为是长短信,签名内容先去掉长信标识 + strSignatureMsg = strSignatureMsg.Mid(7); //取7个字符后的内容 + } + + //取签名 + long lSignatureMsgLen = strSignatureMsg.GetLength(); + if (strSignatureMsg.Left(1) == CString(_T("【"))) //内容是以"【"开头的,开始取签名 + { + for (int i = 1; i < lSignatureMsgLen && i < 21; i++) + { + if (strSignatureMsg.Mid(i, 1) == "】") + { + strSignature = strSignatureMsg.Mid(1, i - 1); //取到签名 + break; + } + } + } + if (strSignature.GetLength() > 0 && strSignature.GetLength() < 20) //有效签名 + { + pMT[i].strSignature = strSignature; + } + } + } //在send中删除 if (!bOnlySubmitMmsFile) //不是提交彩信模板的,取出后需要删除 { @@ -1513,6 +1641,7 @@ try //判断是否需要换另一个检索方法 lSelectType==1?bSelectTimer=true:bSelectNoTimer=true; //记录是否有检索记录 + //开始发送,将需要发送的短信加入到发送列表 strTemp.Format( _T("发送 正在提交%d条...") , lDelCount ); AddLogMsg(Send, strTemp ); @@ -1810,6 +1939,26 @@ try _tcscpy(szMsg , mt.Msg ); #ifndef SMSCENTER_NX long lMsgLen =_tcslen(szMsg); + + if (pDlg->m_MCom_Head.bVerifySignature) //检验报备签名,如果没在运营商报备的签名不能发送 + { + if (!pDlg->VerifySignature(&AdoRS2, &mt, szSendNum2)) + { + lBackStatus = -121; + strTemp.Format(_T("发送 %d %s %d,签名校验失败"), mt.CorpID, mt.RecvNum, mt.SendID); + AddLogMsg(Send, strTemp); + + mt.Status = 11; //发送失败 + mt.RecvStatus.Format(_T("TJ-签%d"), lBackStatus); + mt.SendTime = COleDateTime::GetCurrentTime(); + b = pDlg->WriteSendRetToCorpSmsM(&AdoRS2, &mt); + if (!b) //数据库异常 + { + bSql = false; + } + continue; + } + } if ( pDlg->m_MCom_Head.bCheckCM ) { /* @@ -6317,6 +6466,95 @@ void CFXSendDlg::GetCurrentPath(TCHAR * pPath) pPath[j+1]=0; } + + +typedef struct _TD2SignatureSmsNum +{ + long lSignatureID; + CString strSmsNum; +}TD2SignatureSmsNum; + +typedef CList CTD2SignatureSmsNum; + + +BOOL CFXSendDlg::VerifySignature(CAdoRecordSet* pAdoRS, FXSend_MT* pMT, TCHAR * pSrcNum) +{ + BOOL bVerfitySignature = false; + CString str; + CString strSignatrue = pMT->strSignature; + + if (strSignatrue.GetLength() < 1) //签名小于1的校验不通过 + { + return bVerfitySignature; + } + + CTD2SignatureSmsNum SmsNumList; + + long lMinSmsNumLen = 21; //最小的端口号长度 + long lSmsNumCount = 0; + str.Format(_T("select top 100 * from TD2Signature with(nolock) where Signature='%s' and status=2 and TDID=%d order by SignatureID desc"), SQLStr(strSignatrue), m_MCom_Head.lSendFCS ); + pAdoRS->Open(str); + for (int i = 0; i < 100 && !pAdoRS->IsEOF(); i++) + { + TD2SignatureSmsNum smsNum; + pAdoRS->GetCollect(_T("SmsNum"), smsNum.strSmsNum); //取端口号 + pAdoRS->GetCollect(_T("SignatureID"), smsNum.lSignatureID); //取ID + SmsNumList.AddTail(smsNum); + + if (smsNum.strSmsNum.GetAllocLength() < lMinSmsNumLen) //取最小的长度 + lMinSmsNumLen = smsNum.strSmsNum.GetAllocLength(); + pAdoRS->MoveNext(); + lSmsNumCount++; + } + + if (lSmsNumCount <= 0) + { + return bVerfitySignature; + } + + CString strSendNum = pMT->SendNum; + int iSendNumLen = strSendNum.GetLength(); + + for (int j = iSendNumLen; j >= 2 && j >= lMinSmsNumLen; j--) //发送号码从长到短匹配 + { + CString strSendNum2 = strSendNum.Left(j); + + POSITION pos = SmsNumList.GetHeadPosition(); // 获取链表头部位置 + while (pos != NULL) + { + TD2SignatureSmsNum mt = SmsNumList.GetNext(pos); // 获取当前元素并移动位置 + + if (strSendNum2 == mt.strSmsNum) + { + bVerfitySignature = true; + pMT->SendNum = mt.strSmsNum; //更改发送号码 + _tcscpy(pSrcNum, mt.strSmsNum);//更改发送号码 + + //计数增加1 + str.Format(_T("update TD2Signature set SendCount=SendCount+1 where SignatureID=%d"), mt.lSignatureID); + pAdoRS->Open(str); + break; + } + } + if (bVerfitySignature) //匹配上签名 + { + break; + } + } + if (!bVerfitySignature && SmsNumList.GetCount() > 0) + { + TD2SignatureSmsNum mt = SmsNumList.GetHead(); // 取第一条记录 + bVerfitySignature = true; + pMT->SendNum = mt.strSmsNum; //更改发送号码 + _tcscpy(pSrcNum, mt.strSmsNum);//更改发送号码 + + //计数增加1 + str.Format(_T("update TD2Signature set SendCount=SendCount+1 where SignatureID=%d"), mt.lSignatureID); + pAdoRS->Open(str); + } + + return bVerfitySignature; +} long CFXSendDlg::WriteSendRetToCorpSmsM(CAdoRecordSet * pAdoRS,FXSend_MT * pMT) { CString str; diff --git a/FXSendDlg.h b/FXSendDlg.h index 9b8f699..adac93a 100644 --- a/FXSendDlg.h +++ b/FXSendDlg.h @@ -470,6 +470,7 @@ public: BOOL FS_Add(FXSend_MT mt); BOOL FS_Get(FXSend_MT & mt); static CString SQLStr(CString & str); + BOOL VerifySignature(CAdoRecordSet* pAdoRS, FXSend_MT* pMT, TCHAR* pSrcNum); long WriteSendRetToCorpSmsM(CAdoRecordSet * pAdoRS,FXSend_MT * pMT); long WriteSendRetToCorpSmsM2(CAdoRecordSet * pAdoRS,FXSend_MT * pMT,CString & strValues); long WriteSendRetToCorpSmsM_XY(CAdoRecordSet * pAdoRS,FXSend_MT * pMT); @@ -674,6 +675,7 @@ public: afx_msg void OnCbnSelchangeCheckresend(); int m_lCheckReSend; static CStringA UnicodeToString(TCHAR * pMsg); + BOOL m_bVerifySignature; }; //{{AFX_INSERT_LOCATION}} diff --git a/MobsetApiEx/MobsetApiServiceEx.cpp b/MobsetApiEx/MobsetApiServiceEx.cpp index a0f599f..ef551f8 100644 --- a/MobsetApiEx/MobsetApiServiceEx.cpp +++ b/MobsetApiEx/MobsetApiServiceEx.cpp @@ -128,6 +128,7 @@ namespace MobsetApi { m_lReqReturn = ns1__Sms_USCORESendResponse->Count; return SOAP_OK; } + BOOL bTemplateSms = false; if (ns1__Template_USCORESendSms != nullptr) //模板短信转发的,将参数转移过来 { ns1__Sms_USCORESend->soap = ns1__Template_USCORESendSms->soap; @@ -140,6 +141,8 @@ namespace MobsetApi { ns1__Sms_USCORESend->LongSms = 1; //默认为长短信 ns1__Sms_USCORESend->MobileList = ns1__Template_USCORESendSms->MobileList; ns1__Sms_USCORESend->Content = NULL; + + bTemplateSms = true; } CFXSendDlg* pDlg = (CFXSendDlg*)m_pParam; @@ -254,14 +257,14 @@ namespace MobsetApi { return SOAP_OK; } - if (userPro.dwCorpSDK & SDK_PROHIBITNONTEMPLATE) //禁止非模板短信 + if (!bTemplateSms && (userPro.dwCorpSDK & SDK_PROHIBITNONTEMPLATE) ) //如果是非模板短信,并且禁止非模板短信 { *ns1__Sms_USCORESendResponse->ErrMsg = L"此企业禁止非模板短信"; ns1__Sms_USCORESendResponse->Count = -113; m_lReqReturn = ns1__Sms_USCORESendResponse->Count; return SOAP_OK; } - if (userPro.dwSDK & SDK_PROHIBITNONTEMPLATE) //禁止非模板短信 + if (!bTemplateSms && (userPro.dwSDK & SDK_PROHIBITNONTEMPLATE) ) //如果是非模板短信,并且禁止非模板短信 { *ns1__Sms_USCORESendResponse->ErrMsg = L"此用户禁止非模板短信"; ns1__Sms_USCORESendResponse->Count = -114; @@ -2817,6 +2820,7 @@ namespace MobsetApi { CFXSendDlg* pDlg = (CFXSendDlg*)m_pParam; + BOOL bTemplateSms = false; long lCorpID = ns1__Mms_USCORESend->CorpID; m_lReqCorpID = lCorpID; CString strLoginName; @@ -2886,6 +2890,22 @@ namespace MobsetApi { m_lReqReturn = ns1__Mms_USCORESendResponse->Count; return SOAP_OK; } + + if (!bTemplateSms && (userPro.dwCorpSDK & SDK_PROHIBITNONTEMPLATE)) //如果是非模板短信,并且禁止非模板短信 + { + *ns1__Mms_USCORESendResponse->ErrMsg = L"此企业禁止非模板短信"; + ns1__Mms_USCORESendResponse->Count = -113; + m_lReqReturn = ns1__Mms_USCORESendResponse->Count; + return SOAP_OK; + } + if (!bTemplateSms && (userPro.dwSDK & SDK_PROHIBITNONTEMPLATE)) //如果是非模板短信,并且禁止非模板短信 + { + *ns1__Mms_USCORESendResponse->ErrMsg = L"此用户禁止非模板短信"; + ns1__Mms_USCORESendResponse->Count = -114; + m_lReqReturn = ns1__Mms_USCORESendResponse->Count; + return SOAP_OK; + } + CString str; BOOL bAtTime = false; CString strTimer = _T("NULL"); diff --git a/Sgip/Sgip.cpp b/Sgip/Sgip.cpp index bb2c9b6..a9697c4 100644 --- a/Sgip/Sgip.cpp +++ b/Sgip/Sgip.cpp @@ -475,8 +475,12 @@ DWORD WINAPI CSgip::SocketSend(LPVOID lParam) CSgip* pNet = (CSgip*)lParam; while (!pNet->m_bQuitThread) { - //Ͷ - long lCount = pNet->Back_Send(); + long lCount = 0; + if (pNet->m_bConnect && pNet->m_bLoginSgip == 0) + { + //Ͷ + long lCount = pNet->Back_Send(); + } if (lCount > 0) Sleep_Lu(1); else diff --git a/SmsSend.cpp b/SmsSend.cpp index c07db50..99bfddb 100644 --- a/SmsSend.cpp +++ b/SmsSend.cpp @@ -50,7 +50,7 @@ BOOL CSmsSend::OnInitDialog() m_strMobile=_T("13922455188"); - m_strMsg=_T("Զţף㹤˳˶ѣûظţ£[]"); + m_strMsg=_T("סβ֤ǣ7236235ЧDZ˲ԡ"); UpdateData(false); diff --git a/StdAfx.h b/StdAfx.h index 1ac9945..fece232 100644 --- a/StdAfx.h +++ b/StdAfx.h @@ -131,7 +131,8 @@ typedef struct _MobileCom_Head long lSendFCS; long lReport; long lDelay; - TCHAR szWindow[128]; + TCHAR szWindow[126]; + BOOL bVerifySignature; BOOL bMainReSend; BOOL bAllNum; BOOL bCheckCM; @@ -342,6 +343,7 @@ typedef struct _FXSend_MT BOOL bLongSms; long lLongSmsRand; BOOL bOnlySubmitMmsFile; + CString strSignature; }FXSend_MT; typedef CList CFXSend_MT; diff --git a/resource.h b/resource.h index fac7bb8..8f637be 100644 --- a/resource.h +++ b/resource.h @@ -64,6 +64,8 @@ #define IDC_EXCM 1028 #define IDC_CHECKCM 1029 #define IDC_SUBNUM 1030 +#define IDC_CHECKCM2 1030 +#define IDC_VERIFYSIGNNATURE 1030 #define IDC_CMPP 1031 #define IDC_CMPP_EXCHANGENUM 1032 #define IDC_CMPP_PORT 1033