⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tool.cpp

📁 短信收发包程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -