📄 sendun.cpp.bak
字号:
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 + -