?? messagefactory.cpp
字號(hào):
#include "stdafx.h"
#include "MessageFactory.h"
#include "MmsParser.h"
#include "mmscontent.h"
#include "mmsstring.h"
#define CONTENT_LENGTH_MARK "%{LENGTH}%"
char *str_replace(char *src, char *ori_str, char *new_str)
{
char *p, *p1, *p2;
char *tmp_str;
int len;
tmp_str = (char *)malloc(strlen(src) + strlen(new_str));
if (tmp_str == NULL)
return NULL;
p1 = strstr(src, ori_str);
p2 = p1 + strlen(ori_str);
p = tmp_str;
len = p1 - src;
memcpy(p, src, len);
p += len;
len = strlen(new_str);
memcpy(p, new_str, len);
p += len;
len = strlen(p2);
memcpy(p, p2, len);
p += len;
*p = 0;
memcpy(src, tmp_str, p - tmp_str);
return p1;
}
/******
* Build ppg response message.
*********/
int MessageBuilder::buildPpgRes(char *res, int nbytes)
{
char s[] = "HTTP/1.1 202 Foo\r\n" \
"Server: UTStarCom WAPGW PPG/3.1.0.5" \
"Content-Length: 440\r\n" \
"Content-Type: application/xml\r\n\r\n" \
"<?xml version=\"1.0\"?>" \
"<!DOCTYPE pap PUBLIC \"-//WAPFORUM//DTD PAP 2.0//EN\" \"http://www.wapforum.org/DTD/pap_2.0.dtd\">" \
"<pap><push-response push-id=\"061813405191000100001immc.utstar.com.cn\"" \
" sender-name=\"blade1; WAP/1.3 (UTStarCom WAPGW PPG/3.1.0.5)\"" \
" reply-time=\"2004-06-18T05:40:52Z\" sender-address=\"/cgi-bin/wap-push.cgi\">" \
"<response-result code =\"1001\" desc=\"The request has been accepted for processing\">" \
"</response-result></push-response></pap>";
memcpy (res, s, strlen(s));
return strlen(s);
}
/******
* Build mms_retrive message.
*********/
int MessageBuilder::buildRetrieveReq(char *svr_ip, int svr_port, char * msg_id, char * msisdn, char *req)
{
char buf[PKG_MAX_LEN];
sprintf(buf, "GET /%s HTTP/1.1\r\nHost: %s:%d\r\n" \
"User-Agent: ACS-NF/3.0 NEC-c616/001.00\r\n" \
"X-Up-Calling-Line-Id: %s \r\n\r\n", msg_id, svr_ip, svr_port, msisdn);
strcpy(req, buf);
return strlen(buf);
}
void generate_address(char *adr, char *dst_buf)
{
if (strchr(adr, '/'))
{
strcpy(dst_buf, adr);
return;
}
if (strchr(adr, '@') == NULL)
sprintf(dst_buf, "%s/type=plmn", adr);
else
sprintf(dst_buf, "%s/type=email", adr);
}
/******
* Build motification response message.
*********/
int MessageBuilder::buildNotificationRes(char * transaction_id, char * msisdn, int status, char *res)
{
char *p;
char s1[] = "POST / HTTP/1.0\r\n" \
"Host: 172.28.17.134:9090\r\n" \
"User-Agent: ACS-NF/3.0 NEC-c616/001.00\r\n" \
"Content-Type: application/vnd.wap.mms-message\r\n" \
"Content-Length: %{LENGTH}%\r\n" \
"X-Up-Calling-Line-Id: ";
int len;
p = res;
memcpy(p, s1, strlen(s1));
p += strlen(s1);
memcpy(p, "86", 2);
p += 2;
memcpy(p, msisdn, strlen(msisdn));
p += strlen(msisdn);
memcpy(p, "\r\n\r\n", 4);
p += 4;
// message_type token; transaction token
unsigned char s2[] = {MMS_HEAD_MSG_TYPE, 0x83, MMS_HEAD_TRANS_ID};
memcpy(p, s2, 3);
p += 3;
memcpy(p, transaction_id, strlen(transaction_id) + 1);
p += strlen(transaction_id) + 1;
// version token; mms_status token
unsigned char s3[] = {MMS_HEAD_VERSION, 0x90,
MMS_HEAD_RPT_ALLOW, 0x80,
MMS_HEAD_STATUS, 0x81};
s3[5] = status;
memcpy(p, s3, 6);
p += 6;
len = p - res;
char len_str[20];
sprintf(len_str, "%d", len);
str_replace(res, CONTENT_LENGTH_MARK, len_str);
return len;
}
/******
* Build read_reply report
*********/
int MessageBuilder::buildReadReplyMsg(char * msg_id, char *from_msisdn, char * to_msisdn, int status, char *res)
{
char *p, tmp_str[MAX_SIZE_MSISDN], *msg_head_point;
char s1[] = "POST / HTTP/1.0\r\n" \
"Host: 172.28.17.134:9090\r\n" \
"User-Agent: ACS-NF/3.0 NEC-c616/001.00\r\n" \
"Content-Type: application/vnd.wap.mms-message\r\n" \
"Content-Length: %{LENGTH}%\r\n" \
"X-Up-Calling-Line-Id: ";
int len;
p = res;
msg_head_point = p;
memcpy(p, s1, strlen(s1));
p += strlen(s1);
memcpy(p, "86", 2);
p += 2;
memcpy(p, to_msisdn, strlen(to_msisdn));
p += strlen(to_msisdn);
memcpy(p, "\r\n\r\n", 4);
p += 4;
// message_type token; msg_id token
unsigned char s2[] = {MMS_HEAD_MSG_TYPE, 0x83, MMS_HEAD_MSG_ID};
memcpy(p, s2, 3);
p += 3;
// fill msg_id string(zero terminated)
memcpy(p, msg_id, strlen(msg_id) + 1);
p += strlen(msg_id) + 1;
*p ++ = (char) MMS_HEAD_TO;
// fill to address string(zero terminated)
generate_address(to_msisdn, tmp_str);
memcpy(p, tmp_str, strlen(tmp_str) + 1);
p += strlen(tmp_str) + 1;
*p ++ = (char) MMS_HEAD_FROM;
// fill from address string(zero terminated)
generate_address(from_msisdn, tmp_str);
memcpy(p, tmp_str, strlen(tmp_str) + 1);
p += strlen(tmp_str) + 1;
// version token; read_status token
unsigned char s3[] = {MMS_HEAD_VERSION, 0x90, MMS_HEAD_READ_STAT, 0x81};
// set the msg status
s3[3] = status;
memcpy(p, s3, 4);
p += 4;
len = p - msg_head_point;
char len_str[20];
sprintf(len_str, "%d", len);
str_replace(res, CONTENT_LENGTH_MARK, len_str);
char fn[MAX_SIZE_FILENAME];
sprintf(fn, "%s\\%s\\%s", ROOT_DIR, LOG_DIR,
get_mms_type_name(MMS_MSGTYPE_READ_REC_IND));
MmsContent::creat_file(fn, res, len);
return len;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -