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

📄 mmimmsglobaldef.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 3 页
字号:
			case MSG_HDR_TYPE_BCC:
			case MSG_HDR_TYPE_CC:
			case MSG_HDR_TYPE_RECEIVER:
			case MSG_HDR_TYPE_SENDER:			
			case MSG_HDR_TYPE_TITLE:
			case MSG_HDR_TYPE_STATE:
				MMS_TRACE_EVENT(("case MSG_HDR_TYPE_FILENAME:%",msg_hdr_type));
				break;
			case MSG_HDR_TYPE_DATE:
				flag_continue = 0;
				MMS_TRACE_EVENT(("case MSG_HDR_TYPE_FILENAME:%",msg_hdr_type));
				break;				
			case MSG_HDR_TYPE_FILENAME:
				MMS_TRACE_EVENT(("case MSG_HDR_TYPE_FILENAME:%",msg_hdr_type));
				if(msg_hdr_type_len == 0)
				{
	               MMS_TRACE_EVENT(("WARNING:  No MSG_HDR_TYPE_FILENAME content"));
				}
				break;
				
			case MSG_HDR_TYPE_MSGSIZE:
				MMS_TRACE_EVENT(("case MSG_HDR_TYPE_FILENAME:%",msg_hdr_type));
				if(msg_hdr_type_len != 4)
				{
					MMS_TRACE_EVENT(("msg_hdr_type_len \!= 4"));
					FREE_MEMORY((U8*)file_content_buffer,(U16)(sizeof(MMS_S8)*(file_len + 256)));
					return -1; 
				}
				break;			
				
			default:
			case MSG_HDR_TYPE_UNKNOWN:
				FREE_MEMORY((U8*)file_content_buffer,(U16)(sizeof(MMS_S8)*(file_len + 256)));
				return FALSE; 				
			}		
		}
		msgSum++;
	}
		
	FREE_MEMORY((U8*)file_content_buffer,(U16)(sizeof(MMS_S8)*(file_len + 256)));
	return msgSum;
}

MMS_S32 MMS_Get_Msg_Sum()
{
#ifdef  _INNOVATION_EMULATOR_
	MMS_S8 fullname[128];
	MMS_S8 path[128];
	WIN32_FIND_DATA FileData; 
	HANDLE hSearch; 
	BOOL fFinished = FALSE; 
	BOOL isDirectory;
	int nfiles = 0;
	
	GetCurrentDirectoryA(sizeof(path),path);
	strcat(path,"\\filesystem");
	strcat(path, "/mms/message/");
	strcpy(fullname, path, strlen(path));
	strcat(fullname, "*.*");
	
	hSearch = FindFirstFileA(fullname, &FileData); 
	if (hSearch == INVALID_HANDLE_VALUE) 
	{ 
		return -1;
	} 
	
	while (!fFinished) 
	{
		if( (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0x00)
		{
			if(FileData.cFileName[0] != 0)
			{	
				if(FileData.cFileName[0]>='0' && FileData.cFileName[0]<='9')
			    	nfiles ++;
			}
		}
		
		if (!FindNextFileA(hSearch, &FileData)) 
		{
			fFinished = TRUE; 
		}
	}	
	FindClose(hSearch );
	return nfiles;
	
#else
	T_FFS_DIR  sDir;
	MMS_S32 iSum = 0;
	MMS_S32 iRet = 0;
	MMS_S8 filename[32];
	if((iRet = ffs_opendir("/mms/message", &sDir)) >= 0)
	{
		memset(filename, 0, sizeof(filename));
		while((iRet = ffs_readdir(&sDir, filename, sizeof(filename))) > 0 )
		{
			MMS_TRACE_EVENT(("MMS_Get_Msg_Sum():file names: %s", filename));
            if(filename[0]>='0' && filename[0]<='9')
				iSum++;
		}			
	}
	else
	{
		iSum = -1;
		MMS_TRACE_EVENT(("Open /mms/message error"));
	}
	return iSum;
#endif
}

BOOL MMS_Check_MsgSum()
{
	MMS_S32 iSum = 0;
	MMS_S32 iSum2;
	MMS_S32 iRet;
	T_FFS_DIR  sDir;

	if(	MMS_fstat("/mms/dmf.txt") > 0)
	{
        iRet = MMS_GetFolder_MsgSum("/mms/",MMS_FOLDER_TYPE_DRAFT);
		if(iRet > 0)
			iSum += iRet;
	}

	if( MMS_fstat("/mms/smf.txt") > 0)
	{
		iRet = MMS_GetFolder_MsgSum("/mms/",MMS_FOLDER_TYPE_SEND);
		if(iRet > 0)
			iSum += iRet;
	}
	
	if(MMS_fstat("/mms/rmf.txt") > 0)
	{
		iRet = MMS_GetFolder_MsgSum("/mms/",MMS_FOLDER_TYPE_RECV);
		if(iRet > 0)
			iSum += iRet;
	}

	if(MMS_fstat("/mms/usmf.txt") > 0)
	{
		iRet = MMS_GetFolder_MsgSum("/mms/",MMS_FOLDER_TYPE_UNSEND);
		if(iRet > 0)
			iSum += iRet;
	}
	
	iSum2 = MMS_Get_Msg_Sum();	
	if(iSum2 == iSum)
		return TRUE;
	else 
		return FALSE;
}

typedef struct tagMMS_FILE_LIST MMS_FILE_LIST;
typedef  MMS_FILE_LIST *pMMS_FILE_LIST;
struct tagMMS_FILE_LIST
{
	char *pFileName;
	unsigned char lenth;
	pMMS_FILE_LIST pNext;
};
pMMS_FILE_LIST mmsFileList=NULL;
pMMS_FILE_LIST curMMSFileListNode = NULL;

BOOL MMS_Read_FolderMsg(unsigned char folderType)
{
	MMS_FILE fp;
	MMS_S8 pathname[64];
	
	MMS_S8 *file_content_buffer = NULL;
	MMS_S32 file_len = 0;
	MMS_S32 file_pos = 0;
	MMS_S8 flag_continue = 1;
	MMS_S8 *ptr_buf = NULL;
	MMS_S32 count = 0;
		
	MMS_memset(pathname, 0, 64);
	MMS_strcpy(pathname, "/mms/");
	switch (folderType)
	{
	case MMS_FOLDER_TYPE_RECV:
		MMS_strcat(pathname, "rmf.txt");
		break;
	case MMS_FOLDER_TYPE_SEND:
		MMS_strcat(pathname, "smf.txt");
		break;
	case MMS_FOLDER_TYPE_DRAFT:
		MMS_strcat(pathname, "dmf.txt");
		break;
	case MMS_FOLDER_TYPE_UNSEND:
		MMS_strcat(pathname, "usmf.txt");
		break;
	default:
		return FALSE;
	}
	
	file_len = MMS_fstat(pathname);
	if(file_len == 0)
	{
		return TRUE;
	}
	else if(file_len < 0)
	{
		return FALSE;
	}

	fp = MMS_fopen(pathname, "r");
	if((int)fp <= 0)
	{
		MMS_TRACE_EVENT(("MMS_fopen failed"));
		return FALSE;
	}
	

	file_content_buffer = (MMS_S8*)ALLOC_MEMORY(sizeof(MMS_S8)*(file_len + 256));
	MMS_fread(file_content_buffer, file_len,1, fp);
	MMS_fclose(fp);
		
	file_pos = 0;
	while(1)
	{
		if(file_pos >= file_len)
		{
			break;
		}
		
		flag_continue = 1;
		while(flag_continue)
		{
			MMS_S8 msg_hdr_type = MSG_HDR_TYPE_UNKNOWN;
			MMS_U8 msg_hdr_type_len = 0;
			
			if(file_pos >= file_len)
			{
				MMS_TRACE_EVENT(("file_pos error!"));
				FREE_MEMORY((U8*)file_content_buffer,(U16)(sizeof(MMS_S8)*(file_len + 256)));
				return FALSE; 				
			}
			
			msg_hdr_type = (MMS_S8)*(file_content_buffer + file_pos);
			msg_hdr_type_len = (MMS_U8)*(file_content_buffer + file_pos + 1);
			ptr_buf = file_content_buffer + file_pos + 2;
			file_pos += (msg_hdr_type_len + 2);
			
			if(file_pos > file_len)
			{
				MMS_TRACE_EVENT(("file_len error , data may be corrupted!"));
				FREE_MEMORY((U8*)file_content_buffer, (U16)(sizeof(MMS_S8)*(file_len + 256)));
				return FALSE;
			}
			
			switch(msg_hdr_type)
			{
			case MSG_HDR_TYPE_BCC:
			case MSG_HDR_TYPE_CC:
			case MSG_HDR_TYPE_RECEIVER:
			case MSG_HDR_TYPE_SENDER:			
			case MSG_HDR_TYPE_TITLE:
			case MSG_HDR_TYPE_STATE:
			case MSG_HDR_TYPE_MSGSIZE: 	
				MMS_TRACE_EVENT(("case MSG_HDR_TYPE_FILENAME:%",msg_hdr_type));
				break;
			case MSG_HDR_TYPE_DATE:
				flag_continue = 0;
				MMS_TRACE_EVENT(("case MSG_HDR_TYPE_FILENAME:%",msg_hdr_type));
				break;				
			case MSG_HDR_TYPE_FILENAME:
				MMS_TRACE_EVENT(("case MSG_HDR_TYPE_FILENAME:%",msg_hdr_type));
				if(msg_hdr_type_len != 0)
				{
					if(!curMMSFileListNode)
					{
						 curMMSFileListNode = (pMMS_FILE_LIST)ALLOC_MEMORY(sizeof(MMS_FILE_LIST));
					     curMMSFileListNode->pFileName = (MMS_S8 *)ALLOC_MEMORY(msg_hdr_type_len+1+2);
						 MMS_memset(curMMSFileListNode->pFileName, 0, msg_hdr_type_len+1+2);
						 MMS_memcpy(curMMSFileListNode->pFileName, ptr_buf, msg_hdr_type_len);
						 curMMSFileListNode->lenth = msg_hdr_type_len+1+2;
						 curMMSFileListNode->pNext = NULL;
						 mmsFileList = curMMSFileListNode;
					}
					else
					{
						pMMS_FILE_LIST tempFileListNode = NULL;
						tempFileListNode = (pMMS_FILE_LIST)ALLOC_MEMORY(sizeof(MMS_FILE_LIST));
						tempFileListNode->pFileName = (MMS_S8 *)ALLOC_MEMORY(msg_hdr_type_len+1+2);
						MMS_memset(tempFileListNode->pFileName, 0, msg_hdr_type_len+1+2);
						MMS_memcpy(tempFileListNode->pFileName, ptr_buf, msg_hdr_type_len);
						tempFileListNode->lenth = msg_hdr_type_len+1+2;
						tempFileListNode->pNext = NULL;
						curMMSFileListNode->pNext = tempFileListNode;
					    curMMSFileListNode = tempFileListNode;
					}		
					MMS_TRACE_EVENT((curMMSFileListNode->pFileName));
				}else
				{
					MMS_TRACE_EVENT(("WARNING:  No MSG_HDR_TYPE_FILENAME content"));
				}
				break;		
				
			default:
			case MSG_HDR_TYPE_UNKNOWN:
				FREE_MEMORY((U8*)file_content_buffer, (U16)(sizeof(MMS_S8)*(file_len + 256)));
				return FALSE; 				
			}		
		}		
	}
		
	FREE_MEMORY((U8*)file_content_buffer,(U16)(sizeof(MMS_S8)*(file_len + 256)));
	return TRUE;
}

void MMS_Delete_Msg_List()
{
    if(mmsFileList)
	{
		pMMS_FILE_LIST pTempNode = NULL;
		do 
		{
			pTempNode = mmsFileList; 
			FREE_MEMORY((U8*)pTempNode->pFileName, (U16)pTempNode->lenth);
			FREE_MEMORY((U8*)pTempNode, (U16)sizeof(MMS_FILE_LIST));
			mmsFileList = mmsFileList->pNext;
		} while(mmsFileList);
		curMMSFileListNode = NULL;
		mmsFileList =  NULL;
	}
}

void MMS_Create_Msg_List()
{
    if(FALSE == MMS_Read_FolderMsg(MMS_FOLDER_TYPE_RECV))
	{
		MMS_Delete_Msg_List();
		return ;
	}

	if(FALSE == MMS_Read_FolderMsg(MMS_FOLDER_TYPE_SEND))
	{
       MMS_Delete_Msg_List();
	   return;
	}

	if(FALSE == MMS_Read_FolderMsg(MMS_FOLDER_TYPE_DRAFT))
	{
        MMS_Delete_Msg_List();
		return;
	}
	
	if(FALSE == MMS_Read_FolderMsg(MMS_FOLDER_TYPE_UNSEND))
	{
		MMS_Delete_Msg_List();
		return;
	}
}

BOOL isInMMSMsgList(char *strFileName)
{
	if(mmsFileList && strFileName)
	{
		pMMS_FILE_LIST pTempNode = mmsFileList;
		do 
		{
			if(0 == strcmp(pTempNode->pFileName,strFileName))
				return TRUE;
			else
				pTempNode = pTempNode->pNext;
		} while(pTempNode);
		return FALSE;
	}
	return FALSE;
}

#endif
//Return 1 if suc, 0 for fail
BOOL MMS_Check_Files(void)
{
    T_FFS_RET error;
    T_FFS_STAT stat;
	
	if(!mmi_mms_chkDir(MMS_PATH)) return 0;
	if(!mmi_mms_chkDir(MMS_TEMP_PATH)) return 0;
    if(!mmi_mms_chkDir(MMS_MESSAGE_PATH)) return 0;
	if(!mmi_mms_chkDir(MMS_IMAGE_FILEPATH)) return 0;
	if(!mmi_mms_chkDir(MMS_MUSIC_FILEPATH)) return 0;
    
	if(!mmi_mms_chkSettingsFile()) return 0;
	if(!mmi_mms_chkFile("/mms/dmf.txt" , NULL, 0)) return 0;
	if(!mmi_mms_chkFile("/mms/dmfu.txt", NULL, 0)) return 0; 
	if(!mmi_mms_chkFile("/mms/mset.txt", NULL, 0)) return 0;
	if(!mmi_mms_chkFile("/mms/rmf.txt",  NULL, 0)) return 0;
	if(!mmi_mms_chkFile("/mms/rmfu.txt", NULL, 0)) return 0;
	if(!mmi_mms_chkFile("/mms/smf.txt",  NULL, 0)) return 0; 
	if(!mmi_mms_chkFile("/mms/smfu.txt", NULL, 0)) return 0;
	
	if(!mmi_mms_chkFile("/mms/usmf.txt", NULL, 0)) return 0;
	if(!mmi_mms_chkFile("/mms/usmfu.txt",NULL, 0)) return 0;
	
	MMS_TRACE_EVENT(("MMS_Check_Files():check all MMS config ok!!!")); 
	return 1;
}

void MMS_Initialize()
{
	BOOL ret;
	int funRet;
	
#if 1
	MMS_FILE fp;	
	fp = MMS_fopen("/mms/rmfu.txt", "r+b");
	if(fp)
	{
		MMS_fread(&gNewMMSNum,sizeof(gNewMMSNum),1,fp);
		MMS_fclose(fp);
	}
#endif

//delete filess remained in temp directory
	{
        char tempPath[64];
		strcpy(tempPath, MMS_TEMP_PATH);
		strcat(tempPath, "/");
		MMS_deletefiles(tempPath);	 
	}
//delete .mms files which do not ocuur in .txt
//MMS_S32 MMS_fstat(MMS_S8 *filename)

#if 1
	{
		if(FALSE == MMS_Check_MsgSum())
		{
			MMS_Create_Msg_List();
#ifdef _INNOVATION_EMULATOR_
			{
				MMS_S8 fullname[128];
				MMS_S8 path[128];
				int len;
				WIN32_FIND_DATA FileData; 
				HANDLE hSearch; 
				BOOL fFinished = FALSE; 
				BOOL isDirectory;
				int nfiles = 0;
				int i = 0;

⌨️ 快捷键说明

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