📄 sphttpclient.cpp
字号:
#include <sys/types.h>
#include <sys/wait.h>#include "Init.h"//#include "Common.h"#include "ReadConf.h"#include "SMSOperate.h"#include <ejet/Socket.h>//#include <ejet/ServerSocket.h>Init initSystem;int RecvData(CSocket socket, char* szBuff, int iBuffLen);int SendData(CSocket socket, const char* szBuff, int iDataLen);int RetStatus(const char* szBuff);int main(int argc,char *argv[]){ if((argc > 1) && (strcmp(argv[1], "-debug") == 0)) { if(-1 == initSystem.setLog("../log/", "post", true)) return -1; } else { if(-1 == initSystem.setLog("../log/", "post", false)) return -1; } if(!initSystem.initInterface("../conf/InterfaceConf.xml", "Interface")) return -1; DB db(initSystem.getLog(),"HttpClient"); if(!db.DbOpen(initSystem.getValue("DBSERVER").c_str(),initSystem.getValue("DBUSER").c_str(),initSystem.getValue("DBPWD").c_str())) return -1; CSMSOperate objSMSOperate(db, initSystem.getLog()); char szRecvBuff[1024]; SENDSM ssm; string strHeader="POST "+initSystem.getValue("PATH"); string strURL=""; int iProvider=0; try{ CSocket client; while(1) { if((iProvider++) >= 1) iProvider = 0; if(0 == objSMSOperate.GetSendSMS(ssm,iProvider)) { strURL=""; if(13 == ssm.strDestNum.length()) strURL += "mobile="+ssm.strDestNum.substr(2,11); else strURL += "mobile="+ssm.strDestNum; strURL += "&msg="+ssm.strContent; if("15108811" == ssm.strSourNum.substr(0,8) || "95108811" == ssm.strSourNum.substr(0,8)) strURL += "&uid=gzhs1&pwd=P4GZHS"; else if("15108822" == ssm.strSourNum.substr(0,8) || "95108822" == ssm.strSourNum.substr(0,8)) strURL += "&uid=gzhs2&pwd=P4GZHS"; else if("15108833" == ssm.strSourNum.substr(0,8) || "95108833" == ssm.strSourNum.substr(0,8)) strURL += "&uid=gzhs3&pwd=P4GZHS"; else if("15108866" == ssm.strSourNum.substr(0,8) || "95108866" == ssm.strSourNum.substr(0,8)) strURL += "&uid=gzhs8&pwd=P4GZHS"; else { *initSystem.getLog()<<TIME<<"无效接入号:"<<ssm.strSourNum<<END; continue; } if("3" == ssm.strFeeType || "03" == ssm.strFeeType) { if("200" == ssm.strCost) strURL += "&cost=02"; else if("300" == ssm.strCost) strURL += "&cost=03"; else if("500" == ssm.strCost) strURL += "&cost=05"; else if("1000" == ssm.strCost) strURL += "&cost=10"; else if("1200" == ssm.strCost) strURL += "&cost=12"; else if("1500" == ssm.strCost) strURL += "&cost=15"; else if("2000" == ssm.strCost) strURL += "&cost=20"; else { *initSystem.getLog()<<TIME<<"无效资费:"<<ssm.strCost<<END; continue; } } else if("1" == ssm.strFeeType || "01" == ssm.strFeeType || "2" == ssm.strFeeType || "02" == ssm.strFeeType) { strURL += "&item=" + ssm.strServiceType; /* if("0" == ssm.strCost) strURL += "&cost=000"; else if("10" == ssm.strCost) strURL += "&cost=010"; else if("20" == ssm.strCost) strURL += "&cost=020"; else if("40" == ssm.strCost) strURL += "&cost=040"; else if("50" == ssm.strCost) strURL += "&cost=050"; else if("60" == ssm.strCost) strURL += "&cost=060"; else if("80" == ssm.strCost) strURL += "&cost=080"; else if("100" == ssm.strCost) strURL += "&cost=100"; else if("150" == ssm.strCost) strURL += "&cost=150"; else if("200" == ssm.strCost) strURL += "&cost=200"; else { *initSystem.getLog()<<TIME<<"无效资费:"<<ssm.strCost<<END; continue; } */ } else { *initSystem.getLog()<<TIME<<"无效计费类型:"<<ssm.strFeeType<<END; continue; } if("15108811" == ssm.strSourNum.substr(0,8) || "95108811" == ssm.strSourNum.substr(0,8)) strURL += "&srcmobile=" + ssm.strSourNum.substr(8); if(!(0 == strcasecmp("0", ssm.strLinkID.c_str()) || 0 == strcasecmp("<NULL>", ssm.strLinkID.c_str()))) strURL += "&linkid=" + ssm.strLinkID; else strURL += "&linkid="; *initSystem.getLog()<<TIME<<"UP URL: "<<strURL<<END; strURL = strHeader + strURL + "\r\n\r\n"; client.Connect(initSystem.getValue("INTERFACEIP"), atoi(initSystem.getValue("INTERFACEPORT").c_str())); if(SendData(client,strURL.c_str(),strURL.length()) > 0) { memset(szRecvBuff, 0, 1024); if(RecvData(client,szRecvBuff,1024) > 0) { int iRet=-1; switch(iRet=RetStatus(szRecvBuff)) { case 0: objSMSOperate.UpdateSended(ssm); break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case -1: *initSystem.getLog()<<TIME<<"UP MSG ERROR: "<<iRet<<END; break; default: *initSystem.getLog()<<TIME<<"UP MSG ERROR: UNKNOWN"<<END; break; } } } client.Close(); } else sleep(1); } } catch (CSocketException& e){ *initSystem.getLog()<<TIME<<"Socket exception:" << e.GetMessage().c_str() <<END;
} return 0;}int RecvData(CSocket socket, char* szBuff, int iBuffLen){ int iRet = 0; if(NULL == szBuff) return iRet; if(1 > iBuffLen) return iRet; if((iRet = socket.CanReceive(atoi(initSystem.getValue("RECVTIMEOUT").c_str())*1000*1000)) < 1) { *initSystem.getLog()<<TIME<<"Can not receive any from client. ret="<<iRet<< END;
return iRet; } memset(szBuff, 0, iBuffLen); if((iRet = socket.Receive(szBuff, iBuffLen-1)) < 1)
{
*initSystem.getLog()<<TIME<<"Fail to receive from client. ret="<<iRet<< END;
} else { //*initSystem.getLog()<<TIME<<"receive data:["<<iRet<<"]\n"<<szBuff<< END; } return iRet; }int SendData(CSocket socket, const char* szBuff, int iDataLen){ int iRet = 0; if(NULL == szBuff) return iRet; if(1 > iDataLen) return iRet; if((iRet = socket.CanSend(atoi(initSystem.getValue("SENDTIMEOUT").c_str())*1000*1000)) < 1)
{ *initSystem.getLog()<<TIME<<"Can not send any to client. ret=" << iRet << END; return iRet; } if((iRet = socket.Send(szBuff, iDataLen)) < 1) { *initSystem.getLog()<<TIME<<"Can not send any to client. ret=" << iRet << END; } else { //*initSystem.getLog()<<TIME<<"send data:["<<iRet<<"]\n"<<szBuff<<END; } return iRet;}int RetStatus(const char* szBuff){ if(NULL == szBuff) return -1; try{ char szErrCode[3]={0}; char *str; if(NULL == (str=strstr(szBuff,"Content-Length: "))) { *initSystem.getLog()<<TIME<<"<"<<szBuff<<"> not exist <"<<"Content-Length: "<<">"<<END; return -1; } if((strlen(str)-strlen("Content-Length: ")) < 3) { *initSystem.getLog()<<TIME<<"<"<<szBuff<<"> error code invalid."<<END; return -1; }
str+=strlen("Content-Length: "); if(str[0] >= 0x30 && str[0] <= 0x39) szErrCode[0]=str[0]; else { *initSystem.getLog()<<TIME<<"<"<<szBuff<<"> error code invalid."<<END; return -1; } if(str[1] >= 0x30 && str[1] <= 0x39) szErrCode[1]=str[1]; int iLen = atoi(szErrCode); memset(szErrCode,0,3); if(1 == iLen && (str[strlen(str)-1] >= 0x30 && str[strlen(str)-1] <= 0x39)) szErrCode[0]=str[strlen(str)-1]; else if(2 == iLen && (str[strlen(str)-1] >= 0x30 && str[strlen(str)-1] <= 0x39) && (str[strlen(str)-2] >= 0x30 && str[strlen(str)-2] <= 0x39)) { szErrCode[0]=str[strlen(str)-2]; szErrCode[1]=str[strlen(str)-1]; } else if('0' == str[strlen(str)-iLen] && ':' == str[strlen(str)-iLen+1]) { *initSystem.getLog()<<TIME<<"MSGID["<<str+strlen(str)-iLen+2<<"]"<<END; return 0; } else { *initSystem.getLog()<<TIME<<"<"<<szBuff<<"> error code invalid."<<END; return -1; } return atoi(szErrCode); }catch(...){ *initSystem.getLog()<<TIME<<"RetStatus exception."<<END; return -1; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -