?? smgw.c
字號:
/*$Header: /base/cvsroot/wam/sms/platform/src/smgp3/smgw.c,v 1.4 2007/07/18 08:29:25 haowen Exp $*/
#include <stdio.h>
#include <sys/time.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <mysql.h>
#include <mysqld_error.h>
#include <errno.h>
#include "smgw.h"
#include "mylog.h"
extern char logfile[256];
extern int errno;
void getday(char *const day)
{
struct tm *tp;
time_t timep;
time(&timep);
tp=localtime(&timep);
sprintf(day,"%d%02d%02d",(tp->tm_year+1900),( 1+tp->tm_mon), tp->tm_mday);
}
void getdatetime (char *const datetime)
{
struct tm *tp;
time_t timep;
time(&timep);
tp=localtime(&timep);
sprintf(datetime,"%d-%02d-%02d %02d:%02d:%02d", (tp->tm_year+1900),( 1+tp->tm_mon), tp->tm_mday ,tp->tm_hour, tp->tm_min, tp->tm_sec);
}
void WriteMessagetolog(SEND_Q send)
{
char content[256];
char pi[1024];
char mi[1024];
char buffer[2048];
mysql_escape_string(content, send.sq_sms_content, strlen(send.sq_sms_content)) ;
mysql_escape_string(pi, send.sq_desc_pi, send.length_pi);
mysql_escape_string(mi, send.sq_desc_mi, send.length_mi);
sprintf(buffer, "insert into send_q_tmp values(%d,'%s',%d,'%s','%s','%s',%d,'%s','%s','%s','%s','%s','%s','%s','%d','%s','%s','%s','%s','%s',now(),'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
send.sq_id,
send.sq_service_code,
send.sq_pri,
send.sq_message_format,
send.sq_fee_type,
send.sq_fee_code,
send.sq_sms_length,
content,
send.sq_content_type,
pi,
mi,
send.sq_mobile,
send.sq_send,
send.sq_fee_mobile,
send.sq_msg_type,
send.sq_content_name,
send.sq_content_id,
send.sq_provider,
send.sq_province,
send.sq_sms_scheduletime,
// send->sq_send_time,
send.sq_submit_id,
"", /* send->sq_submit_stat, */
send.sq_submit_time,
send.sq_linkid,
send.sq_jf_code,
send.sq_product,
send.sq_zone_province,
send.sq_zone_city,
send.sq_from,
send.sq_wamid,
send.sq_reg_cmd,
send.sq_reg_gateway,
send.sq_reg_from);
INFO("[INFO-MAIN]BACKUP: %s\n",buffer);
}
int HaveData(int socket_fd)
{
fd_set recvset;
struct timeval timeout;
int ret;
/* Select Receive Set */
FD_ZERO(&recvset);
FD_SET(socket_fd, &recvset);
timeout.tv_sec = 1;
timeout.tv_usec = 100;
again:
if ( (ret = select(socket_fd + 1, &recvset, 0, 0, &timeout)) == -1 )
{
INFO("[INFO-RECV:]errno = %d\n", errno);
if(errno==EINTR)
{
INFO("[INFO-RECV:]errno = EINTR\n");
goto again;
}
return -1;
}
else if(ret == 0)
{
//[HaveData]: time out
return 0;
}
//HAVE DATA
return ret;
}
void copy_send_q(SEND_Q *const send_q, MYSQL_ROW myrow)
{
memset(send_q, 0, sizeof(SEND_Q));
send_q->sq_id = atoi(myrow[0]);
send_q->length_pi = atoi(myrow[34]);
send_q->length_mi = atoi(myrow[35]);
// strlcpy(send_q->sq_service_code, myrow[1], sizeof(send_q->sq_service_code));
strncpy(send_q->sq_service_code, myrow[1], sizeof(send_q->sq_service_code));
send_q->sq_service_code[sizeof(send_q->sq_service_code) -1] ='\0';
send_q->sq_pri = atoi(myrow[2]);
strncpy(send_q->sq_message_format, myrow[3], sizeof(send_q->sq_message_format));
send_q->sq_message_format[sizeof(send_q->sq_message_format) -1] ='\0';
strncpy(send_q->sq_fee_type, myrow[4], sizeof(send_q->sq_fee_type));
send_q->sq_fee_type[sizeof(send_q->sq_fee_type) -1] ='\0';
strncpy(send_q->sq_fee_code, myrow[5], sizeof(send_q->sq_fee_code));
send_q->sq_fee_code[sizeof(send_q->sq_fee_code) -1] = '\0';
send_q->sq_sms_length = atoi(myrow[36]);
strncpy(send_q->sq_sms_content, myrow[7], sizeof(send_q->sq_sms_content));
send_q->sq_sms_content[sizeof(send_q->sq_sms_content) -1] = '\0';
strncpy(send_q->sq_content_type, myrow[8], sizeof(send_q->sq_content_type));
send_q->sq_content_type[sizeof(send_q->sq_content_type)-1] ='\0';
memcpy(send_q->sq_desc_pi, myrow[9], send_q->length_pi);
memcpy(send_q->sq_desc_mi, myrow[10], send_q->length_mi);
strncpy(send_q->sq_mobile, myrow[11], sizeof(send_q->sq_mobile));
send_q->sq_mobile[sizeof(send_q->sq_mobile)-1] ='\0';
strncpy(send_q->sq_send, myrow[12], sizeof(send_q->sq_send));
send_q->sq_send[sizeof(send_q->sq_send) -1] ='\0';
strncpy(send_q->sq_fee_mobile, myrow[13], sizeof(send_q->sq_fee_mobile));
send_q->sq_fee_mobile[sizeof(send_q->sq_fee_mobile)-1] ='\0';
send_q->sq_msg_type = atoi(myrow[14]);
strncpy(send_q->sq_content_name, myrow[15], sizeof(send_q->sq_content_name));
send_q->sq_content_name[sizeof(send_q->sq_content_name) -1] = '\0';
strncpy(send_q->sq_content_id, myrow[16], sizeof(send_q->sq_content_id));
send_q->sq_content_id[sizeof(send_q->sq_content_id) -1] = '\0';
strncpy(send_q->sq_provider, myrow[17], sizeof(send_q->sq_provider));
send_q->sq_provider[sizeof(send_q->sq_provider) -1] = '\0';
strncpy(send_q->sq_province, myrow[18], sizeof(send_q->sq_province));
send_q->sq_province[sizeof(send_q->sq_province) -1] = '\0';
strncpy(send_q->sq_sms_scheduletime, myrow[19], sizeof(send_q->sq_sms_scheduletime));
send_q->sq_sms_scheduletime[sizeof(send_q->sq_sms_scheduletime)-1] = '\0';
strncpy(send_q->sq_send_time, myrow[20], sizeof(send_q->sq_send_time));
send_q->sq_send_time[sizeof(send_q->sq_send_time) -1] = '\0';
strncpy(send_q->sq_submit_id, myrow[21], sizeof(send_q->sq_submit_id));
send_q->sq_submit_id[sizeof(send_q->sq_submit_id)-1] = '\0';
strncpy(send_q->sq_submit_stat, myrow[22], sizeof(send_q->sq_submit_stat));
send_q->sq_submit_stat[sizeof(send_q->sq_submit_stat ) -1] = '\0';
strncpy(send_q->sq_submit_time, myrow[23], sizeof(send_q->sq_submit_time));
send_q->sq_submit_time[sizeof(send_q->sq_submit_time) -1] = '\0';
strncpy(send_q->sq_linkid, myrow[24], sizeof(send_q->sq_linkid));
send_q->sq_linkid[sizeof(send_q->sq_linkid) -1] = '\0';
strncpy(send_q->sq_jf_code, myrow[25], sizeof(send_q->sq_jf_code));
send_q->sq_jf_code[sizeof(send_q->sq_jf_code) -1] = '\0';
strncpy(send_q->sq_product, myrow[26], sizeof(send_q->sq_product));
send_q->sq_product[sizeof(send_q->sq_product)-1] = '\0';
strncpy(send_q->sq_zone_province, myrow[27], sizeof(send_q->sq_zone_province));
send_q->sq_zone_province[sizeof(send_q->sq_zone_province) -1] = '\0';
strncpy(send_q->sq_zone_city, myrow[28], sizeof(send_q->sq_zone_city));
send_q->sq_zone_city[sizeof(send_q->sq_zone_city) -1] = '\0';
strncpy(send_q->sq_from, myrow[29], sizeof(send_q->sq_from));
send_q->sq_from[sizeof(send_q->sq_from)-1] = '\0';
strncpy(send_q->sq_wamid, myrow[30], sizeof(send_q->sq_wamid));
send_q->sq_wamid[sizeof(send_q->sq_wamid) -1] = '\0';
strncpy(send_q->sq_reg_cmd, myrow[31], sizeof(send_q->sq_reg_cmd));
send_q->sq_reg_cmd[sizeof(send_q->sq_reg_cmd) -1] = '\0';
strncpy(send_q->sq_reg_gateway, myrow[32], sizeof(send_q->sq_reg_gateway));
send_q->sq_reg_gateway[sizeof(send_q->sq_reg_gateway) -1] = '\0';
strncpy(send_q->sq_reg_from, myrow[33], sizeof(send_q->sq_reg_from));
send_q->sq_reg_from[sizeof(send_q->sq_reg_from)-1] = '\0';
#if 1
{
INFO("[DEBUG]: sq_id: [%s]\n[DEBUG]: sq_service_code: [%s]\n\
[DEBUG]: sq_pri: [%s]\n[DEBUG]: sq_message_format: [%s]\n\
[DEBUG]: sq_fee_type: [%s]\n\
[DEBUG]: sq_fee_code: [%s]\n[DEBUG]: sq_sms_length: [%s]\n\
[DEBUG]: sq_sms_content: [%s]\n[DEBUG]: sq_content_type: [%s]\n\
[DEBUG]: sq_desc_pi: [%s]\n[DEBUG]: sq_desc_mi: [%s]\n\
[DEBUG]: sq_mobile: [%s]\n[DEBUG]: sq_send: [%s]\n\
[DEBUG]: sq_fee_mobile: [%s]\n[DEBUG]: sq_msg_type: [%s]\n\
[DEBUG]: sq_content_name: [%s]\n[DEBUG]: sq_content_id: [%s]\n\
[DEBUG]: sq_provider: [%s]\n[DEBUG]: sq_province: [%s]\n\
[DEBUG]: sq_sms_scheduletime: [%s]\n[DEBUG]: sq_send_time: [%s]\n\
[DEBUG]: sq_submit_id: [%s]\n[DEBUG]: sq_submit_stat: [%s]\n\
[DEBUG]: sq_submit_time: [%s]\n[DEBUG]: sq_linkid: [%s]\n\
[DEBUG]: sq_jf_code: [%s]\n[DEBUG]: sq_product: [%s]\n\
[DEBUG]: sq_zone_province: [%s]\n[DEBUG]: sq_zone_city: [%s]\n\
[DEBUG]: sq_from: [%s]\n[DEBUG]: sq_wamid: [%s]\n\
[DEBUG]: sq_reg_cmd: [%s]\n[DEBUG]: sq_reg_gateway: [%s]\n\
[DEBUG]: sq_reg_from: [%s]\n", myrow[0], myrow[1], myrow[2], myrow[3],
myrow[4], myrow[5], myrow[6], myrow[7], myrow[8], myrow[9], myrow[10], myrow[11],
myrow[12], myrow[13], myrow[14], myrow[15], myrow[16], myrow[17], myrow[18],
myrow[19], myrow[20], myrow[21], myrow[22], myrow[23], myrow[24], myrow[25],
myrow[26], myrow[27], myrow[28], myrow[29], myrow[30], myrow[31], myrow[32],
myrow[33]);
}
#endif
}
void _InsertSendLog(MYSQL *fsql, const char *db, SEND_Q *const send, char *const stat)
{
char day[9];
char content[256];
char tempquery[1024];
getday(day);
mysql_escape_string(content, send->sq_sms_content, strlen(send->sq_sms_content));
if (send->sq_msg_type == 10) {
sprintf(tempquery, "insert into %s.send_smc_%s values('%s','%s', now(), '%s','%s','%s', 1, '%s','%s','%s','%s','%s','%s','%s','%s','%s', '%s','%s', '%s')",
db,
day,
send->sq_service_code,
send->sq_mobile,
//send->sq_date,
send->sq_provider,
send->sq_fee_code,
send->sq_submit_time,
//send->sq_num,
stat,
send->sq_jf_code,
"0", //send->sq_send,
send->sq_product,
send->sq_zone_province,
send->sq_zone_city,
send->sq_from,
send->sq_reg_cmd,
send->sq_reg_gateway,
send->sq_reg_from,
content,
send->sq_reg_gateway);
mysql_real_query(fsql,tempquery,strlen(tempquery));
} else if ((send->sq_msg_type > 0) || (send->sq_msg_type < 10)) {
sprintf(tempquery, "insert into %s.send_log_%s values('%s','%s','%s',NOW(),'%s','%s','%s','%s',%d,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
db,
day,
send->sq_service_code,
content,
send->sq_mobile,
//send->sq_date,
send->sq_send,
send->sq_provider,
send->sq_province,
send->sq_fee_mobile,
send->sq_msg_type, // %d
send->sq_content_name,
send->sq_content_id,
send->sq_send_time,
send->sq_sms_scheduletime,
send->sq_fee_type,
send->sq_fee_code,
stat,
send->sq_linkid,
send->sq_submit_time,
send->sq_jf_code,
send->sq_product,
send->sq_zone_province,
send->sq_zone_city,
send->sq_from,
send->sq_wamid,
send->sq_reg_cmd,
send->sq_reg_gateway,
send->sq_reg_from);
mysql_real_query(fsql,tempquery,strlen(tempquery));
} else {
INFO("[-ERR: unknown msg_type\n");
}
}
/* 網(wǎng)關(guān)使用 */
void InsertSendLog(MYSQL *fsql, const char *db, SEND_Q *const send, int nFlag)
{
char stat[15];
if (nFlag == 0) { //發(fā)送成功
strcpy(stat, "success");
} else if (nFlag == -3) {
strcpy(stat, "unsend");
} else if (nFlag == -1) {
strcpy(stat, "fail");
} else {
snprintf(stat, sizeof(stat), "%s%d", "fail", nFlag);
}
_InsertSendLog(fsql, db, send, stat);
}
/* 狀態(tài)報告程序使用 */
void InsertSendLog2(MYSQL *fsql, const char *db, SEND_Q *const send, const char *code)
{
char stat[15];
if ((strcmp(code, "0") == 0) ||
(strcmp(code, "000") == 0) ||
(strcmp(code, "DELIVRD") == 0) ||
(strcmp(code, "ACCEPTD") == 0)) {
strcpy(stat, "success");
} else if ((strcmp(code, "UNDELIV") == 0) || (strcmp(code, "undeliv") == 0)) {
strcpy(stat, "undeliv");
} else {
sprintf(stat, "%s%s", "SMC_", code);
}
_InsertSendLog(fsql, db, send, stat);
}
void InsertSendReport(MYSQL *fsql, const char *db, SEND_Q *const send)
{
char content[256];
char tempquery[1024];
send->sq_desc_pi[0] = '\0';
send->sq_desc_mi[0] = '\0';
mysql_escape_string(content, send->sq_sms_content, strlen(send->sq_sms_content)) ;
sprintf(tempquery, "insert into %s.send_report values (NULL,'%s',%d,'%s','%s','%s',%d,'%s','%s','%s','%s','%s','%s','%s',%d,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
db,
//send->sq_id,
send->sq_service_code,
send->sq_pri, // %d
send->sq_message_format,
send->sq_fee_type,
send->sq_fee_code,
send->sq_sms_length, // %d
content,
send->sq_content_type,
send->sq_desc_pi,
send->sq_desc_mi,
send->sq_mobile,
send->sq_send,
send->sq_fee_mobile,
send->sq_msg_type, // %d
send->sq_content_name,
send->sq_content_id,
send->sq_provider,
send->sq_province,
send->sq_sms_scheduletime,
send->sq_send_time,
send->sq_submit_id,
"SMC", //send->sq_submit_stat,
send->sq_submit_time,
send->sq_linkid,
send->sq_jf_code,
send->sq_product,
send->sq_zone_province,
send->sq_zone_city,
send->sq_from,
send->sq_wamid,
send->sq_reg_cmd,
send->sq_reg_gateway,
send->sq_reg_from);
mysql_real_query(fsql,tempquery, strlen(tempquery));
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -