?? smgp3.c.bak
字號:
#if 1
// check resq
for(k=0; k<memsend; k++)
if( 0 == strlen(resq[k].rq_submit_id) )
i++;
if(i == memsend)
{
// resq is null
for(k = 0; k<memsend ; k++)
if( strcmp(sendq[k].sq_submit_stat , "sub") ==0 )
for( i=0; i< memsend ; i++ )
{
if( strlen(resq[i].rq_submit_id) == 0 )
{
strcpy(resq[i].rq_submit_id , sendq[k].sq_submit_id);
strncpy(resq[i].rq_msgid, sendq[k].sq_submit_id, sizeof(resq[i].rq_msgid)-1);
getdatetime(resq[i].rq_response_time);
resq[i].rq_response_status = -3;
resq[i].intime = time(NULL);
n++;
}
}
}
else{
for( k=0; k<memsend; k++ )
if(strcmp(sendq[k].sq_submit_stat, "sub") ==0)
{
for( i=0; i<memsend ; i++ )
if(strcmp(resq[i].rq_submit_id , sendq[k].sq_submit_stat) ==0)
// ignore
break ;
for(i =0; i< memsend ; i++)
if(strlen(resq[i].rq_submit_id) ==0)
{
strcpy(resq[i].rq_submit_id, sendq[k].sq_submit_id );
strncpy(resq[i].rq_msgid, sendq[k].sq_submit_id, sizeof(resq[i].rq_msgid)-1);
getdatetime(resq[i].rq_response_time);
resq[i].rq_response_status = -3;
resq[i].intime = time(NULL);
n++;
}
}
}
#endif
return n;
}
int Insertresq(RES_Q *resq, RES_Q tmp)
{
int k=0, i=0;
for(k =0 ; k< memsend ; k++)
if(strlen(resq[k].rq_submit_id) ==0)
{
memcpy(&resq[k], &tmp, sizeof(RES_Q));
return 0;
}
return -1; // buffer full
}
int checkresqnum(RES_Q *resq)
{
int k =0 , i=0;
for(k=0; k< memsend ; k++)
if(strlen(resq[k].rq_submit_id) ==0)
i++;
return i;
}
int CheckTimeout(SEND_Q *sendq)
{
int i=0, count =0;
for( i=0; i<memsend; i++)
if( ( sendq[i].intime + timeout_no_submit_resp< time(NULL) ) && (strcmp(sendq[i].sq_submit_stat ,"sub") ==0) )
{
if(sendq[i].sq_pri <= retry_max)
{
// insert into send_log , failed
InsertSendLog(&fsql_main, send_q_db,&sendq[i], -1);
sendq[i].sq_id = 0;
memset(&sendq[i], 0, sizeof(SEND_Q));
continue;
}
sendq[i].intime = time(NULL);
strcpy(sendq[i].sq_submit_stat, "");
sendq[i].sq_pri--;
count++;
}
return count;
}
int Countsendq(SEND_Q *sendq, int size )
{
int i =0;
int count =0;
// INFO("DEBUG memsed:%d\n", memsend);
for(i=0; i<size; i++)
{
// INFO("DEBUG sendq[%d]->sq_id :%d\n", i, sendq[i].sq_id );
if(sendq[i].sq_id<=0)
count++;
// INFO("DEBUG count:%d\n",count);
}
return count;
}
int Countresq(RES_Q *resq, int size )
{
int i =0;
int count =0;
// INFO("DEBUG memsed:%d\n", memsend);
for(i=0; i<size; i++)
{
// INFO("DEBUG sendq[%d]->sq_id :%d\n", i, sendq[i].sq_id );
if( strlen(resq[i].rq_submit_id) ==0)
count++;
// INFO("DEBUG count:%d\n",count);
}
return count;
}
int Countunsend(SEND_Q *sendq)
{
int i =0;
int count =0;
// INFO("DEBUG memsed:%d\n", memsend);
for(i=0; i<memsend; i++)
{
// INFO("DEBUG sendq[%d]->sq_id :%d\n", i, sendq[i].sq_id );
if(sendq[i].sq_id>0 && (strlen(sendq[i].sq_submit_stat) ==0) )
count++;
// INFO("DEBUG count:%d\n",count);
}
return count;
}
/*把待發數據放入buffer*/
int CopyToBuffer(SEND_Q *map, int num, SEND_Q temp)
{
int k = 0;
// INFO("[FUNCTION-CopyToBuffer]: lock sendq buffer[%d] \n", num );
k = FindPlace(map, memsend);
// INFO("[FUNCTION-CopyToBuffer] k :%d\n", k);
if(k >= 0) //有位置可以放
{
// INFO("[FUNCTION-CopyToBuffer] sendq_lock\n");
pthread_mutex_lock(&sendq_lock[num]);
memcpy(&map[k], &temp, sizeof(SEND_Q));
// INFO("[FUNCTION-CopyToBuffer] sq_id :%d\n", map[k].sq_id);
map[k].intime = time(NULL);
pthread_mutex_unlock(&sendq_lock[num]);
// INFO("[FUNCTION-CopyToBuffer] sendq_unlock\n");
}
// INFO("[FUNCTION-CopyToBuffer]: unlock senq buffer[%d]\n", num);
if(k < 0) //MAP隊列滿
{
INFO("[FUNCTION-CopyToBuffer] send buffer[%d] full \n", num);
return -1;
}
return 0;
}
int AllocateData( MYSQL_RES *result, char *deleteids)
{
MYSQL_ROW row;
SEND_Q send_tmp;
int num =0, allrow=0;
int ii =0,ret=0;
allrow = mysql_num_rows(result);
while( ( row = mysql_fetch_row(result) )!=NULL)
{
send_tmp.length_pi = atoi(row[34]);
send_tmp.length_mi = atoi(row[35]);
send_tmp.sq_sms_length = atoi(row[36]);
copy_send_q(&send_tmp, row);
// strlcpy(send_tmp.sq_reg_gateway, send_tmp.sq_send, sizeof(send_tmp.sq_reg_gateway));
strncpy(send_tmp.sq_reg_gateway,send_tmp.sq_send, sizeof(send_tmp.sq_reg_gateway) );
send_tmp.sq_reg_gateway[sizeof(send_tmp.sq_reg_gateway) -1] ='\0';
ret = CopyToBuffer(SENDQ[ii],ii, send_tmp);
while(ret == -1)
{
if(ii == connections)
ii =0;
else
ii++;
ret = CopyToBuffer(SENDQ[ii],ii, send_tmp);
}
ii++;
if( ii== connections)
ii =0;
if(num ==0)
strcpy(deleteids,row[0]);
else
strcat(deleteids,row[0]);
if(num < allrow-1)
{
strcat(deleteids, ",");
}
num ++;
}
INFO("[INFO-MAIN]: Deleteid [%s]\n", deleteids);
return 0;
}
int read_uchar(unsigned char * dst, size_t siz, const unsigned char *key)
{
int res;
if ( (res = get_value_uchar(dst, siz, key)) == 0 ){
INFO("[INFO]: get_conf: %s: ==> %s\n", key, dst);
}else{
INFO("[-ERR]: get_conf: %s == NULL\n", key);
}
return res;
}
int read_int32(int * dst, const unsigned char *key)
{
int res;
if ( (res = get_value_int32(dst,key)) == 0 ){
INFO("[INFO]: get_conf: %s: ==> %d\n", key, *dst);
}else{
INFO("[-ERR]: get_conf: %s == NULL\n", key);
}
return res;
}
int read_uint32(unsigned int * dst, const unsigned char *key)
{
int res;
if ( (res = get_value_uint32(dst,key)) == 0 ){
INFO("[INFO]: get_conf: %s: ==> %u\n", key, *dst);
}else{
INFO("[-ERR]: get_conf: %s == NULL\n", key);
}
return res;
}
static int config(unsigned char *file)
{
int i=0;
char *value;
char cfgfile[256];
sprintf(cfgfile, "%s", file);
if (init_conf(cfgfile) != 0)
{
fprintf(stderr," [-ERR]: init_conf: failed\n");
return (-1);
}
if (get_value_uchar(logfile, sizeof(logfile)-1, "LOG_FILE") !=0 ) goto CFGERR;
fprintf(stderr," [config]: logfile: %s\n", logfile);
if (read_int32(&smg_type, "SMG_TYPE") != 0) goto CFGERR;
if ((smg_type != 0) && (smg_type != 2)) goto CFGERR;
if(smg_type == 0)
{
smg_recv_type = 1;
}
if (read_uchar(smg_host, sizeof(smg_host)-1, "SMG_HOST") != 0) goto CFGERR;
if (read_int32(&smg_port, "SMG_PORT") != 0) goto CFGERR;
if (get_value_uchar(smg_user, sizeof(smg_user)-1, "SMG_USER") != 0) goto CFGERR;
if (read_uchar(smg_user, sizeof(smg_user)-1, "SMG_USER") != 0) goto CFGERR;
if (read_uchar(smg_pass, sizeof(smg_pass)-1, "SMG_PASS") != 0) goto CFGERR;
if (read_uchar(send_q_db, sizeof(send_q_db)-1, "SEND_Q_DB") != 0) goto CFGERR;
if (read_uchar(send_q_host, sizeof(send_q_host)-1, "SEND_Q_HOST") != 0) goto CFGERR;
if (read_uchar(send_q_user, sizeof(send_q_user)-1, "SEND_Q_USER") != 0) goto CFGERR;
if (read_uchar(send_q_pass, sizeof(send_q_pass)-1, "SEND_Q_PASS") != 0) goto CFGERR;
if (read_int32(&send_q_port, "SEND_Q_PORT") != 0) goto CFGERR;
if (read_uchar(newspcode4, sizeof(newspcode4)-1, "NEWSPCODE4") != 0) goto CFGERR;
//David for 2SP
if (read_uchar(media_db, sizeof(media_db)-1, "MEDIA_DB") != 0) goto CFGERR;
if (read_uchar(media_host, sizeof(media_host)-1, "MEDIA_HOST") != 0) goto CFGERR;
if (read_uchar(media_user, sizeof(media_user)-1, "MEDIA_USER") != 0) goto CFGERR;
if (read_uchar(media_pass, sizeof(media_pass)-1, "MEDIA_PASS") != 0) goto CFGERR;
if (read_int32(&media_port, "MEDIA_PORT") != 0) goto CFGERR;
// For gateway argument
if (read_uchar(servicemedia_db, sizeof(servicemedia_db)-1, "SERVICEMEDIA_DB") != 0) goto CFGERR;
if (read_uchar(servicemedia_host, sizeof(servicemedia_host)-1, "SERVICEMEDIA_HOST") != 0) goto CFGERR;
if (read_uchar(servicemedia_user, sizeof(servicemedia_user)-1, "SERVICEMEDIA_USER") != 0) goto CFGERR;
if (read_uchar(servicemedia_pass, sizeof(servicemedia_pass)-1, "SERVICEMEDIA_PASS") != 0) goto CFGERR;
if (read_int32(&servicemedia_port, "SERVICEMEDIA_PORT") != 0) goto CFGERR;
if (read_int32(&memsend, "MEMSEND") != 0) goto CFGERR;
if (read_int32(&reportnum, "REPORTNUM") != 0) goto CFGERR;
if (read_int32(&reportnum, "REPORTNUM") != 0) goto CFGERR;
if(read_int32(&socketbuffersize, "SOCKETBUFFER")!=0) goto CFGERR;
if (read_uchar(gateway_name, sizeof(gateway_name)-1, "GATEWAY_NAME") != 0) goto CFGERR;
if (read_uchar(province, sizeof(province)-1, "PROVINCE") != 0) goto CFGERR;
if (read_int32(&timeout_no_submit_resp, "TIMEOUT_NO_SUBMIT_RESP") != 0) goto CFGERR;
read_int32(&expiretime, "EXPIRETIME");
if ((expiretime < 0) || (expiretime > 240))
expiretime = 0;
if (read_int32(&priority,"PRIORITY") !=0) goto CFGERR;
if (get_value_int32(&retry_num, "RETRY_NUM") != 0) goto CFGERR;
if ((retry_num < 0) || (retry_num > 3)) retry_num = 3;
retry_max = -retry_num;
if (get_value_int32(&resnum, "RESNUM") != 0) goto CFGERR;
if ((resnum < 1) ) resnum = 10;
if (get_value_int32(&connections, "CONNECTIONS") != 0) goto CFGERR;
if(connections<=0 )
connections = 1;
if (get_value_int32(&altq_num, "ALTQ_NUM") != 0) goto CFGERR;
if ((altq_num < 0) || (altq_num > 300)) altq_num = 20;
i = altq_num/10;
i = i * 10 + 10;
altq_timer = 1000 * 1000/i;
INFO("[INFO]: TIMER: %u,Send Speed limit %d.\n", altq_timer,altq_num);
if ((value = get_conf("ENABLE_FEETRIM")) != NULL)
{
if (strcmp(value, "YES") == 0)
{
feetrim_flag = 1;
INFO("[INFO]: ENABLE FREE TRIM\n");
}
}
if ((value = get_conf("ISHAINANFLAG")) != NULL)
{
if (strcmp(value, "YES") == 0)
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -