⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 amoimess_mms_encode.c

📁 关于彩信的编解码
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -