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

📄 mmimms_main.c

📁 彩信的源代码,包括彩信的打包,发送,接收,解包,对做彩信软件的朋友有帮助.
💻 C
📖 第 1 页 / 共 5 页
字号:
				{
					g_issendingreadrpt = FALSE;
					MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
				}
				break;
				//发送时gprs网络拨号失败同样返回发送失败
				
			case MMSNETLINK_FAILED:
				SCI_TRACE_LOW("mms_lib_callback:dial failed");
				g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
				if(g_issendingreadrpt== FALSE)
				{
					MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
				}else
				{
					MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
				}
				break;
				
				//发送时用户取消发送则返回发送取消
			case MMSOPR_CANCEL:
				SCI_TRACE_LOW("mms_lib_callback:user cancel");
				MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SEND_CANCEL, PNULL, 0);
				
				break;
			default:
				SCI_TRACE_LOW("mms_lib_callback:%s\n","LIB_STATUS_SENDRETURN default.");
				break;
			}
		}
		break;
		
	case  LIB_STATUS_RECVRETURN:
		{
			SCI_TRACE_LOW("FNH LIB_STATUS_RECVRETURN status_value = %d",status_value);
			switch(status_value)
			{
			case MMSRECV_SUCCESS:
				SCI_TRACE_LOW("mms_lib_callback:recv success");
				g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
				SCI_TRACE_LOW("fnh MMSRECV_SUCCESS iFClose = %d",iFClose);
				if (iFClose == 0)
				{
					SCI_TRACE_LOW("fnh before display progress");
					MMIMMS_DisplaySendRecvProgress(g_progressneedsize,g_progressneedsize);
				}
				MMK_PostMsg(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID, MSG_MMS_RECV_OK, PNULL, 0);
				break;
				
			case MMSRECV_FAILED:
				SCI_TRACE_LOW("mms_lib_callback:recv failed");
				g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
				MMK_PostMsg(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID, MSG_MMS_RECV_FAILED, PNULL, 0);
				
				break;
				
			case MMSOPR_CANCEL:
				MMK_PostMsg(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID, MSG_MMS_RECV_CANCEL, PNULL, 0);
				SCI_TRACE_LOW("mms_lib_callback:recv cancel");
				break;
				
			case  MMSNETLINK_FAILED:
				SCI_TRACE_LOW("mms_lib_callback:gprs netlink failed");
				g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
				MMK_PostMsg(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID, MSG_MMS_RECV_FAILED, PNULL, 0);				
				break;
				
			case MMSRECV_FAILED_BY_NOT_FOUND:
				SCI_TRACE_LOW("mms_lib_callback:recv failed, message not found");//常是由于一条MMS已过期而接收失败
				g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
				MMK_PostMsg(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID, MSG_MMS_RECV_INVALIDPERIOD, PNULL, 0);
				break;
			default:
				{
					SCI_TRACE_LOW("mms_lib_callback:%s\n","LIB_STATUS_RECVRETURN default.");
				}
				break;
			}
		}
		break;
	case LIB_STATUS_SENDED_BYTES:
		if(g_issendingreadrpt == FALSE)
		{
			g_progresscurrentsize = (status_value+g_progressneedsize)/2;
			SCI_TRACE_LOW("fnh LIB_STATUS_SENDED_BYTES iFClose = %d",iFClose);
			if (iFClose == 0)
			{
				SCI_TRACE_LOW("fnh before display progress");
				MMIMMS_DisplaySendRecvProgress(g_progresscurrentsize,g_progressneedsize);
			}
		}
		break;
		
	case LIB_STATUS_RECVED_BYTES:
		g_progresscurrentsize = (status_value+g_progressneedsize)/2;
		SCI_TRACE_LOW("fnh LIB_STATUS_RECVED_BYTES iFClose = %d",iFClose);
		if (iFClose == 0)
		{
			SCI_TRACE_LOW("fnh before display progress");
			MMIMMS_DisplaySendRecvProgress(g_progresscurrentsize,g_progressneedsize);
		}
		break;
	default:
		SCI_TRACE_LOW("mms_lib_callback:%s\n","all default.");	
		break;
	}
	return 1;
}

/******************************************************************************
 * 函数定义:	GetReceiverListLen
 * 函数说明:	得到收件人列表中的所有条目长度总和,其中还包括每两个条目之间的
                间隔符所占长度。
 * 参数说明:	p_receiver:	收件人列表
 * 返回值:		计算出的收件人长度之和
********************************************************************************/
int GetReceiverListLen(p_MMS_RECEPIENT p_receiver)
{
	p_MMS_RECEPIENT plist = NULL;
	int          len = 0;	
	plist = p_receiver;
	while(plist)
	{
		len += SCI_STRLEN((char *)plist->m_address)+1;
		plist = plist->p_next;
	}
	return len;
}

/* ----------------------------------------------------------------------------
* Function Name: SaveMmsMessage
* Purpose: 保存彩信到当前的信箱
* Input:  folder_id:信箱ID号,从1到5分别为:收件箱、发件箱、已发信箱、草稿箱、
                当前信箱(可能不需要,暂时加上)
* Returns: void
* Author:nihongf@mobilesoft.com.cn
* ----------------------------------------------------------------------------*/ 
void SaveMmsMessage(SAVE_MMS_STATUS folder_id, char *filename)
{
	P_MMS_DOCUMENT  pMms_Doc = NULL;
	char			fname[MMS_FILE_NAME_LEN];
	uint8			*phone_list = NULL;
	int				phone_list_len = 0;
	uint32   value ;
	pMessageFolder  folder = NULL;
	long expire = 0;
	
	if(folder_id == SAVE_MMS_TO_INBOX)
	{
		folder = g_pManager->inboxfolder;
	}
	else if(folder_id == SAVE_MMS_TO_OUTBOX)
	{
		folder = g_pManager->outboxfolder;
	}
	else if(folder_id == SAVE_MMS_TO_SENTBOX)
	{
		folder = g_pManager->sentfolder;
	}
	else if(folder_id == SAVE_MMS_TO_DRAFTBOX)
	{
		folder = g_pManager->draftfolder;
	}
	else if(folder_id == SAVE_MMS_TO_DEFAULT)
	{
		folder = g_pManager->currentfolder;
	}
	else
	{
        SCI_TRACE_LOW("error:wrong folder id");
		return;
	}
	value = MMI_GetFfsTime();
	SCI_TRACE_LOW("FNH MMI_GetFfsTime = %u",MMI_GetFfsTime());
	SCI_TRACE_LOW("FNH value = %u",value);
	sprintf(fname,"%lu",value);
	strcat(fname, ".mms");
	SCI_TRACE_LOW("FNH fname = %s",fname);
	if(filename != NULL)
	{
		SCI_MEMSET(filename,0,sizeof(filename));
		SCI_STRCPY(filename,fname);
	}
	SCI_TRACE_LOW("FNH start of send message");
	pMms_Doc = (P_MMS_DOCUMENT)cms_integrate_mms(g_peditdoc);
	SCI_TRACE_LOW("fnh pMMS_Doc = %d",pMms_Doc);
	SCI_TRACE_LOW("FNH after cms_integrate_mms");
	if(!MMS_SetMmsFile(pMms_Doc,fname))
	{
		SCI_TRACE_LOW("FNH error:MMS_SetMmsFile failed");
		if (pMms_Doc)
		{
			MMS_DeleteMms(pMms_Doc);
			pMms_Doc = NULL;
		}
		return;
	}
	SCI_TRACE_LOW("FNH before insert to");
	if ((g_p_mms_to) || (g_p_mms_to_group))//插入电话号码
	{
		p_MMS_RECEPIENT plist = NULL;
		char *phone_list = NULL;
		uint16 single_tele_len = 0;
		uint16 group_tele_len = 0;
		
		SCI_TRACE_LOW("FNH enter g_p_mms_to");
		if (g_p_mms_to)
		{
			single_tele_len = GetReceiverListLen(g_p_mms_to);
			SCI_TRACE_LOW("FNH g_p_mms_to len = %d",single_tele_len);
		}
		if (g_p_mms_to_group)
		{
			if (g_p_mms_to_group->cur_group)
			{
				group_tele_len = GetReceiverListLen(g_p_mms_to_group->cur_group);
			}
		}
		
		phone_list_len = single_tele_len+group_tele_len+1;
		phone_list    = (char *)cms_malloc(phone_list_len); 
		if(!phone_list)
		{
			SCI_TRACE_LOW("malloc failed:phone list len = %d",phone_list_len);
			return;
		}
		SCI_MEMSET(phone_list,0,phone_list_len); 
		if (g_p_mms_to)
		{
			plist = g_p_mms_to;
			while(plist->p_next)
			{
				strcat((char *)phone_list,(const char *)(plist->m_address)); 
				strcat((char *)phone_list,",");
				plist = plist->p_next;
			}
			strcat((char *)phone_list,(const char *)(plist->m_address)); // xuelianb modify[2005-11-08]
		}
		plist = NULL;
		if (g_p_mms_to_group)
		{
			if (g_p_mms_to_group->cur_group)
			{
				plist = g_p_mms_to_group->cur_group;
				if (g_p_mms_to)
				{
					strcat((char *)phone_list,",");
				}
				while(plist->p_next)
				{
					strcat((char *)phone_list,(const char *)(plist->m_address)); 
					strcat((char *)phone_list,",");
					plist = plist->p_next;
				}
				strcat((char *)phone_list,(const char *)(plist->m_address)); // xuelianb modify[2005-11-08]
			}
		}
//		SCI_TRACE_LOW("FNH to phone_list = %s",phone_list);
		
		MMS_SetMmsHeadField(pMms_Doc, MMS_TO, (long)0, (char *)phone_list);
		if (phone_list)
		{
			cms_free(phone_list);
			phone_list = NULL;
		}
		SCI_TRACE_LOW("FNH set to ok");
	}
	if ((g_p_mms_cc) ||(g_p_mms_cc_group))
	{
		p_MMS_RECEPIENT plist = NULL;
		char *phone_list = NULL;
		uint16 single_tele_len = 0;
		uint16 group_tele_len = 0;
		
		SCI_TRACE_LOW("FNH enter g_p_mms_cc");
		if (g_p_mms_cc)
		{
			single_tele_len = GetReceiverListLen(g_p_mms_cc);
			SCI_TRACE_LOW("FNH g_p_mms_cc len = %d",single_tele_len);
		}
		if (g_p_mms_cc_group)
		{
			if (g_p_mms_cc_group->cur_group)
			{
				group_tele_len = GetReceiverListLen(g_p_mms_cc_group->cur_group);
			}
		}
		
		phone_list_len = single_tele_len+group_tele_len+1;
		phone_list    = (char *)cms_malloc(phone_list_len); 
		if(!phone_list)
		{
			SCI_TRACE_LOW("malloc failed:phone list len = %d",phone_list_len);
			return;
		}
		SCI_MEMSET(phone_list,0,phone_list_len); 
		if (g_p_mms_cc)
		{
			plist = g_p_mms_cc;
			while(plist->p_next)
			{
				strcat((char *)phone_list,(const char *)(plist->m_address)); 
				strcat((char *)phone_list,",");
				plist = plist->p_next;
			}
			strcat((char *)phone_list,(const char *)(plist->m_address)); // xuelianb modify[2005-11-08]
		}
		plist = NULL;
		if (g_p_mms_cc_group)
		{
			if (g_p_mms_cc_group->cur_group)
			{
				plist = g_p_mms_cc_group->cur_group;
				if (g_p_mms_cc)
				{
					strcat((char *)phone_list,",");
				}
				while(plist->p_next)
				{
					strcat((char *)phone_list,(const char *)(plist->m_address)); 
					strcat((char *)phone_list,",");
					plist = plist->p_next;
				}
				strcat((char *)phone_list,(const char *)(plist->m_address)); // xuelianb modify[2005-11-08]
			}
		}
//		SCI_TRACE_LOW("FNH cc phone_list = %s",phone_list);
		
		MMS_SetMmsHeadField(pMms_Doc, MMS_CC, (long)0, (char *)phone_list);
		if (phone_list)
		{
			cms_free(phone_list);
			phone_list = NULL;
		}
		SCI_TRACE_LOW("FNH set cc ok");
	}
	if ((g_p_mms_bcc) ||(g_p_mms_bcc_group))
	{
		p_MMS_RECEPIENT plist = NULL;
		char *phone_list = NULL;
		uint16 single_tele_len = 0;
		uint16 group_tele_len = 0;
		
		SCI_TRACE_LOW("FNH enter g_p_mms_bcc");
		if (g_p_mms_bcc)
		{
			single_tele_len = GetReceiverListLen(g_p_mms_bcc);
			SCI_TRACE_LOW("FNH g_p_mms_b len = %d",single_tele_len);
		}
		if (g_p_mms_bcc_group)
		{
			if (g_p_mms_bcc_group->cur_group)
			{
				group_tele_len = GetReceiverListLen(g_p_mms_bcc_group->cur_group);
			}
		}
		
		phone_list_len = single_tele_len+group_tele_len+1;
		phone_list    = (char *)cms_malloc(phone_list_len); 
		if(!phone_list)
		{
			SCI_TRACE_LOW("malloc failed:phone list len = %d",phone_list_len);
			return;
		}
		SCI_MEMSET(phone_list,0,phone_list_len); 
		if (g_p_mms_bcc)
		{
			plist = g_p_mms_bcc;
			while(plist->p_next)
			{
				strcat((char *)phone_list,(const char *)(plist->m_address)); 
				strcat((char *)phone_list,",");
				plist = plist->p_next;
			}
			strcat((char *)phone_list,(const char *)(plist->m_address)); // xuelianb modify[2005-11-08]
		}
		plist = NULL;
		if (g_p_mms_bcc_group)
		{
			if (g_p_mms_bcc_group->cur_group)
			{
				plist = g_p_mms_bcc_group->cur_group;
				if (g_p_mms_bcc)
				{
					strcat((char *)phone_list,",");
				}
				while(plist->p_next)
				{
					strcat((char *)phone_list,(const char *)(plist->m_address)); 
					strcat((char *)phone_list,",");
					plist = plist->p_next;
				}
				strcat((char *)phone_list,(const char *)(plist->m_address)); // xuelianb modify[2005-11-08]
			}
		}
//		SCI_TRACE_LOW("FNH bcc phone_list = %s",phone_list);
		MMS_SetMmsHeadField(pMms_Doc, MMS_BCC, (long)0, (char *)phone_list);
		if (phone_list)
		{
			cms_free(phone_list);
			phone_list = NULL;
		}
		SCI_TRACE_LOW("FNH set bcc ok");
	}
	
	MMS_SetMmsHeadField(pMms_Doc, MMS_MESSAGE_CLASS, (long)MMS_MESSAGE_CLASS_TYPE_PERSONAL, (char *)0);
	SCI_TRACE_BUF("FNH before sendmmshead g_p_mms_sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -