📄 tool.cpp
字号:
rs->AddNew();
rs->Field("c_ussd") = "0";
rs->Field("C_YWZT") = "0";
rs->Field("C_DXNR") = smsg;
rs->Field("C_SJHM") = ph_num;
rs->Field("c_jmbs") = '0';
rs->Field("c_dkh") = dst_addr;
rs->Update();
db.CommitTrans();
rs->Close();
}
return 0;
}
int Exe_3type(int icount ,int len,uwatchprotocol watchtest,struct ENSMSREPORT* repack,CString ph_num,CDatabase& db,CDatabase& mysqldb)
{
unsigned char RanNum[8];
unsigned char Ran[8] = {0x00,0x65};
unsigned char pkey[200];
unsigned char tkey[200];
unsigned char resul[120] ;
unsigned char MacStr[4];
int msglenth;
CString strsql;
unsigned char msgcontent[160];
pkey[0] = 0x10;
memcpy(pkey+1,"1234123412341234",16);//主密钥
memcpy(RanNum,Ran,8);
repack = new ENSMSREPORT;
watchtest.EncodeAndMac(17,pkey,tkey,RanNum,MacStr,resul);
repack->SecurID = 0xF0;
repack->Version = 0xF9;
repack->AppType = 0x03;
repack->Reserve1= 0x00;
repack->EncryType = 0x12;
repack->KeyVersion=0x01;//密钥版本号
repack->SyncCount = 0x01;//(计数器)
memcpy(repack->RanNum,RanNum,8);
memcpy(repack->EnData,resul,24);
memcpy(repack->MacStr,MacStr,4);
msglenth = 20+24;
memcpy(msgcontent,repack,msglenth);
strsql.Format("insert into submit_msg (icp_id,svc_type,fee_type,\
info_fee,proto_id,msg_mode,priority,validate,shedule,fee_utype,\
fee_user,src_addr,du_count,dst_addr,data_coding,sm_len,short_msg,\
msg_state,tp_udhi,tp_pid,pk_total,pk_number) \
values('930165','TXJ4919901',1,'0',0,1,9,'','',1,'',\
'106573002110',1,'%s',246,'%d','%s',0,0,127,1,1) ",ph_num,msglenth,msgcontent);
mysqldb.ExecuteSQL(strsql);
return 0;
}
int InitDatabase(CDatabase& db,int type)
{
char buf[32],dsnbuf[32];
int iRet;
CString cConnect= "ODBC;UID=";;
if(type=1)
{
memset(buf,0,sizeof(buf));
ReadConfig("ttt.conf", "[MYSQLCONN]", "USR=",buf);
cConnect = cConnect+buf+";PWD=";
memset(buf,0,sizeof(buf));
ReadConfig("ttt.conf", "[MYSQLCONN]", "PWD=",buf);
cConnect = cConnect+buf;
memset(dsnbuf,0,sizeof(dsnbuf));
ReadConfig("ttt.conf", "[MYSQLCONN]", "DSN=",dsnbuf);
}else
{
memset(buf,0,sizeof(buf));
ReadConfig("ttt.conf", "[DBCONN]", "USR=",buf);
cConnect = cConnect+buf+";PWD=";
memset(buf,0,sizeof(buf));
ReadConfig("ttt.conf", "[DBCONN]", "PWD=",buf);
cConnect = cConnect+buf;
memset(dsnbuf,0,sizeof(dsnbuf));
ReadConfig("ttt.conf", "[DBCONN]", "DSN=",dsnbuf);
}
TRY
{
db.Open( _T(dsnbuf), // DSN
FALSE, // Exclusive
FALSE, // ReadOnly
_T(cConnect), // ODBC Connect string
TRUE // Use cursor lib
);
printf("Connect to database successful\n");
// m_rs = new CODBCRecordset( &m_db );
iRet=0;
}
CATCH(CDBException, e)
{
printf("Connect to database failure\n:sqlcode=%d\nsqlerror=%s\nsqlerrormsg=%s\n" ,e->m_nRetCode, e->m_strError ,e->m_strStateNativeOrigin);
iRet=-1;
}
END_CATCH
return iRet;
}
UINT __cdecl rec_data(LPVOID lpvoid)
{
int ret;
CDatabase db,mysqldb;
CODBCRecordset* rs ;
CODBCRecordset* rs1 ;
CString strsql;
BOOL dbconn=TRUE;
ENSMSREPORT* repack;
int seq_id;
CString src_addr;
int sm_len;
CString short_msg;
unsigned char* data;
unsigned char* str_msg;
ret=InitDatabase(db,0);
if(ret!=0)
dbconn==FALSE;
ret=InitDatabase(mysqldb,1);
if(ret!=0)
dbconn==FALSE;
uwatchprotocol watchtest;
if(dbconn==TRUE)
{
rs=new CODBCRecordset( &mysqldb );
rs1=new CODBCRecordset( &db );
}
while(1)
{
if(dbconn!=TRUE)
{
dbconn==TRUE;
ret=InitDatabase(db,0);
if(ret!=0)
dbconn==FALSE;
ret=InitDatabase(mysqldb,1);
if(ret!=0)
dbconn==FALSE;
if(dbconn==TRUE)
{
rs=new CODBCRecordset( &mysqldb );
rs1=new CODBCRecordset( &db );
}
}
strsql="select * from deliver_msg where msg_state=0";
rs->Open(strsql);
TRY
{
while(!rs->IsEOF())
{
// Exe_3type(int icount ,int len,uwatchprotocol watchtest,struct ENSMSREPORT* repack,CString ph_num,CDatabase* db,CDatabase* mysqldb)
seq_id=rs->GetInt("seq_id");
sm_len=rs->GetInt("sm_len");
src_addr=rs->GetString("src_addr");
short_msg=rs->GetString("short_msg");
str_msg=(unsigned char*)LPCTSTR(short_msg);
data=watchtest.base64decode(str_msg);
repack=(ENSMSREPORT*)data;
if(repack->SecurID==0xF0)
{
if(repack->AppType==0x01)
{
Exe_1type(100 ,src_addr,sm_len-20,watchtest,repack,src_addr,db,mysqldb) ;
}
if(repack->AppType==0x02)
{
Exe_2type(100 ,sm_len -20,watchtest,repack,src_addr,db,mysqldb) ;
}
if(repack->AppType==0x03)
{
Exe_3type(100 ,sm_len -20,watchtest,repack,src_addr,db,mysqldb) ;
}
}
else
{
strsql = "select * from T_JT_DXQQB where C_SJHM = 'xx'";
db.BeginTrans();
rs1->Open( strsql );
rs1->AddNew();
rs1->Field("C_SJHM") = src_addr;
rs1->Field("C_DKH") =rs->GetString("dst_addr");
rs1->Field("DT_QQSJ") = COleDateTime::GetCurrentTime();
rs1->Field("C_DXNR") = CString(data);
rs1->Field("C_YWZT") = '0';//未处理
rs1->Field("c_jmbs") = '0';
rs1->Update();
db.CommitTrans();
rs1->Close();
}
rs->MoveNext();
}
}
CATCH(CDBException, e)
{
printf("Connect to database failure\n:sqlcode=%d\nsqlerror=%s\nsqlerrormsg=%s\n" ,e->m_nRetCode, e->m_strError ,e->m_strStateNativeOrigin);
}
END_CATCH
{
dbconn=FALSE;
sleep(1000);
}
}
return 0l;
}
UINT sendsms(LPVOID lpvoid)
{
CDatabase db,mysqldb;
char buf[32],dsnbuf[32],mysqldsn[32];
CString cConnect = "ODBC;UID=";
CString myConnect="ODBC;UID=";
memset(buf,0,sizeof(buf));
ReadConfig("ttt.conf", "[DBCONN]", "USR=",buf);
cConnect = cConnect+buf+";PWD=";
memset(buf,0,sizeof(buf));
ReadConfig("ttt.conf", "[DBCONN]", "PWD=",buf);
cConnect = cConnect+buf;
memset(dsnbuf,0,sizeof(dsnbuf));
ReadConfig("ttt.conf", "[DBCONN]", "DSN=",dsnbuf);
memset(buf,0,sizeof(buf));
ReadConfig("ttt.conf", "[MYSQLCONN]", "USR=",buf);
myConnect = cConnect+buf+";PWD=";
memset(buf,0,sizeof(buf));
ReadConfig("ttt.conf", "[MYSQLCONN]", "PWD=",buf);
myConnect = cConnect+buf;
memset(mysqldsn,0,sizeof(mysqldsn));
ReadConfig("ttt.conf", "[MYSQLCONN]", "DSN=",mysqldsn);
CString jf_telno,tel_no,lcs_sms,lcs_qqlb,lcs_bybh,lcs_hybh;
unsigned char RanNum[8];
int n_jffs,n_fy;//公众服务的计费
int jfcount = 0;//月计费次数
int stat;
uwatchprotocol watchtest;
int connid;
INT64 pmsg_id;
char* seveceid;
char* destmobile;
char* msgcontent;
int msglenth;
bool logined ;
bool connected ;
bool connectedmo;
bool server ;
bool databasework ;
COleDateTime theTime;
CString stmp = "";
fd_set FAR readfds;
timeval FAR timeout;
FD_ZERO( &readfds ) ;
timeout.tv_sec = 3 ;
timeout.tv_usec = 0 ;
//新代码开始
// system_init();
fflush(stdout);
//新代码结束
int timeout_time = 0 ;
// isafter51=" and to_char(t_wzqk_jdcl.d_datetime,'yyyymmdd')>'20030430' ";//判断是否为5月1日后
CString s1,lcs_ywzl;
unsigned char RamNum[8];
unsigned char MacStr[4];
//返回连接句柄 CONN
bool isbof = false;
connected = false ;
connectedmo = false ;
logined = false ;
server = true ;
databasework = false ;
CODBCRecordset* rs ;
CODBCRecordset* rs1;
CODBCRecordset* rs2 ;
CODBCRecordset* mysqlrs ;
CODBCRecordset* mysqlrs1;
CODBCRecordset* mysqlrs2 ;
while (1)
{
while (! databasework)
{
TRY
{
db.Open( _T(dsnbuf), // DSN
FALSE, // Exclusive
FALSE, // ReadOnly
_T(cConnect), // ODBC Connect string
TRUE // Use cursor lib
);
mysqldb.Open( _T(mysqldsn), // DSN
FALSE, // Exclusive
FALSE, // ReadOnly
_T(myConnect), // ODBC Connect string
TRUE // Use cursor lib
);
databasework = true ;
printf("Connect to database successful\n");
rs = new CODBCRecordset( &db );
rs1 = new CODBCRecordset( &db );
rs2 = new CODBCRecordset( &db );
mysqlrs = new CODBCRecordset( &mysqldb );
mysqlrs1 = new CODBCRecordset( &mysqldb );
mysqlrs2 = new CODBCRecordset( &mysqldb );
}
CATCH(CDBException, e)
{
printf("Connect to database failure\n:sqlcode=%d\nsqlerror=%s\nsqlerrormsg=%s\n" ,e->m_nRetCode, e->m_strError ,e->m_strStateNativeOrigin);
Sleep(5000);
}
END_CATCH
}
connected=true;
stat=0;
if ((connected) && (databasework))
{
TRY // begin process for login
{ //开始群发
CString dx,lastphone;
int smsnum;
int retval;
unsigned char tkey[50];
unsigned char pkey[200];
CString stkey, spkey;
CString iis;
int ii = 256;
unsigned char resul[120];
CString phnum = (CString)destmobile;
CString enflag;
ENSMSREPORT* repack;
repack = new ENSMSREPORT[1];
s1="select * from T_JT_DXFSB where C_YWZT = '0'";
//db.BeginTrans();
rs->Open( s1 );
smsnum = 0;
while(!rs->IsEOF())
{
CString qqid,nseq;
int jl,jls;
char jldxre;
CString xh;
CString msg_tem;
unsigned short CONTENT[200];
xh = rs->GetString("n_id");
s1.Format(_T("update t_jt_dxfsb set c_ywzt='8' where n_id=%s"),xh);
db.ExecuteSQL(s1);
tel_no = rs->GetString("C_JSHM");
destmobile = (char *)LPCTSTR(tel_no);
lcs_sms = rs->GetString("C_DXNR");
msglenth = lcs_sms.GetLength();
msgcontent = (char *)LPCTSTR(lcs_sms);
n_jffs = rs->GetInt("C_JFFS");
n_fy = rs->GetInt("N_FWFY");
jf_telno = rs->GetString("C_JFHM");
lcs_ywzl = rs->GetString("C_YWDM");/* mend */
seveceid = (char *)LPCTSTR(lcs_ywzl);
lcs_qqlb = rs->GetString("C_QQLB");
lcs_hybh = rs->GetString("C_HYBH");
enflag = rs->GetString("c_jmbs");
qqid = rs->GetString("n_qqid");
nseq = rs->GetString("n_seq");
ii = rs->GetLong("n_s_counter");
msg_tem = lcs_sms.Left(140)+"#";
if (msg_tem.Find("#")<0)
msg_tem = lcs_sms.Left(139);
else
msg_tem = lcs_sms.Left(140);
lcs_sms = msg_tem;
if(lastphone==tel_no)
Sleep(2000);
lastphone = tel_no;
if(enflag=="1")
{
unsigned short colen;
unsigned char pkey1[200];
//发送级联短信reserve的前四位表示短信总条数,后四位表示第几条短信
s1 = "select count(0) from t_jt_dxfsb where n_qqid ="+qqid;
rs1->Open(s1);
jls = rs1->GetInt(0);
rs1->Close();
if(nseq == "100")
jl = jls;
else
{
jl = atoi((char*)LPCTSTR(nseq));
}
jldxre = (char)jls;
jldxre = jldxre << 4;
jldxre = jldxre + (char)jl;
jldxre = 0x11;
s1 = "select * from t_ryqxgl where c_ydbs = '" + tel_no + "'";
rs1->Open(s1);
if(!rs1->IsEOF())
{
spkey = rs1->GetString("c_pkey");
}
rs1->Close();
//解码主密钥
memcpy(tkey, spkey, spkey.GetLength());
memcpy(tkey,watchtest.base64decode(tkey),16);
tkey[16] = '\0';
//下发短信进行Unicode编码
colen = MultiByteToWideChar(CP_ACP,MB_ERR_INVALID_CHARS,msgcontent,strlen(msgcontent),(LPWSTR)CONTENT,200);
if(colen>59)
colen = 59;//最大不超过59个UCS2字符
memcpy(pkey, CONTENT, colen*2);
for(int t=0;t<colen;t++)
{
short temshort;
temshort = pkey[2*t];
pkey[2*t] = pkey[2*t+1];
pkey[2*t+1] = temshort;
}
colen = colen*2;
pkey1[0] = colen;
memcpy(pkey1+1,pkey,colen);
colen++;
watchtest.DuctRanNum(RanNum,8);//生成随机数
watchtest.EncodeAndMac(colen,pkey1,tkey,RanNum,MacStr,resul);
colen = (colen%8==0?colen:(colen/8+1)*8);
repack->SecurID = 0xF0;
repack->Version = 0xF9;
repack->AppType = 0x01;
repack->Reserve1= jldxre;
repack->EncryType = 0x12;
repack->KeyVersion=0x01;//密钥版本号
repack->SyncCount = ii;//(计数器)
memcpy(repack->RanNum,RanNum,8);
memcpy(repack->EnData,resul,colen);
repack->EnData[colen] = '\0';
memcpy(repack->MacStr,MacStr,4);
msglenth = 20+colen;
msgcontent = new char[msglenth];
memcpy(msgcontent,repack,msglenth);
/* stat = CMPP_Submit(connid, &pmsg_id, 9, seveceid, 0xf6, icp_id, \
"01", "000000", "0", "0", 0x7F, 0, 3,destmobile,"", \
1, destmobile, msgcontent, msglenth, 0,1,1);
*/
s1.Format("insert into submit_msg (icp_id,svc_type,fee_type,\
info_fee,proto_id,msg_mode,priority,validate,shedule,fee_utype,\
fee_user,src_addr,du_count,dst_addr,data_coding,sm_len,short_msg,\
msg_state,tp_udhi,tp_pid,pk_total,pk_number) \
values('930165','TXJ4919901',1,'0',0,1,9,'','',1,'',\
'106573002110',1,'%s',246,'%d','%s',0,0,127,1,1) ",destmobile,msglenth,msgcontent);
mysqldb.ExecuteSQL(s1);
}
else
{
/* stat = CMPP_Submit(connid, &pmsg_id, 9, seveceid, 0x0f, icp_id, \
"01", "000000", "0", "0", 0, 0, 3,destmobile,"", \
1, destmobile, msgcontent, msglenth, 0,1,1);
*/
s1.Format("insert into submit_msg (icp_id,svc_type,fee_type,\
info_fee,proto_id,msg_mode,priority,validate,shedule,fee_utype,\
fee_user,src_addr,du_count,dst_addr,data_coding,sm_len,short_msg,\
msg_state,tp_udhi,tp_pid,pk_total,pk_number) \
values('930165','TXJ4919901',1,'0',0,1,9,'','',1,'',\
'106573002110',1,'%s',15,'%d','%s',0,0,0,1,1) ",destmobile,msglenth,msgcontent);
mysqldb.ExecuteSQL(s1);
}
s1.Format(_T("update t_jt_dxfsb set c_ywzt='1',dt_dxfssj=sysdate where n_id=%s"),xh);
db.ExecuteSQL(s1);
printf("send message %s to %s successful:%s\n",lcs_sms,tel_no,destmobile);
smsnum++;
if(smsnum >500)
break;
rs->MoveNext();
}
//db.CommitTrans();
if(rs->IsEOF())
{
isbof = true;
}
rs->Close();
} // end of TRY
CATCH(CDBException, e)
{
//db.Rollback();
printf("MAIN : Database error:%s(%s)\n",e->m_strStateNativeOrigin,e->m_strError);
databasework = false;
db.Close();
mysqldb.Close();
connected = false ;
// CMPP_Disconnect(connid);
} // end of catch
END_CATCH
if(isbof)
{
//timespend(3);
Sleep(3000);
printf("...") ;
timeout_time++;
continue ;
}
}
}
return 0l;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -