FXSend/MobsetHttp/MobsetHttp.cpp
2025-02-28 17:05:50 +08:00

4374 lines
134 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "stdafx.h"
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include "MobsetHttp.h"
#include "..\FXSend.h"
#include "..\FXSendDlg.h"
#include "..\..\..\public\SendPub.h"
#pragma comment(lib,"iphlpapi.lib")
//因为用到openssl需要引入相关lib
//#pragma comment(lib,".\\mobsetHttp\\openssl\\libcryptoMT.lib")
//#pragma comment(lib,".\\mobsetHttp\\openssl\\libsslMT.lib")
#pragma comment(lib,"crypt32.lib")
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#define new DEBUG_NEW
#endif
namespace MobsetHttp {
void Logger_initiation()
{
return; //暂不使用此日志记录器
/*
AutoPtr<FileChannel> pChannel(new FileChannel);
pChannel->setProperty("path", ".\\HTTPLog\\HttpLog.log");
pChannel->setProperty("rotation", "daily"); //按日归档
pChannel->setProperty("archive", "timestamp");
//pChannel->setProperty("purgeAge", "months"); //每月删除
pChannel->setProperty("purgeCount", "30"); //每月删除
Poco::AutoPtr<Poco::PatternFormatter> patternFormatter(new Poco::PatternFormatter("%Y-%m-%d %H:%M:%S.%c %t"));
patternFormatter->setProperty("times", "local"); // 格式化中的时间显示为本地时间
//patternFormatter->setProperty("pattern", "%Y-%m-%d %H:%M:%S.%c %t");
Poco::AutoPtr<Poco::FormattingChannel> formattingChannel(new Poco::FormattingChannel(patternFormatter, pChannel));
//pChannel->setProperty("times", "local");
//pChannel->setProperty("pattern", "%Y-%m-%d-%m-%d %H:%M:%s");
//pChannel->setProperty("archive", "timestamp");
Logger::root().setChannel(formattingChannel);
Logger& logger = Logger::get("HTTPLog"); // inherits root channel
logger.information("Http Log 启动 ");
*/
}
void logger_Setup()
{
static bool b_setup = false; // only allow run once time
if (!b_setup)
{
b_setup = true;
Logger_initiation();
}
}
class MyPartHandler : public Poco::Net::PartHandler
{
public:
MyPartHandler() :
_length(0)
{
}
void handlePart(const MessageHeader& header, std::istream& stream)
{
_type = header.get("Content-Type", "(unspecified)");
if (header.has("Content-Disposition"))
{
std::string disp;
NameValueCollection params;
MessageHeader::splitParameters(header["Content-Disposition"], disp, params);
_name = params.get("name", "(unnamed)");
_fileName = params.get("filename", "(unnamed)");
}
CountingInputStream istr(stream);
NullOutputStream ostr;
StreamCopier::copyStream(istr, ostr);
_length = istr.chars();
}
int length() const
{
return _length;
}
const std::string& name() const
{
return _name;
}
const std::string& fileName() const
{
return _fileName;
}
const std::string& contentType() const
{
return _type;
}
private:
int _length;
std::string _type;
std::string _name;
std::string _fileName;
};
class FormRequestHandler : public HTTPRequestHandler
/// Return a HTML document with the current date and time.
{
public:
enum SmsFuncType
{
SMS_UNKNOW=0,
SMS_SEND = 1,
SMS_GETRECV = 2,
SMS_GETREPORT = 3,
SMS_GETBALANCE = 4,
SMS_GETSIGN = 5,
SMS_GETSTATUS = 6,
SMS_WXWORK=7,
TEMPLATE_ADD = 8,
TEMPLATE_MODIFY = 9,
TEMPLATE_DEL = 10,
TEMPLATE_QUERY = 11,
TEMPLATE_LIST = 12,
TEMPLATE_SENDSMS = 13,
SIGNNAME_APPLY = 14,
SIGNNAME_STATUS = 15,
SMS_CANCEL=16,
};
enum SmsHttpVer
{
SMS_HTTP_VER_UNKNOW=0,
SMS_HTTP_VER_1 = 1,
SMS_HTTP_VER_2 = 2,
SMS_HTTP_VER_3 = 3,
SMS_HTTP_VER_WXWORK =4,
};
enum SmsReqCharset
{
SMS_REQCHARSET_AUTO = 0,
SMS_REQCHARSET_GBK = 1,
SMS_REQCHARSET_UTF8 = 2,
};
public:
MobsetHttpEx * m_pMobsetHttpEx;
public:
FormRequestHandler(MobsetHttpEx * pHttpEx)
{
m_pMobsetHttpEx = pHttpEx;
}
void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
{
//Application& app = Application::instance();
//app.logger().information("Request from " + request.clientAddress().toString());
//Logger::root().information("Request from " + request.clientAddress().toString());
//std::string text;
//StreamCopier::copyToString(request.stream(), text);
//std::string host = request.get("HOST");
DWORD dwReqTime = ::GetTickCount();
URI uri(request.getURI());
std::string path = uri.getPath();
//std::string query = uri.getQuery();
std::string query =uri.getRawQuery();
Poco::trim(path);
std::string postdata;
StreamCopier::copyToString(request.stream(), postdata); //获取 Post 过来的数据
//std::istringstream ss(postdata); //复制一个istream给HTMLForm读取参数
//std::istringstream ss(""); //复制一个istream给HTMLForm读取参数
//MyPartHandler partHandler;
//HTMLForm form(request, ss, partHandler);
MyHttpParamsParser form;
form.Parser(&query,&postdata);
DWORD dwReqCount = m_pMobsetHttpEx->m_dwReqCount++;
long lRetCode = -1000;
/*
std::ostream& ostr2 = response.send();
ostr2 << "1,test OK";
return;
*/
//先判断URL
CString strResponse;
CStringA strResopnseA;
SmsFuncType funcType = SMS_UNKNOW;
SmsHttpVer httpVer = SMS_HTTP_VER_UNKNOW;
SmsReqCharset reqCharset = SMS_REQCHARSET_AUTO;
if (Poco::icompare(path, "/SDK3/Sms") == 0)
{
httpVer = SMS_HTTP_VER_3;
CString strMethod = form.getAsStringW("Methods", "", reqCharset);
strMethod.Trim();
if (strMethod.CompareNoCase( _T("SmsSend")) == 0)
funcType = SMS_SEND;
else
if (strMethod.CompareNoCase(_T("SmsGetRecv")) == 0)
funcType = SMS_GETRECV;
else
if (strMethod.CompareNoCase(_T("SmsGetReport")) == 0)
funcType = SMS_GETREPORT;
else
if (strMethod.CompareNoCase(_T("SmsGetBalance")) == 0)
funcType = SMS_GETBALANCE;
else
if (strMethod.CompareNoCase(_T("SmsGetSign")) == 0)
funcType = SMS_GETSIGN;
else
if (strMethod.CompareNoCase(_T("SmsCancel")) == 0)
funcType = SMS_CANCEL;
else
if (strMethod.CompareNoCase(_T("TemplateAdd")) == 0)
funcType = TEMPLATE_ADD;
else
if (strMethod.CompareNoCase(_T("TemplateModify")) == 0)
funcType = TEMPLATE_MODIFY;
else
if (strMethod.CompareNoCase(_T("TemplateDel")) == 0)
funcType = TEMPLATE_DEL;
else
if (strMethod.CompareNoCase(_T("TemplateQuery")) == 0)
funcType = TEMPLATE_QUERY;
else
if (strMethod.CompareNoCase(_T("TemplateList")) == 0)
funcType = TEMPLATE_LIST;
else
if (strMethod.CompareNoCase(_T("TemplateSendSms")) == 0)
funcType = TEMPLATE_SENDSMS;
else
if (strMethod.CompareNoCase(_T("SignNameApply")) == 0)
funcType = SIGNNAME_APPLY;
else
if (strMethod.CompareNoCase(_T("SignNameStatus")) == 0)
funcType = SIGNNAME_STATUS;
else
if (strMethod.CompareNoCase(_T("TemplateAdd")) == 0)
funcType = TEMPLATE_ADD;
else
if (strMethod.CompareNoCase(_T("TemplateModify")) == 0)
funcType = TEMPLATE_MODIFY;
else
if (strMethod.CompareNoCase(_T("TemplateDel")) == 0)
funcType = TEMPLATE_DEL;
else
if (strMethod.CompareNoCase(_T("TemplateQuery")) == 0)
funcType = TEMPLATE_QUERY;
else
if (strMethod.CompareNoCase(_T("TemplateList")) == 0)
funcType = TEMPLATE_LIST;
else
if (strMethod.CompareNoCase(_T("TemplateSendSms")) == 0)
funcType = TEMPLATE_SENDSMS;
if (funcType == SMS_UNKNOW)
{
response.setChunkedTransferEncoding(true);
MediaType mType("application/json");
mType.setParameter("Charset", "utf-8");
response.setContentType(mType);
std::ostream& ostr = response.send();
std::ostringstream rspStr;
Poco::JSON::Object rspObj;
rspObj.set("Code", -191);
rspObj.set("Message", "Method不存在");
rspObj.stringify(rspStr,2);
strResopnseA = CW2A(CA2W(rspStr.str().c_str()),CP_UTF8);
ostr << strResopnseA;
return;
}
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/SDK/Sms_KYSms.asp") == 0)
{
funcType = SMS_GETBALANCE;
httpVer = SMS_HTTP_VER_1;
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/SDK2/Sms_KYSms.asp") == 0)
{
funcType = SMS_GETBALANCE;
httpVer = SMS_HTTP_VER_2;
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/SDK/Sms_Status.asp") == 0)
{
funcType = SMS_GETSTATUS;
httpVer = SMS_HTTP_VER_1;
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/SDK2/Sms_Status.asp") == 0)
{
funcType = SMS_GETSTATUS;
httpVer = SMS_HTTP_VER_2;
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/SDK/Sms_GetCM.asp") == 0)
{
funcType = SMS_GETSIGN;
httpVer = SMS_HTTP_VER_1;
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/SDK2/Sms_GetCM.asp") == 0)
{
funcType = SMS_GETSIGN;
httpVer = SMS_HTTP_VER_2;
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/SDK/Sms_Send.asp") == 0)
{
funcType = SMS_SEND;
httpVer = SMS_HTTP_VER_1;
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/SDK2/Sms_Send.asp") == 0)
{
funcType = SMS_SEND;
httpVer = SMS_HTTP_VER_2;
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/SDK/Sms_Recv.asp") == 0)
{
funcType = SMS_GETRECV;
httpVer = SMS_HTTP_VER_1;
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/SDK2/Sms_Recv.asp") == 0)
{
funcType = SMS_GETRECV;
httpVer = SMS_HTTP_VER_2;
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/SDK/Sms_Cancel.asp") == 0)
{
funcType = SMS_CANCEL;
httpVer = SMS_HTTP_VER_1;
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/SDK2/Sms_Cancel.asp") == 0)
{
funcType = SMS_CANCEL;
httpVer = SMS_HTTP_VER_2;
}
if (funcType == SMS_UNKNOW && Poco::icompare(path, "/WxWork") == 0)
{
funcType = SMS_WXWORK;
httpVer = SMS_HTTP_VER_WXWORK;
}
response.setChunkedTransferEncoding(true);
switch (httpVer)
{
case SMS_HTTP_VER_3:
{
reqCharset = SMS_REQCHARSET_UTF8; //原始请求编码UTF-8
MediaType mType("application/json");
mType.setParameter("Charset", "utf-8");
response.setContentType(mType);
}
break;
case SMS_HTTP_VER_1:
case SMS_HTTP_VER_2:
{
MediaType mType("text/html");
CStringW strCharset = form.getAsStringW("Charset", "", reqCharset);
if (strCharset.CompareNoCase(_T("UTF-8")) == 0)
{
reqCharset = SMS_REQCHARSET_UTF8;
mType.setParameter("Charset", "utf-8");
}
else
{
reqCharset = SMS_REQCHARSET_GBK; //原始请求编码GB2312
mType.setParameter("Charset", "GB2312");
}
response.setContentType(mType);
}
break;
case SMS_HTTP_VER_WXWORK:
{
MediaType mType("text/xml");
mType.setParameter("Charset", "utf-8");
response.setContentType(mType);
}
break;
default:
{
MediaType mType("text/html");
mType.setParameter("Charset", "GB2312");
response.setContentType(mType);
}
break;
}
switch (funcType)
{
case SMS_SEND:
strResponse = Http_Sms_Send(request, response, form, path,httpVer, reqCharset, lRetCode);
break;
case SMS_GETRECV:
strResponse = Http_Sms_Recv(request, response, form, path, httpVer, reqCharset, lRetCode);
break;
case SMS_GETREPORT:
strResponse = Http_Sms_Report(request, response, form, path, httpVer, reqCharset, lRetCode);
break;
case SMS_GETSTATUS:
strResponse = Http_Sms_Status(request, response, form, path, httpVer, reqCharset, lRetCode);
break;
case SMS_GETBALANCE:
strResponse = Http_Sms_KYSms(request, response, form, path, httpVer, reqCharset, lRetCode);
break;
case SMS_GETSIGN:
strResponse = Http_Sms_GetCM(request, response, form, path, httpVer, reqCharset, lRetCode);
break;
case SMS_WXWORK:
strResponse = Http_Sms_WxWork(request, response, form, path, httpVer, reqCharset, lRetCode, postdata);
break;
case SMS_CANCEL:
strResponse = Http_Sms_Cancel(request, response, form, path, httpVer, reqCharset, lRetCode);
break;
case SIGNNAME_APPLY:
strResponse = Http_SignName_Apply(request, response, form, path, httpVer, reqCharset, lRetCode, postdata);
break;
case SIGNNAME_STATUS:
strResponse = Http_SignName_Status(request, response, form, path, httpVer, reqCharset,lRetCode);
break;
case TEMPLATE_ADD:
strResponse = Http_Template_Add(request, response, form, path, httpVer, reqCharset, lRetCode);
break;
case TEMPLATE_MODIFY:
strResponse = Http_Template_Modify(request, response, form, path, httpVer, reqCharset, lRetCode);
break;
case TEMPLATE_DEL:
strResponse = Http_Template_Del(request, response, form, path, httpVer, reqCharset, lRetCode);
break;
case TEMPLATE_QUERY:
strResponse = Http_Template_Query(request, response, form, path, httpVer, reqCharset, lRetCode);
break;
case TEMPLATE_LIST:
strResponse = Http_Template_List(request, response, form, path, httpVer, reqCharset, lRetCode);
break;
case TEMPLATE_SENDSMS:
strResponse = Http_Template_SendSms(request, response, form, path, httpVer, reqCharset, lRetCode);
break;
}
std::ostream& ostr = response.send();
if (funcType != SMS_UNKNOW && strResponse.GetLength() > 0) //发送返回
{
if (httpVer == SMS_HTTP_VER_3 ||
httpVer == SMS_HTTP_VER_WXWORK)
strResopnseA = CW2A(strResponse, CP_UTF8);
else
{
if (reqCharset == SMS_REQCHARSET_UTF8)
strResopnseA = CW2A(strResponse, CP_UTF8);
else
strResopnseA = CW2A(strResponse);
}
ostr << strResopnseA;
}
else
{
if (funcType == SMS_UNKNOW)
{
response.setChunkedTransferEncoding(true);
MediaType mType("text/html");
mType.setParameter("Charset", "GB2312");
response.setContentType(mType);
strResopnseA = "<HTML> MobsetApi HttpServices! </HTML>";
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr();
char IP[32] = { 0 };
//char *p = inet_ntoa(pSin->sin_addr);
//strcpy(IP, inet_ntoa(pSin->sin_addr));
inet_ntop(AF_INET, &pSin->sin_addr, IP, 32);
//211.147.242.59 http://192.168.1.16/
if (strcmp(IP,"211.147.242.59")!=0)
{
CString strHtmlFileName = CString(_T("\\MobsetWeb.html"));
std::string host = request.get("HOST");
CStringA strHostA = CA2W(host.c_str());
strHostA.MakeLower();
if (strHostA.Find("web5.mobset.com") >= 0)
strHtmlFileName = CString(_T("\\MobsetWeb_Oem.html"));
if (strHostA.Find("sms3.mobset.net") >= 0)
strHtmlFileName = CString(_T("\\MobsetWeb_Oem.html"));
BOOL bReadFile = false;
TCHAR RootDirectory[_MAX_PATH] = { 0 };
m_pMobsetHttpEx->GetCurrentPath(RootDirectory);
CString strFileName = CString(RootDirectory) + strHtmlFileName;
CFile file;
if (file.Open(strFileName, CFile::modeRead))
{
char * p = new char[file.GetLength()];
memset(p, 0, file.GetLength());
file.Read(p, file.GetLength());
CStringA str(p, file.GetLength());
file.Close();
strResopnseA = str;
bReadFile = true;
delete p;
//return 404;
}
}
/*
CStringA strWebURL;
if (this->m_pMobsetHttpEx->m_pParam)
{
CFXSendDlg * pDlg = (CFXSendDlg *)this->m_pMobsetHttpEx->m_pParam;
strWebURL = CW2A(pDlg->m_MCom_Head.szA7);
}
CStringA strResopnseB =
"<html>\n"
"<head>\n"
"<title>短信易</title>\n"
"<meta http-equiv=\"Content - Type\" content=\"text/html\"; charset = \"gb2312\" />\n"
"</head>\n"
"<body>\n"
"<p align = center ><b>抱歉,你访问的链接不存在,请检查!</b></p>\n"
"<p align = center >如果你想访问短信易Web版它已迁移至</b></p>\n"
"<p align = center ><a href = \"%s\" target=\"_blank\" >%s</a></p>\n"
"</body>\n"
"</html>\n";
strResopnseA.Format(strResopnseB, strWebURL, strWebURL);
*/
ostr << strResopnseA;
}
else
{
if (httpVer == SMS_HTTP_VER_3)
{
std::ostringstream rspStr;
Poco::JSON::Object rspObj;
rspObj.set("Code", -299);
rspObj.set("Message", "未定义错误");
rspObj.stringify(rspStr, 2);
strResopnseA = CW2A(CA2W(rspStr.str().c_str()), CP_UTF8);
ostr << strResopnseA;
}
else
{
ostr << "-299,未定义错误";
}
}
}
if (m_pMobsetHttpEx->m_bHttpLog)
{
//记录日志客户端IP\tGET/POST\tHOST\tURL\tPOST Data
std::string clientAddress = request.clientAddress().toString();
std::string mothod = request.getMethod();
//std::string URL = request.getURI();
std::string URL = path;
if(query.length()>0 ) URL=URL+'?' + query;
std::string host = request.get("HOST");
//std::string postdata;
//StreamCopier::copyToString(request.stream(), postdata);
/*
CString strClientAddress = CA2W(clientAddress.c_str());
CString strMothod = CA2W(mothod.c_str());
CString strHost = CA2W(host.c_str());
CString strURL = CA2W(URL.c_str()); strURL.Replace(_T("\r"), _T(" ")); strURL.Replace(_T("\n"), _T(" ")); strURL.Replace(_T("\t"), _T(" "));
CString strPostData = CA2W(postdata.c_str());
if (strPostData.GetLength() > 1024) strPostData = strPostData.Left(1024);
strPostData.Replace(_T("\r"), _T(" ")); strPostData.Replace(_T("\n"), _T(" ")); strPostData.Replace(_T("\t"), _T(" "));
*/
CStringA strLog;
//strLog.Format(_T("%d\t%d\t%d\t%s\t%s\t%s\t%s\t%s"), dwReqCount, lRetCode, ::GetTickCount() - dwReqTime,strClientAddress, strMothod, strHost, strURL, strPostData);
strLog.Format("%d\t%d\t%d\t%s\t%s\t%s\t%s\t%s", dwReqCount, lRetCode, ::GetTickCount() - dwReqTime, clientAddress.c_str(), mothod.c_str(), host.c_str(), URL.c_str(), postdata.c_str());
this->m_pMobsetHttpEx->Http_LogA(strLog);
}
/*
ostr <<
"<html>\n"
"<head>\n"
"<title>POCO Form Server Sample</title>\n"
"<meta http-equiv=\"Content - Type\" content=\"text/html\"; charset = \"gb2312\" />\n"
"</head>\n"
"<body>\n"
"<h1>POCO Form Server Sample</h1>\n"
"<h2>GET Form</h2>\n"
"<form method=\"GET\" action=\"/form\">\n"
"<input type=\"text\" name=\"text\" size=\"31\">\n"
"<input type=\"submit\" value=\"GET\">\n"
"</form>\n"
"<h2>POST Form</h2>\n"
"<form method=\"POST\" action=\"/form\">\n"
"<input type=\"text\" name=\"text\" size=\"31\">\n"
"<input type=\"submit\" value=\"POST\">\n"
"</form>\n"
"<h2>File Upload</h2>\n"
"<form method=\"POST\" action=\"/form\" enctype=\"multipart/form-data\">\n"
"<input type=\"file\" name=\"file\" size=\"31\"> \n"
"<input type=\"submit\" value=\"Upload\">\n"
"</form>\n";
ostr << "<h2>Request</h2><p>\n";
ostr << "Method: " << request.getMethod() << "<br>\n";
ostr << "URI: " << request.getURI() << "<br>\n";
NameValueCollection::ConstIterator it = request.begin();
NameValueCollection::ConstIterator end = request.end();
for (; it != end; ++it)
{
ostr << it->first << ": " << it->second << "<br>\n";
}
ostr << "</p>";
if (!form.empty())
{
ostr << "<h2>Form</h2><p>\n";
it = form.begin();
end = form.end();
for (; it != end; ++it)
{
ostr << it->first << ": " << it->second << "<br>\n";
}
ostr << "</p>";
}
if (!partHandler.name().empty())
{
ostr << "<h2>Upload</h2><p>\n";
ostr << "Name: " << partHandler.name() << "<br>\n";
ostr << "File Name: " << partHandler.fileName() << "<br>\n";
ostr << "Type: " << partHandler.contentType() << "<br>\n";
ostr << "Size: " << partHandler.length() << "<br>\n";
ostr << "</p>";
}
ostr << "</body>\n";
*/
}
static CStringW ChangeHttpReqToW(std::string in, long lPage)
{
CStringW str;
BOOL bUTF8 = false;
switch (lPage)
{
case 1: //GBK编码
bUTF8 = false;
break;
case 2: //UTF8编码
bUTF8 = true;
break;
case 0: //自动编码
default:
bUTF8 = IsTextUTF8((char*)in.c_str(), in.length());
break;
}
if (bUTF8)
str= CA2W(in.c_str(), CP_UTF8);
else
str= CA2W(in.c_str());
return str;
}
static BOOL IsTextUTF8(char* str, long length)
{
DWORD nBytes = 0;//UFT8可用1-6个字节编码,ASCII用一个字节
UCHAR chr;
BOOL bAllAscii = TRUE; //如果全部都是ASCII, 说明不是UTF-8
for (int i = 0; i<length; ++i)
{
chr = *(str + i);
if ((chr & 0x80) != 0) // 判断是否ASCII编码,如果不是,说明有可能是UTF-8,ASCII用7位编码,但用一个字节存,最高位标记为0,o0xxxxxxx
bAllAscii = FALSE;
if (nBytes == 0) //如果不是ASCII码,应该是多字节符,计算字节数
{
if (chr >= 0x80)
{
if (chr >= 0xFC && chr <= 0xFD)
nBytes = 6;
else if (chr >= 0xF8)
nBytes = 5;
else if (chr >= 0xF0)
nBytes = 4;
else if (chr >= 0xE0)
nBytes = 3;
else if (chr >= 0xC0)
nBytes = 2;
else
return FALSE;
nBytes--;
}
}
else //多字节符的非首字节,应为 10xxxxxx
{
if ((chr & 0xC0) != 0x80)
return FALSE;
nBytes--;
}
}
if (nBytes > 0) //违返规则
return FALSE;
if (bAllAscii) //如果全部都是ASCII, 说明不是UTF-8
return FALSE;
return TRUE;
}
CString Http_Sms_KYSms(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long & lRetCode)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Sms_USCOREGetBalance * pReq = new MobsetApi::_ns1__Sms_USCOREGetBalance;
MobsetApi::_ns1__Sms_USCOREGetBalanceResponse *pResponse = new MobsetApi::_ns1__Sms_USCOREGetBalanceResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pMobsetAPI->Sms_USCOREGetBalance(pReq, pResponse); //请求
lRetCode = pResponse->Balance;
if (httpVer == SMS_HTTP_VER_1 ||
httpVer == SMS_HTTP_VER_2)
{
switch (pResponse->Balance) //返回值转换
{
case -102:
pResponse->Balance = -1;
break;
case -100:
case -101:
case -103:
case -104:
case -105:
pResponse->Balance = -2;
break;
}
strResponse.Format(_T("%d,%s"), pResponse->Balance, pResponse->ErrMsg->c_str()); //生成返回
//strResponse.Format(_T("%d"), pResponse->Balance); //生成返回
}
else
{
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->Balance);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_Sms_Status(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long & lRetCode)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Sms_USCOREGetBalance * pReq = new MobsetApi::_ns1__Sms_USCOREGetBalance;
MobsetApi::_ns1__Sms_USCOREGetBalanceResponse *pResponse = new MobsetApi::_ns1__Sms_USCOREGetBalanceResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
/*
//HTTP版本
long lHTTPSDKVer = 1;
if (Poco::icompare(path, "/SDK2/Sms_Status.asp") == 0)
lHTTPSDKVer = 2;
std::string strTemp = form.get("CorpID", "");
pReq->CorpID = atol(strTemp.c_str());
strTemp = form.get("LoginName", "");
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = ChangeHttpReqToW(strTemp, 1);//CA2W(strTemp.c_str(),CP_UTF8);
strTemp = form.get("Passwd", "");
pReq->Password = SOAP_NEW(std::wstring);
*pReq->Password = ChangeHttpReqToW(strTemp, 1);//CA2W(strTemp.c_str(),CP_UTF8);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (lHTTPSDKVer == 2)
{
strTemp = form.get("TimeStamp", "");
}
else
{
strTemp = "MOBSETHTTP1";
}
*pReq->TimeStamp = ChangeHttpReqToW(strTemp, 1);//CA2W(strTemp.c_str(),CP_UTF8);
*/
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->chunksize = _ttol(form.getAsStringW("SmsID", "0", reqCharset));
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pMobsetAPI->Sms_USCOREGetStatus(pReq, pResponse); //请求
lRetCode = pResponse->Balance;
//strResponse.Format(_T("%d,%s"), pResponse->Balance, pResponse->ErrMsg->c_str()); //生成返回
strResponse.Format(_T("%d"), pResponse->Balance); //生成返回
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_Sms_WxWork(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long & lRetCode, std::string & postData)
{
CString strResponse;
try
{
CFXSendDlg * pDlg = NULL;
if (this->m_pMobsetHttpEx->m_pParam)
{
pDlg = (CFXSendDlg *)this->m_pMobsetHttpEx->m_pParam;
}
if (pDlg && m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Sms_USCOREGetBalance * pReq = new MobsetApi::_ns1__Sms_USCOREGetBalance;
MobsetApi::_ns1__Sms_USCOREGetBalanceResponse *pResponse = new MobsetApi::_ns1__Sms_USCOREGetBalanceResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
std::string msgsignature = form.get("msg_signature", "");
std::string timestamp = form.get("timestamp", "");
std::string nonce = form.get("nonce", "");
std::string echostr = form.get("echostr", "");
std::string wxCorpID, wxToken, WxAESKey;
wxCorpID = std::string(CW2A(pDlg->m_MCom_Head.szCmpp_CorpID));
wxToken = std::string(CW2A(pDlg->m_MCom_Head.szA7));
WxAESKey = std::string(CW2A(pDlg->m_MCom_Head.szA8));
WXBizMsgCrypt wxCrypt(wxToken, WxAESKey, wxCorpID);
if (echostr.length() > 0) //这是设置URL的。
{
std::string reechostr;
wxCrypt.VerifyURL(msgsignature, timestamp, nonce, echostr, reechostr);
strResponse = CString(CA2W(reechostr.c_str()));
}
else
{
strResponse = _T("");
std::string rexml;
if (wxCrypt.DecryptMsg(msgsignature, timestamp, nonce, postData, rexml) == 0)
{
std::string FromUserName;
std::string MsgType;
std::string Content;
wxCrypt.GetXmlField(rexml, "FromUserName", FromUserName);
wxCrypt.GetXmlField(rexml, "MsgType", MsgType);
wxCrypt.GetXmlField(rexml, "Content", Content);
CString strMsgType = CA2W(MsgType.c_str(), CP_UTF8);
CString strFromUser = CA2W(FromUserName.c_str(), CP_UTF8);
CString strMsg = CA2W(Content.c_str(), CP_UTF8);
if (strMsgType == CString(_T("text")) && strMsg.GetLength() > 0)
{
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = strFromUser;
pReq->Password = SOAP_NEW(std::wstring);
*pReq->Password = strMsg;
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
m_pMobsetHttpEx->m_pMobsetAPI->Sms_USCOREWxWork(pReq, pResponse); //请求
strResponse = CString(pResponse->ErrMsg->c_str());
//m_pMobsetHttpEx->m_pMobsetAPI->Sms_USCOREWxWork(pReq, pResponse); //请求
//lRetCode = pResponse->Balance;
//strResponse.Format(_T("%d"), pResponse->Balance); //生成返回
}
}
}
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_Sms_Cancel(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser& form, std::string& path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long& lRetCode)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx* pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Sms_USCORECancel* pReq = new MobsetApi::_ns1__Sms_USCORECancel;
MobsetApi::_ns1__Sms_USCORECancelResponse* pResponse = new MobsetApi::_ns1__Sms_USCORECancelResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
CString strSmsID;;
strSmsID = form.getAsStringW("SmsID", "", reqCharset);
CStringArray strIDS;
strSmsID.Replace(_T(";"), _T(","));
strSmsID.Replace(_T(""), _T(","));
strSmsID.Replace(_T(""), _T(","));
strSmsID.Replace(_T("."), _T(","));
strSmsID.Replace(_T(""), _T(","));
strSmsID.Replace(_T(":"), _T(","));
strSmsID.Replace(_T(""), _T(","));
strSmsID.Replace(_T(" "), _T(","));
strSmsID.Replace(_T(" "), _T(","));
strSmsID.Replace(_T(";"), _T(","));
SplitString(strIDS, strSmsID, _T(","));
long lSmsIDCount = strIDS.GetSize();
pReq->SmsID = new LONG64[lSmsIDCount];
pReq->__sizeSmsID = lSmsIDCount;
for (int i = 0; i < lSmsIDCount; i++)
{
pReq->SmsID[i] = _ttol(strIDS.GetAt(i));
}
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
//pReq->SmsID = _ttol(form.getAsStringW("SmsID", "0", reqCharset));
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pMobsetAPI->Sms_USCORECancel(pReq, pResponse); //请求
lRetCode = pResponse->Result;
if (httpVer == SMS_HTTP_VER_1 ||
httpVer == SMS_HTTP_VER_2)
{
//strResponse.Format(_T("%d,%s"), pResponse->Balance, pResponse->ErrMsg->c_str()); //生成返回
strResponse.Format(_T("%d"), pResponse->Result); //生成返回
}
else
{
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->Result);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
Poco::JSON::Array msgID;
if (pResponse->CancelIDList) //取回复ID
{
for (int i = 0; i < pResponse->__sizeCancelIDList; i++)
{
if (pResponse->CancelIDList[i])
{
Poco::JSON::Object rspMsgID(Poco::JSON_PRESERVE_KEY_ORDER);
rspMsgID.set("SmsID", pResponse->CancelIDList[i]->SmsID);
rspMsgID.set("Status", pResponse->CancelIDList[i]->Status);
msgID.add(rspMsgID);
}
}
if (msgID.size() > 0)
rspObj.set("Details", msgID);
}
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
if (pReq->SmsID) delete pReq->SmsID;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_Sms_GetCM(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long &lRetCode)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Sms_USCOREGetSign * pReq = new MobsetApi::_ns1__Sms_USCOREGetSign;
MobsetApi::_ns1__Sms_USCOREGetSignResponse *pResponse = new MobsetApi::_ns1__Sms_USCOREGetSignResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
long lCharsetType = 0;
switch (httpVer)
{
case SMS_HTTP_VER_1:
case SMS_HTTP_VER_2:
lCharsetType = 1; //GB2312
break;
case SMS_HTTP_VER_3:
lCharsetType = 2; //UTF-8
break;
}
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pMobsetAPI->Sms_USCOREGetSign(pReq, pResponse); //请求
lRetCode = pResponse->ErrCode;
if (httpVer == SMS_HTTP_VER_1 ||
httpVer == SMS_HTTP_VER_2)
{
switch (pResponse->ErrCode) //返回值转换
{
case 0:
pResponse->ErrCode = 1;
break;
case -100:
case -102:
pResponse->ErrCode = -1;
break;
case -101:
case -103:
case -104:
case -105:
pResponse->ErrCode = -2;
break;
}
if (pResponse->ErrCode == 1)
strResponse.Format(_T("%d,【%s】"), pResponse->ErrCode, pResponse->Sign->c_str()); //生成返回
else
strResponse.Format(_T("%d,%s"), pResponse->ErrCode, pResponse->ErrMsg->c_str()); //生成返回
//strResponse.Format(_T("%d"), pResponse->Balance); //生成返回
}
else
{
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->ErrCode);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
if (pResponse->Sign)
rspObj.set("Sign", (std::string)CW2A(pResponse->Sign->c_str()));
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
//if (pResponse->Sign) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->Sign);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_SignName_Apply(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset,long & lRetCode, std::string & postData)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__SignName_USCOREApply * pReq = new MobsetApi::_ns1__SignName_USCOREApply;
MobsetApi::_ns1__SignName_USCOREApplyResponse *pResponse = new MobsetApi::_ns1__SignName_USCOREApplyResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pReq->DefaultSignName = 1;
pReq->SignNameType = 0;
pReq->SignNameBelongTo = 0;
pReq->SignName = NULL;
pReq->Document1Type = 0;
pReq->Document1FileName = NULL;
pReq->Document1FileData = NULL;
pReq->Document2Type = 0;
pReq->Document2FileName = NULL;
pReq->Document2FileData = NULL;
pReq->Document3Type = 0;
pReq->Document3FileName = NULL;
pReq->Document3FileData = NULL;
pReq->Remark = NULL;
pResponse->ErrMsg = NULL;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
pReq->DefaultSignName = _ttol(form.getAsStringW("DefaultSignName", "1", reqCharset));
pReq->SignNameType = _ttol(form.getAsStringW("SignNameType", "0", reqCharset));
pReq->SignNameBelongTo = _ttol(form.getAsStringW("SignNameBelongTo", "0", reqCharset));
pReq->SignName = SOAP_NEW(std::wstring);
*pReq->SignName = form.getAsStringW("SignName", "", reqCharset);
pReq->Document1Type = _ttol(form.getAsStringW("Document1Type", "0", reqCharset));
pReq->Document1FileName = SOAP_NEW(std::wstring);
*pReq->Document1FileName = form.getAsStringW("Document1FileName", "", reqCharset);
//取三个文件中的最大值。
long lFileDataLength1 = form.getLength("Document1FileData");
long lFileDataLength2 = form.getLength("Document2FileData");
long lFileDataLength3 = form.getLength("Document3FileData");
long lFileDataLength = lFileDataLength1;
if (lFileDataLength < lFileDataLength2) lFileDataLength = lFileDataLength2;
if (lFileDataLength < lFileDataLength3) lFileDataLength = lFileDataLength3;
BYTE * pFileData = new BYTE[lFileDataLength];
if (lFileDataLength1 > 0)
{
long lGetData = form.getAsBase64Decode("Document1FileData", pFileData, lFileDataLength);
if (lGetData > 0)
{
pReq->Document1FileData = (MobsetApi::xsd__base64Binary*)SOAP_NEW(MobsetApi::xsd__base64Binary);
pReq->Document1FileData->__size = lGetData;
pReq->Document1FileData->__ptr = SOAP_NEW(BYTE[lGetData]);
memcpy(pReq->Document1FileData->__ptr, pFileData, lGetData);
}
}
pReq->Document2Type = _ttol(form.getAsStringW("Document2Type", "0", reqCharset));
pReq->Document2FileName = SOAP_NEW(std::wstring);
*pReq->Document2FileName = form.getAsStringW("Document2FileName", "", reqCharset);
if (lFileDataLength2 > 0)
{
long lGetData = form.getAsBase64Decode("Document2FileData", pFileData, lFileDataLength);
if (lGetData > 0)
{
pReq->Document2FileData = (MobsetApi::xsd__base64Binary*)SOAP_NEW(MobsetApi::xsd__base64Binary);
pReq->Document2FileData->__size = lGetData;
pReq->Document2FileData->__ptr = SOAP_NEW(BYTE[lGetData]);
memcpy(pReq->Document2FileData->__ptr, pFileData, lGetData);
}
}
pReq->Document3Type = _ttol(form.getAsStringW("Document3Type", "0", reqCharset));
pReq->Document3FileName = SOAP_NEW(std::wstring);
*pReq->Document3FileName = form.getAsStringW("Document3FileName", "", reqCharset);
if (lFileDataLength3 > 0)
{
long lGetData = form.getAsBase64Decode("Document3FileData", pFileData, lFileDataLength);
if (lGetData > 0)
{
pReq->Document3FileData = (MobsetApi::xsd__base64Binary*)SOAP_NEW(MobsetApi::xsd__base64Binary);
pReq->Document3FileData->__size = lGetData;
pReq->Document3FileData->__ptr = SOAP_NEW(BYTE[lGetData]);
memcpy(pReq->Document3FileData->__ptr, pFileData, lGetData);
}
}
if (pFileData) delete pFileData;
pReq->Remark = SOAP_NEW(std::wstring);
*pReq->Remark = form.getAsStringW("Remark", "", reqCharset);
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pMobsetAPI->SignName_USCOREApply(pReq, pResponse); //请求
lRetCode = pResponse->SignNameID;
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->SignNameID);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
if (pReq->SignName) delete pReq->SignName;
if (pReq->Document1FileName) delete pReq->Document1FileName;
if (pReq->Document1FileData)
{
if (pReq->Document1FileData->__ptr)
delete pReq->Document1FileData->__ptr;
delete pReq->Document1FileData;
}
if (pReq->Document2FileName) delete pReq->Document2FileName;
if (pReq->Document2FileData)
{
if (pReq->Document2FileData->__ptr)
delete pReq->Document2FileData->__ptr;
delete pReq->Document2FileData;
}
if (pReq->Document3FileName) delete pReq->Document3FileName;
if (pReq->Document3FileData)
{
if (pReq->Document3FileData->__ptr)
delete pReq->Document3FileData->__ptr;
delete pReq->Document3FileData;
}
if (pReq->Remark) delete pReq->Remark;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
//if (pResponse->Sign) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->Sign);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_SignName_Status(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long &lRetCode)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__SignName_USCOREStatus * pReq = new MobsetApi::_ns1__SignName_USCOREStatus;
MobsetApi::_ns1__SignName_USCOREStatusResponse *pResponse = new MobsetApi::_ns1__SignName_USCOREStatusResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
pReq->SignNameID = _ttol(form.getAsStringW("SignNameID", "1", reqCharset));
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pMobsetAPI->SignName_USCOREStatus(pReq, pResponse); //请求
lRetCode = pResponse->Status;
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->Status);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
//if (pResponse->Sign) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->Sign);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_Template_Add(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long &lRetCode)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Template_USCOREAdd * pReq = new MobsetApi::_ns1__Template_USCOREAdd;
MobsetApi::_ns1__Template_USCOREAddResponse *pResponse = new MobsetApi::_ns1__Template_USCOREAddResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
pReq->TemplateType = _ttol(form.getAsStringW("TemplateType", "0", reqCharset));
pReq->TemplateName = SOAP_NEW(std::wstring);
*pReq->TemplateName = form.getAsStringW("TemplateName", "", reqCharset);
pReq->TemplateContent = SOAP_NEW(std::wstring);
*pReq->TemplateContent = form.getAsStringW("TemplateContent", "", reqCharset);
pReq->Remark = SOAP_NEW(std::wstring);
*pReq->Remark = form.getAsStringW("Remark", "", reqCharset);
pReq->IsTemporary = _ttol(form.getAsStringW("IsTemporary", "0", reqCharset));
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pMobsetAPI->Template_USCOREAdd(pReq, pResponse); //请求
lRetCode = pResponse->TemplateID;
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->TemplateID);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
if (pReq->TemplateName) delete pReq->TemplateName;
if (pReq->TemplateContent) delete pReq->TemplateContent;
if (pReq->Remark) delete pReq->Remark;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
//if (pResponse->Sign) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->Sign);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_Template_Modify(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long &lRetCode)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Template_USCOREModify * pReq = new MobsetApi::_ns1__Template_USCOREModify;
MobsetApi::_ns1__Template_USCOREModifyResponse *pResponse = new MobsetApi::_ns1__Template_USCOREModifyResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
pReq->TemplateID = _ttol(form.getAsStringW("TemplateID", "0", reqCharset));
pReq->TemplateType = _ttol(form.getAsStringW("TemplateType", "0", reqCharset));
pReq->TemplateName = SOAP_NEW(std::wstring);
*pReq->TemplateName = form.getAsStringW("TemplateName", "", reqCharset);
pReq->TemplateContent = SOAP_NEW(std::wstring);
*pReq->TemplateContent = form.getAsStringW("TemplateContent", "", reqCharset);
pReq->Remark = SOAP_NEW(std::wstring);
*pReq->Remark = form.getAsStringW("Remark", "", reqCharset);
pReq->IsTemporary = _ttol(form.getAsStringW("IsTemporary", "0", reqCharset));
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pMobsetAPI->Template_USCOREModify(pReq, pResponse); //请求
lRetCode = pResponse->ErrCode;
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->ErrCode);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
if (pReq->TemplateName) delete pReq->TemplateName;
if (pReq->TemplateContent) delete pReq->TemplateContent;
if (pReq->Remark) delete pReq->Remark;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
//if (pResponse->Sign) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->Sign);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_Template_Del(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long &lRetCode)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Template_USCOREDel * pReq = new MobsetApi::_ns1__Template_USCOREDel;
MobsetApi::_ns1__Template_USCOREDelResponse *pResponse = new MobsetApi::_ns1__Template_USCOREDelResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
pReq->TemplateID = _ttol(form.getAsStringW("TemplateID", "0", reqCharset));
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pMobsetAPI->Template_USCOREDel(pReq, pResponse); //请求
lRetCode = pResponse->ErrCode;
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->ErrCode);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
//if (pResponse->Sign) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->Sign);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_Template_Query(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long &lRetCode)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Template_USCOREQuery * pReq = new MobsetApi::_ns1__Template_USCOREQuery;
MobsetApi::_ns1__Template_USCOREQueryResponse *pResponse = new MobsetApi::_ns1__Template_USCOREQueryResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
pReq->TemplateID = _ttol(form.getAsStringW("TemplateID", "0", reqCharset));
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pMobsetAPI->Template_USCOREQuery(pReq, pResponse); //请求
lRetCode = pResponse->Count;
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->Count);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
if (pResponse->Count > 0 && pResponse->TemplateGroup)
{
Poco::JSON::Object rspTemplate(Poco::JSON_PRESERVE_KEY_ORDER);
rspTemplate.set("TemplateID", pResponse->TemplateGroup->TemplateID);
rspTemplate.set("Status", pResponse->TemplateGroup->Status);
rspTemplate.set("TemplateType", pResponse->TemplateGroup->TemplateType);
rspTemplate.set("TemplateName", (std::string)CW2A(pResponse->TemplateGroup->TemplateName->c_str()));
rspTemplate.set("TemplateContent", (std::string)CW2A(pResponse->TemplateGroup->TemplateContent->c_str()));
rspTemplate.set("Remark", (std::string)CW2A(pResponse->TemplateGroup->Remark->c_str()));
rspTemplate.set("AuditOpinion", (std::string)CW2A(pResponse->TemplateGroup->AuditOpinion->c_str()));
rspTemplate.set("IsTemporary", pResponse->TemplateGroup->IsTemporary);
rspTemplate.set("CreateTime", (std::string)CW2A(pResponse->TemplateGroup->CreateTime->c_str()));
rspObj.set("Template", rspTemplate);
}
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
//if (pResponse->Sign) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->Sign);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_Template_List(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long &lRetCode)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Template_USCOREList * pReq = new MobsetApi::_ns1__Template_USCOREList;
MobsetApi::_ns1__Template_USCOREListResponse *pResponse = new MobsetApi::_ns1__Template_USCOREListResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pMobsetAPI->Template_USCOREList(pReq, pResponse); //请求
lRetCode = pResponse->Count;
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->Count);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
if (pResponse->Count > 0 && pResponse->TemplateList)
{
Poco::JSON::Array rspTemplateList;
for (int i=0; i< pResponse->TemplateList->__sizeTemplateGroup;i++)
{
if (pResponse->TemplateList->TemplateGroup[i])
{
Poco::JSON::Object rspTemplate(Poco::JSON_PRESERVE_KEY_ORDER);
rspTemplate.set("TemplateID", pResponse->TemplateList->TemplateGroup[i]->TemplateID);
rspTemplate.set("Status", pResponse->TemplateList->TemplateGroup[i]->Status);
rspTemplate.set("TemplateType", pResponse->TemplateList->TemplateGroup[i]->TemplateType);
rspTemplate.set("TemplateName", (std::string)CW2A(pResponse->TemplateList->TemplateGroup[i]->TemplateName->c_str()));
rspTemplate.set("TemplateContent", (std::string)CW2A(pResponse->TemplateList->TemplateGroup[i]->TemplateContent->c_str()));
rspTemplate.set("Remark", (std::string)CW2A(pResponse->TemplateList->TemplateGroup[i]->Remark->c_str()));
rspTemplate.set("AuditOpinion", (std::string)CW2A(pResponse->TemplateList->TemplateGroup[i]->AuditOpinion->c_str()));
rspTemplate.set("IsTemporary", pResponse->TemplateList->TemplateGroup[i]->IsTemporary);
rspTemplate.set("CreateTime", (std::string)CW2A(pResponse->TemplateList->TemplateGroup[i]->CreateTime->c_str()));
rspTemplateList.add(rspTemplate);
}
}
if (rspTemplateList.size() > 0)
rspObj.set("TemplateList", rspTemplateList);
}
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
//if (pResponse->Sign) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->Sign);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_Template_SendSms(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long &lRetCode)
{
CString strResponse;
try
{
long lMobileCount = 0;
long lParamCount = 0;
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Template_USCORESendSms * pReq = new MobsetApi::_ns1__Template_USCORESendSms;
MobsetApi::_ns1__Template_USCORESendSmsResponse *pResponse = new MobsetApi::_ns1__Template_USCORESendSmsResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
pReq->TemplateID = _ttol(form.getAsStringW("TemplateID", "0", reqCharset));
CString strMobiles;
strMobiles = form.getAsStringW("Mobiles", "", reqCharset);
CStringArray Mobiles;
strMobiles.Replace(_T(";"), _T(","));
strMobiles.Replace(_T(""), _T(","));
strMobiles.Replace(_T(""), _T(","));
strMobiles.Replace(_T("."), _T(","));
strMobiles.Replace(_T(""), _T(","));
strMobiles.Replace(_T(":"), _T(","));
strMobiles.Replace(_T(""), _T(","));
strMobiles.Replace(_T(" "), _T(","));
strMobiles.Replace(_T(" "), _T(","));
strMobiles.Replace(_T(";"), _T(","));
SplitString(Mobiles, strMobiles, _T(","));
lMobileCount = Mobiles.GetSize();
pReq->MobileList = new MobsetApi::ns1__ArrayOfMobileList;
pReq->MobileList->__sizeMobileListGroup = lMobileCount;
pReq->MobileList->MobileListGroup = (MobsetApi::ns1__MobileListGroup **)new BYTE[lMobileCount * sizeof(MobsetApi::ns1__MobileListGroup)];
for (int i = 0; i < lMobileCount; i++)
{
pReq->MobileList->MobileListGroup[i] = new MobsetApi::ns1__MobileListGroup;
pReq->MobileList->MobileListGroup[i]->Mobile = SOAP_NEW(std::wstring);
*pReq->MobileList->MobileListGroup[i]->Mobile = Mobiles.GetAt(i);
}
pReq->AddNum = SOAP_NEW(std::wstring);
*pReq->AddNum = form.getAsStringW("AddNum", "", reqCharset);
pReq->Timer = SOAP_NEW(std::wstring);
*pReq->Timer = form.getAsStringW("Timer", "", reqCharset);
//取参数Param1-9
CStringArray Params;
for (int i = 0; i < 30; i++)
{
CString strTemp;
CStringA strTempA;
strTempA.Format("Param%d", i + 1);
strTemp = form.getAsStringW(strTempA.GetBuffer(), "", reqCharset);
Params.Add(strTemp);
}
lParamCount = Params.GetSize();
pReq->ParamList = new MobsetApi::ns1__ArrayOfParamList;
pReq->ParamList->__sizeParamListGroup = lParamCount;
pReq->ParamList->ParamListGroup = (MobsetApi::ns1__ParamListGroup **)new BYTE[lParamCount * sizeof(MobsetApi::ns1__ParamListGroup)];
for (int i = 0; i < lParamCount; i++)
{
pReq->ParamList->ParamListGroup[i] = new MobsetApi::ns1__ParamListGroup;
pReq->ParamList->ParamListGroup[i]->Param = SOAP_NEW(std::wstring);
*pReq->ParamList->ParamListGroup[i]->Param = Params.GetAt(i);
}
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pMobsetAPI->Template_USCORESendSms(pReq, pResponse); //请求
lRetCode = pResponse->Count;
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->Count);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
Poco::JSON::Array msgID;
if (pResponse->SmsIDList) //取回复ID
{
for (int i = 0; i < pResponse->SmsIDList->__sizeSmsIDGroup; i++)
{
if (pResponse->SmsIDList->SmsIDGroup && pResponse->SmsIDList->SmsIDGroup[i])
{
Poco::JSON::Object rspMsgID(Poco::JSON_PRESERVE_KEY_ORDER);
rspMsgID.set("PhoneNumber", (std::string)CW2A(pResponse->SmsIDList->SmsIDGroup[i]->Mobile->c_str()));
rspMsgID.set("SmsId", pResponse->SmsIDList->SmsIDGroup[i]->SmsID);
msgID.add(rspMsgID);
}
}
if (msgID.size() > 0)
rspObj.set("SmsIdList", msgID);
}
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
if (pReq->AddNum) delete pReq->AddNum;
if (pReq->Timer) delete pReq->Timer;
if (pReq->MobileList && pReq->MobileList->MobileListGroup)
{
for (int i = 0; i < lMobileCount; i++)
{
if (pReq->MobileList->MobileListGroup[i])
{
if (pReq->MobileList->MobileListGroup[i]->Mobile)
delete pReq->MobileList->MobileListGroup[i]->Mobile;
delete pReq->MobileList->MobileListGroup[i];
}
}
delete pReq->MobileList->MobileListGroup;
}
if (pReq->MobileList) delete pReq->MobileList;
if (pReq->ParamList && pReq->ParamList->ParamListGroup)
{
for (int i = 0; i < lParamCount; i++)
{
if (pReq->ParamList->ParamListGroup[i])
{
if (pReq->ParamList->ParamListGroup[i]->Param)
delete pReq->ParamList->ParamListGroup[i]->Param;
delete pReq->ParamList->ParamListGroup[i];
}
}
delete pReq->ParamList->ParamListGroup;
}
if (pReq->ParamList) delete pReq->ParamList;
delete pReq;
}
if (pResponse)
{
//if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
//if (pResponse->Sign) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->Sign);
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
void Copy_MobsetApiService(MobsetApi::MobsetApiServiceEx * pNew, MobsetApi::MobsetApiServiceEx * pSrc)
{
//pNew->destroy(); //笨办法因为copy会复制一份soap原来的soap资源需要先释放
//soap_copy_context(pNew, pSrc);
//复制部分参数
pNew->m_pParam = pSrc->m_pParam;
_tcscpy(pNew->m_strSQL_IP, pSrc->m_strSQL_IP);
_tcscpy(pNew->m_strSQL_User, pSrc->m_strSQL_User);
_tcscpy(pNew->m_strSQL_Passwd, pSrc->m_strSQL_Passwd);
_tcscpy(pNew->m_strSQL_DB, pSrc->m_strSQL_DB);
_tcscpy(pNew->m_strSQL_Provider, pSrc->m_strSQL_Provider);
pNew->m_pSQL = pSrc->m_pSQL;
pNew->m_lSQLCount = pSrc->m_lSQLCount;
pNew->m_Critical = pSrc->m_Critical;
pNew->m_pReq = pSrc->m_pReq;
pNew->m_lReqCount = pSrc->m_lReqCount;
pNew->m_lReqIndex = pSrc->m_lReqIndex;
pNew->m_pReqIndex = &pSrc->m_lReqIndex;
pNew->m_lReqAllCount = pSrc->m_lReqAllCount;
pNew->m_pReqAllCount = &pSrc->m_lReqAllCount;
pNew->m_Critical_Req = pSrc->m_Critical_Req;
pNew->m_bErrLog = pSrc->m_bErrLog;
pNew->m_lMaxIDReq = pSrc->m_lMaxIDReq;
pNew->m_lMaxIPReq = pSrc->m_lMaxIPReq;
pNew->m_pReqlog = pSrc->m_pReqlog;
pNew->m_bHTTP = pSrc->m_bHTTP;
pNew->m_loggerError = pSrc->m_loggerError;
pNew->m_loggerInfo = pSrc->m_loggerInfo;
pNew->m_bCopy = true; //特殊,标识是复制的类
}
CString Http_Sms_Send(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long & lRetCode)
{
CString strResponse;
try
{
long lMobileCount = 0;
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Sms_USCORESend * pReq = new MobsetApi::_ns1__Sms_USCORESend;
MobsetApi::_ns1__Sms_USCORESendResponse *pResponse = new MobsetApi::_ns1__Sms_USCORESendResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pReq->MobileList = NULL;
pReq->AddNum = NULL;
pReq->Timer = NULL;
pReq->Content = NULL;
pReq->MobileList = NULL;
pResponse->ErrMsg = NULL;
BOOL bXML = false;
long lJson = 0;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
if (httpVer == SMS_HTTP_VER_1 ||
httpVer == SMS_HTTP_VER_2)
{
bXML = _ttol(form.getAsStringW("XML", "0", reqCharset));
lJson = _ttol(form.getAsStringW("Json", "0", reqCharset));
if (lJson > 0) bXML = 0;
//CStringW strCharset = form.getAsStringW("Charset", "", reqCharset);
//if (strCharset.CompareNoCase(_T("UTF-8")) == 0)
//{
// reqCharset = SMS_REQCHARSET_UTF8;
//}
std::string strRetCharset = "GB2312";
if (reqCharset == SMS_REQCHARSET_UTF8)
strRetCharset = "utf-8";
std::string strRetType = "text/html";
if (bXML)
strRetType = "text/xml";
if (lJson>0)
strRetType = "application/json";
if (bXML || lJson>0 || reqCharset != SMS_REQCHARSET_GBK)
{
MediaType mType(strRetType);
mType.setParameter("Charset", strRetCharset);
response.setContentType(mType);
}
}
CString strChangeTD; //更改通道
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
{
strChangeTD = form.getAsStringW("ChangeTD", "", reqCharset);
}
CString strMobiles;
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
strMobiles = form.getAsStringW("PhoneNumbers", "", reqCharset);
else
strMobiles = form.getAsStringW("send_no", "", reqCharset);
CStringArray Mobiles;
strMobiles.Replace(_T(";"), _T(","));
strMobiles.Replace(_T(""), _T(","));
strMobiles.Replace(_T(""), _T(","));
strMobiles.Replace(_T("."), _T(","));
strMobiles.Replace(_T(""), _T(","));
strMobiles.Replace(_T(":"), _T(","));
strMobiles.Replace(_T(""), _T(","));
strMobiles.Replace(_T(" "), _T(","));
strMobiles.Replace(_T(" "), _T(","));
strMobiles.Replace(_T(";"), _T(","));
SplitString(Mobiles, strMobiles, _T(","));
/*
//拆分号码成数组
strTemp = Poco::replace(strTemp, ";", ",");
strTemp = Poco::replace(strTemp, "", ",");
strTemp = Poco::replace(strTemp, "", ",");
strTemp = Poco::replace(strTemp, ".", ",");
strTemp = Poco::replace(strTemp, "。", ",");
strTemp = Poco::replace(strTemp, ":", ",");
strTemp = Poco::replace(strTemp, "", ",");
strTemp = Poco::replace(strTemp, " ", ",");
strTemp = Poco::replace(strTemp, " ", ",");
StringTokenizer mobiles(strTemp, "," , Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM);
lMobileCount = mobiles.count();
*/
lMobileCount = Mobiles.GetSize();
pReq->MobileList = new MobsetApi::ns1__ArrayOfMobileList;
pReq->MobileList->__sizeMobileListGroup = lMobileCount;
//MobsetApi::ns1__MobileListGroup * pMobileGroup = new MobsetApi::ns1__MobileListGroup[lMobileCount];
//pReq->MobileList->MobileListGroup = new MobsetApi::ns1__MobileListGroup*;
pReq->MobileList->MobileListGroup = (MobsetApi::ns1__MobileListGroup **)new BYTE[lMobileCount * sizeof(MobsetApi::ns1__MobileListGroup)];
for (int i = 0; i < lMobileCount; i++)
{
pReq->MobileList->MobileListGroup[i] = new MobsetApi::ns1__MobileListGroup;
pReq->MobileList->MobileListGroup[i]->Mobile = SOAP_NEW(std::wstring);
*pReq->MobileList->MobileListGroup[i]->Mobile = Mobiles.GetAt(i);
}
pReq->Content = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Content = form.getAsStringW("Content", "", reqCharset);
else
*pReq->Content = form.getAsStringW("msg", "", reqCharset);
pReq->AddNum = SOAP_NEW(std::wstring);
*pReq->AddNum = form.getAsStringW("AddNum", "", reqCharset);
pReq->Timer = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Timer = form.getAsStringW("TimerSend", "", reqCharset);
else
*pReq->Timer = form.getAsStringW("Timer", "", reqCharset);
pReq->LongSms = _ttol(form.getAsStringW("LongSms", "1", reqCharset));
long bRetMsg = _ttol(form.getAsStringW("RetMsg", "0", reqCharset));
pReq->soap = new soap;
//memset(pReq->soap, 0, sizeof(soap));
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
BOOL bChangeTD = false;
memset(pReq->soap->tmpbuf, 0, sizeof(pReq->soap->tmpbuf));
if (httpVer == SMS_HTTP_VER_3 && strChangeTD.GetLength()>=7 && strChangeTD.GetLength()<=10 && strChangeTD.GetAt(0)=='T' && strChangeTD.GetAt(1) == 'D' && strChangeTD.GetAt(2) == 'C' ) //HTTP3参数不同
{
strcpy(pReq->soap->tmpbuf, CW2A(strChangeTD));
bChangeTD = true;
}
//m_pMobsetHttpEx->m_pMobsetAPI->Sms_USCORESend(pReq, pResponse); //请求
pMobsetAPI->Sms_USCORESend(pReq, pResponse); //请求
lRetCode = pResponse->Count;
if (httpVer == SMS_HTTP_VER_1 ||
httpVer == SMS_HTTP_VER_2)
{
switch (pResponse->Count) //返回值转换
{
case -100:
case -102:
pResponse->Count = -1;
break;
case -101:
case -103:
case -104:
case -105:
pResponse->Count = -2;
break;
case -112:
pResponse->Count = -3;
break;
case -128:
pResponse->Count = -4;
break;
case -129:
case -130:
pResponse->Count = -5;
break;
case -123:
case -125:
pResponse->Count = -8;
break;
}
CString strID;
if (pResponse->SmsIDList) //取回复ID
{
for (int i = 0; i < pResponse->SmsIDList->__sizeSmsIDGroup; i++)
{
if (pResponse->SmsIDList->SmsIDGroup && pResponse->SmsIDList->SmsIDGroup[i])
{
if (pResponse->SmsIDList->SmsIDGroup[i]->SmsID > 0)
{
if (strID.GetLength() <= 0)
{
strID.Format(_T("%d"), pResponse->SmsIDList->SmsIDGroup[i]->SmsID);
}
else
{
CString strID2; strID2.Format(_T(",%d"), pResponse->SmsIDList->SmsIDGroup[i]->SmsID);
strID = strID + strID2;
}
}
}
}
}
if (pResponse->Count >= 0)
strResponse.Format(_T("%d,%s"), pResponse->Count, strID); //生成返回
else
strResponse.Format(_T("%d,%s"), pResponse->Count, pResponse->ErrMsg->c_str()); //生成返回
//strResponse.Format(_T("%d"), pResponse->Count); //生成返回
if (bRetMsg)
{
CString strRet2 = _T("<script language=javascript> alert( '%s\\r\\n%s' ); </script>\n");
CString strResponse2;
if (pResponse->Count >= 0)
strResponse2.Format(strRet2, _T("短信发送成功"), strResponse);
else
strResponse2.Format(strRet2, _T("短信发送失败"), strResponse);
strResponse = strResponse2;
}
if (bXML)
{
CString strTmpl =
_T("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n")
_T("<SendRet>\r\n")
_T(" <Code>%d</Code>\r\n")
_T(" <SmsID>%s</SmsID>\r\n")
_T(" <ErrMsg>%s</ErrMsg>\r\n")
_T("</SendRet>");
strResponse.Format(strTmpl, pResponse->Count, strID, pResponse->ErrMsg->c_str());
}
if (lJson>0)
{
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
if (pResponse->Count >= 1)
{
rspObj.set("Code", 1);
if (lJson==2)
rspObj.set("Count", pResponse->Count); //发送数量
}
else
{
rspObj.set("Code", pResponse->Count);
}
if (lJson == 2)
{
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
Poco::JSON::Array msgID;
if (pResponse->SmsIDList) //取回复ID
{
for (int i = 0; i < pResponse->SmsIDList->__sizeSmsIDGroup; i++)
{
if (pResponse->SmsIDList->SmsIDGroup && pResponse->SmsIDList->SmsIDGroup[i])
{
Poco::JSON::Object rspMsgID(Poco::JSON_PRESERVE_KEY_ORDER);
//CStringA strMobileA = CW2A(pResponse->SmsIDList->SmsIDGroup[i]->Mobile->c_str());
if (bChangeTD) //如果是转换通道,增加多一个源号码返回
{
CString strSrcMobile = pResponse->SmsIDList->SmsIDGroup[i]->Mobile->c_str();
CStringArray strMobiles;
SplitString(strMobiles, strSrcMobile, _T(","));
if (strMobiles.GetSize() > 1)
{
strSrcMobile = strMobiles.GetAt(1);
rspMsgID.set("SrcNumber", (std::string)CW2A(strSrcMobile));
strSrcMobile = strMobiles.GetAt(0);
}
rspMsgID.set("PhoneNumber", (std::string)CW2A(strSrcMobile));
}
else
{
rspMsgID.set("PhoneNumber", (std::string)CW2A(pResponse->SmsIDList->SmsIDGroup[i]->Mobile->c_str()));
}
rspMsgID.set("SmsId", pResponse->SmsIDList->SmsIDGroup[i]->SmsID);
msgID.add(rspMsgID);
}
}
if (msgID.size() > 0)
rspObj.set("SmsIdList", msgID);
}
}
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
}
if (httpVer == SMS_HTTP_VER_3)
{
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->Count);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
Poco::JSON::Array msgID;
if (pResponse->SmsIDList) //取回复ID
{
for (int i = 0; i < pResponse->SmsIDList->__sizeSmsIDGroup; i++)
{
if (pResponse->SmsIDList->SmsIDGroup && pResponse->SmsIDList->SmsIDGroup[i])
{
Poco::JSON::Object rspMsgID(Poco::JSON_PRESERVE_KEY_ORDER);
//CStringA strMobileA = CW2A(pResponse->SmsIDList->SmsIDGroup[i]->Mobile->c_str());
if (bChangeTD) //如果是转换通道,增加多一个源号码返回
{
CString strSrcMobile = pResponse->SmsIDList->SmsIDGroup[i]->Mobile->c_str();
CStringArray strMobiles;
SplitString(strMobiles, strSrcMobile, _T(","));
if (strMobiles.GetSize() > 1)
{
strSrcMobile = strMobiles.GetAt(1);
rspMsgID.set("SrcNumber", (std::string)CW2A(strSrcMobile));
strSrcMobile = strMobiles.GetAt(0);
}
rspMsgID.set("PhoneNumber", (std::string)CW2A(strSrcMobile));
}
else
{
rspMsgID.set("PhoneNumber", (std::string)CW2A(pResponse->SmsIDList->SmsIDGroup[i]->Mobile->c_str()));
}
rspMsgID.set("SmsId", pResponse->SmsIDList->SmsIDGroup[i]->SmsID);
msgID.add(rspMsgID);
}
}
if (msgID.size()>0)
rspObj.set("SmsIdList", msgID);
}
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
if (pReq->Content) delete pReq->Content;
if (pReq->AddNum) delete pReq->AddNum;
if (pReq->Timer) delete pReq->Timer;
if (pReq->MobileList && pReq->MobileList->MobileListGroup)
{
for (int i = 0; i < lMobileCount; i++)
{
if (pReq->MobileList->MobileListGroup[i])
{
if (pReq->MobileList->MobileListGroup[i]->Mobile)
delete pReq->MobileList->MobileListGroup[i]->Mobile;
delete pReq->MobileList->MobileListGroup[i];
}
}
delete pReq->MobileList->MobileListGroup;
}
if (pReq->MobileList) delete pReq->MobileList;
delete pReq;
}
if (pResponse)
{
/*
if (pResponse->ErrMsg) soap_delete_std__wstring(pMobsetAPI, pResponse->ErrMsg);
if (pResponse->SmsIDList && pResponse->SmsIDList->SmsIDGroup)
{
for (int i = 0; i < pResponse->SmsIDList->__sizeSmsIDGroup; i++)
{
if (pResponse->SmsIDList->SmsIDGroup[i])
{
if (pResponse->SmsIDList->SmsIDGroup[i]->Mobile) soap_delete_std__wstring(pMobsetAPI, pResponse->SmsIDList->SmsIDGroup[i]->Mobile);
soap_delete_ns1__SmsIDGroup(pMobsetAPI, pResponse->SmsIDList->SmsIDGroup[i]);
}
}
soap_delete(pMobsetAPI, pResponse->SmsIDList->SmsIDGroup);
}
if (pResponse->SmsIDList) soap_delete_ns1__ArrayOfSmsIDList(pMobsetAPI, pResponse->SmsIDList);
*/
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_Sms_Recv(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long & lRetCode)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
MobsetApi::_ns1__Sms_USCOREGetRecv * pReq = new MobsetApi::_ns1__Sms_USCOREGetRecv;
MobsetApi::_ns1__Sms_USCOREGetRecvResponse *pResponse = new MobsetApi::_ns1__Sms_USCOREGetRecvResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
BOOL bXML = false;
long lMaxReturn = 10;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
if (httpVer == SMS_HTTP_VER_1 ||
httpVer == SMS_HTTP_VER_2)
{
bXML = _ttol(form.getAsStringW("XML", "0", reqCharset));
if (bXML) //返回为XML
{
MediaType mType("text/xml");
mType.setParameter("Charset", "GB2312");
response.setContentType(mType);
}
}
lMaxReturn = _ttol(form.getAsStringW("MaxReturn", "10", reqCharset));
if (lMaxReturn > 1000000 || lMaxReturn <= 0) lMaxReturn = 10;
pReq->soap = new soap;
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pReq->soap->count = lMaxReturn; //特殊传输返回记录数参数
pMobsetAPI->Sms_USCOREGetRecv(pReq, pResponse); //请求
lRetCode = pResponse->Count;
if (httpVer == SMS_HTTP_VER_1 ||
httpVer == SMS_HTTP_VER_2)
{
switch (pResponse->Count) //返回值转换
{
case -100:
case -102:
pResponse->Count = -1;
break;
case -101:
case -103:
case -104:
case -105:
pResponse->Count = -2;
break;
}
if (pResponse->Count >= 0)
{
if (bXML)
{
CString strTmpl =
_T("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n")
_T("<RecvMsg>\r\n")
_T(" <Return>OK</Return>\r\n%s")
_T("</RecvMsg>");
CString strTmpl2 =
_T(" <Msg>\r\n")
_T(" <SendNum>%s</SendNum>\r\n")
_T(" <RecvNum>%s</RecvNum>\r\n")
_T(" <RecvTime>%s</RecvTime>\r\n")
_T(" <Content>%s</Content>\r\n")
_T(" <AddNum>%s</AddNum>\r\n")
_T(" </Msg>\r\n");
CString strSubXML;
for (int i = 0; pResponse->SmsRecvList && i < pResponse->SmsRecvList->__sizeSmsRecvGroup; i++)
{
CString strMsg = pResponse->SmsRecvList->SmsRecvGroup[i]->Content->c_str();
strMsg.Replace(_T("<"), _T("&lt;")); strMsg.Replace(_T(">"), _T("&gt;")); strMsg.Replace(_T("&"), _T("&amp;")); strMsg.Replace(_T("'"), _T("&apos;")); strMsg.Replace(_T("\""), _T("&quot;"));
CString strTime = pResponse->SmsRecvList->SmsRecvGroup[i]->RecvTime->c_str();
//strTime.Replace(_T("-"), _T("/"));
CString strSubXML2;
strSubXML2.Format(strTmpl2, pResponse->SmsRecvList->SmsRecvGroup[i]->Mobile->c_str(), pResponse->SmsRecvList->SmsRecvGroup[i]->RecvNum->c_str(), strTime, strMsg, pResponse->SmsRecvList->SmsRecvGroup[i]->AddNum->c_str());
strSubXML += strSubXML2;
}
strResponse.Format(strTmpl, strSubXML); //生成返回
}
else
{
long lCount = 0;
CString strSubMsg;
for (int i = 0; pResponse->SmsRecvList && i < pResponse->SmsRecvList->__sizeSmsRecvGroup; i++)
{
CString strMsg = pResponse->SmsRecvList->SmsRecvGroup[i]->Content->c_str();
strMsg.Replace(_T("\r"), _T(" ")); strMsg.Replace(_T("\n"), _T(" "));; strMsg.Replace(_T(","), _T(""));
CString strTime = pResponse->SmsRecvList->SmsRecvGroup[i]->RecvTime->c_str();
strTime.Replace(_T("-"), _T("/"));
CString strTemp2;
strTemp2.Format(_T("%s,%s,%s,%s\r\n\r\n"), pResponse->SmsRecvList->SmsRecvGroup[i]->Mobile->c_str(), pResponse->SmsRecvList->SmsRecvGroup[i]->RecvNum->c_str(), strTime, strMsg);
strResponse += strTemp2;
strSubMsg += strTemp2;
lCount++;
}
strResponse.Format(_T("%d\r\n%s"), lCount, strSubMsg); //生成返回
}
}
else
{
if (bXML)
{
CString strTmpl;
strTmpl =
_T("<? xml version = \"1.0\" encoding = \"GB2312\" ?>\r\n")
_T("<RecvMsg>\r\n")
_T(" <Return>%s</Return>\r\n")
_T("</RecvMsg>");
strResponse.Format(strTmpl, pResponse->ErrMsg->c_str()); //生成返回
}
else
{
strResponse.Format(_T("%d,%s"), pResponse->Count, pResponse->ErrMsg->c_str()); //生成返回
}
}
}
if (httpVer == SMS_HTTP_VER_3)
{
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->Count);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
Poco::JSON::Array msgRecv;
if (pResponse->SmsRecvList) //取回复ID
{
for (int i = 0; i < pResponse->SmsRecvList->__sizeSmsRecvGroup; i++)
{
if (pResponse->SmsRecvList->SmsRecvGroup && pResponse->SmsRecvList->SmsRecvGroup[i])
{
Poco::JSON::Object rspMsgRecv(Poco::JSON_PRESERVE_KEY_ORDER);
//CStringA strMobileA = CW2A(pResponse->SmsIDList->SmsIDGroup[i]->Mobile->c_str());
rspMsgRecv.set("PhoneNumber", (std::string)CW2A(pResponse->SmsRecvList->SmsRecvGroup[i]->Mobile->c_str()));
rspMsgRecv.set("RecvNumber", (std::string)CW2A(pResponse->SmsRecvList->SmsRecvGroup[i]->RecvNum->c_str()));
rspMsgRecv.set("AddNum", (std::string)CW2A(pResponse->SmsRecvList->SmsRecvGroup[i]->AddNum->c_str()));
rspMsgRecv.set("RecvTime", (std::string)CW2A(pResponse->SmsRecvList->SmsRecvGroup[i]->RecvTime->c_str()));
rspMsgRecv.set("Content", (std::string)CW2A(pResponse->SmsRecvList->SmsRecvGroup[i]->Content->c_str()));
//rspMsgRecv.set("Content", "陆江");
msgRecv.add(rspMsgRecv);
}
}
if (msgRecv.size() > 0)
{
rspObj.set("Details", msgRecv);
}
}
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
/*
if (pResponse->Count >= 0)
{
if (bXML)
{
CString strTemp3, strTemp4, strTemp5;
strTemp2 = _T("<? xml version = \"1.0\" encoding = \"GB2312\" ?>\r\n")
_T("<RecvMsg>\r\n")
_T(" <Return>OK</Return>\r\n%s\r\n")
_T("</RecvMsg>");
strTemp3 = _T(" <Msg>\r\n")
_T(" <SendNum>%s</SendNum>\r\n")
_T(" <RecvNum>%s</RecvNum>\r\n")
_T(" <RecvTime>%s</RecvTime>\r\n")
_T(" <Content>%s</Content>\r\n")
_T(" <AddNum>%s</AddNum>\r\n")
_T(" </Msg>\r\n");
for (int i = 0; i < pResponse->SmsRecvList->__sizeSmsRecvGroup; i++)
{
CString strMsg = pResponse->SmsRecvList->SmsRecvGroup[i]->Content->c_str();
strMsg.Replace(_T("<"), _T("&lt;")); strMsg.Replace(_T(">"), _T("&gt;")); strMsg.Replace(_T("&"), _T("&amp;")); strMsg.Replace(_T("'"), _T("&apos;")); strMsg.Replace(_T("\""), _T("&quot;"));
CString strTime = pResponse->SmsRecvList->SmsRecvGroup[i]->RecvTime->c_str();
strTemp4.Format(strTemp3, pResponse->SmsRecvList->SmsRecvGroup[i]->Mobile, pResponse->SmsRecvList->SmsRecvGroup[i]->RecvNum, strTime, strMsg );
strTemp5 += strTemp4;
}
strResponse.Format(strTemp2, strTemp5);
}
else
{
CString strTemp2;
strResponse.Format(_T("%d\r\n"), pResponse->Count); //生成返回
for (int i = 0; i < pResponse->SmsRecvList->__sizeSmsRecvGroup; i++)
{
CString strMsg = pResponse->SmsRecvList->SmsRecvGroup[i]->Content->c_str();
strMsg.Replace(_T("\r"), _T(" ")); strMsg.Replace(_T("\n"), _T(" "));; strMsg.Replace(_T(","), _T(""));
CString strTime = pResponse->SmsRecvList->SmsRecvGroup[i]->RecvTime->c_str();
strTemp2.Format(_T("%s,%s,%s,%s\r\n\r\n"), pResponse->SmsRecvList->SmsRecvGroup[i]->Mobile, pResponse->SmsRecvList->SmsRecvGroup[i]->RecvNum, strTime, strMsg);
strResponse += strTemp2;
}
}
}
else
{
CString strTemp2;
if (bXML)
{
strTemp2 = _T("<? xml version = \"1.0\" encoding = \"GB2312\" ?>\r\n")
_T("<RecvMsg>\r\n")
_T(" <Return>%s</Return>\r\n")
_T("</RecvMsg>");
strResponse.Format(strTemp2, pResponse->ErrMsg->c_str()); //生成返回
}
else
{
strResponse.Format(_T("%d,%s"), pResponse->Count, pResponse->ErrMsg->c_str()); //生成返回
}
}
*/
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
delete pReq;
}
if (pResponse)
{
/*
if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
if (pResponse->SmsRecvList && pResponse->SmsRecvList->SmsRecvGroup)
{
for (int i = 0; i < pResponse->SmsRecvList->__sizeSmsRecvGroup; i++)
{
if (pResponse->SmsRecvList->SmsRecvGroup[i])
{
if (pResponse->SmsRecvList->SmsRecvGroup[i]->Mobile) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsRecvList->SmsRecvGroup[i]->Mobile);
if (pResponse->SmsRecvList->SmsRecvGroup[i]->RecvNum) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsRecvList->SmsRecvGroup[i]->RecvNum);
if (pResponse->SmsRecvList->SmsRecvGroup[i]->AddNum) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsRecvList->SmsRecvGroup[i]->AddNum);
if (pResponse->SmsRecvList->SmsRecvGroup[i]->Content) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsRecvList->SmsRecvGroup[i]->Content);
if (pResponse->SmsRecvList->SmsRecvGroup[i]->RecvTime) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsRecvList->SmsRecvGroup[i]->RecvTime);
soap_delete_ns1__SmsRecvGroup(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsRecvList->SmsRecvGroup[i]);
}
}
soap_delete(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsRecvList->SmsRecvGroup);
}
if (pResponse->SmsRecvList) soap_delete_ns1__ArrayOfSmsRecvList(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsRecvList);
*/
delete pResponse;
}
}
catch (...)
{
}
delete pMobsetAPI;
}
}
catch (...)
{
}
return strResponse;
}
CString Http_Sms_Report(HTTPServerRequest& request, HTTPServerResponse& response, MyHttpParamsParser & form, std::string & path, SmsHttpVer httpVer, SmsReqCharset reqCharset, long & lRetCode)
{
CString strResponse;
try
{
if (m_pMobsetHttpEx && m_pMobsetHttpEx->m_pMobsetAPI)
{
MobsetApi::_ns1__Sms_USCOREGetReport * pReq = new MobsetApi::_ns1__Sms_USCOREGetReport;
MobsetApi::_ns1__Sms_USCOREGetReportResponse *pResponse = new MobsetApi::_ns1__Sms_USCOREGetReportResponse;
try
{
pReq->soap = NULL;
pReq->LoginName = NULL;
pReq->Password = NULL;
pReq->TimeStamp = NULL;
pResponse->ErrMsg = NULL;
long lMaxReturn = 50;
pReq->CorpID = _ttol(form.getAsStringW("CorpID", "0", reqCharset));
pReq->LoginName = SOAP_NEW(std::wstring);
*pReq->LoginName = form.getAsStringW("LoginName", "", reqCharset);
pReq->Password = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_3) //HTTP3参数不同
*pReq->Password = form.getAsStringW("SecretKey", "", reqCharset);
else
*pReq->Password = form.getAsStringW("Passwd", "", reqCharset);
pReq->TimeStamp = SOAP_NEW(std::wstring);
if (httpVer == SMS_HTTP_VER_1)
{
*pReq->TimeStamp = _T("MOBSETHTTP1");
}
else
{
*pReq->TimeStamp = form.getAsStringW("TimeStamp", "", reqCharset);
}
lMaxReturn = _ttol(form.getAsStringW("MaxReturn", "50", reqCharset));
if (lMaxReturn > 1000000 || lMaxReturn <= 0) lMaxReturn = 50;
pReq->soap = new soap;
sockaddr_in* pSin = (sockaddr_in*)request.clientAddress().addr()->sa_data;
memcpy(&pReq->soap->ip, ((BYTE*)request.clientAddress().addr()->sa_data) + 2, 4); //4个字节的IP地址
pReq->soap->ip = htonl(pReq->soap->ip);
pReq->soap->port = request.clientAddress().port();
pReq->soap->state = this->m_pMobsetHttpEx->m_bSSL; //是否HTTPS
pReq->soap->version = (short)httpVer; //首易HTTP协议版本
pReq->soap->count = lMaxReturn; //特殊传输返回记录数参数
MobsetApi::MobsetApiServiceEx *pMobsetAPI = new MobsetApi::MobsetApiServiceEx();
Copy_MobsetApiService(pMobsetAPI, m_pMobsetHttpEx->m_pMobsetAPI);
pMobsetAPI->Sms_USCOREGetReport(pReq, pResponse); //请求
lRetCode = pResponse->Count;
if (httpVer == SMS_HTTP_VER_3)
{
std::ostringstream rspStr;
Poco::JSON::Object rspObj(Poco::JSON_PRESERVE_KEY_ORDER);
rspObj.set("Code", pResponse->Count);
rspObj.set("Message", (std::string)CW2A(pResponse->ErrMsg->c_str()));
Poco::JSON::Array msgReport;
if (pResponse->SmsReportList) //取回复ID
{
for (int i = 0; i < pResponse->SmsReportList->__sizeSmsReportGroup; i++)
{
if (pResponse->SmsReportList->SmsReportGroup && pResponse->SmsReportList->SmsReportGroup[i])
{
Poco::JSON::Object rspMsgReport(Poco::JSON_PRESERVE_KEY_ORDER);
//CStringA strMobileA = CW2A(pResponse->SmsIDList->SmsIDGroup[i]->Mobile->c_str());
rspMsgReport.set("SmsId", pResponse->SmsReportList->SmsReportGroup[i]->SmsID );
rspMsgReport.set("Status", pResponse->SmsReportList->SmsReportGroup[i]->Status);
rspMsgReport.set("ReportTime", (std::string)CW2A(pResponse->SmsReportList->SmsReportGroup[i]->ReportTime->c_str()));
rspMsgReport.set("ExStatus", (std::string)CW2A(pResponse->SmsReportList->SmsReportGroup[i]->ExStatus->c_str()));
msgReport.add(rspMsgReport);
}
}
if (msgReport.size()>0)
rspObj.set("Details", msgReport);
}
rspObj.stringify(rspStr, 2);
strResponse = CA2W(rspStr.str().c_str());
}
delete pMobsetAPI;
}
catch (...)
{
}
try
{
if (pReq)
{
if (pReq->soap) delete pReq->soap;
if (pReq->LoginName) delete pReq->LoginName;
if (pReq->Password) delete pReq->Password;
if (pReq->TimeStamp) delete pReq->TimeStamp;
delete pReq;
}
if (pResponse)
{
/*
if (pResponse->ErrMsg) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->ErrMsg);
if (pResponse->SmsReportList && pResponse->SmsReportList->SmsReportGroup)
{
for (int i = 0; i < pResponse->SmsReportList->__sizeSmsReportGroup; i++)
{
if (pResponse->SmsReportList->SmsReportGroup[i])
{
if (pResponse->SmsReportList->SmsReportGroup[i]->ReportTime) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsReportList->SmsReportGroup[i]->ReportTime);
if (pResponse->SmsReportList->SmsReportGroup[i]->ExStatus) soap_delete_std__wstring(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsReportList->SmsReportGroup[i]->ExStatus);
soap_delete(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsReportList->SmsReportGroup[i]);
}
}
soap_delete(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsReportList->SmsReportGroup);
}
if (pResponse->SmsReportList) soap_delete_ns1__ArrayOfSmsReportList(m_pMobsetHttpEx->m_pMobsetAPI, pResponse->SmsReportList);
*/
delete pResponse;
}
}
catch (...)
{
}
}
}
catch (...)
{
}
return strResponse;
}
};
class FormRequestHandlerFactory : public HTTPRequestHandlerFactory
{
public:
MobsetHttpEx * m_pMobsetHttpEx;
public:
FormRequestHandlerFactory(MobsetHttpEx * pHttpEx)
{
m_pMobsetHttpEx = pHttpEx;
}
HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request)
{
return new FormRequestHandler(m_pMobsetHttpEx);
}
};
HTTPFormServer::HTTPFormServer() : _helpRequested(false)
{
m_pMobsetHttpEx = NULL;
m_psvs = NULL;
m_psrv = NULL;
m_lErrCode = 0;
}
HTTPFormServer::~HTTPFormServer()
{
if (m_psvs) { delete m_psvs; m_psvs = NULL; }
}
void HTTPFormServer::SetMainHttpEx(MobsetHttpEx * pHttpEx)
{
m_pMobsetHttpEx = pHttpEx;
}
void HTTPFormServer::initialize(Application& self)
{
loadConfiguration(); // load default configuration files, if present
ServerApplication::initialize(self);
}
void HTTPFormServer::uninitialize()
{
ServerApplication::uninitialize();
}
void HTTPFormServer::defineOptions(OptionSet& options)
{
ServerApplication::defineOptions(options);
options.addOption(
Option("help", "h", "display help information on command line arguments")
.required(false)
.repeatable(false));
}
void HTTPFormServer::handleOption(const std::string& name, const std::string& value)
{
ServerApplication::handleOption(name, value);
if (name == "help")
_helpRequested = true;
}
void HTTPFormServer::displayHelp()
{
HelpFormatter helpFormatter(options());
helpFormatter.setCommand(commandName());
helpFormatter.setUsage("OPTIONS");
helpFormatter.setHeader("A web server that shows how to work with HTML forms.");
helpFormatter.format(std::cout);
}
int HTTPFormServer::main(const std::vector<std::string>& args)
{
if (_helpRequested)
{
displayHelp();
}
else
{
try
{
if (m_pMobsetHttpEx->m_bHttpLog)
{
try
{
logger_Setup();
CString strLog;
strLog.Format(_T("Http Server 启动,IP:%s Port:%d SSL:%d..."), m_pMobsetHttpEx->m_strIP, m_pMobsetHttpEx->m_lPort, m_pMobsetHttpEx->m_bSSL);
m_pMobsetHttpEx->Http_Log(strLog);
}
catch (...)
{
m_pMobsetHttpEx->m_bHttpLog = false;
}
}
//绑定地址与端口
unsigned short port = m_pMobsetHttpEx->m_lPort;
if (m_pMobsetHttpEx->m_strIP.GetLength() > 0)
{
char szIP[64] = { 0 };
strcpy(szIP, CW2A(m_pMobsetHttpEx->m_strIP));
SocketAddress address(szIP, port);
m_psvs = new ServerSocket(address);
}
else
{
m_psvs = new ServerSocket(port);
}
const int maxQueued = 3000;
const int maxThreads = 128;
//ThreadPool::defaultPool().addCapacity(maxThreads);
HTTPServerParams* pParams = new HTTPServerParams;
pParams->setMaxQueued(maxQueued);
pParams->setMaxThreads(maxThreads);
pParams->setKeepAlive(false);
//m_pFactory = new FormRequestHandlerFactory(m_pYouduHttpEx);
m_psrv = new HTTPServer(new FormRequestHandlerFactory(m_pMobsetHttpEx), *m_psvs, pParams);
m_psrv->start();
//long labc = m_psrv->maxThreads();
return Application::EXIT_OK;
}
//catch (std::exception abc)
catch (Poco::Exception abc)
{
m_lErrCode = abc.code();
if (m_lErrCode == 0)
m_lErrCode = -1;
return m_lErrCode;
}
}
return Application::EXIT_OK;
}
long HTTPFormServer::Web_WaitForRequest(void)
{
if (m_psrv)
{
//m_psrv->start();
waitForTerminationRequest();
//m_psrv->stopAll(true);
m_psrv->stop();
m_psrv->stopAll(true);
delete m_psrv;
m_psrv = NULL;
}
return 0;
}
HTTPFormServerSSL::HTTPFormServerSSL() : _helpRequested(false)
{
m_pMobsetHttpEx = NULL;
m_psvs = NULL;
m_psrv = NULL;
m_lErrCode = 0;
Poco::Net::initializeSSL();
}
HTTPFormServerSSL::~HTTPFormServerSSL()
{
if (m_psvs) { delete m_psvs; m_psvs = NULL; }
Poco::Net::uninitializeSSL();
}
void HTTPFormServerSSL::SetMainHttpEx(MobsetHttpEx * pHttpEx)
{
m_pMobsetHttpEx = pHttpEx;
}
void HTTPFormServerSSL::initialize(Application& self)
{
//loadConfiguration(); // load default configuration files, if present
ServerApplication::initialize(self);
}
void HTTPFormServerSSL::uninitialize()
{
ServerApplication::uninitialize();
}
void HTTPFormServerSSL::defineOptions(OptionSet& options)
{
ServerApplication::defineOptions(options);
/*
options.addOption(
Option("help", "h", "display help information on command line arguments")
.required(false)
.repeatable(false));
*/
}
void HTTPFormServerSSL::handleOption(const std::string& name, const std::string& value)
{
ServerApplication::handleOption(name, value);
if (name == "help")
_helpRequested = true;
}
void HTTPFormServerSSL::displayHelp()
{
HelpFormatter helpFormatter(options());
helpFormatter.setCommand(commandName());
helpFormatter.setUsage("OPTIONS");
helpFormatter.setHeader("A web server that shows how to work with HTML forms.");
helpFormatter.format(std::cout);
}
int HTTPFormServerSSL::main(const std::vector<std::string>& args)
{
if (_helpRequested)
{
displayHelp();
}
else
{
try
{
if (m_pMobsetHttpEx->m_bHttpLog)
{
try
{
logger_Setup();
CString strLog;
strLog.Format(_T("Http Server 启动,IP:%s Port:%d SSL:%d..."), m_pMobsetHttpEx->m_strIP, m_pMobsetHttpEx->m_lPort, m_pMobsetHttpEx->m_bSSL);
m_pMobsetHttpEx->Http_Log(strLog);
}
catch (...)
{
m_pMobsetHttpEx->m_bHttpLog = false;
}
}
unsigned short portssl = m_pMobsetHttpEx->m_lPort;
std::string sKey(m_pMobsetHttpEx->m_privateKeyFile);
std::string sCert(m_pMobsetHttpEx->m_certificateFile);
std::string sLocal(m_pMobsetHttpEx->m_caLocation);
//有两种方式的ssl实现。
//1.OpenSSL 将MobsetHttp\poco\Net_ssl里面的文件拷到\Net文件夹下。
//2.WinSSL 将MobsetHttp\poco\Net_sslwin里面的文件拷到\Net文件夹下。
//绑定地址与端口,HTTPS
//OpenSSL 使用这个
//Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> ptrHandler = new Poco::Net::AcceptCertificateHandler(false);
Context::Ptr pContext = new Poco::Net::Context(
Poco::Net::Context::SERVER_USE, sKey, sCert, sLocal,
Poco::Net::Context::VERIFY_NONE, 9, false,
"ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
pContext->enableSessionCache(true, "mobsetHttp");
pContext->setSessionTimeout(10);
pContext->setSessionCacheSize(256*1024); //如果经常断,放大这个缓冲区有作用
pContext->disableStatelessSessionResumption();
//SSLManager::instance().initializeClient(0, ptrHandler, pContext);
/*
//winSSL 使用这个
Context::Ptr pContext = new Poco::Net::Context(
Poco::Net::Context::SERVER_USE, sKey,
Poco::Net::Context::VERIFY_NONE,
Poco::Net::Context::OPT_LOAD_CERT_FROM_FILE,
sCert);
*/
/*
Context::Ptr pContext = new Poco::Net::Context(
Poco::Net::Context::SERVER_USE, "", "", "",
Poco::Net::Context::VERIFY_NONE, 9, true,
"ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
*/
//Context::Ptr pContext = NULL;
if (m_pMobsetHttpEx->m_strIP.GetLength() > 0)
{
char szIP[64] = { 0 };
strcpy(szIP, CW2A(m_pMobsetHttpEx->m_strIP));
SocketAddress address(szIP, portssl);
m_psvs = new SecureServerSocket(address, 128, pContext);
}
else
{
m_psvs = new SecureServerSocket(portssl, 128, pContext);
}
const int maxQueued = 2000;
const int maxThreads = 64;
//ThreadPool::defaultPool().addCapacity(maxThreads);
HTTPServerParams* pParams = new HTTPServerParams;
pParams->setMaxQueued(maxQueued);
pParams->setMaxThreads(maxThreads);
pParams->setKeepAlive(false);
//m_pFactory = new FormRequestHandlerFactory(m_pYouduHttpEx);
m_psrv = new HTTPServer(new FormRequestHandlerFactory(m_pMobsetHttpEx), *m_psvs, pParams);
m_psrv->start();
//delete pContext;
return Application::EXIT_OK;
}
//catch (std::exception abc)
catch (Poco::Exception abc)
{
m_lErrCode = abc.code();
if (m_lErrCode == 0)
m_lErrCode = -1;
return m_lErrCode;
}
}
return Application::EXIT_OK;
}
long HTTPFormServerSSL::Web_WaitForRequest(void)
{
if (m_psrv)
{
//m_psrv->start();
waitForTerminationRequest();
//m_psrv->stopAll(true);
m_psrv->stop();
m_psrv->stopAll(true);
delete m_psrv;
m_psrv = NULL;
}
return 0;
}
MobsetHttpEx::MobsetHttpEx(void)
{
m_pParam = NULL;
m_hThread = INVALID_HANDLE_VALUE;
m_hThreadSSL = INVALID_HANDLE_VALUE;
m_bStart = false;
m_pSQL = NULL;
m_Critical = NULL;
m_lSQLCount = 10;
m_bCopy = false;
m_lPort = 0;
m_HttpApp = NULL;
m_HttpAppSSL = NULL;
m_pMobsetAPI = NULL;
m_bHttpLog = false;
m_dwReqCount = 0;
}
MobsetHttpEx::~MobsetHttpEx(void)
{
Web_Exit();
}
MobsetHttpEx::MobsetHttpEx(const struct soap &_soap)
{
}
void MobsetHttpEx::Http_Log(CString strLog)
{
if (m_bHttpLog)
{
try
{
/*
Logger& logger = Logger::get("HTTPLog"); // inherits root channel
CStringA strLogA = CW2A(strLog);
logger.information(strLogA.GetBuffer());
*/
this->m_pMobsetAPI->Info_Log(strLog);
}
catch (...)
{
//int abc;
}
}
}
void MobsetHttpEx::Http_LogA(CStringA strLog)
{
if (m_bHttpLog)
{
try
{
/*
Logger& logger = Logger::get("HTTPLog"); // inherits root channel
CStringA strLogA = CW2A(strLog);
logger.information(strLogA.GetBuffer());
*/
this->m_pMobsetAPI->Info_LogA(strLog);
}
catch (...)
{
//int abc;
}
}
}
long MobsetHttpEx::Web_Init(TCHAR * strIP, long lPort, BOOL bSSL, TCHAR * privateKeyFile, TCHAR * certificateFile, TCHAR * caLocation, long lSQLConnect, long lMaxIDReq, long lMaxIPReq)
{
AutoCoInitializeEx AutoCoInit; //自动初始化与结束Com环境
if (this->m_pParam)
{
CFXSendDlg * pDlg = (CFXSendDlg *)this->m_pParam;
if (pDlg->m_MCom_Head.bLogEx)
{
m_bHttpLog = true;
/*
TCHAR * buf = new TCHAR[256];
pDlg->GetCurrentPath(buf);
CString strOutputBasePath = buf;
delete buf;
if (strOutputBasePath.GetLength() > 0)
{
strOutputBasePath = strOutputBasePath + CString(_T("\\")) + CString(_T("HTTPLog"));
::CreateDirectory(strOutputBasePath, NULL); //有理没理,创建了再说
}
*/
}
}
Web_Exit(); //不管什么情况,先停止再说。
//启动短信服务
m_pMobsetAPI = new MobsetApi::MobsetApiServiceEx;
m_pMobsetAPI->m_bHTTP = true; //是HTTP的中转服务
m_pMobsetAPI->SetSQLParam(this->m_pParam, m_strSQL_IP, m_strSQL_User, m_strSQL_Passwd, m_strSQL_DB, m_strSQL_Provider);
m_pMobsetAPI->Web_Init(_T(""), 0, lSQLConnect, lMaxIDReq, lMaxIPReq);
if (strIP && _tcslen(strIP) > 8)
{
m_strIP = strIP;
}
m_lPort = (unsigned short)lPort;
m_bSSL = bSSL;
m_privateKeyFile = CW2A(privateKeyFile);
m_certificateFile = CW2A(certificateFile);
m_caLocation = CW2A(caLocation);
if (m_HttpApp)
{
m_HttpApp->release();
m_HttpApp = NULL;
}
if (m_HttpAppSSL)
{
m_HttpAppSSL->release();
m_HttpAppSSL = NULL;
}
long lErrCode = 0;
if (m_bSSL) //启动SSL
{
m_HttpAppSSL = new HTTPFormServerSSL;
m_HttpAppSSL->SetMainHttpEx(this);
int argc = 1;
char * argv[] = { "mobsetSSL" };
int iRet = m_HttpAppSSL->run(argc, &argv[0]);
lErrCode = m_HttpAppSSL->m_lErrCode;
if (iRet == 0 && lErrCode == 0)
{
DWORD ID = 0;
m_bStart = true;
m_hThreadSSL = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Process_AcceptT_SSL, (LPVOID)this, 0, &ID);
}
}
else
{
m_HttpApp = new HTTPFormServer;
m_HttpApp->SetMainHttpEx(this);
int argc = 1;
char * argv[] = { "mobset" };
int iRet = m_HttpApp->run(argc, &argv[0]);
lErrCode = m_HttpApp->m_lErrCode;
if (iRet == 0 && lErrCode == 0)
{
DWORD ID = 0;
m_bStart = true;
m_hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Process_AcceptT, (LPVOID)this, 0, &ID);
}
}
if (lErrCode != 0)
m_bStart = false;
CString strLog;
strLog.Format(_T("Http Server 启动完成Code:%d"), lErrCode);
Http_Log(strLog);
return lErrCode;
}
long MobsetHttpEx::GetBankSQLCount(CString & strMsg)
{
if (!m_pMobsetAPI)
return -1;
long lBankSql = m_pMobsetAPI->GetBankSQLCount(strMsg);
CString strAllReq;
strAllReq.Format(_T("/%d"), m_dwReqCount);
strMsg = strMsg + strAllReq;
return lBankSql;
}
UINT MobsetHttpEx::Process_AcceptT(LPVOID sParam)
{
MobsetHttpEx * pCtcc = (MobsetHttpEx *)sParam;
if (pCtcc && pCtcc->m_bStart && pCtcc->m_HttpApp)
{
pCtcc->m_HttpApp->Web_WaitForRequest();
}
return 0; return 0;
}
UINT MobsetHttpEx::Process_AcceptT_SSL(LPVOID sParam)
{
MobsetHttpEx * pCtcc = (MobsetHttpEx *)sParam;
if (pCtcc && pCtcc->m_bStart && pCtcc->m_HttpAppSSL)
{
pCtcc->m_HttpAppSSL->Web_WaitForRequest();
}
return 0; return 0;
}
DWORD WINAPI MobsetHttpEx::Process_Req(LPVOID lpParam)
{
/*
AutoCoInitializeEx AutoCoInit; //自动初始化与结束Com环境
MobsetHttpEx * pCtcc = (MobsetHttpEx *)lpParam;
TCHAR szIpAddr[32]={0};
_stprintf(szIpAddr, _T("%d.%d.%d.%d"),
((pCtcc->ip)>>24)&0xFF,((pCtcc->ip)>>16)&0xFF,((pCtcc->ip)>>8)&0xFF,(pCtcc->ip)&0xFF);
pCtcc->serve(); //处理数据
//pCtcc->destroy();
soap_destroy(pCtcc);
soap_end(pCtcc);
soap_done(pCtcc);
//soap_free(pCtcc); //删除
delete pCtcc;
*/
return 0;
}
SQL_Pool * MobsetHttpEx::GetBankSQL()
{
if (!m_pSQL)
return NULL;
for (int j = 0; j < 10; j++)
{
EnterCriticalSection(m_Critical);
for (int i = 0; i < m_lSQLCount; i++)
{
if (!m_pSQL[i].bUse && m_pSQL[i].lRandID == 0 &&
m_pSQL[i].adoConnection.isOK())
{
m_pSQL[i].bUse = true;
m_pSQL[i].lRandID = rand();
m_pSQL[i].dwBeginUse = GetTickCount();
//if ( !m_pSQL[i].spDoc )
// m_pSQL[i].spDoc.CoCreateInstance(__uuidof(DOMDocument40));
if (ConnectSQLServer(&m_pSQL[i])) //连接数据库
{
LeaveCriticalSection(m_Critical);
return &m_pSQL[i];
}
}
}
LeaveCriticalSection(m_Critical);
Sleep(500);
}
return NULL;
}
BOOL MobsetHttpEx::ConnectSQLServer(SQL_Pool *pSql)
{
if (!pSql)
return false;
//if ( !pSql->spDoc )
//{
// pSql->spDoc.CoCreateInstance(__uuidof(DOMDocument40));
//}
if (pSql->adoConnection.IsOpen())
{
return true;
}
for (int i = 0; i < 3; i++) //重试3次看能否连上数据库
{
BOOL b = pSql->adoConnection.ConnectSQLServer2(m_strSQL_IP, m_strSQL_DB, m_strSQL_User, m_strSQL_Passwd, m_strSQL_Provider);
if (b)
{
pSql->adoConnection.SetCommandTimeout(120); //设置连接超时时间
pSql->adoConnection.SetCursorLocation(adUseClient); //设置为本地游标类型
return true;
}
Sleep(2000);
}
return false;
}
void MobsetHttpEx::SetSQLParam(LPVOID pParam, CString strIP, CString strUser, CString strPasswd, CString strDB, CString strProvider)
{
m_pParam = pParam;
//_tcscpy(m_strSQL_Provider, strProvider);
_tcscpy(m_strSQL_IP, strIP);
_tcscpy(m_strSQL_User, strUser);
_tcscpy(m_strSQL_Passwd, strPasswd);
_tcscpy(m_strSQL_DB, strDB);
_tcscpy(m_strSQL_Provider, strProvider);
}
long MobsetHttpEx::Web_Exit()
{
if (m_bCopy) //如果只是复制的,不用释放资源。
return true;
m_bStart = false;
if (m_HttpApp)
{
m_HttpApp->terminate();
}
if (m_hThread != INVALID_HANDLE_VALUE)
{
WaitForSingleObject(m_hThread, 10000); //等待10秒
m_hThread = INVALID_HANDLE_VALUE;
}
if (m_HttpApp)
{
m_HttpApp->release();
//delete m_HttpApp;
m_HttpApp = NULL;
}
if (m_HttpAppSSL)
{
m_HttpAppSSL->terminate();
}
if (m_hThreadSSL != INVALID_HANDLE_VALUE)
{
WaitForSingleObject(m_hThreadSSL, 10000); //等待10秒
m_hThreadSSL = INVALID_HANDLE_VALUE;
}
if (m_HttpAppSSL)
{
m_HttpAppSSL->release();
//delete m_HttpAppSSL;
m_HttpAppSSL = NULL;
}
/*
if (m_pSQL)
{
EnterCriticalSection(m_Critical);
for (int i = 0; i < m_lSQLCount; i++)
{
m_pSQL[i].adoConnection.Close();
//if ( m_pSQL[i].spDoc )
//{
// m_pSQL[i].spDoc.Release();
// m_pSQL[i].spDoc = NULL;
//}
}
delete[]m_pSQL;
m_pSQL = NULL;
LeaveCriticalSection(m_Critical);
}
if (m_Critical)
{
DeleteCriticalSection(m_Critical);
delete m_Critical;
m_Critical = NULL;
}
*/
if (m_pMobsetAPI)
{
m_pMobsetAPI->Web_Exit();
delete m_pMobsetAPI;
m_pMobsetAPI = NULL;
}
return true;
}
void MobsetHttpEx::GetCurrentPath(TCHAR *pPath)
{
try
{
::GetModuleFileName(NULL, pPath, 512);
int j = lstrlen(pPath);
for (; j > 0; j--)
{
if (pPath[j] == '\\')
break;
}
pPath[j + 1] = 0;
}
catch (...)
{
}
}
MyHttpParamsParser::MyHttpParamsParser()
{
m_pUrl = NULL;
m_pPostData = NULL;
}
long MyHttpParamsParser::Parser1(std::string * pData, long lType)
{
if (!pData)
return 0;
long lNumber = 0;
long lLen = pData->size();
BOOL bParserParam = true;
BOOL bUrlDecode = false;
BOOL bParserBegin = false;
std::string paramName;
long lBegin = 0;
long lEnd = 0;
for (int i = 0; i < lLen; i++)
{
//if (lType == 0 && lLen<20 && (!bParserBegin && pData->at(i) == '?') ) //分析url时如果遇到?号,表示参数开始,所有内容重新来过
if (lType == 1 && i < 80 && (!bParserBegin && pData->at(i) == '?')) //分析url时如果前20个字符遇到?号,表示参数开始,所有内容重新来过
{
bParserBegin = true;
paramName = "";
bParserParam = true;
lBegin = 0;
lEnd = 0;
bUrlDecode = false; //默认不需要url解码
continue;
}
BOOL bEndChar = false;
if (pData->at(i) == '=') //此时代表参数与值的分隔
{
if (bParserParam)
{
bParserParam = false; //遇到=号,下一个就是值了。
lBegin = i + 1;
continue;
}
else
{
bEndChar = true;
}
}
if (pData->at(i) == '&') //此时代表下一个参数的开始
{
bEndChar = true;
}
if (bEndChar)
{
if (!bParserParam && lEnd >= lBegin)
{
HttpParams param;
param.name = paramName;
param.in = lType;
param.begin = lBegin;
param.end = lEnd;
param.urlDecode = bUrlDecode;
m_HttpParams.push_back(param);
lNumber++;
}
//遇到&号,下一个就是新的参数了。
paramName = "";
bParserParam = true;
lBegin = 0;
lEnd = 0;
bUrlDecode = false; //默认不需要url解码
continue;
}
if (bParserParam)
{
paramName = paramName + pData->at(i);
}
else
{
if (pData->at(i) == '%' || pData->at(i) == '+') //有此符号表示url解码
//if (pData->at(i) == '%') //有此符号表示url解码
{
bUrlDecode = true; //默认不需要url解码
}
lEnd = i;
}
}
if (!bParserParam && i > 0 && i >= lBegin)
{
HttpParams param;
param.name = paramName;
param.in = lType;
param.begin = lBegin;
param.end = i-1;
param.urlDecode = bUrlDecode;
m_HttpParams.push_back(param);
lNumber++;
}
return lNumber;
}
long MyHttpParamsParser::Parser(std::string * pUrl, std::string * pPostData)
{
m_HttpParams.clear();
Parser1(pUrl, 0); //先分析url
Parser1(pPostData, 1); //再分析postData
m_pUrl = pUrl;
m_pPostData = pPostData;
return m_HttpParams.size();
}
std::string MyHttpParamsParser::get(std::string paramName, std::string default)
{
std::string sReturn = default;
std::string paramNameU1 = paramName;
transform(paramNameU1.begin(), paramNameU1.end(), paramNameU1.begin(), ::toupper);
long lSize = m_HttpParams.size();
for (int i = 0; i < lSize; i++)
{
std::string paramNameU2 = m_HttpParams[i].name;
transform(paramNameU2.begin(), paramNameU2.end(), paramNameU2.begin(), ::toupper);
if (paramNameU1.compare(paramNameU2)==0)
{
std::string * pData = m_pUrl;
if (m_HttpParams[i].in == 1)
pData = m_pPostData;
if (pData)
{
long lLen = pData->size();
if (m_HttpParams[i].end <= lLen && m_HttpParams[i].end >= m_HttpParams[i].begin)
{
sReturn = pData->substr(m_HttpParams[i].begin, (m_HttpParams[i].end - m_HttpParams[i].begin)+1);
if (m_HttpParams[i].urlDecode)
{
return URLDecode(sReturn);
}
else
{
return sReturn;
}
break;
}
}
}
}
return sReturn;
}
CStringW MyHttpParamsParser::getAsStringW(std::string paramName, std::string default, long lCharsetType)
{
CStringW str;
std::string sReturn;
std::string sGet = get(paramName, default);
if (sGet.size() > 0)
{
return FormRequestHandler::ChangeHttpReqToW(sGet, lCharsetType);
}
return str;
}
long MyHttpParamsParser::getLength(std::string paramName)
{
std::string paramNameU1 = paramName;
transform(paramNameU1.begin(), paramNameU1.end(), paramNameU1.begin(), ::toupper);
long lSize = m_HttpParams.size();
for (int i = 0; i < lSize; i++)
{
std::string paramNameU2 = m_HttpParams[i].name;
transform(paramNameU2.begin(), paramNameU2.end(), paramNameU2.begin(), ::toupper);
if (paramNameU1.compare(paramNameU2) == 0)
{
std::string * pData = m_pUrl;
if (m_HttpParams[i].in == 1)
pData = m_pPostData;
if (pData)
{
long lLen = pData->size();
if (m_HttpParams[i].end <= lLen && m_HttpParams[i].end >= m_HttpParams[i].begin)
{
return (m_HttpParams[i].end - m_HttpParams[i].begin) + 1;
break;
}
}
}
}
return 0;
}
long MyHttpParamsParser::getAsBase64Decode(std::string paramName, void * pData, long lMaxLen)
{
long lLen = 0;
std::string sReturn;
std::string sGet = get(paramName, "");
if (sGet.size() > 0)
{
CBase64Coding base64coding;
CByteArray ba;
if (base64coding.Decode(CStringA(sGet.c_str()), ba))
{
if (ba.GetSize() <= lMaxLen)
{
lLen = ba.GetSize();
memcpy(pData, ba.GetData(), lLen);
}
}
}
return lLen;
}
std::string MyHttpParamsParser::URLDecode(std::string& sIn)
{
std::string result;
long lLen = sIn.size();
int hex = 0;
for (int i = 0; i < lLen; ++i)
{
char c = sIn.at(i);
char c1 = 0;
char c2 = 0;
switch (c)
{
case '+':
result += ' ';
break;
case '%':
if (i + 2 < lLen)
{
c1 = sIn.at(i + 1);
c2 = sIn.at(i + 2);
}
if (isxdigit(c1) && isxdigit(c2))
{
//std::string hexStr = sIn.Mid(i + 1, 2);
//hex = strtol(hexStr.c_str(), 0, 16);
hex = fromHex(c1) * 16 + fromHex(c2);
result += char(hex);
i += 2;
/*
//字母和数字[0-9a-zA-Z]、一些特殊符号[$-_.+!*'(),] 、以及某些保留字[$&+,/:;=?@]
//可以不经过编码直接用于URL
if (!((hex >= 48 && hex <= 57) || //0-9
(hex >=97 && hex <= 122) || //a-z
(hex >=65 && hex <= 90) || //A-Z
//一些特殊符号及保留字[$-_.+!*'(),] [$&+,/:;=?@]
hex == 0x21 || hex == 0x24 || hex == 0x26 || hex == 0x27 || hex == 0x28 || hex == 0x29
|| hex == 0x2a || hex == 0x2b|| hex == 0x2c || hex == 0x2d || hex == 0x2e || hex == 0x2f
|| hex == 0x3A || hex == 0x3B|| hex == 0x3D || hex == 0x3f || hex == 0x40 || hex == 0x5f
))
{
result += char(hex);
i += 2;
}
else result += '%';
*/
}
else {
result += '%';
}
break;
default:
result += char(c);
break;
}
}
return result;
/*
CStringA sOut;
long lLen = sIn.GetLength();
for( int ix = 0; ix < lLen; ix++ )
{
TCHAR ch = 0;
if(sIn[ix]=='%')
{
ch = (fromHex(sIn[ix+1])<<4);
ch |= fromHex(sIn[ix+2]);
ix += 2;
}
else if(sIn[ix] == '+')
{
ch = ' ';
}
else
{
ch = sIn[ix];
}
sOut += (TCHAR)ch;
}
return sOut;
*/
}
BYTE MyHttpParamsParser::fromHex(const BYTE &x)
{
if (isdigit(x))
{
return x - '0';
}
else if (x >= 'A' && x <= 'F')
{
return x - 'A' + 10;
} else if (x >= 'a' && x <= 'f')
return x - 'a' + 10;
return 0;
}
};