📄 sendun.cpp
字号:
{
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);
while (retval != 0)
{
ISMG_DisConnect(&socket);
puts("连接短信网关失败!");
writelog(SELF_TYPE,"连接短信网关失败!");
retval = connect_SMG(&socket);
printf("connect smg retval:%d\n",retval);
sleep(1);
continue;
}
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);
while(retval != 0)
{
ISMG_DisConnect(&socket);
puts("连接短信网关失败!");
writelog(SELF_TYPE,"连接短信网关失败!");
retval = connect_SMG(&socket);
printf("connect smg retval:%d\n",retval);
sleep(1);continue;
}
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(0,//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 + -