📄 amoimess_mms_encode.c
字号:
if(messmms->to)
{
UL32 tonumbers;
for(tonumbers=0;tonumbers < (messmms->to->number);tonumbers++)
{
pos=strcatC(pos,To);
pos=strcatUC(pos,messmms->to[tonumbers].content);
}
}
/* subject */
if(messmms->subject.content)
{
pos=strcatC(pos,Subject);
if(messmms->subject.length)
{
pos=strcatC(pos,(UC)messmms->subject.length);
}
if(messmms->subject.font)
{
pos=strcatC(pos,(UC)messmms->subject.font);
}
pos=strcatUC(pos,messmms->subject.content);
}
/* deliveryreport */
if(messmms->deliveryreport)
{
pos=strcatC(pos,MMS_Delivery_Report);
pos=strcatC(pos,messmms->deliveryreport);
}
/* sendervisibility */
if(messmms->sendervisibility)
{
pos=strcatC(pos,MMS_Sender_Visibility);
pos=strcatC(pos,messmms->sendervisibility);
}
/* readreport */
if(messmms->readreport)
{
pos=strcatC(pos,Mms_Read_Report);
pos=strcatC(pos,messmms->readreport);
}
/* messageclass */
if(messmms->messageclass)
{
pos=strcatC(pos,Message_Class);
pos=strcatC(pos,messmms->messageclass);
}
if(messmms->messageclasstext)
{
pos=strcatC(pos,Message_Class);
pos=strcatUC(pos,messmms->messageclasstext);
}
/* expiry */
if(messmms->expiry.length)
{
pos=strcatC(pos,MMS_Expiry);
pos=strcatC(pos,(UC)messmms->expiry.length);
}
if(messmms->expiry.tokentype)
{
pos=strcatC(pos,messmms->expiry.tokentype);
}
if(messmms->expiry.datelength)
{
pos=strcatC(pos,(UC)messmms->expiry.datelength);
}
if(messmms->expiry.datecontent.year)
{
UL32 allseconds = DateToSecond(messmms->expiry.datecontent.year,
messmms->expiry.datecontent.month,messmms->expiry.datecontent.day,
messmms->expiry.datecontent.hour,messmms->expiry.datecontent.minute,
messmms->expiry.datecontent.second);
UC *datetmp = SecondsEncode(allseconds,messmms->expiry.datelength); // 执行移位操作
pos=strcatUCL(pos,datetmp,DEStrlen((C*)datetmp));
}
/* store */
if(messmms->store)
{
pos=strcatC(pos,MMS_Store);
pos=strcatC(pos, messmms->store);
}
/* messageid */
if(messmms->messageid)
{
pos=strcatC(pos,Message_ID);
pos=strcatUC(pos, messmms->messageid);
}
/* contentlocation */
if(messmms->contentlocation)
{
pos=strcatC(pos,Mms_Content_Location);
pos=strcatUC(pos, messmms->contentlocation);
}
/* distributionindicator */
if(messmms->distributionindicator)
{
pos=strcatC(pos,Mms_Distribution_Indicator);
pos=strcatC(pos, messmms->distributionindicator);
}
/* elementdescriptor */
if(messmms->elementdescriptor)
{
pos=strcatC(pos,Mms_Element_Descriptor);
pos=strcatUC(pos, messmms->elementdescriptor);
}
/* reportallowed */
if(messmms->reportallowed)
{
pos=strcatC(pos,Mms_Report_Allowed);
pos=strcatC(pos, messmms->reportallowed);
}
/* readstatus */
if(messmms->readstatus)
{
pos=strcatC(pos,MMS_Read_Status);
pos=strcatC(pos, messmms->readstatus);
}
/* deliverytime */
if(messmms->deliverytime.length)
{
pos=strcatC(pos,MMS_Delivery_Time);
pos=strcatC(pos,(UC)messmms->deliverytime.length);
}
if(messmms->deliverytime.tokentype)
{
pos=strcatC(pos,messmms->deliverytime.tokentype);
}
if(messmms->deliverytime.datelength)
{
pos=strcatC(pos,(UC)messmms->deliverytime.datelength);
}
if(messmms->deliverytime.datecontent.year)
{
UL32 allseconds = DateToSecond(messmms->deliverytime.datecontent.year,
messmms->deliverytime.datecontent.month,messmms->deliverytime.datecontent.day,
messmms->deliverytime.datecontent.hour,messmms->deliverytime.datecontent.minute,
messmms->deliverytime.datecontent.second);
UC *datetmp = SecondsEncode(allseconds,messmms->deliverytime.datelength); // 执行移位操作
pos=strcatUCL(pos,datetmp,DEStrlen((C*)datetmp));
}
/* priority */
if(messmms->priority)
{
pos=strcatC(pos,MMS_Priority);
pos=strcatC(pos,messmms->priority);
}
/* messagesize */
if(messmms->messagesize)
{
pos=strcatC(pos,Mms_Message_Size);
pos=strcatC(pos,(UC)messmms->messagesize);
}
/* retrievestate */
if(messmms->retrievestate)
{
CommonError s = messmms->retrievestate;
pos = RetrieveStateDealer(s,pos);
}
/* retrievetext */
if(messmms->retrievetext)
{
pos=strcatC(pos,Mms_Retrieve_Text);
pos=strcatUC(pos, messmms->retrievetext);
}
/* responsestate */
if(messmms->responsestate)
{
CommonError s = messmms->responsestate;
pos=ResponseStateDealer(s,pos);
}
/* responsetext */
if(messmms->responsetext)
{
pos=strcatC(pos,Mms_Response_Text);
pos=strcatUC(pos, messmms->responsetext);
}
/* storestate */
if(messmms->storestate)
{
CommonError s = messmms->storestate;
pos=StoreStateDealer(s,pos);
}
/* storestatustext */
if(messmms->storestatustext)
{
pos=strcatC(pos,Mms_Store_Status_Text);
pos=strcatUC(pos, messmms->storestatustext);
}
if(messmms->Contentype.contentypename)
{
if(messmms->Contentype.contentypelength)
{
pos=strcatC(pos,Content_Type);
pos=strcatC(pos,(UC)messmms->Contentype.contentypelength);
pos=strcatC(pos,messmms->Contentype.contentypename);
pos = EncodeContentypeHeaderValue(pos); //判断content_type中出现的header_value
}
else
{
pos=strcatC(pos,Content_Type);
pos=strcatC(pos,messmms->Contentype.contentypename);
}
}
/**************** Body ****************/
/* typenumber */
pos=strcatC(pos,(UC)messmms->body->typenumber);
UL32 iType,ibit;
for(iType = 0;iType < (messmms->body->typenumber);iType++) // 主体(内容)编码循环
{
pos=strcatC(pos,(UC)messmms->body[iType].headerlength);
pos=DataLenEncode(pos,messmms->body[iType].datalength);
if(messmms->body[iType].Contentype.contentypetext)
{
pos=strcatC(pos,(UC)(messmms->body[iType].Contentype.contentlength));
pos=strcatUC(pos,messmms->body[iType].Contentype.contentypetext);
}
else if(messmms->body[iType].Contentype.contentypename)
{
pos=strcatC(pos,messmms->body[iType].Contentype.contentypename);
}
pos = EncodeBodyContentypeValue(pos,iType); //判断body中出现的header_value
/* 编码多媒体数据 */
if(messmms->body[iType].mediarray[0])
{
for(ibit=0;ibit < (messmms->body[iType].datalength);ibit++)
{
pos=strcatC(pos,messmms->body[iType].mediarray[ibit]);
}
}
}
if(DEStrlen((C*)stream)>MAXLENGTHOFMMS) //如果长度大于100K,编码失败
{
return false;
}
return stream;
}
#if 0
/* 外部使用示例 */
/****************************** UNUSED ******************************************/
void main() //预先设定,全部仅用于测试
{
UC *Contentmp;
UC *streamofmms = NULL;
UL32 nType = 2;
//streamofmms = ( UC* )malloc(sizeof(UC));
messmms = (MMS_STRUCTION* ) malloc(sizeof(MMS_STRUCTION));
messmms->body = (MMS_BODY*) malloc (nType*sizeof(MMS_BODY));
messmms->to = (TO*) malloc (sizeof(TO));
messmms->bcc =(BCC*) malloc (sizeof(BCC));
messmms->cc = (CC*) malloc (sizeof(CC));
UL32 mediarraylen[]={0x1810,95};
UL32 *smedia = mediarraylen;
UL32 i;
for(i=0;i<nType;i++)
{
messmms->body[i].mediarray = (UC*) SpaceMalloc (smedia[i] * sizeof(UC));
}
messmms->messagetype = m_send_req;
UC string1[]={0x31,0x32,0x33,0x00};
Contentmp = (UC *) SpaceMalloc (4 * sizeof(UC *));
messmms->transcationid = StoringToArray(string1,Contentmp,0,4);
messmms->version = 0x90;
messmms->date.datecontent.year = 2006;
messmms->date.datecontent.month = 10;
messmms->date.datecontent.day = 10;
messmms->date.datecontent.hour = 9;
messmms->date.datecontent.minute = 10;
messmms->date.datecontent.second = 40;
messmms->date.datelength = 4;
UC string2[]={0x2B, 0x38, 0x36, 0x31, 0x33, 0x38, 0x35, 0x39,
0x39, 0x30, 0x31, 0x39, 0x33, 0x35, 0x2F, 0x54,
0x59, 0x50, 0x45, 0x3D, 0x50, 0x4C, 0x4D, 0x4E,0x00};
Contentmp = (UC *) SpaceMalloc (25 * sizeof(UC ));
messmms->to[0].content = StoringToArray(string2,Contentmp,0,25);
UC string3[]={0x2B, 0x38, 0x36, 0x31, 0x33, 0x38, 0x35, 0x39,
0x39, 0x30, 0x31, 0x39, 0x32, 0x30, 0x2F, 0x54,
0x59, 0x50, 0x45, 0x3D, 0x50, 0x4C, 0x4D, 0x4E,0x00};
Contentmp = (UC *) SpaceMalloc (25 * sizeof(UC ));
messmms->to[1].content = StoringToArray(string3,Contentmp,0,25);
messmms->to->number = 2;
UC string4[]={0x53, 0x6D, 0x61, 0x72, 0x74, 0x46, 0x6F, 0x78,
0x20, 0x4D, 0x4D, 0x53, 0x20, 0x43, 0x6C, 0x69,
0x65, 0x6E, 0x74,0x00};
Contentmp = (UC *) SpaceMalloc (20 * sizeof(UC ));
messmms->subject.content = StoringToArray(string4,Contentmp,0,20);
messmms->deliveryreport = No;
messmms->sendervisibility = No;
messmms->readreport = No;
messmms->messageclass = Personal;
messmms->messageclasstext = NULL;
messmms->expiry.datecontent.year = 2006;
messmms->expiry.datecontent.month = 10;
messmms->expiry.datecontent.day = 10;
messmms->expiry.datecontent.hour = 9;
messmms->expiry.datecontent.minute = 10;
messmms->expiry.datecontent.second = 40;
messmms->expiry.length = 6;
messmms->expiry.datelength = 4;
messmms->expiry.tokentype = Absolute_token;
messmms->deliverytime.datecontent.year = 2006;
messmms->deliverytime.datecontent.month = 10;
messmms->deliverytime.datecontent.day = 10;
messmms->deliverytime.datecontent.hour = 9;
messmms->deliverytime.datecontent.minute = 10;
messmms->deliverytime.datecontent.second = 40;
messmms->deliverytime.length = 6;
messmms->deliverytime.datelength = 4;
messmms->deliverytime.tokentype = Absolute_token;
messmms->retrievestate = Ok;
messmms->retrievetext = NULL;
messmms->responsestate = UNUSED; //当状态字段没有出现的时候,置为 unused
messmms->responsetext = NULL;
messmms->storestate = UNUSED;
messmms->storestatustext = NULL;
messmms->priority = Low;
messmms->from.content = NULL;
messmms->from.length = NULL;
messmms->from.type = NULL;
messmms->cc = NULL;
messmms->bcc = NULL;
messmms->subject.length = NULL;
messmms->subject.font = NULL;
messmms->store = NULL;
messmms->mmstate = NULL;
messmms->responsetext = NULL;
messmms->messageid = NULL;
messmms->contentlocation = NULL;
messmms->storestatustext = NULL;
messmms->messagesize = NULL;
messmms->distributionindicator = NULL;
messmms->elementdescriptor = NULL;
messmms->reportallowed = NULL;
messmms->retrievetext = NULL;
messmms->readstatus = NULL;
messmms->Contentype.contentypename = application_vnd_wap_multipart_mixed;
messmms->Contentype.contentypelength = NULL;
messmms->Contentype.characterset = NULL;
messmms->Contentype.accept = NULL;
messmms->body->typenumber = 0x02;
messmms->body[0].headerlength = 0x4D;
messmms->body[0].datalength = 0x1810;
messmms->body[0].Contentype.contentypetext = NULL;
messmms->body[0].Contentype.contentypename = 0x9E;
messmms->body[0].Contentype.contentlength = NULL;
messmms->body[1].Contentype.contentypetext = NULL;
messmms->body[1].Contentype.contentypename = 0x83;
messmms->body[1].Contentype.contentlength = NULL;
UC string5[]={0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6F,
0x72, 0x69, 0x67, 0x2E, 0x68, 0x6F, 0x73, 0x74,
0x2F, 0x31, 0x30, 0x30, 0x32, 0x30, 0x35, 0x5F,
0x30, 0x30, 0x33, 0x2E, 0x6A, 0x70, 0x67, 0x00};
Contentmp = (UC *) SpaceMalloc (32 * sizeof(UC ));
messmms->body[0].Contentype.wapcontenturl = StoringToArray(string5,Contentmp,0,32);
UC string6[]={0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E,
0x74, 0x2D, 0x49, 0x44, 0x00};
Contentmp = (UC *) SpaceMalloc (11 * sizeof(UC ));
messmms->body[0].Contentype.contentidname = StoringToArray(string6,Contentmp,0,11);
UC string7[]={0x3C, 0x69, 0x64, 0x2D, 0x31, 0x30, 0x30, 0x30, 0x3E, 0x00};
Contentmp = (UC *) SpaceMalloc (10 * sizeof(UC ));
messmms->body[0].Contentype.contentid = StoringToArray(string7,Contentmp,0,10);
UC string8[]={0x31, 0x30, 0x30, 0x32, 0x30, 0x35, 0x5F, 0x30,
0x30, 0x33, 0x2E, 0x6A, 0x70, 0x67, 0x00};
Contentmp = (UC *) SpaceMalloc (15 * sizeof(UC ));
messmms->body[0].Contentype.contentlocation = StoringToArray(string8,Contentmp,0,15);
messmms->body[0].Contentype.date.datecontent.year = 2007;
messmms->body[0].Contentype.date.datecontent.month = 1;
messmms->body[0].Contentype.date.datecontent.day = 2;
messmms->body[0].Contentype.date.datecontent.hour = 8;
messmms->body[0].Contentype.date.datecontent.minute = 6;
messmms->body[0].Contentype.date.datecontent.second = 41;
messmms->body[0].Contentype.date.datelength = 4;
messmms->body[0].Contentype.expires.datecontent.year = NULL;
messmms->body[0].Contentype.expires.datecontent.month = NULL;
messmms->body[0].Contentype.expires.datecontent.day = NULL;
messmms->body[0].Contentype.expires.datecontent.minute = NULL;
messmms->body[0].Contentype.expires.datecontent.hour= NULL;
messmms->body[0].Contentype.expires.datecontent.second = NULL;
messmms->body[0].Contentype.expires.datelength = NULL;
/* UC string9[]={ 0xFF, 0xD8, 0xFF, 0xDB, 0x00, 0x84, 0x00, 0x0A,
0x07, 0x07, 0x08, 0x07, 0x06, 0x0A, 0x08, 0x08,
0x08, 0x0B, 0x0A, 0x0A, 0x0B, 0x0E, 0x18, 0x10,
0x0E, 0x0D, 0x0D, 0x0E, 0x1D, 0x15, 0x16, 0x11,
0x18, 0x23, 0x1F, 0x25, 0x24, 0x22, 0x1F, 0x22,
0x21, 0x26, 0x2B, 0x37, 0x2F, 0x26, 0x29, 0x34,
0x29, 0x21, 0x22, 0x30, 0x41, 0x31, 0x34, 0x39,
0x3B, 0x3E, 0x3E, 0x3E, 0x25, 0x2E, 0x44, 0x49,
0x43, 0x3C, 0x48, 0x37, 0x3D, 0x3E, 0x3B, 0x01,
0x0A, 0x0B, 0x0B, 0x0E, 0x0D, 0x0E, 0x1C, 0x10,
0x10, 0x1C, 0x3B, 0x28, 0x22, 0x28, 0x3B, 0x3B,
0x3B, 0x3B, 0x3B, 0x3B};
UL32 ib,ibp=0;
UC *sib = string9;
for(ib=0;ib<92;ib++)
{
messmms->body[0].mediarray[ib] = sib[ibp++];
}*/
messmms->body[0].mediarray[0] = NULL;
UC string10[]={0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6F,
0x72, 0x69, 0x67, 0x2E, 0x68, 0x6F, 0x73, 0x74,
0x2F,0x61, 0x6D, 0x6F, 0x69, 0x5F, 0x66,0x74,
0x70,0x2E, 0x74, 0x78, 0x74, 0x00};
Contentmp = (UC *) SpaceMalloc (30 * sizeof(UC ));
messmms->body[1].Contentype.wapcontenturl = StoringToArray(string10,Contentmp,0,30);
UC string11[]={0x43,0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D,
0x49,0x44, 0x00};
Contentmp = (UC *) SpaceMalloc (11 * sizeof(UC ));
messmms->body[1].Contentype.contentidname = StoringToArray(string11,Contentmp,0,11);
UC string12[]={0x3C, 0x69, 0x64, 0x2D, 0x31, 0x30, 0x30, 0x32,
0x3E, 0x00};
Contentmp = (UC *) SpaceMalloc (10 * sizeof(UC ));
messmms->body[1].Contentype.contentid = StoringToArray(string12,Contentmp,0,10);
UC string13[]={0x61, 0x6D, 0x6F, 0x69, 0x5F, 0x66, 0x74, 0x70,
0x2E, 0x74, 0x78, 0x74, 0x00};
Contentmp = (UC *) SpaceMalloc (13 * sizeof(UC ));
messmms->body[1].Contentype.contentlocation = StoringToArray(string13,Contentmp,0,13);
messmms->body[1].headerlength = 0x49;
messmms->body[1].datalength = 95;
messmms->body[1].Contentype.date.datecontent.year = 2007;
messmms->body[1].Contentype.date.datecontent.month = 1;
messmms->body[1].Contentype.date.datecontent.day = 2;
messmms->body[1].Contentype.date.datecontent.hour = 8;
messmms->body[1].Contentype.date.datecontent.minute = 6;
messmms->body[1].Contentype.date.datecontent.second = 41;
messmms->body[1].Contentype.date.datelength = 4;
messmms->body[1].Contentype.expires.datecontent.year = NULL;
messmms->body[1].Contentype.expires.datecontent.month = NULL;
messmms->body[1].Contentype.expires.datecontent.day = NULL;
messmms->body[1].Contentype.expires.datecontent.minute = NULL;
messmms->body[1].Contentype.expires.datecontent.hour= NULL;
messmms->body[1].Contentype.expires.datecontent.second = NULL;
messmms->body[1].Contentype.expires.datelength = NULL;
/* UC string14[]={0x75, 0x73, 0x65, 0x72, 0x3A, 0x61, 0x6D, 0x6F,
0x69, 0x73, 0x6F, 0x66, 0x74, 0x0D, 0x0A, 0x70,
0x61, 0x73, 0x73, 0x3A, 0x75, 0x69, 0x6C, 0x78,
0x37, 0x64, 0x34, 0x6E, 0x64, 0x30, 0x23, 0x43,
0x0D, 0x0A, 0x31, 0x30, 0x2E, 0x31, 0x30, 0x30,
0x2E, 0x35, 0x31, 0x2E, 0x32, 0x34, 0x0D, 0x0A,
0x0D, 0x0A, 0x32, 0xA1, 0xA2, 0xD5, 0xCA, 0xBA,
0xC5, 0xA3, 0xBA, 0x41, 0x6D, 0x6F, 0x69, 0x47,
0x53, 0x4D, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x20,
0x0D, 0x0A, 0x20, 0x20, 0x20, 0xC3, 0xDC, 0xC2,
0xEB, 0xA3, 0xBA, 0x66, 0x6E, 0x61, 0x23, 0x43,
0x43, 0x25, 0x35, 0x77, 0x75, 0x34, 0x62};
UL32 ic,icp=0;
UC *sic = string14;
for(ic=0;ic<95;ic++)
{
messmms->body[1].mediarray[ic] = sic[icp++];
}*/messmms->body[1].mediarray[0] = NULL;
streamofmms = Amoi_MmsEncode(messmms); //编码接口
free(streamofmms); // 外部释放
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -