📄 smgp3.c
字号:
isHainanFlag = 1;
INFO("[INFO]: IS HaiNan SMGP3 Gateway.\n");
}
}
if (read_int32(&S_MF.MsgType, "免费.MSGTYPE") != 0) goto CFGERR;
if (read_uchar(S_MF.FeeType, sizeof(S_MF.FeeType)-1, "免费.FEETYPE") != 0) goto CFGERR;
if (read_int32(&S_MF.FeeCode, "免费.FEECODE") != 0) goto CFGERR;
if (read_int32(&S_MF.FixFee, "免费.FIXFEE") != 0) goto CFGERR;
if (read_int32(&S_DB.MsgType, "点播.MSGTYPE") != 0) goto CFGERR;
if (read_uchar(S_DB.FeeType, sizeof(S_DB.FeeType)-1, "点播.FEETYPE") != 0) goto CFGERR;
if (read_int32(&S_DB.FeeCode, "点播.FEECODE") != 0) goto CFGERR;
if (read_int32(&S_DB.FixFee, "点播.FIXFEE") != 0) goto CFGERR;
if (read_int32(&S_ATDZ.MsgType, "按条.定制.MSGTYPE") != 0) goto CFGERR;
if (read_uchar(S_ATDZ.FeeType, sizeof(S_ATDZ.FeeType)-1, "按条.定制.FEETYPE") != 0) goto CFGERR;
if (read_int32(&S_ATDZ.FeeCode, "按条.定制.FEECODE") != 0) goto CFGERR;
if (read_int32(&S_ATDZ.FixFee, "按条.定制.FIXFEE") != 0) goto CFGERR;
if (read_int32(&S_ATQR.MsgType, "按条定制.确认.MSGTYPE") != 0) goto CFGERR;
if (read_uchar(S_ATQR.FeeType, sizeof(S_ATQR.FeeType)-1, "按条定制.确认.FEETYPE") != 0) goto CFGERR;
if (read_int32(&S_ATQR.FeeCode, "按条定制.确认.FEECODE") != 0) goto CFGERR;
if (read_int32(&S_ATQR.FixFee, "按条定制.确认.FIXFEE") != 0) goto CFGERR;
if (read_int32(&S_QR.MsgType, "定制包月.确认.MSGTYPE") != 0) goto CFGERR;
if (read_uchar(S_QR.FeeType, sizeof(S_QR.FeeType)-1, "定制包月.确认.FEETYPE") != 0) goto CFGERR;
if (read_int32(&S_QR.FeeCode, "定制包月.确认.FEECODE") != 0) goto CFGERR;
if (read_int32(&S_QR.FixFee, "定制包月.确认.FIXFEE") != 0) goto CFGERR;
if (read_int32(&S_BY.MsgType, "定制.包月.MSGTYPE") != 0) goto CFGERR;
if (read_uchar(S_BY.FeeType, sizeof(S_BY.FeeType)-1, "定制.包月.FEETYPE") != 0) goto CFGERR;
if (read_int32(&S_BY.FeeCode, "定制.包月.FEECODE") != 0) goto CFGERR;
if (read_int32(&S_BY.FixFee, "定制.包月.FIXFEE") != 0) goto CFGERR;
if (read_int32(&S_HD.MsgType, "定制.话单.MSGTYPE") != 0) goto CFGERR;
if (read_uchar(S_HD.FeeType, sizeof(S_HD.FeeType)-1, "定制.话单.FEETYPE") != 0) goto CFGERR;
if (read_int32(&S_HD.FeeCode, "定制.话单.FEECODE") != 0) goto CFGERR;
if (read_int32(&S_HD.FixFee, "定制.话单.FIXFEE") != 0) goto CFGERR;
if (read_uchar(nanjingct_flag, sizeof(nanjingct_flag) - 1,"NANJINGCT_FLAG") != 0) goto CFGERR;
if (read_uchar(ismp,sizeof(ismp), "ISMP") != 0) goto CFGERR;
if (read_uchar(smps, sizeof(smps),"SMPS") != 0) goto CFGERR;
close_conf();
return (0);
CFGERR:
close_conf();
return (-1);
}
static int ConnectISMG( unsigned int C_seq, int cn, pthread_t threadnums, int login_type)
{
int res = 1;
int connect_times = 0;
int Resultd=1;
unsigned long Command_ID;
unsigned long Body_Length;
int socket_fd =0,ret =0;
struct timespec ismgtime;
INFO("[INFO-RECV:%u]: %d Trying ISMG Server ( %s : %d)\n", threadnums, cn, smg_host, smg_port);
res = ConnectSMG(&socket_fd, smg_host, smg_port);
INFO("[INFO-ONLYRECV:%u]: res:%d socket_fd:%d\n", threadnums, res, socket_fd );
if (res != 0)
{
INFO("[INFO-RECV:] ConnectSMG fail errno = %d\n", errno);
close(socket_fd);
return -1;
}
if (LoginSMG(socket_fd, smg_user, smg_pass, login_type, 0x30, C_seq) != 0)
{
INFO("[INFO-RECV:] LoginSMG fail errno = %d\n", errno);
close(socket_fd);
return -1;
}
return socket_fd;
}
int partDGQX( char * content, char * service ,char * mobile)
{
//DG 9310 142022 02881999930 rq_from=>6
//QX 9310 142015 02881288180 rq_from=>7
char *p=NULL;
char * idxdata1=NULL;
char * idxdata2=NULL;
char * idxdata3=NULL;
int spacenum=0;
int size=0;
if ( content==NULL )
return -1;
p= content;
while( *p && size<=128 )
{
// printf(" --- test4 size=%d p=%c---\n",size,*p);
size++;
if ( *p ==' ' )
spacenum++;
if ( *p ==' ' && spacenum==2 )
idxdata1= p+1; //142022 02881999930
if ( *p ==' ' && spacenum==3 )
idxdata2= p+1; //02881999930
//if ( *p ==' ' && spacenum==4 )
// idxdata3= p+1;
p++;
}
// printf(" --- test6---\n");
strncpy( service , idxdata1 , idxdata2-idxdata1-1 );
strcpy( mobile , idxdata2 );
return 0;
}
int Recv_ismp(SMGP_DELIVER deliver, char * MsgID, MYSQL mysql)
{
char ec[4];
char * p_id;
char * p_ec;
int id_len = 0;
int res;
char temp[33];
char sqlbuff[1024];
char query_string[1024];
char tmpmobile[32]="";
char tmpservice[32]="";
memset(query_string, 0, sizeof(query_string));
memset(sqlbuff,0,1024);
mysql_escape_string(sqlbuff, deliver.MsgContent, strlen(deliver.MsgContent));
//---------------------------------------------
//四川新闻网电信订购关系同步包处理: addby 2007-03-09
//DG 9310 142022 02881999930 rq_from=>6
//QX 9310 142015 02881288180 rq_from=>7
memset( tmpmobile ,0, sizeof(tmpmobile));
memset( tmpservice ,0, sizeof(tmpservice));
if ( strncmp( "DG", deliver.MsgContent, 2 ) == 0 )
{
partDGQX( deliver.MsgContent ,tmpservice,tmpmobile );
sprintf(query_string, "insert into %s.recv_q(rq_id, rq_mobile, rq_content, rq_date, rq_gateway, rq_provider, rq_linkid, rq_from, rq_status, rq_bak)"
"values(NULL,'%s','%s',now(),'%s','0','','6','','')",send_q_db, tmpmobile, tmpservice, deliver.DestTermID);
INFO("[Recv_ismp]:DG:%s\n", query_string);
res = mysql_real_query(&mysql, query_string, strlen(query_string));
if ( res !=0 )
{
INFO("[-ERR]: query: %s\n", mysql_error (&mysql));
return (-1);
}
return res;
}
if ( strncmp( "QX", deliver.MsgContent, 2 ) == 0 )
{
partDGQX( deliver.MsgContent ,tmpservice,tmpmobile );
sprintf(query_string, "insert into %s.recv_q(rq_id, rq_mobile, rq_content, rq_date, rq_gateway, rq_provider, rq_linkid, rq_from, rq_status, rq_bak)"
"values(NULL,'%s','%s',now(),'%s','0','','7','','')",send_q_db, tmpmobile, tmpservice, deliver.DestTermID);
INFO("[Recv_ismp]:QX:%s\n", query_string);
res = mysql_real_query(&mysql, query_string, strlen(query_string));
if ( res !=0 )
{
INFO("[-ERR]: query: %s\n", mysql_error (&mysql));
return (-1);
}
return res;
}
//---------------------------------------------
if ( strncmp( "SP_ZXQX", deliver.MsgContent, 7 ) == 0 ) {
//正向取消
sprintf(query_string, "insert into %s.recv_q(rq_id, rq_mobile, rq_content, rq_date, rq_gateway, rq_provider, rq_linkid, rq_from, rq_status, rq_bak)"
" values(NULL, '%s', '%s', now(), '%s', '0', '','8','0','')", send_q_db, deliver.SrcTermID, sqlbuff, deliver.DestTermID);
INFO("[Recv_ismp]: %s\n", query_string);
res = mysql_real_query(&mysql, query_string, strlen(query_string));
if ( res !=0 ) {
INFO("[-ERR]: query: %s\n", mysql_error (&mysql));
return (-1);
}
return res;
}
memset( ec, 0, 4 );
memset(MsgID,0,sizeof(MsgID));
memset(temp, 0, 33);
p_id = strstr( deliver.MsgContent, "ID=" );
p_ec = strstr( deliver.MsgContent, " EC=" );
//if ( (p_id == NULL) || (p_ec == NULL) || (id_len = (int)(p_ec - p_id) ) > 15 ) {
if ( (p_id == NULL) || (p_ec == NULL) ) {
INFO("[Recv_ismp]: ID ERROR:%s\n", p_id+3 );
return (-1);
}
id_len = strlen(p_id) - strlen(p_ec) -3;
memcpy( temp, p_id+3, id_len ); //COPY ID
temp[id_len] = '\0';
memcpy( ec, p_ec+4, 1 ); //COPY EC
//BCD2ASCII( temp, deliver.MsgID,10 );
//-------------------------------------------
if ( (strstr( deliver.DestTermID,"7118")!=NULL||strstr( deliver.DestTermID,"10621598")!=NULL )&& strcmp( ec,"5")==0 )
{
memset( ec, 0, 4 );
strcpy( ec,"7");
INFO("[Recv_ismp]: qhxwdphs-sync-change-ec-to-7\n" );
}
//上面已经有了转换,多余的
//mysql_escape_string(sqlbuff, deliver.MsgContent, strlen(deliver.MsgContent));
//ismp 同步包的各种情况处理
if ( strncmp( "SP_DBQQJG", deliver.MsgContent, 9 ) == 0 ) {
//反向点播请求结果
sprintf(query_string, "insert into %s.report_q(rq_id, rq_sequence, rq_mobile, rq_state, rq_code, rq_date, rq_provider, rq_flag)"
"values(NULL, '%s', '%s', '0', '%s', now(), '1', '0')", send_q_db, temp, "SP_DBQQJG" , ec);
} else if ( strncmp( "SP_DBJG", deliver.MsgContent, 7 ) == 0 ) {
//反向点播结果
sprintf(query_string, "insert into %s.report_q(rq_id, rq_sequence, rq_mobile, rq_state, rq_code, rq_date, rq_provider, rq_flag)"
"values(NULL, '%s', '%s', '0', '%s', now(), '1', '0')", send_q_db, temp, "SP_DBJG" , ec);
} else if ( strncmp( "SP_DZQQJG", deliver.MsgContent,9 ) == 0 ) {
//反向定制请求结果
sprintf(query_string, "insert into %s.report_q(rq_id, rq_sequence, rq_mobile, rq_state, rq_code, rq_date, rq_provider, rq_flag)"
"values(NULL, '%s', '%s', '0', '%s', now(), '1', '0')", send_q_db, temp, "SP_DZQQJG" , ec);
} else if ( strncmp( "SP_DZJG", deliver.MsgContent, 7 ) == 0 ) {
//反向定制结果
sprintf(query_string, "insert into %s.report_q(rq_id, rq_sequence, rq_mobile, rq_state, rq_code, rq_date, rq_provider, rq_flag)"
"values(NULL, '%s', '%s', '0', '%s', now(), '1', '0')", send_q_db, temp, "SP_DZJG" , ec);
} else if ( strncmp( "SP_QXJG", deliver.MsgContent, 7 ) == 0 ) {
//反向取消
sprintf(query_string, "insert into %s.report_q(rq_id, rq_sequence, rq_mobile, rq_state, rq_code, rq_date, rq_provider, rq_flag)"
"values(NULL, '%s', '%s', '0', '%s', now(), '1', '0')", send_q_db, temp, "SP_QXJG" , ec);
} else {
//what happened??
INFO("[-ERR]: ISMP Content Error, MsgContent:%s\n", deliver.MsgContent );
return (-1);
}
INFO("[Recv_ismp]: %s\n", query_string);
res = mysql_real_query(&mysql, query_string, strlen(query_string));
if ( res !=0 ) {
INFO("[Recv_ismp][-ERR]: query: %s\n", mysql_error (&mysql));
return (-1);
}
return res;
}
int ISMP_ChangeFeeType(char *fee_type)
{
if(strcmp(fee_type,"01")==0)
{
strcpy(fee_type,"00");
}
else if (strcmp(fee_type,"02")==0)
{
strcpy(fee_type,"01");
}
else if (strcmp(fee_type,"03")==0)
{
strcpy(fee_type,"02");
}
return 0;
}
void *OnlyRecv(void *argv)
{
int n=0;
int Status=0,ret = 0;
int Version = 0;
unsigned char t_MsgID[40],MsgID[40];
SMGP_DELIVER deliver;
int Rsocket_fd=0, recv_len= 0;
char bufferrecv[1024]="";
unsigned int Command_ID=0;
pthread_t threadsnum=0;
unsigned int R_Seq = 0;
unsigned int Body_Length=0;
int cn= 0, connectionnum = 0,i =0;
struct timespec recvtime;
pthread_mutex_t recvlock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t recvcond = PTHREAD_COND_INITIALIZER;
char *socketbuffer = NULL;
int bufferoffset =0, buffersize=0;
RES_Q resqtmp;
struct tm *tp;
time_t timep;
int resqnum =0;
char sqlbuf[1024];
char query_string[1024];
MYSQL recv_mysql;
unsigned char DealResult =0;
unsigned char LinkID[21];
unsigned char SubmitType=0;
threadsnum = pthread_self();
pthread_detach(threadsnum);
INFO("[INFO-OnlyRecv:%u] RECV Thread START\n", threadsnum);
/*连接recv_q, report_q所在数据库*/
if(!mysql_init(&recv_mysql))
{
INFO("[INFO-OnlyRecv:%u][-ERR} init mysql error \n", threadsnum);
exit(-1);
}
if (!mysql_real_connect(&recv_mysql, send_q_host, send_q_user, send_q_pass, send_q_db, send_q_port, NULL, 0) )
{
INFO("[INFO-OnlyRecv:%u][-ERR] sql_connect: %s\n", mysql_error(&recv_mysql));
exit(-1);
}
socketbuffer = malloc(socketbuffersize);
if(socketbuffer == NULL)
{
INFO("[INFO-OnlyRecv:%u] malloc error .\n", threadsnum);
socketbuffer = malloc(socketbuffersize);
}
buffersize = 0;
INFO("[INFO-OnlyRecv:%u]: Recv thread start!\n", threadsnum);
while(1)
{
if( HaveData(Rsocket_fd) > 0 )
{
// have data to receive
if( buffersize < socketbuffersize)
{
recv_len = recv(Rsocket_fd, socketbuffer+buffersize, socketbuffersize-buffersize-1, 0);
if(recv_len <= 0)
{
// reconnect
INFO("[INFO-OnlyRecv:%u] recv thread cannot receive data from socket, reconnect. recv_len:%d\n",threadsnum, recv_len);
INFO("[INFO-OnlyRecv:%u] Reset login status lock\n", threadsnum);
close(Rsocket_fd);
Rsocket_fd = -1;
INFO("[INFO-OnlyRecv:%u] Buffersize == %d\n", threadsnum, buffersize);
if( 0 == buffersize )
{
INFO("[INFO-OnlyRecv:%u] Buffersize ==0 , reconnect\n", threadsnum);
Rsocket_fd = ConnectISMG(R_Seq, cn, threadsnum, smg_recv_type); // socket
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -