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

📄 sendun.cpp.bak

📁 SP平台联通短信发送程序
💻 BAK
📖 第 1 页 / 共 2 页
字号:
			   z++;      }      if(y==0)      {         ffbuf[x++]=ffstr[pos];//将不是的放到ffbuf里面			   pos++;      }    }    puts(ffbuf);    strcpy(com_buf->sMsgContent,ffbuf);        /*当内容中含有非法字符时进行处理   end*/                		sprintf(sql,		        "UPDATE COM_SEND        SET FLAG='90'        WHERE ID=%s",       com_buf->id);		if(DoSQL(sql,&myconn) != 0)		{			free(com_buf);			writelog(SELF_TYPE,"更新数据库出错!");			mysql_free_result(res);			return 0;		}				//群发不用判断号段		if (com_buf->nMsgFormat == 99)		{			addwaitlist(com_buf);			continue;		}				//*******************************************************************************************		//根据号段判断  接收  手机号是哪个省的		//sprintf(sql,		//       "SELECT PROVINCE FROM INFO_HD 		//       WHERE INFO_HD.HD=SUBSTRING('%s',1,7)",com_buf->sDesTermID);		//retval = QuerySQL(sql,&myconn,&res2);		//if(retval != 0)		//{		//	writelog(SELF_TYPE,"查询指令出错INFO_HD");		//	mysql_free_result(res);		//	return 0;		//}		//if(res == NULL)		//{		//	mysql_free_result(res);			//	return 0;		//}		//		//if (row = mysql_fetch_row(res2))		//{		//	flag1=1;			//是本省		//}			//else		//{		//	flag1=0;			//不能确定		//}		//		//mysql_free_result(res2);		                //		////被叫付费		//if (com_buf->cFeeUserType==0)		//{		//	if (flag1==0)		//不能确定,则插入COM_SEND_OTHER表中,DEMO=PROVINCE,并发送出去		//	{		//		Send_Demo(sendstruc,PROVINCE); 		//	}		//}		////第三方付费		//else		//{		//	//根据号段判断 付费 手机号是哪个省的		//	sprintf(sql,		//	       "SELECT PROVINCE FROM INFO_HD 		//	       WHERE INFO_HD.HD=SUBSTRING('%s',1,7) ",com_buf->sFeeTerminalID);		//	retval = QuerySQL(sql,&myconn,&res2);		//	if(retval != 0)		//	{		//		writelog(SELF_TYPE,"查询指令出错INFO_HD3");		//		mysql_free_result(res);			//		return 0;		//	}		//	if(res == NULL)		//	{		//		mysql_free_result(res);			//		return 0;		//	}		//			//	if (row = mysql_fetch_row(res2))		//	{		//		flag2=1;			//是本省		//	}			//	else		//	{		//		flag2=0;			//不是本省		//	}		//			//	mysql_free_result(res2);                   //		//	//若接收手机号是本省的,付费手机号是本省的		//	if (flag1==1 && flag2==1) 		//	{		//		//按正常的第三方付费方式下发一条,直接正常发送		//	}		//	//******************    flag1=0    ************************	                //			//	//若接收手机号和付费手机号都是不能确定的		//	else if (flag1==0 && flag2==0) 		//	{		//		//将不能确定省份的接收手机号插入到COM_SEND_OTHER表中,接收免费		//		sendstruc.cFeeUserType = 0;		//		strcpy(sendstruc.sFeeTerminalID,"");		//		strcpy(sendstruc.sFeeType,"00");		//		Send_Demo(sendstruc,PROVINCE);		//				//		//将不能确定省份的付费手机号插入到COM_SEND_OTHER表中		//		strcpy(sendstruc.sFeeType,com_buf->sFeeType);		//		strcpy(sendstruc.sDesTermID,com_buf->sFeeTerminalID);					//付费手机号		//		strcpy(sendstruc.sMsgContent,"信息已成功转发,感谢您使用我们的短信业务.");		//		Send_Demo(sendstruc,PROVINCE);		//				//		//按正常的第三方付费方式下发一条		//	}		//	//若接收手机号是不能确定的,付费手机号是本省的		//	else if (flag1==0 && flag2==1) 		//	{		//		//将不能确定省份的接收手机号插入到COM_SEND_OTHER表中,接收免费		//		sendstruc.cFeeUserType = 0;		//		strcpy(sendstruc.sFeeTerminalID,"");		//		strcpy(sendstruc.sFeeType,"00");		//		Send_Demo(sendstruc,PROVINCE);		//				//		//按正常的第三方付费方式下发一条		//	}		//		//	//*******************************   flag1=1   **********************************			//	//若接收手机号是本省的,付费手机号是不能确定的		//	else if (flag1==1 && flag2==0) 		//	{		//		//将不能确定省份的付费手机号插入到COM_SEND_OTHER表中		//		sendstruc.cFeeUserType = 0;		//		strcpy(sendstruc.sFeeTerminalID,"");		//		strcpy(sendstruc.sDesTermID,com_buf->sFeeTerminalID);			//付费手机号		//		strcpy(sendstruc.sMsgContent,"信息已成功转发,感谢您使用我们的短信业务.");		//		Send_Demo(sendstruc,PROVINCE);		//				//		//免费给接收手机下发一条		//		com_buf->cFeeUserType = 0;		//		strcpy(com_buf->sFeeTerminalID,"");		//		strcpy(com_buf->sFeeType,"00");		//	}		//}				//*******************************************************************************************						if (com_buf->nMsgFormat == 24)				//判断是否是免提的		{			//gb转换成unicode				slen=gbtounicode(com_buf->sMsgContent,result);			if (slen>140) slen=140;			//更新com_buf->sMsgContent			for (i=0;i<slen;i++)			{				com_buf->sMsgContent[i]=result[i];			}			//更新com_buf->nMsgLen			com_buf->nMsgLen = slen;					}		else if (com_buf->nMsgFormat == 4 || com_buf->nMsgFormat == 245)	//铃声图片		{			//将三位十进制转换为一个字节的二进制			slen=com_buf->nMsgLen;			for (i=0;i<slen/3;i++)			{				strncpy(temp,com_buf->sMsgContent+3*i,3);				j=atoi(temp);				result[i]=j;			}			result[i]='\0';				//更新com_buf->sMsgContent			for (i=0;i<slen/3;i++)			{				com_buf->sMsgContent[i]=result[i];			}			//更新com_buf->nMsgLen			com_buf->nMsgLen = slen/3;			//联通铃声图片的CTPUDHI=1			com_buf->cTpUdhi= 1;		}		addwaitlist(com_buf);			}	mysql_free_result(res);	return retval1;	}void send_sm(){	SENDSTRUC *sendstruc;	int retval,socket,usercount,errcode,timecount,flag;	char errmsg[40],msisdn[21],desttermid[30][21],tmpbuf[100];	FILE *fp;		//连接网关	retval = connect_SMG(&socket);	printf("connect smg retval:%d\n",retval);	if(retval != 0)	{		puts("连接短信网关失败!");		writelog(SELF_TYPE,"连接短信网关失败!");		return ;	}	puts("连接短信网关成功!");	//计时断开	timecount = 0;	flag = 0;	while(1)	{		if(getwaitlist(&sendstruc))		{			if (timecount==40)			{			 //已经断开重新连接,bind			  retval = connect_SMG(&socket);	     	printf("connect smg retval:%d\n",retval);	     	if(retval != 0)	     	{		       puts("连接短信网关失败!");		       writelog(SELF_TYPE,"连接短信网关失败!");		       return ;	      }	      puts("重新连接短信网关成功!");	    }	    timecount = 0;		    flag = 0;						//是群发,先要取出文件中对应的手机号,再群发			strcpy(tmpbuf,sendstruc->sMsgID);			if (sendstruc->nMsgFormat == 99)			{				puts("in sgipsendbatch");				fp=fopen(sendstruc->sDesTermID,"r");				if (fp==NULL)				{					writelog(SELF_TYPE,"文件打开错误");					printf("文件打开错误");					continue ;				}								usercount=0;								while (fgets(msisdn,13,fp)!=NULL)				{					trim(msisdn,' ');					chop(msisdn);					if(strlen(msisdn) != 11) continue;					msisdn[11] = '\0';					//desttermid[usercount]=msisdn;					usercount++;				}								fclose(fp);				retval=SGIPSendBatch(sendstruc->nNeedReply,sendstruc->nMsgLevel,sendstruc->sServiceID,0,            				      sendstruc->sFeeType,sendstruc->sFeeCode,sendstruc->sValidTime,sendstruc->sAtTime,       				      sendstruc->sSrcTermID,desttermid,usercount,sendstruc->nMsgLen,sendstruc->sMsgContent,  				      sendstruc->sMsgID,&errcode,sendstruc->cFeeUserType,sendstruc->sFeeTerminalID,sendstruc->cTpPid,sendstruc->cTpUdhi,&socket);   								if (retval!=0)                                    				{                                                 					retval=SGIPSendBatch(sendstruc->nNeedReply,sendstruc->nMsgLevel,sendstruc->sServiceID,0,            				      		sendstruc->sFeeType,sendstruc->sFeeCode,sendstruc->sValidTime,sendstruc->sAtTime,       				      		sendstruc->sSrcTermID,desttermid,usercount,sendstruc->nMsgLen,sendstruc->sMsgContent,  				      		sendstruc->sMsgID,&errcode,sendstruc->cFeeUserType,sendstruc->sFeeTerminalID,sendstruc->cTpPid,sendstruc->cTpUdhi,&socket);   										sprintf(errmsg,"群发失败%s,%d",sendstruc->id,retval); 					writelog(SELF_TYPE,errmsg); 					printf("retval:%d\n",retval);              				}                                                 								sendstruc->flag = retval+1;								addoklist(sendstruc);				sleep(2);			} 			//单条发送      			else    			{       				puts("send single");				retval = SendSM(sendstruc,&socket);				printf("sendsm retval:%d\n",retval);				sendstruc->flag = retval;				addoklist(sendstruc);				usleep(10);			}		}		//getwaitlist取不到信息,则等待1秒		else		{			if (timecount<40)			{		      timecount = timecount + 1;		  }			else			{			//发送unbind断开连接			  if (flag==0)			  {	    		       SendUnBind(socket,tmpbuf); 		       ISMG_DisConnect(&socket); 		       //连接断开		       puts("连接断开!"); 		       flag=1;		    } 			}			sleep(1);		}	}}//单条发送int SendSM(SENDSTRUC * sendstruc,int *socket){	int retval,errcode;	char errmsg[30];		puts("sendstruc->sMsgID,");	puts(sendstruc->sMsgID);	puts(sendstruc->linkid);	retval = SGIPSendSingle(1,//sendstruc->nNeedReply,						  sendstruc->nMsgLevel,							sendstruc->sServiceID,							sendstruc->nMsgFormat,							sendstruc->sFeeType,							sendstruc->sFeeCode,							sendstruc->sValidTime,							sendstruc->sAtTime,							sendstruc->sSrcTermID,							sendstruc->sDesTermID,							sendstruc->nMsgLen,							sendstruc->sMsgContent,							sendstruc->sMsgID,							&errcode,							sendstruc->cFeeUserType,							sendstruc->sFeeTerminalID,							sendstruc->cTpPid,							sendstruc->cTpUdhi,							sendstruc->linkid,							socket);	if(retval != 0)	{		sprintf(errmsg,"发送单条短消息失败!%d\n",retval);		writelog(SELF_TYPE,errmsg);		return errcode;	}	else	{		return 1;	}	return 1;}//将MSG中所有字符转化为UNICODE//GB查表得到UNICODE,ASCII码在其前面加00。//并求出所得字符串的实际长度,作为返回值。int gbtounicode(char *msg,char *result){	int i,j;	unsigned int gb1,gb2,asc1,gb;	char buf[3];		i=0;	j=0;		while (i<strlen(msg))	{		buf[0]=msg[i];		gb1 = (unsigned int)buf[0];		gb2= gb1 & 0x80;		if (gb2==0) 		//是ASCII		{			asc1 = (unsigned int) buf[0];			asc1 &= 0xff;						sprintf(buf,"%02X%02X",0,asc1);				puts(buf);			sscanf(buf,"%x",&gb);						buf[1] = gb & 0xff;			buf[0] = gb >> 8;			buf[2]='\0';										result[j]=buf[0];			result[j+1]=buf[1];						i++;			j=j+2;		}		else			//是GB汉字		{			buf[1]=msg[i+1];			buf[2]='\0';						gb2312_to_unicode(buf);			result[j]=buf[0];			result[j+1]=buf[1];						i=i+2;			j=j+2;		}		result[j] = '\0';	}	return j;}//Send_Demo函数则会把所有内容插入到一个记录中,并插入DEMO。static int Send_Demo(SEND_STRUC sendstruc,char *demo){	char sql[2000];	char s_msisdn[200],s_scr[21],s_fid[200],s_msg[2000];	char day[20];	if(sendstruc.nMsgFormat==0)		{		sendstruc.nMsgFormat = 15;	}		strcpy(s_msisdn,sendstruc.sDesTermID);checksql(s_msisdn);	if(strncmp(s_msisdn,"130",3) == 0 ||	   strncmp(s_msisdn,"131",3) == 0 ||	   strncmp(s_msisdn,"132",3) == 0 ||	   strncmp(s_msisdn,"133",3) == 0 )	{		strncpy(sendstruc.sSrcTermID,"9020",4);		strcpy(sendstruc.icpid,"UN");	}	else	{		strncpy(sendstruc.sSrcTermID,"5566",4);		strcpy(sendstruc.icpid,"MO");	}		strcpy(s_fid,sendstruc.sFeeTerminalID);checksql(s_fid);	strcpy(s_msg,sendstruc.sMsgContent);checksql(s_msg);		sprintf(sql,"INSERT INTO COM_SEND_OTHER(ICPID,NEEDREPLY,MSGLEVEL,SERVICEID,MSGFORMAT,FEETYPE,FEECODE,VALIDTIME,ATTIME,SRCTERMID,DESTTERMID,MSGCONTENT,FEEUSERTYPE,FEETERMINALID,TPPID,TPUDHI,SEND_DATE,STEP,FLAG,DEMO)	VALUES('%s',%d,%d,'%s',%d,'%s','%.02f','','','%s','%s','%s',%d,'%s',%d,%d,'%s','0','0','%s')",	sendstruc.icpid,		sendstruc.nNeedReply,		sendstruc.nMsgLevel,		sendstruc.sServiceID,		sendstruc.nMsgFormat,		sendstruc.sFeeType,		sendstruc.sFeeCode,		sendstruc.sSrcTermID,		s_msisdn,		s_msg,		sendstruc.cFeeUserType,		s_fid,		sendstruc.cTpPid,		sendstruc.cTpUdhi,		getnowdate(day),		demo);  if(DoSQL(sql,&myconn) != 0)  {  	writelog(SELF_TYPE,"发送信息错误!");  	return -1;  }          return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -