mmimms_main.c
上传用户:tqh2500
上传日期:2014-05-09
资源大小:163k
文件大小:313k
开发平台:

Visual C++

  1. /****************************************************************************
  2. ** File Name:      mmimms_main.c                                           *
  3. ** Author:                                                                 *
  4. ** Date:           2004.8.23                                              *
  5. ** Copyright:      2004 Spreatrum, Incoporated. All Rights Reserved.       *
  6. ** Description:    This file is used to describe the MMS                   *
  7. ****************************************************************************
  8. **                         Important Edit History                          *
  9. ** ------------------------------------------------------------------------*
  10. ** DATE           NAME             DESCRIPTION                             *
  11. ** 2004.8        Bruce.Chi         Create
  12. ** 
  13. ****************************************************************************/
  14. /**--------------------------------------------------------------------------*
  15. **                         Include Files                                    *
  16. **--------------------------------------------------------------------------*/
  17. #include "window_parse.h"
  18. #include "guitextbox.h"
  19. #include "mmi_pubwin.h"
  20. #include "mmi_text.h"
  21. #include "mms_text.h"
  22. #include "mmi_image.h"
  23. #include "mmk_timer.h"
  24. #include "mainapp.h"
  25. #include "mmipb.h"
  26. #include "ccapp.h"
  27. #include "mmimms_internal.h"
  28. #include "tb_dal.h"
  29. #include "mmi_menutable.h"
  30. #include "mmidisplay_data.h"
  31. #include "mmi_default.h"
  32. #include "mmiudisk.h"
  33. #include "mmiwap.h"
  34. #include "mmimms.h"
  35. #include "mmimultim.h"
  36. #ifdef MMI_APP_6800_PRJ
  37. #else
  38. #include "mmidv.h"
  39. #endif
  40. //#include "mmibrowser.h"
  41. #include "mmibrowser_internal.h"
  42. #include "Cms_MMSDoc.h"
  43. #include "Cms_MMSProvide.h"
  44. #include "Cms_WAPMain.h"
  45. #include "mmi_appmsg.h"
  46. #include "Cms_MMSFilefunc.h"
  47. #include "mmiset.h"//add liangliu@palmsource.com
  48. #include "mmimpeg4.h"
  49. #include "mmiaudio.h"
  50. #include  "mn_type.h"
  51. /**--------------------------------------------------------------------------*
  52. **                         MACRO DEFINITION                                 *
  53. **--------------------------------------------------------------------------*/
  54. #define ONE_HOUR_IN_SECONDS (3600)
  55. #define UCS2_NAME_MAX_LEN 32
  56. #define FILE_DEVICE FS_UDISK
  57. #define PATH_ROOT "/"
  58. #define CURR_DIRECTORY "\"
  59. #define MANAGERINBOXFILE "cmsinbox.cnf"
  60. #define MANAGEROUTBOXFILE "cmsoutbox.cnf"
  61. #define MANAGERSENTBOXFILE "cmssentbox.cnf"
  62. #define MANAGERDRAFTBOXFILE "cmsdraftbox.cnf"
  63. #define MANAGER_FLASH_DIR "MANAGER"
  64. #define MMS_FLASH_CONFIGFILE        "cmsmmsconfig.ini"
  65. #define MANAGER_FLASH_INBOXNAME "inbox.ini"
  66. #define MANAGER_FLASH_OUTBOXNAME "outbox.ini"
  67. #define MANAGER_FLASH_SENTBOXNAME   "sentbox.ini"
  68. #define MANAGER_FLASH_DRAFTBOXNAME  "draftbox.ini"
  69. #define MMSCONFIGFILE               "mmsconfigfile.cnf"
  70. #define MMSAUTOSIGNFILE "mmsautosign.ini"
  71. #define MMS_FILE_NAME_LENGTH 128
  72. #define MMIMMS_VIBRA_TIMEROUT 3000
  73. #define LEAVE_SPACE (200*1024)
  74. #ifndef FILE_HANDLE
  75. #define FILE_HANDLE int
  76. #endif
  77. #ifndef ALERT_TIMEOUT  
  78. #define ALERT_TIMEOUT   3000
  79. #endif
  80. /*---------------------------------------------------------------------------*/
  81. /*                          TYPE AND CONSTANT                                */
  82. /*---------------------------------------------------------------------------*/
  83. typedef enum 
  84. {
  85. MMS_DELIVERY_REPORT_VALUE_NONE,
  86. MMS_DELIVERY_REPORT_VALUE_RETRIVED,
  87. MMS_DELIVERY_REPORT_VALUE_REJECTED,
  88. MMS_DELIVERY_REPORT_VALUE_DEFERRED,
  89. MMS_DELIVERY_REPORT_VALUE_EXPIRED,
  90. MMS_DELIVERY_REPORT_VALUE_UNRECOGNESED
  91. }MMS_DELIVERY_REPORT_VALUE;
  92. /**-------------------------------------------------------------------------*
  93. **                         GLOBAL DEFINITION                                *
  94. **--------------------------------------------------------------------------*/ 
  95. MMIMMS_MEM_STORE_T g_mms_save_in_mem; //used between edit and save in ram modules
  96. MMIMMS_NV_SETTING g_nv_setting_mirror; //mirror of NV mms setting
  97. //liangl added 2005-10-8 for spread new managerdocument.
  98. P_ManagerDocument g_pManager = NULL;
  99. pAutoDownloadMMSList g_pautoDownloadMMSRoot = PNULL;//cr liangliu 2006-4-27
  100. uint16 g_num_autodw = 0;
  101. pMMS_EDocument g_pcur_signdoc = NULL;
  102. char *g_filename = PNULL;
  103. uint32      g_progressneedsize  = 0;
  104. uint32      g_progresscurrentsize = 0;
  105. BOOLEAN g_backautodownload = FALSE;//add liangliu 2006-4-28 for back to idle autodownload.
  106. BOOLEAN g_inboxneedsave = FALSE;//全局变量增加判断是否退回到idle状态需要保存inboxfile 
  107. BOOLEAN g_issendingreadrpt  =  FALSE;//modify 2005-12-28 for send readrpt 
  108. BOOLEAN g_donewmms = FALSE;  //modify 2006-2-15 for change saving.
  109. BOOLEAN g_ismmsinit = FALSE;
  110. uint8 g_videoname_arr[MMIMMS_MAX_FILE_NAME_LEN+1] = {0};
  111. uint8   g_mp3name_arr[MMIMMS_MAX_FILE_NAME_LEN+1]={0};
  112. static uint8 s_play_mms_vibrator_timer_id = 0;  //play mms vibrator timer id
  113. HFS inboxfile_openstatus = FFS_INVALID_HANDLE;
  114. MMS_DELIVERY_REPORT_VALUE g_delivery_value;
  115. /**--------------------------------------------------------------------------*
  116.  **                         EXTERNAL DECLARE                                 *
  117.  **--------------------------------------------------------------------------*/
  118. extern BOOLEAN g_mmi_exist_sd;
  119. extern FILE_DEV_E_T g_filetype;
  120. /**--------------------------------------------------------------------------*
  121.  **   Description : function in Delta MMS lib
  122. **--------------------------------------------------------------------------*/
  123. extern void *MYMalloc(uint32 size);
  124. extern pMMS_EDocument g_peditdoc ;  // 编辑文档,编辑器内部使用,生存期为编辑器主窗口开关时间 */
  125. extern int PeekGetData (unsigned short tid,unsigned char * buf,int length);
  126. extern void fnDB_MYMemInit(void *starting_address, unsigned long size, unsigned long page_size);
  127. extern void ConvertHttp(unsigned char * href );
  128. extern uint8 g_mmimms_preview_timer_id;
  129. extern p_MMS_RECEPIENT g_p_mms_to;
  130. extern p_MMS_RECEPIENT g_p_mms_cc;
  131. extern p_MMS_RECEPIENT g_p_mms_bcc;
  132. extern p_MMS_GROUP g_p_mms_to_group;
  133. extern p_MMS_GROUP g_p_mms_cc_group;
  134. extern p_MMS_GROUP g_p_mms_bcc_group;
  135. extern MMS_SEND_ONTIME_TIME g_set_date;
  136. extern char* g_p_mms_subject;  //主题字符串,生存期为编辑窗口开关时间
  137. extern MMIMMS_SAVEMANAGERFILE_STATE g_savestate;
  138. extern MMIMMS_SAVEMAMMS_STATE     g_savemmsstate;
  139. extern MMIMMS_NETUSING_STATE    g_netusing;
  140. extern pMessageList g_pCurrentList ;
  141. extern wap_mms_init;
  142. extern uint8 g_mailbox_status;
  143. extern uint16 iFClose;
  144. extern FILE_DEV_E_T MMICMS_GetCurrentFFS( void );
  145. extern BOOLEAN GPIO_CheckHeadsetStatus(void);
  146. /*---------------------------------------------------------------------------*/
  147. /*                          LOCAL FUNCTION DECLARE                           */
  148. /*---------------------------------------------------------------------------*/
  149. /* ----------------------------------------------------------------------------
  150. * Function Name: MMICMSMMS_CallBackReadAutoSignFile
  151. * Purpose: 读取自动签名页的回调函数
  152. * Input:  FFS_ERROR_E a, 
  153.   FFS_RESULT result, 
  154.   FFS_PARAM param
  155. * Returns: void
  156. * Author:nihongf@mobilesoft.com.cn
  157. * ----------------------------------------------------------------------------*/ 
  158. LOCAL void MMICMSMMS_CallBackReadAutoSignFile(
  159. FFS_ERROR_E a, 
  160. FFS_RESULT result, 
  161. FFS_PARAM param
  162. );
  163. /*****************************************************************************/
  164. //  Description : adapter for FILE SYSTEM
  165. // Global resource dependence : 
  166. //  Author: Bruce.Chi
  167. // Note: it's FFS now
  168. ///*****************************************************************************/
  169. LOCAL FFS_ERROR_E FILE_CdRootPath(void);
  170. /*****************************************************************************/
  171. //  Description : adapter for FILE SYSTEM
  172. // Global resource dependence : 
  173. //  Author: Bruce.Chi
  174. // Note: it's FFS now
  175. ///*****************************************************************************/
  176. LOCAL FFS_ERROR_E FILE_CD(const char *path);
  177. /*****************************************************************************/
  178. //  Description : adapter for FILE SYSTEM
  179. // Global resource dependence : 
  180. //  Author: Bruce.Chi
  181. // Note: it's FFS now
  182. ///*****************************************************************************/
  183. LOCAL FFS_ERROR_E FILE_CdMMSPath(void);
  184. /*****************************************************************************/
  185. //  Description : adapter for FILE SYSTEM
  186. // Global resource dependence : 
  187. //  Author: Bruce.Chi
  188. // Note: it's FFS now
  189. ///*****************************************************************************/
  190. LOCAL FFS_ERROR_E FILE_CdMP3Path(void);
  191. /*****************************************************************************/
  192. //  Description : adapter for FILE SYSTEM
  193. // Global resource dependence : 
  194. //  Author: Bruce.Chi
  195. // Note: it's FFS now
  196. ///*****************************************************************************/
  197. LOCAL FFS_ERROR_E FILE_CreateDir (const char *path);
  198. /*****************************************************************************/
  199. //  Description : adapter for FILE SYSTEM
  200. // Global resource dependence : 
  201. //  Author: Bruce.Chi
  202. // Note: it's FFS now
  203. ///*****************************************************************************/
  204. LOCAL BOOLEAN FILE_CheckExist (const char *file);
  205. /*****************************************************************************/
  206. //  Description : adapter for FILE SYSTEM
  207. // Global resource dependence : 
  208. //  Author: Bruce.Chi
  209. // Note: it's FFS now
  210. ///*****************************************************************************/
  211. LOCAL HFS FILE_Create ( const char *name, uint16 mode);
  212. /*****************************************************************************/
  213. //  Description : adapter for FILE SYSTEM
  214. // Global resource dependence : 
  215. //  Author: Bruce.Chi
  216. // Note: it's FFS now
  217. ///*****************************************************************************/
  218. LOCAL void FILE_Close (HFS handle);
  219. /*****************************************************************************/
  220. //  Description : adapter for FILE SYSTEM
  221. // Global resource dependence : 
  222. //  Author: Bruce.Chi
  223. // Note: it's FFS now
  224. ///*****************************************************************************/
  225. LOCAL FFS_ERROR_E FILE_Write ( HFS handle, uint8 *buf,  uint32 len, uint32 *transmitted, FFS_OVERLAPPED_T *overlapped_ptr);
  226. /* ----------------------------------------------------------------------------
  227. * Function Name: CmsMmsAddNewAddr
  228. * Purpose: 将新地址加入到地址链表中
  229. * Input:  head: 地址链表指针
  230.   addr: 新地址指针
  231.   bAddNode:增加的结点
  232. * Returns: 地址链表指针
  233. * Author:nihongf@mobilesoft.com.cn
  234. * ----------------------------------------------------------------------------*/ 
  235. LOCAL p_MMS_RECEPIENT CmsMmsAddNewAddr( p_MMS_RECEPIENT head , char* addr , int bAddNode );
  236. /*****************************************************************************/
  237. //  Description : judge whether this year is leap year
  238. // Global resource dependence : 
  239. //  Author: Bruce.Chi
  240. // Note:
  241. ///*****************************************************************************/
  242. LOCAL BOOLEAN Edit_IsLeapYear(uint16  year);
  243. /******************************************************************************
  244.  * 函数定义: MMIMMS_ReadManagerInboxFile
  245.  * 函数说明: 读取收件箱文件的回调处理
  246.  * 参数说明: 空
  247.  * 返回值: 空
  248.  * 代码编写者: liangliu
  249.  * 代码编写日期: 10/17/2005
  250. ********************************************************************************/
  251. LOCAL void MMIVC_CallBackReadManagerInboxFile(
  252. FFS_ERROR_E a, 
  253. FFS_RESULT result, 
  254. FFS_PARAM param
  255. );
  256. /******************************************************************************
  257.  * 函数定义: MMIMMS_ReadManagerInboxFile
  258.  * 函数说明: 读取发件箱文件的回调处理
  259.  * 参数说明: 空
  260.  * 返回值: 空
  261.  * 代码编写者: liangliu
  262.  * 代码编写日期: 10/17/2005
  263. ********************************************************************************/
  264. LOCAL void MMIVC_CallBackReadManagerOutboxFile(
  265.  FFS_ERROR_E a, 
  266.  FFS_RESULT result, 
  267.  FFS_PARAM param
  268.  );
  269. /* ----------------------------------------------------------------------------
  270. * Function Name: MMIVC_CallBackReadManagerSentboxFile
  271. * Purpose: 读取已发信箱的回调函数
  272. * Input:  FFS_ERROR_E a, 
  273.   FFS_RESULT result, 
  274.   FFS_PARAM param
  275. * Returns: void
  276. * Author:nihongf@mobilesoft.com.cn
  277. * ----------------------------------------------------------------------------*/ 
  278. LOCAL void MMIVC_CallBackReadManagerSentboxFile(
  279.   FFS_ERROR_E a, 
  280.   FFS_RESULT result, 
  281.   FFS_PARAM param
  282.   );
  283. /* ----------------------------------------------------------------------------
  284. * Function Name: MMIVC_CallBackReadManagerDraftboxFile
  285. * Purpose: 读取草稿信箱的回调函数
  286. * Input:  FFS_ERROR_E a, 
  287.   FFS_RESULT result, 
  288.   FFS_PARAM param
  289. * Returns: void
  290. * Author:nihongf@mobilesoft.com.cn
  291. * ----------------------------------------------------------------------------*/ 
  292. LOCAL void MMIVC_CallBackReadManagerDraftboxFile(
  293.    FFS_ERROR_E a, 
  294.    FFS_RESULT result, 
  295.    FFS_PARAM param
  296.    );
  297. /* ----------------------------------------------------------------------------
  298. * Function Name: SaveFS_SaveInboxFile_CallBack
  299. * Purpose: 处理保存收件箱文件的回调函数
  300. * Input:  FFS_ERROR_E efs_error, 
  301.   FFS_RESULT result, 
  302.   FFS_PARAM param
  303. * Returns: void
  304. * Author:nihongf@mobilesoft.com.cn
  305. * ----------------------------------------------------------------------------*/ 
  306. LOCAL void SaveFS_SaveInboxFile_CallBack(FFS_ERROR_E efs_error, FFS_RESULT result, FFS_PARAM param);
  307. /* ----------------------------------------------------------------------------
  308. * Function Name: SaveFS_SaveInboxPUSHFile_CallBack
  309. * Purpose: 处理保存收件箱中PUSH文件的回调函数
  310. * Input:  FFS_ERROR_E efs_error, 
  311.   FFS_RESULT result, 
  312.   FFS_PARAM param
  313. * Returns: void
  314. * Author:nihongf@mobilesoft.com.cn
  315. * ----------------------------------------------------------------------------*/ 
  316. LOCAL void SaveFS_SaveInboxPUSHFile_CallBack(FFS_ERROR_E efs_error, FFS_RESULT result, FFS_PARAM param);
  317. /* ----------------------------------------------------------------------------
  318. * Function Name: SaveFS_SaveOutboxFile_CallBack
  319. * Purpose: 处理保存彩信到发件箱回调函数
  320. * Input:  FFS_ERROR_E efs_error, 
  321.   FFS_RESULT result, 
  322.   FFS_PARAM param
  323. * Returns: void
  324. * Author:nihongf@mobilesoft.com.cn
  325. * ----------------------------------------------------------------------------*/ 
  326. LOCAL void SaveFS_SaveOutboxFile_CallBack(FFS_ERROR_E efs_error, FFS_RESULT result, FFS_PARAM param);
  327. /* ----------------------------------------------------------------------------
  328. * Function Name: SaveFS_SaveSentboxFile_CallBack
  329. * Purpose: 处理保存彩信到已发箱回调函数
  330. * Input:  FFS_ERROR_E efs_error, 
  331.   FFS_RESULT result, 
  332.   FFS_PARAM param
  333. * Returns: void
  334. * Author:nihongf@mobilesoft.com.cn
  335. * ----------------------------------------------------------------------------*/ 
  336. LOCAL void SaveFS_SaveSentboxFile_CallBack(FFS_ERROR_E efs_error, FFS_RESULT result, FFS_PARAM param);
  337. /* ----------------------------------------------------------------------------
  338. * Function Name: SaveFS_SaveDraftboxFile_CallBack
  339. * Purpose: 处理保存彩信到草稿箱回调函数
  340. * Input:  FFS_ERROR_E efs_error, 
  341.   FFS_RESULT result, 
  342.   FFS_PARAM param
  343. * Returns: void
  344. * Author:nihongf@mobilesoft.com.cn
  345. * ----------------------------------------------------------------------------*/ 
  346. LOCAL void SaveFS_SaveDraftboxFile_CallBack(FFS_ERROR_E efs_error, FFS_RESULT result, FFS_PARAM param);
  347. /* ----------------------------------------------------------------------------
  348. * Function Name: SaveFS_SaveMMS_CallBack
  349. * Purpose: 保存彩信回调函数
  350. * Input:  FFS_ERROR_E efs_error, 
  351.   FFS_RESULT result, 
  352.   FFS_PARAM param
  353. * Returns: void
  354. * Author:nihongf@mobilesoft.com.cn
  355. * ----------------------------------------------------------------------------*/ 
  356. LOCAL void SaveFS_SaveMMS_CallBack(FFS_ERROR_E efs_error, FFS_RESULT result, FFS_PARAM param);
  357. /* ----------------------------------------------------------------------------
  358. * Function Name: SaveFS_SaveVideo_CallBack
  359. * Purpose: 保存视频回调函数
  360. * Input:  FFS_ERROR_E efs_error, 
  361.   FFS_RESULT result, 
  362.   FFS_PARAM param
  363. * Returns: void
  364. * Author:nihongf@mobilesoft.com.cn
  365. * ----------------------------------------------------------------------------*/ 
  366. LOCAL void SaveFS_SaveVideo_CallBack(FFS_ERROR_E efs_error, FFS_RESULT result, FFS_PARAM param);
  367. /* ----------------------------------------------------------------------------
  368. * Function Name: SaveFS_SaveMp3_CallBack
  369. * Purpose: 保存MP3回调函数
  370. * Input:  FFS_ERROR_E efs_error, 
  371.   FFS_RESULT result, 
  372.   FFS_PARAM param
  373. * Returns: void
  374. * Author:nihongf@mobilesoft.com.cn
  375. * ----------------------------------------------------------------------------*/ 
  376. LOCAL void SaveFS_SaveMp3_CallBack(FFS_ERROR_E efs_error, FFS_RESULT result, FFS_PARAM param);
  377. /* ----------------------------------------------------------------------------
  378. * Function Name: SaveFS_SaveAutoSign_CallBack
  379. * Purpose: 保存自动签名页回调函数
  380. * Input:  FFS_ERROR_E efs_error, 
  381.   FFS_RESULT result, 
  382.   FFS_PARAM param
  383. * Returns: void
  384. * Author:nihongf@mobilesoft.com.cn
  385. * ----------------------------------------------------------------------------*/ 
  386. LOCAL void SaveFS_SaveAutoSign_CallBack(FFS_ERROR_E efs_error, FFS_RESULT result, FFS_PARAM param);
  387. /* ----------------------------------------------------------------------------
  388. * Function Name: MMIVC_ReadMMS_CallBack
  389. * Purpose: 读取彩信的回调函数
  390. * Input:  FFS_ERROR_E a, 
  391.   FFS_RESULT result, 
  392.   FFS_PARAM param
  393. * Returns: void
  394. * Author:nihongf@mobilesoft.com.cn
  395. * ----------------------------------------------------------------------------*/ 
  396. LOCAL void MMIVC_ReadMMS_CallBack(
  397. FFS_ERROR_E a, 
  398. FFS_RESULT result, 
  399. FFS_PARAM param
  400. );
  401. /* ----------------------------------------------------------------------------
  402. * Function Name: MMIVC_CallBackDeleteMMSFile
  403. * Purpose: 删除彩信的回调函数
  404. * Input:  FFS_ERROR_E a, 
  405.   FFS_RESULT result, 
  406.   FFS_PARAM param
  407. * Returns: void
  408. * Author:nihongf@mobilesoft.com.cn
  409. * ----------------------------------------------------------------------------*/ 
  410. LOCAL void MMIVC_CallBackDeleteMMSFile(
  411.   FFS_ERROR_E a, 
  412.   FFS_RESULT result, 
  413.   FFS_PARAM param
  414.   );
  415. /* ----------------------------------------------------------------------------
  416. * Function Name: MMIVC_CallBackDeleteManagerFile
  417. * Purpose: 删除彩信管理目录的回调函数
  418. * Input:  FFS_ERROR_E a, 
  419.   FFS_RESULT result, 
  420.   FFS_PARAM param
  421. * Returns: void
  422. * Author:nihongf@mobilesoft.com.cn
  423. * ----------------------------------------------------------------------------*/ 
  424. LOCAL void MMIVC_CallBackDeleteManagerFile(
  425.   FFS_ERROR_E a, 
  426.   FFS_RESULT result, 
  427.   FFS_PARAM param
  428.   );
  429. /* ----------------------------------------------------------------------------
  430. * Function Name: MMIVC_CallBackDeleteManagerInboxFile
  431. * Purpose: 删除彩信收件箱管理目录的回调函数
  432. * Input:  FFS_ERROR_E a, 
  433.   FFS_RESULT result, 
  434.   FFS_PARAM param
  435. * Returns: void
  436. * Author:nihongf@mobilesoft.com.cn
  437. * ----------------------------------------------------------------------------*/ 
  438. LOCAL void MMIVC_CallBackDeleteManagerInboxFile(
  439.   FFS_ERROR_E a, 
  440.   FFS_RESULT result, 
  441.   FFS_PARAM param
  442.   );
  443. /* ----------------------------------------------------------------------------
  444. * Function Name: MMIVC_CallBackDeleteOneMMSFile
  445. * Purpose: 删除某一彩信的回调函数
  446. * Input:  FFS_ERROR_E a, 
  447.   FFS_RESULT result, 
  448.   FFS_PARAM param
  449. * Returns: void
  450. * Author:nihongf@mobilesoft.com.cn
  451. * ----------------------------------------------------------------------------*/ 
  452. LOCAL void MMIVC_CallBackDeleteOneMMSFile(
  453.  FFS_ERROR_E a, 
  454.  FFS_RESULT result, 
  455.  FFS_PARAM param
  456.  );
  457. /* ----------------------------------------------------------------------------
  458. * Function Name: MMIMMS_Notification_Arrive
  459. * Purpose: 彩信通知push处理函数
  460. * Input:  void * ptr:push内容
  461. * Returns: void
  462. * Author:nihongf@mobilesoft.com.cn
  463. * ----------------------------------------------------------------------------*/ 
  464. LOCAL void MMIMMS_Notification_Arrive(void * ptr);
  465. /* ----------------------------------------------------------------------------
  466. * Function Name: MMIMMS_DeliveryRpt_Arrive
  467. * Purpose: 送达报告处理函数
  468. * Input:  void * ptr:push内容
  469. * Returns: void
  470. * Author:nihongf@mobilesoft.com.cn
  471. * ----------------------------------------------------------------------------*/ 
  472. LOCAL void MMIMMS_DeliveryRpt_Arrive(void * ptr);
  473. /* ----------------------------------------------------------------------------
  474. * Function Name: CmsTimeToString
  475. * Purpose: 获得当前时间对应的字符串 指针
  476. * Input:  MMI_TM_T:时间结构
  477. * Returns: 对应的字符串指针
  478. * Author:nihongf@mobilesoft.com.cn
  479. * ----------------------------------------------------------------------------*/ 
  480. uint8 * CmsTimeToString(MMI_TM_T tm);
  481. /* ----------------------------------------------------------------------------
  482. * Function Name: CmsTimeToString
  483. * Purpose: 取得文件的长度
  484. * Input:  虚拟文件句柄
  485. * Returns: 虚拟文件的长度
  486. * Author:nihongf@mobilesoft.com.cn
  487. * ----------------------------------------------------------------------------*/ 
  488. uint32 Cms_GetFileLength( FILE_HANDLE file);
  489. /**--------------------------------------------------------------------------*
  490. **                         FUNCTION DEFINITION                              *
  491. **--------------------------------------------------------------------------*/
  492. /* ----------------------------------------------------------------------------
  493. * Function Name: MMIMMS_get_port
  494. * Purpose: 得到当前的网关和端口号
  495. * Input:  curgatway: 当前的网关
  496.   curport: 当前的端口号
  497. * Returns: void
  498. * Author:nihongf@mobilesoft.com.cn
  499. * ----------------------------------------------------------------------------*/ 
  500. void MMIMMS_get_port(char **curgatway,unsigned short *curport)
  501. {
  502. SCI_TRACE_LOW("FNH get_port g_nv_setting_mirror->gateway = %s",g_nv_setting_mirror.gateway);
  503. SCI_TRACE_LOW("FNH get_port g_nv_setting_mirror->port = %s",g_nv_setting_mirror.port);
  504. *curgatway =(char *)g_nv_setting_mirror.gateway;
  505. *curport = (unsigned short)atoi((char *)g_nv_setting_mirror.port);
  506. SCI_TRACE_LOW("FNH *curport = %d",*curport);
  507. return ;
  508. }
  509. /* ----------------------------------------------------------------------------
  510. * Function Name: MMIMMS_IsIPAddress
  511. * Purpose:判断用户输入的网关地址是否是IP地址
  512. * Input:  curipaddress: 当前的网关地址
  513. * Output: BOOLEAN
  514.   TRUE: 是IP地址
  515.   FALSE:不是IP地址
  516. * Returns:
  517. * Author:nihongf@mobilesoft.com.cn
  518. * ----------------------------------------------------------------------------*/ 
  519. BOOLEAN MMIMMS_IsIPAddress(char *curipaddress)
  520. {
  521. char *tempstr = NULL;
  522. char curipnum[34];
  523. short len = 0;
  524. short ipcount = 0;
  525. short curnum = 0;
  526. short curadd = 0;
  527. short index = 0;
  528. tempstr = curipaddress;
  529. len = (short)strlen(curipaddress);
  530. SCI_MEMSET(curipnum,0,sizeof(curipnum));
  531. for (index = 0;index <= len;index ++ )
  532. {
  533. if (((curipaddress[index] <0x30 || curipaddress[index] >0x39) && curipaddress[index] != 0x2E)&& (index != len))
  534. {
  535. return FALSE;
  536. }
  537. curnum ++;
  538. if ((curipaddress[index] == 0x2E) ||(index == len))
  539. {
  540. if ((curnum > 4) || (curnum == 1))
  541. {
  542. return FALSE;
  543. }
  544. else
  545. {
  546. short i = 0;
  547. if (curnum > 2)
  548. {
  549. BOOLEAN firstchar = FALSE;
  550. while(!firstchar)
  551. {
  552. i = 0;
  553. if (curipnum[i] !=0x30)
  554. {
  555. firstchar = TRUE;
  556. }
  557. else
  558. {
  559. if(curipnum[i] == 0x30  && i <curnum-2 && curipnum[i+1] != 0)
  560. {
  561. return FALSE; 
  562. }
  563. }
  564. i++;
  565. if (i==curnum)
  566. {
  567. firstchar = TRUE;
  568. }
  569. }
  570. }
  571. curadd = (short)atoi(curipnum);
  572. if (curadd > 0xFF)
  573. {
  574. return FALSE;
  575. }
  576. ipcount ++;
  577. SCI_MEMSET(curipnum,0,sizeof(curipnum));
  578. curnum = 0;
  579. }
  580. }
  581. else
  582. curipnum[curnum-1] = curipaddress[index];
  583. }
  584. if (ipcount == 4)
  585. return TRUE;
  586. else
  587. return FALSE;
  588. }
  589. /* ----------------------------------------------------------------------------
  590. * Function Name: MMIMMS_AddVideo
  591. * Purpose:在当前页添加视频
  592. * Input:  T_Composer_Video: 视频结构
  593.   pMMS_EDocument: 编辑文档
  594. * Returns:T_WORD
  595. * Author:nihongf@mobilesoft.com.cn
  596. * ----------------------------------------------------------------------------*/ 
  597. T_WORD MMIMMS_AddVideo(T_Composer_Video*Video,pMMS_EDocument p_cur_doc)
  598. {
  599. #ifdef HAVE_MPEG4
  600. int16         type = 0;
  601. char   video_fname[MMS_FILE_NAME_LENGTH] = {0};
  602. SCI_FILE*   fd = 0;
  603. uint32 value = 0;
  604. SCI_TRACE_LOW("MMIMMS_AddVideo in");
  605. if ((p_cur_doc->totalsize + Video->size) > MMS_SIZE_OF_MESSAGE)
  606. {
  607. SCI_TRACE_LOW("open the file error");
  608. PUBWIN_OpenPromptAlertWin(
  609. PUBWIN_SOFTKEY_ONE, 
  610. TXT_MMS_MMS_TOO_BIG, 
  611. IMAGE_PROMPT_ICON_WRONG, 
  612. ALERT_TIMEOUT, 
  613. PNULL
  614. );
  615. return -1;
  616. }
  617. value = MMI_GetFfsTime();
  618. sprintf(video_fname,"%lu",value);
  619. SCI_TRACE_LOW("FNH video_fname = %s",video_fname);
  620. if (Video->Type == MPEG4_3GP_FILE)
  621. {
  622. type = MMS_TYPE_3GP;
  623. strcat(video_fname,".3gp");
  624. }
  625. else if (Video->Type == MPEG4_MP4_FILE)
  626. {
  627. type = MMS_TYPE_MP4;
  628. strcat(video_fname,".mp4");
  629. }
  630. SCI_TRACE_LOW("FNH type = %d",type);
  631. fd =(SCI_FILE*) mmsf_Open((char*)video_fname,"w");
  632. if (!fd )
  633. {
  634. SCI_TRACE_LOW("open the file error");
  635. PUBWIN_OpenPromptAlertWin(
  636. PUBWIN_SOFTKEY_ONE, 
  637. TXT_MMS_ADD_FAIL, 
  638. IMAGE_PROMPT_ICON_WRONG, 
  639. ALERT_TIMEOUT, 
  640. PNULL
  641. );
  642. return -1;
  643. }
  644. mmsf_Write((char *)Video->VidBuf, 1, Video->size,(FILE_HANDLE) fd);
  645. mmsf_Close((FILE_HANDLE)fd);
  646. if (MMS_New_Content((unsigned char*)video_fname,type,p_cur_doc->slide_cur,p_cur_doc))
  647. {
  648. SCI_TRACE_LOW("FNH NEW VIDEO IS SUCCESS");
  649. return 0;
  650. }
  651. else 
  652. {
  653. SCI_TRACE_LOW("FNH NEW VIDEO IS FAIL");
  654. PUBWIN_OpenPromptAlertWin(
  655. PUBWIN_SOFTKEY_ONE, 
  656. TXT_MMS_ADD_FAIL, 
  657. IMAGE_PROMPT_ICON_WRONG, 
  658. ALERT_TIMEOUT, 
  659. PNULL
  660. );
  661. return -1;
  662. }
  663. #endif
  664. }
  665. /* ----------------------------------------------------------------------------
  666. * Function Name: MMIMMS_SetCurSlideDuration
  667. * Purpose:设置当前页面的延时
  668. * Input:  T_WORD: 延时时间
  669. * Returns:
  670. * Author:nihongf@mobilesoft.com.cn
  671. * ----------------------------------------------------------------------------*/ 
  672. T_WORD MMIMMS_SetCurSlideDuration(T_WORD delay)
  673. {
  674. g_peditdoc->slide_cur->times = delay* ONE_KILO;
  675. return 1;
  676. }
  677. /* ----------------------------------------------------------------------------
  678. * Function Name: CmsIsSupportType
  679. * Purpose:判断是否是支持的数据类型
  680. * Input:  uint16 type:图片文档
  681. * Returns:BOOLEAN
  682. * Author:nihongf@mobilesoft.com.cn
  683. * ----------------------------------------------------------------------------*/ 
  684. BOOLEAN CmsIsSupportType(uint16 type)
  685. {
  686. BOOLEAN returnvalue = FALSE;
  687. if (type == MMS_TYPE_GIF ||
  688. type == MMS_TYPE_JPEG ||
  689. type == MMS_TYPE_WBMP ||
  690. type == MMS_TYPE_BMP1 ||
  691. type == MMS_TYPE_PNG )
  692. {
  693. returnvalue = TRUE;
  694. }
  695. return returnvalue;
  696. }
  697. /* ----------------------------------------------------------------------------
  698. * Function Name: MMIMMS_DeleteCurImage
  699. * Purpose:从当前页删除图像
  700. * Input:  pMMS_EDocument:编辑文档
  701. * Returns:
  702. * Author:nihongf@mobilesoft.com.cn
  703. * ----------------------------------------------------------------------------*/ 
  704. T_WORD MMIMMS_DeleteCurImage(pMMS_EDocument p_cur_doc)
  705. {
  706. uint16   type = 0;
  707. pMMS_Content  content = NULL;
  708. pMMS_Slide    slide = p_cur_doc->slide_cur; 
  709. if(slide->image_flag)
  710. {
  711. content = slide->content_root;
  712. while (content)
  713. {
  714. if (CmsIsSupportType(content->type))
  715. {
  716. type = (uint16)content->type;
  717. break;
  718. }
  719. content = content->next;
  720. }
  721. slide->content_cur = content;
  722. MMS_DelContent(slide,p_cur_doc);
  723. slide->image_flag = 0;
  724. }
  725. return 1;
  726. }
  727. /* ----------------------------------------------------------------------------
  728. * Function Name: MMIMMS_DeleteCurVideo
  729. * Purpose:从当前页删除视频
  730. * Input:  pMMS_EDocument:编辑文档
  731. * Returns:
  732. * Author:nihongf@mobilesoft.com.cn
  733. * ----------------------------------------------------------------------------*/ 
  734. T_WORD MMIMMS_DeleteCurVideo(pMMS_EDocument p_cur_doc)
  735. {
  736. uint16   type = 0;
  737. pMMS_Content  content = NULL;
  738. pMMS_Slide    slide = p_cur_doc->slide_cur; 
  739. if(slide->video_flag)
  740. {
  741. content = slide->content_root;
  742. while (content)
  743. {
  744. if (content->type == MMS_TYPE_MP4 ||
  745. content->type == MMS_TYPE_3GP )
  746. {
  747. type = (uint16)content->type;
  748. break;
  749. }
  750. content = content->next;
  751. }
  752. slide->content_cur = content;
  753. MMS_DelContent(slide,p_cur_doc);
  754. slide->video_flag = 0;
  755. }
  756. return 1;
  757. }
  758. /* ----------------------------------------------------------------------------
  759. * Function Name: CmsMmsAddNewAddr
  760. * Purpose: 将新地址加入到地址链表中
  761. * Input:  head: 地址链表指针
  762.   addr: 新地址指针
  763.   bAddNode:增加的结点
  764. * Returns: 地址链表指针
  765. * Author:nihongf@mobilesoft.com.cn
  766. * ----------------------------------------------------------------------------*/ 
  767. LOCAL p_MMS_RECEPIENT CmsMmsAddNewAddr( p_MMS_RECEPIENT head , char* addr , int bAddNode )
  768. {
  769. if( !head ) return NULL;
  770. SCI_MEMCPY( head->m_address , addr , MAX_NAME_LENGTH );
  771. // SCI_TRACE_LOW( "addr list1 : %s.n" , head->m_address );
  772. if( bAddNode )
  773. {
  774. head->p_next = (p_MMS_RECEPIENT)cms_malloc( sizeof( MMS_RECEPIENT ) );
  775. if( head->p_next )
  776. {
  777. SCI_MEMSET( head->p_next , 0 , sizeof( MMS_RECEPIENT) );
  778. }
  779. }
  780. return head->p_next;
  781. }
  782. /* ----------------------------------------------------------------------------
  783. * Function Name: CmsMmsParseRecepient
  784. * Purpose: 将得到的字符串解析生成地址链表
  785. * Input:  __head: 地址链表指针
  786.   str: 字符串
  787. * Returns: void
  788. * Author:nihongf@mobilesoft.com.cn
  789. * ----------------------------------------------------------------------------*/ 
  790. void CmsMmsParseRecepient(p_MMS_RECEPIENT __head, char *str)
  791. {
  792. p_MMS_RECEPIENT head = __head;
  793. int nAddrCount = 0;
  794. const char* chToken = " ,;";
  795. char chAddr[ 64 ] , *ptrAddr = chAddr;
  796. while( str && *str )
  797. {
  798. if( !strchr( chToken , *str ) )
  799. {
  800. if( ptrAddr - chAddr <= MAX_NAME_LENGTH )
  801. {
  802. *ptrAddr++ = *str;
  803. }
  804. else
  805. {
  806. SCI_TRACE_LOW( "addr too long , cut ...... n" );
  807. }
  808. }
  809. else
  810. {
  811. if( ptrAddr != chAddr )
  812. {
  813. if( ++nAddrCount > MMIMMS_MAX_ADDRESS_NUM )
  814. {
  815. SCI_TRACE_LOW( "hehe , too many addr , ignore.....n" );
  816. break;
  817. }
  818. *ptrAddr = 0;
  819. head = CmsMmsAddNewAddr( head , chAddr , 1 );
  820. }
  821. ptrAddr = chAddr; 
  822. }
  823. ++str;
  824. }
  825. *ptrAddr = 0;
  826. CmsMmsAddNewAddr( head , chAddr , 0 );
  827. }
  828. /******************************************************************************
  829.  * 函数定义: MmsDelAllReceiver
  830.  * 函数说明: 删除所有收件人
  831.  * 参数说明: p_receiver: 收件人列表头指针
  832.  * 返回值: 空 
  833. ********************************************************************************/
  834. void MmsDelAllReceiver(p_MMS_RECEPIENT* p_receiver)
  835. {
  836. p_MMS_RECEPIENT p_temp = NULL;
  837. p_MMS_RECEPIENT p_temp2 = NULL;
  838. p_temp = *p_receiver;
  839. while(p_temp != NULL)
  840. {
  841. p_temp2 = p_temp->p_next;
  842. cms_free(p_temp);
  843. p_temp = p_temp2;
  844. }
  845. *p_receiver = NULL;
  846. }
  847. /* ----------------------------------------------------------------------------
  848. * Function Name: MMIMMS_AddImage
  849. * Purpose:在当前页添加图像
  850. * Input:  T_Composer_Image: 图片结构
  851.   pMMS_EDocument: 编辑文档
  852. * Returns:T_WORD
  853. * Author:nihongf@mobilesoft.com.cn
  854. * ----------------------------------------------------------------------------*/ 
  855. T_WORD MMIMMS_AddImage(T_Composer_Image* Image,pMMS_EDocument p_cur_doc)
  856. {
  857. int16         type = 0;
  858. char          img_fname[MMS_FILE_NAME_LENGTH] = {0};
  859. SCI_FILE*   fd = 0;
  860. uint32 value = 0;
  861. SCI_TRACE_LOW("MMIMMS_AddImage in");
  862. if ((p_cur_doc->totalsize + Image->size) > MMS_SIZE_OF_MESSAGE)
  863. {
  864. SCI_TRACE_LOW("p_cur_doc->totalsize = %d,Image->size = %d",p_cur_doc->totalsize,Image->size);
  865. SCI_TRACE_LOW("MMIMMS_AddImage:total size is too big");
  866. PUBWIN_OpenPromptAlertWin(
  867. PUBWIN_SOFTKEY_ONE, 
  868. TXT_MMS_MMS_TOO_BIG, 
  869. IMAGE_PROMPT_ICON_WRONG, 
  870. ALERT_TIMEOUT, 
  871. PNULL
  872. );
  873. return -1;// xuelianb modify[2005-11-08]
  874. }
  875. value = MMI_GetFfsTime();
  876. sprintf(img_fname,"%lu",value);
  877. if( 0 == strcmp(Image->Type, COMPOSER_IMAGE_GIF) )
  878. {
  879. type = MMS_TYPE_GIF;
  880. strcat(img_fname,".gif");
  881. }
  882. else if( 0 == strcmp(Image->Type, COMPOSER_IMAGE_JPEG) )
  883. {
  884. type = MMS_TYPE_JPEG;
  885. strcat(img_fname,".jpg");
  886. }
  887. else if( 0 == strcmp(Image->Type, COMPOSER_IMAGE_PNG) )
  888. {
  889. type = MMS_TYPE_PNG;
  890. strcat(img_fname,".png");
  891. }
  892. else if( 0 == strcmp(Image->Type, COMPOSER_IMAGE_WBMP) )
  893. {
  894. type = MMS_TYPE_WBMP;
  895. strcat(img_fname,".wbmp");
  896. }
  897. else if (0 == strcmp(Image->Type, COMPOSER_IMAGE_BMP))
  898. {
  899. type = MMS_TYPE_BMP1;
  900. strcat(img_fname,".bmp");
  901. }
  902. else 
  903. {
  904. SCI_TRACE_LOW("error:unknown type:type = %s",Image->Type) ;
  905. }
  906. fd =(SCI_FILE*) mmsf_Open((char*)img_fname,"w");
  907. if (!fd )
  908. {
  909. SCI_TRACE_LOW("open the file error");
  910. PUBWIN_OpenPromptAlertWin(
  911. PUBWIN_SOFTKEY_ONE, 
  912. TXT_MMS_ADD_FAIL, 
  913. IMAGE_PROMPT_ICON_WRONG, 
  914. ALERT_TIMEOUT, 
  915. PNULL
  916. );
  917. return -1;
  918. }
  919. mmsf_Write((char *)Image->ImgBuf, 1, Image->size,(FILE_HANDLE) fd);
  920. mmsf_Close((FILE_HANDLE)fd);
  921. if (MMS_New_Content((unsigned char*)img_fname,type,p_cur_doc->slide_cur,p_cur_doc))
  922. {
  923. return 0;
  924. }
  925. else 
  926. {
  927. SCI_TRACE_LOW("error:add new content failed");
  928. PUBWIN_OpenPromptAlertWin(
  929. PUBWIN_SOFTKEY_ONE, 
  930. TXT_MMS_ADD_FAIL, 
  931. IMAGE_PROMPT_ICON_WRONG, 
  932. ALERT_TIMEOUT, 
  933. PNULL
  934. );
  935. return -1;
  936. }
  937. }
  938. /* ----------------------------------------------------------------------------
  939. * Function Name: MMIMMS_AddAudio
  940. * Purpose:在当前页添加音乐
  941. * Input:  T_Composer_Audio: 音乐结构
  942.   pMMS_EDocument: 编辑文档
  943. * Returns:T_WORD
  944. * Author:nihongf@mobilesoft.com.cn
  945. * ----------------------------------------------------------------------------*/ 
  946. T_WORD MMIMMS_AddAudio(T_Composer_Audio*Audio,pMMS_EDocument p_cur_doc)
  947. {
  948. int16         type = 0;
  949. char   audio_fname[MMS_FILE_NAME_LENGTH] = {0};
  950. SCI_FILE*   fd = 0;
  951. uint32 value = 0;
  952. SCI_TRACE_LOW("MMIMMS_AddAudio in");
  953. if ((p_cur_doc->totalsize + Audio->size) > MMS_SIZE_OF_MESSAGE)
  954. {
  955. PUBWIN_OpenPromptAlertWin(
  956. PUBWIN_SOFTKEY_ONE, 
  957. TXT_MMS_MMS_TOO_BIG, 
  958. IMAGE_PROMPT_ICON_WRONG, 
  959. ALERT_TIMEOUT, 
  960. PNULL
  961. );
  962. return -1;
  963. }
  964. value = MMI_GetFfsTime();
  965. sprintf(audio_fname,"%lu",value);
  966. SCI_TRACE_LOW("FNH audio_fname = %s",audio_fname);
  967. if( 0 == strcmp(Audio->Type, COMPOSER_AUDIO_WAV) )
  968. {
  969. type = MMS_TYPE_WAV;
  970. strcat(audio_fname,".wav");
  971. SCI_TRACE_LOW("FNH type = %d",type);
  972. }
  973. else if( 0 == strcmp(Audio->Type, COMPOSER_AUDIO_IMELODY) )
  974. {
  975. type = MMS_TYPE_IMY;
  976. strcat(audio_fname,".imy");
  977. SCI_TRACE_LOW("FNH type = %d",type);
  978. }
  979. else if( 0 == strcmp(Audio->Type, COMPOSER_AUDIO_MIDI) )
  980. {
  981. type = MMS_TYPE_MIDI;
  982. strcat(audio_fname,".midi");
  983. SCI_TRACE_LOW("FNH type = %d",type);
  984. }
  985. #ifdef HAVE_AMR
  986. else if( 0 == strcmp(Audio->Type, COMPOSER_AUDIO_AMR) )
  987. {
  988. type = MMS_TYPE_AMR;
  989. strcat(audio_fname,".amr");
  990. SCI_TRACE_LOW("FNH type = %d",type);
  991. }
  992. #endif
  993. #ifdef HAVE_MP3
  994. else if( 0 == strcmp(Audio->Type, COMPOSER_AUDIO_MP3) )
  995. {
  996. type = MMS_TYPE_MP3;
  997. strcat(audio_fname,".mp3");
  998. SCI_TRACE_LOW("FNH type = %d",type);
  999. }
  1000. #endif
  1001. else 
  1002. {
  1003. SCI_TRACE_LOW("error:unknown type %d",type) ;
  1004. }
  1005. fd =(SCI_FILE*) mmsf_Open((char*)audio_fname,"w");
  1006. SCI_TRACE_LOW("FNH open file is success!");
  1007. if (!fd )
  1008. {
  1009. PUBWIN_OpenPromptAlertWin(
  1010. PUBWIN_SOFTKEY_ONE, 
  1011. TXT_MMS_ADD_FAIL, 
  1012. IMAGE_PROMPT_ICON_WRONG, 
  1013. ALERT_TIMEOUT, 
  1014. PNULL
  1015. );
  1016. SCI_TRACE_LOW("open the file error");
  1017. return -1;
  1018. }
  1019. mmsf_Write((char *)Audio->AudBuf, 1, Audio->size,(FILE_HANDLE) fd);
  1020. SCI_TRACE_LOW("FNH write file is success!");
  1021. mmsf_Close((FILE_HANDLE)fd);
  1022. SCI_TRACE_LOW("FNH close file is success!");
  1023. SCI_TRACE_LOW("FNH editdoc = %d",p_cur_doc);
  1024. SCI_TRACE_LOW("fnh slide = %d",p_cur_doc->slide_cur);
  1025. if (MMS_New_Audio((unsigned char*)audio_fname,type,p_cur_doc->slide_cur,p_cur_doc) == 0)
  1026. {
  1027. SCI_TRACE_LOW("FNH NEW AUDIO IS SUCCESS,g_peditdoc->slide_cur->audio_type = %d",p_cur_doc->slide_cur->audio_type);
  1028. return 0;
  1029. }
  1030. else 
  1031. {
  1032. SCI_TRACE_LOW("FNH NEW AUDIO IS FAIL");
  1033. PUBWIN_OpenPromptAlertWin(
  1034. PUBWIN_SOFTKEY_ONE, 
  1035. TXT_MMS_ADD_FAIL, 
  1036. IMAGE_PROMPT_ICON_WRONG, 
  1037. ALERT_TIMEOUT, 
  1038. PNULL
  1039. );
  1040. return -1;
  1041. }
  1042. }
  1043. /* ----------------------------------------------------------------------------
  1044. * Function Name: MMIMMS_GetCurSlideVideo
  1045. * Purpose:得到当前页的视频信息
  1046. * Input:  T_Composer_Video: 视频结构
  1047.   pMMS_EDocument: 编辑文档
  1048. * Returns:T_WORD
  1049. * Author:nihongf@mobilesoft.com.cn
  1050. * ----------------------------------------------------------------------------*/ 
  1051. T_WORD MMIMMS_GetCurSlideVideo(T_Composer_Video*Video,pMMS_EDocument p_edoc)
  1052. {
  1053. #ifdef HAVE_MPEG4
  1054. uint32      len = 0,size=0;
  1055. pMMS_Content  content = NULL;
  1056. pMMS_EDocument p_curedoc;
  1057. SCI_TRACE_LOW("MMIMMS_GetCurSlideVideo in");
  1058. p_curedoc = p_edoc;
  1059. content = p_curedoc->slide_cur->content_root;
  1060. if(p_curedoc->slide_cur->video_flag != 1)
  1061. {
  1062. SCI_TRACE_LOW("there is not any image in the slide");
  1063. return -1;
  1064. }
  1065. for(;content;content = content->next)
  1066. {
  1067.        if(content->type == MMS_TYPE_MP4 || content->type == MMS_TYPE_3GP  )
  1068.    break;
  1069. }
  1070. if(content == NULL)
  1071. {
  1072. SCI_TRACE_LOW("there is not any Video in the slide,Video flag error");
  1073. return -1;
  1074. }
  1075. if(content->type == MMS_TYPE_MP4)
  1076. {
  1077. SCI_TRACE_LOW("FNH enter MP4");
  1078. size=content->contentsize;
  1079. len = content->contentsize;
  1080. Video->Type=MPEG4_MP4_FILE;
  1081. }
  1082. else if(content->type == MMS_TYPE_3GP)
  1083. {
  1084. SCI_TRACE_LOW("FNH enter 3GP");
  1085. Video->Type=MPEG4_3GP_FILE;
  1086. size = content->contentsize;
  1087. len = content->contentsize;
  1088. }
  1089. else 
  1090. {
  1091. SCI_TRACE_LOW("unknown video type:%d",content->type);
  1092. }
  1093. mmsf_GetConstFileData(content->filename,(char **)&Video->VidBuf,(int *)&Video->size );
  1094. if(Video->VidBuf == NULL)
  1095. {
  1096. SCI_TRACE_LOW("malloc failed:size = %d",len);
  1097. return -1;
  1098. }
  1099. #endif
  1100. SCI_TRACE_LOW("MMIMMS_GetCurSlideVideo out");
  1101. return 0;
  1102. }
  1103. /* ----------------------------------------------------------------------------
  1104. * Function Name: MMIMMS_GetCurSlideImage
  1105. * Purpose:得到当前页的图像信息
  1106. * Input:  T_Composer_Image: 图片结构
  1107.   pMMS_EDocument: 编辑文档
  1108. * Returns:T_WORD
  1109. * Author:nihongf@mobilesoft.com.cn
  1110. * ----------------------------------------------------------------------------*/ 
  1111. T_WORD MMIMMS_GetCurSlideImage(T_Composer_Image*Image,pMMS_EDocument p_edoc)
  1112. {
  1113. uint32      len = 0,size=0;
  1114. pMMS_Content  content = NULL;
  1115. pMMS_EDocument p_curedoc;
  1116. SCI_TRACE_LOW("MMIMMS_GetCurSlideImage in");
  1117. p_curedoc = p_edoc;
  1118. content = p_curedoc->slide_cur->content_root;
  1119. if(p_curedoc->slide_cur->image_flag != 1)
  1120. {
  1121. SCI_TRACE_LOW("there is not any image in the slide");
  1122. return -1;
  1123. }
  1124. for(;content;content = content->next)
  1125. {
  1126.        if(CmsIsSupportType(content->type))
  1127.    break;
  1128. }
  1129. if(content == NULL)
  1130. {
  1131. SCI_TRACE_LOW("there is not any image in the slide,image flag error");
  1132. return -1;
  1133. }
  1134. if(content->type == MMS_TYPE_GIF)
  1135. {
  1136. size=content->contentsize;
  1137. len = content->contentsize+8;
  1138. Image->Type="image/gif";
  1139. }
  1140. else if(content->type == MMS_TYPE_WBMP)
  1141. {
  1142. Image->Type="image/vnd.wap.wbmp";
  1143. size = content->contentsize;
  1144. len = content->contentsize;
  1145. }
  1146. else if(content->type == MMS_TYPE_JPEG)
  1147. {
  1148. Image->Type="image/jpeg";
  1149. size = content->contentsize;
  1150. len = content->contentsize;
  1151. }
  1152. else if (content->type == MMS_TYPE_BMP1)
  1153. {
  1154. Image->Type = "image/bmp";
  1155. size = content->contentsize;
  1156. len = content->contentsize;
  1157. }
  1158. else if(content->type == MMS_TYPE_PNG)
  1159. {
  1160. Image->Type="image/png";
  1161. size = content->contentsize;
  1162. len = content->contentsize;
  1163. }
  1164. else 
  1165. {
  1166. SCI_TRACE_LOW("unknown image type:%d",content->type);
  1167. }
  1168. mmsf_GetConstFileData(content->filename,(char **)&Image->ImgBuf,(int *)&Image->size);
  1169. if(Image->ImgBuf == NULL)
  1170. {
  1171. SCI_TRACE_LOW("malloc failed:size = %d",len);
  1172. return -1;
  1173. }
  1174. SCI_TRACE_LOW("MMIMMS_GetCurSlideImage out");
  1175. return 0;
  1176. }
  1177. /* ----------------------------------------------------------------------------
  1178. * Function Name: MMIMMS_GetCurText
  1179. * Purpose:得到当前页的文本信息
  1180. * Input:  pMMS_EDocument:编辑文档
  1181.   T_Composer_Text:文本结构
  1182. * Returns:T_WORD
  1183. * Author:nihongf@mobilesoft.com.cn
  1184. * ----------------------------------------------------------------------------*/ 
  1185. T_WORD MMIMMS_GetCurText(T_Composer_Text*Text,pMMS_EDocument p_cur_doc)
  1186. {
  1187. uint32      len = 0;
  1188. uint8*      str = NULL;
  1189. pMMS_Content  content = NULL;
  1190. SCI_TRACE_LOW("MMIMMS_GetCurText in");
  1191. if(p_cur_doc->slide_cur->text_flag != 1)
  1192. {
  1193. SCI_TRACE_LOW("error:there is not any text in the slide");
  1194. return -1;
  1195. }
  1196. content = p_cur_doc->slide_cur->content_root;
  1197. for(;content;content = content->next)
  1198. {
  1199. if(content->type == MMS_TYPE_TEXT)
  1200. break;
  1201. }
  1202. if(content == NULL)
  1203. {
  1204. SCI_TRACE_LOW("error:there is not any text in the slide,text flag error");
  1205. return -1;
  1206. }
  1207. mmsf_GetConstFileData(content->filename,(char **)&str,(int *)&len);
  1208. SCI_TRACE_BUF("FNH GET TEXT str = %x",str,10);
  1209. Text->size = CmsGetUnicodeLen((unsigned char *)str);
  1210. SCI_TRACE_LOW("FNH GET TEXT LEN= %d",Text->size);
  1211. Text->TxtBuf = (T_UBYTE* )str+2;
  1212. SCI_TRACE_LOW("MMIMMS_GetCurText out");
  1213. return 0;
  1214. }
  1215. /* ----------------------------------------------------------------------------
  1216. * Function Name: MMIMMS_GetCurSlideAudio
  1217. * Purpose:得到当前页的音乐信息
  1218. * Input:  T_Composer_Audio: 音乐结构
  1219.   pMMS_EDocument: 编辑文档
  1220. * Returns:T_WORD
  1221. * Author:nihongf@mobilesoft.com.cn
  1222. * ----------------------------------------------------------------------------*/ 
  1223. T_WORD MMIMMS_GetCurSlideAudio(T_Composer_Audio *audio,pMMS_EDocument pedoc)
  1224. {
  1225. pMMS_EDocument  pedoctemp;
  1226. pedoctemp = pedoc;
  1227. SCI_TRACE_LOW("FNH in GetCurAudio pedoctemp->slide_cur->audiofile = %s",pedoctemp->slide_cur->audiofile);
  1228. mmsf_GetConstFileData(pedoctemp->slide_cur->audiofile,(char **)&audio->AudBuf,(int *)&audio->size);
  1229. switch(pedoctemp->slide_cur->audio_type)
  1230. {
  1231. case MMS_TYPE_WAV:
  1232. audio->Type = "audio/wav";
  1233. SCI_TRACE_LOW("FNH type is audio/wav");
  1234. break;
  1235. #ifdef HAVE_AMR
  1236. case MMS_TYPE_AMR:
  1237. audio->Type = "audio/amr";
  1238. SCI_TRACE_LOW("FNH type is audio/amr");
  1239. break;
  1240. #endif
  1241. case MMS_TYPE_MIDI:
  1242. audio->Type="audio/midi";
  1243. SCI_TRACE_LOW("FNH type is audio/midi");
  1244. break;
  1245. #ifdef HAVE_MP3
  1246. case MMS_TYPE_MP3:
  1247. audio->Type = "audio/mp3";
  1248. SCI_TRACE_LOW("FNH type is audio/mp3");
  1249. break;
  1250. #endif
  1251. default:
  1252. SCI_TRACE_LOW("unknown type:%d",pedoctemp->slide_cur->audio_type);
  1253. break;
  1254. }
  1255. return 0;
  1256. }
  1257. /******************************************************************************
  1258.  * 函数定义: MMIMMS_Get_Cur_Second
  1259.  * 函数说明: 得到当前的秒数
  1260.  * 参数说明: 无
  1261.  * 返回值: 当前的秒数
  1262. ********************************************************************************/
  1263. long MMIMMS_Get_Cur_Second()
  1264. {
  1265. long cursecond = 0;
  1266. SCI_DATE_T curdate;
  1267. SCI_TIME_T curtime ;
  1268. TM_GetSysDate(&curdate);
  1269. SCI_TRACE_LOW("FNH %d,%d,%d",curdate.year,curdate.mon,curdate.mday);
  1270. TM_GetSysTime(&curtime);
  1271. SCI_TRACE_LOW("FNH %d,%d,%d",curtime.hour,curtime.min,curtime.sec);
  1272. cursecond = MMI_Tm2Second(curtime.sec,curtime.min,curtime.hour,curdate.mday,curdate.mon,curdate.year );
  1273. SCI_TRACE_LOW("FNH cursecond = %ld",cursecond);
  1274. cursecond = cursecond + (365*23 +366*7)*24*3600;
  1275. SCI_TRACE_LOW("FNH cursecond = %ld",cursecond);
  1276. return cursecond;
  1277. }
  1278. /* ----------------------------------------------------------------------------
  1279. * Function Name: MMIMMS_Receive_MMS
  1280. * Purpose:彩信网络回调函数
  1281. * Input:  status: 网络返回状态
  1282.           prompt: 返回参数
  1283.   status_value:当前网络状态
  1284. * Returns: void
  1285. * Author:nihongf@mobilesoft.com.cn
  1286. * ----------------------------------------------------------------------------*/ 
  1287. int mms_lib_callback(int status,void *prompt,int status_value)
  1288. {
  1289. SCI_TRACE_LOW("mms_lib_callback COME IN");
  1290. SCI_TRACE_LOW("mms_lib_callback wap_mms_init is %d",wap_mms_init);
  1291. if(wap_mms_init == MMICMSWAP_BROWSER)
  1292. {
  1293. SCI_TRACE_LOW("it is not my status");
  1294. return 0;
  1295. }//xuelianb add [2006-01-11]
  1296. switch(status)
  1297. {
  1298. case LIB_STATUS_NORMAL_STATUS:
  1299. //可以在此处在状态栏上显示当前状况,如正在连接网关,正在发送数据,正在接收数据等
  1300. //是正常处理过程中的状态显示。
  1301. {
  1302. switch(status_value)
  1303. {
  1304. case MMSNETLINKING:
  1305. //g_netusing = MMS_MSG_NETUSING_STEP2;
  1306. SCI_TRACE_LOW("mms_lib_callback the g_netusing is %d",g_netusing);
  1307. if(g_issendingreadrpt == FALSE)
  1308. {
  1309. //g_progresscurrentsize = 3*(g_progressneedsize/20);
  1310. // MMIMMS_DisplaySendRecvProgress(g_progresscurrentsize,g_progressneedsize);
  1311. }
  1312. SCI_TRACE_LOW("mms_lib_callback:%sn","connecting");
  1313. break;
  1314. case  MMSNETLINK_SUCCESS:
  1315. if(g_issendingreadrpt == FALSE)
  1316. {
  1317. g_progresscurrentsize = 3*(g_progressneedsize/10);
  1318. SCI_TRACE_LOW("fnh MMSNETLINK_SUCCESS iFClose = %d",iFClose);
  1319. if (iFClose == 0) //fnh add 0324 for MS00041490
  1320. {
  1321. SCI_TRACE_LOW("fnh before display progress");
  1322. MMIMMS_DisplaySendRecvProgress(g_progresscurrentsize,g_progressneedsize);
  1323. }
  1324. }
  1325. SCI_TRACE_LOW("mms_lib_callback:%sn","mms connect success");
  1326. break;
  1327. case  WAPCONNECT_SUCCESS:
  1328. SCI_TRACE_LOW("mms_lib_callback:%sn","wap connect success");
  1329. break;
  1330. case  MMS_RECEIVING:
  1331. if(g_issendingreadrpt == FALSE)
  1332. {
  1333. g_progresscurrentsize = (g_progressneedsize/2);
  1334. SCI_TRACE_LOW("fnh MSG_RECEIVING iFClose = %d",iFClose);
  1335. if (iFClose == 0)
  1336. {
  1337. SCI_TRACE_LOW("fnh before display progress");
  1338. MMIMMS_DisplaySendRecvProgress(g_progresscurrentsize,g_progressneedsize);
  1339. }
  1340. }
  1341. SCI_TRACE_LOW("mms_lib_callback:%sn","recving mms");
  1342. break;
  1343. case  MMS_SENDING:
  1344. if(g_issendingreadrpt == FALSE)
  1345. {
  1346. g_progresscurrentsize = (g_progressneedsize/2);
  1347. SCI_TRACE_LOW("fnh MMS_SENDING iFClose = %d",iFClose);
  1348. if (iFClose == 0)
  1349. {
  1350. SCI_TRACE_LOW("fnh before display progress");
  1351. MMIMMS_DisplaySendRecvProgress(g_progresscurrentsize,g_progressneedsize);
  1352. }
  1353. }
  1354. SCI_TRACE_LOW("mms_lib_callback:%sn","sending mms");
  1355. break;
  1356. default:
  1357. SCI_TRACE_LOW("mms_lib_callback:%sn","LIB_STATUS_NORMAL_STATUS default.");
  1358. break;
  1359. }
  1360. }
  1361. break;
  1362. case  LIB_STATUS_SENDRETURN:
  1363. {
  1364. switch(status_value)
  1365. {
  1366. case MMS_RESPONSE_STATUS_VALUE_OK:
  1367. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1368. SCI_TRACE_LOW("mms_lib_callback:send success!");//除此条外,下列各种情况均属发送失败
  1369. if(g_issendingreadrpt == FALSE)
  1370. {
  1371. SCI_TRACE_LOW("fnh MMS_RESPONSE_STATUS_VALUE_OK iFClose = %d",iFClose);
  1372. if (iFClose == 0)
  1373. {
  1374. SCI_TRACE_LOW("fnh before display progress");
  1375. MMIMMS_DisplaySendRecvProgress(g_progressneedsize,g_progressneedsize);
  1376. }
  1377. MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SEND_OK, PNULL, 0);
  1378. }else
  1379. g_issendingreadrpt = FALSE;
  1380. MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SEND_OK, PNULL, 0); 
  1381. }
  1382. break;
  1383. case MMS_RESPONSE_STATUS_VALUE_E_UNSPECIFIED:
  1384. SCI_TRACE_LOW("mms_lib_callback:unknown error");
  1385. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1386. if(g_issendingreadrpt== FALSE)
  1387. {
  1388. MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1389. }else
  1390. {
  1391. g_issendingreadrpt = FALSE;
  1392. MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1393. }
  1394. break;
  1395. case MMS_RESPONSE_STATUS_VALUE_E_SERVICE_DENIED:
  1396. SCI_TRACE_LOW("mms_lib_callback:service denied");
  1397. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1398. if(g_issendingreadrpt== FALSE)
  1399. {
  1400. MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1401. }else
  1402. {
  1403. g_issendingreadrpt = FALSE;
  1404. MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1405. }
  1406. break;
  1407. case MMS_RESPONSE_STATUS_VALUE_E_FORMAT_CORRUPT:
  1408. SCI_TRACE_LOW("mms_lib_callback:message format corrupt!");
  1409. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1410. if(g_issendingreadrpt== FALSE)
  1411. {
  1412. MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1413. }else
  1414. {
  1415. g_issendingreadrpt = FALSE;
  1416. MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1417. }
  1418. break;
  1419. case MMS_RESPONSE_STATUS_VALUE_E_ADDRESS_UNRESOLVED:
  1420. SCI_TRACE_LOW("mms_lib_callback:address error");//这条比较管用,当用户输错了地址时,会收到这个消息 
  1421. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1422. if(g_issendingreadrpt== FALSE)
  1423. {
  1424. MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1425. }else
  1426. {
  1427. g_issendingreadrpt = FALSE;
  1428. MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1429. }
  1430. break;
  1431. case MMS_RESPONSE_STATUS_VALUE_E_MESSAGE_NOT_FOUND:
  1432. SCI_TRACE_LOW("mms_lib_callback:message not found");
  1433. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1434. if(g_issendingreadrpt== FALSE)
  1435. {
  1436. MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1437. }else
  1438. {
  1439. g_issendingreadrpt = FALSE;
  1440. MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1441. }
  1442. break;
  1443. case MMS_RESPONSE_STATUS_VALUE_E_NETWORK_PROBLEM:
  1444. SCI_TRACE_LOW("mms_lib_callback:server busy");//虽字面是网络问题,但这个是在服务器过忙的情况下的状态
  1445. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1446. if(g_issendingreadrpt== FALSE)
  1447. {
  1448. MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1449. }else
  1450. {
  1451. g_issendingreadrpt = FALSE;
  1452. MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1453. }
  1454. break;
  1455. case MMS_RESPONSE_STATUS_VALUE_E_NOT_ACCEPTED:
  1456. SCI_TRACE_LOW("mms_lib_callback:message not accepted");//由于消息的大小,媒体类型,或考贝权等原因
  1457. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1458. if(g_issendingreadrpt== FALSE)
  1459. {
  1460. MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1461. }else
  1462. {
  1463. g_issendingreadrpt = FALSE;
  1464. MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1465. }
  1466. break;
  1467. case MMS_RESPONSE_STATUS_VALUE_E_UNSUPORTED_MESSAGE:
  1468. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1469. SCI_TRACE_LOW("mms_lib_callback:unsuported message");
  1470. if(g_issendingreadrpt== FALSE)
  1471. {
  1472. MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1473. }else
  1474. {
  1475. g_issendingreadrpt = FALSE;
  1476. MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1477. }
  1478. break;
  1479. case MMS_RESPONSE_STATUS_VALUE_E_UNKNOW_ERROR:
  1480. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1481. SCI_TRACE_LOW("mms_lib_callback:send failed,unknow error");
  1482. if(g_issendingreadrpt== FALSE)
  1483. {
  1484. MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1485. }else
  1486. {
  1487. g_issendingreadrpt = FALSE;
  1488. MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1489. }
  1490. break;
  1491. //发送时gprs网络拨号失败同样返回发送失败
  1492. case MMSNETLINK_FAILED:
  1493. SCI_TRACE_LOW("mms_lib_callback:dial failed");
  1494. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1495. if(g_issendingreadrpt== FALSE)
  1496. {
  1497. MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1498. }else
  1499. {
  1500. MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID, MSG_MMS_SENDED_FAILED, PNULL, 0);
  1501. }
  1502. break;
  1503. //发送时用户取消发送则返回发送取消
  1504. case MMSOPR_CANCEL:
  1505. SCI_TRACE_LOW("mms_lib_callback:user cancel");
  1506. MMK_PostMsg(MMIMMS_SEND_MMS_WAITING_WIN_ID, MSG_MMS_SEND_CANCEL, PNULL, 0);
  1507. break;
  1508. default:
  1509. SCI_TRACE_LOW("mms_lib_callback:%sn","LIB_STATUS_SENDRETURN default.");
  1510. break;
  1511. }
  1512. }
  1513. break;
  1514. case  LIB_STATUS_RECVRETURN:
  1515. {
  1516. SCI_TRACE_LOW("FNH LIB_STATUS_RECVRETURN status_value = %d",status_value);
  1517. switch(status_value)
  1518. {
  1519. case MMSRECV_SUCCESS:
  1520. SCI_TRACE_LOW("mms_lib_callback:recv success");
  1521. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1522. SCI_TRACE_LOW("fnh MMSRECV_SUCCESS iFClose = %d",iFClose);
  1523. if (iFClose == 0)
  1524. {
  1525. SCI_TRACE_LOW("fnh before display progress");
  1526. MMIMMS_DisplaySendRecvProgress(g_progressneedsize,g_progressneedsize);
  1527. }
  1528. MMK_PostMsg(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID, MSG_MMS_RECV_OK, PNULL, 0);
  1529. break;
  1530. case MMSRECV_FAILED:
  1531. SCI_TRACE_LOW("mms_lib_callback:recv failed");
  1532. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1533. MMK_PostMsg(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID, MSG_MMS_RECV_FAILED, PNULL, 0);
  1534. break;
  1535. case MMSOPR_CANCEL:
  1536. MMK_PostMsg(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID, MSG_MMS_RECV_CANCEL, PNULL, 0);
  1537. SCI_TRACE_LOW("mms_lib_callback:recv cancel");
  1538. break;
  1539. case  MMSNETLINK_FAILED:
  1540. SCI_TRACE_LOW("mms_lib_callback:gprs netlink failed");
  1541. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1542. MMK_PostMsg(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID, MSG_MMS_RECV_FAILED, PNULL, 0);
  1543. break;
  1544. case MMSRECV_FAILED_BY_NOT_FOUND:
  1545. SCI_TRACE_LOW("mms_lib_callback:recv failed, message not found");//常是由于一条MMS已过期而接收失败
  1546. g_netusing = MMS_MSG_NETUSING_STEP2;//modify 2006-1-3
  1547. MMK_PostMsg(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID, MSG_MMS_RECV_INVALIDPERIOD, PNULL, 0);
  1548. break;
  1549. default:
  1550. {
  1551. SCI_TRACE_LOW("mms_lib_callback:%sn","LIB_STATUS_RECVRETURN default.");
  1552. }
  1553. break;
  1554. }
  1555. }
  1556. break;
  1557. case LIB_STATUS_SENDED_BYTES:
  1558. if(g_issendingreadrpt == FALSE)
  1559. {
  1560. g_progresscurrentsize = (status_value+g_progressneedsize)/2;
  1561. SCI_TRACE_LOW("fnh LIB_STATUS_SENDED_BYTES iFClose = %d",iFClose);
  1562. if (iFClose == 0)
  1563. {
  1564. SCI_TRACE_LOW("fnh before display progress");
  1565. MMIMMS_DisplaySendRecvProgress(g_progresscurrentsize,g_progressneedsize);
  1566. }
  1567. }
  1568. break;
  1569. case LIB_STATUS_RECVED_BYTES:
  1570. g_progresscurrentsize = (status_value+g_progressneedsize)/2;
  1571. SCI_TRACE_LOW("fnh LIB_STATUS_RECVED_BYTES iFClose = %d",iFClose);
  1572. if (iFClose == 0)
  1573. {
  1574. SCI_TRACE_LOW("fnh before display progress");
  1575. MMIMMS_DisplaySendRecvProgress(g_progresscurrentsize,g_progressneedsize);
  1576. }
  1577. break;
  1578. default:
  1579. SCI_TRACE_LOW("mms_lib_callback:%sn","all default.");
  1580. break;
  1581. }
  1582. return 1;
  1583. }
  1584. /******************************************************************************
  1585.  * 函数定义: GetReceiverListLen
  1586.  * 函数说明: 得到收件人列表中的所有条目长度总和,其中还包括每两个条目之间的
  1587.                 间隔符所占长度。
  1588.  * 参数说明: p_receiver: 收件人列表
  1589.  * 返回值: 计算出的收件人长度之和
  1590. ********************************************************************************/
  1591. int GetReceiverListLen(p_MMS_RECEPIENT p_receiver)
  1592. {
  1593. p_MMS_RECEPIENT plist = NULL;
  1594. int          len = 0;
  1595. plist = p_receiver;
  1596. while(plist)
  1597. {
  1598. len += SCI_STRLEN((char *)plist->m_address)+1;
  1599. plist = plist->p_next;
  1600. }
  1601. return len;
  1602. }
  1603. /* ----------------------------------------------------------------------------
  1604. * Function Name: SaveMmsMessage
  1605. * Purpose: 保存彩信到当前的信箱
  1606. * Input:  folder_id:信箱ID号,从1到5分别为:收件箱、发件箱、已发信箱、草稿箱、
  1607.                 当前信箱(可能不需要,暂时加上)
  1608. * Returns: void
  1609. * Author:nihongf@mobilesoft.com.cn
  1610. * ----------------------------------------------------------------------------*/ 
  1611. void SaveMmsMessage(SAVE_MMS_STATUS folder_id, char *filename)
  1612. {
  1613. P_MMS_DOCUMENT  pMms_Doc = NULL;
  1614. char fname[MMS_FILE_NAME_LEN];
  1615. uint8 *phone_list = NULL;
  1616. int phone_list_len = 0;
  1617. uint32   value ;
  1618. pMessageFolder  folder = NULL;
  1619. long expire = 0;
  1620. if(folder_id == SAVE_MMS_TO_INBOX)
  1621. {
  1622. folder = g_pManager->inboxfolder;
  1623. }
  1624. else if(folder_id == SAVE_MMS_TO_OUTBOX)
  1625. {
  1626. folder = g_pManager->outboxfolder;
  1627. }
  1628. else if(folder_id == SAVE_MMS_TO_SENTBOX)
  1629. {
  1630. folder = g_pManager->sentfolder;
  1631. }
  1632. else if(folder_id == SAVE_MMS_TO_DRAFTBOX)
  1633. {
  1634. folder = g_pManager->draftfolder;
  1635. }
  1636. else if(folder_id == SAVE_MMS_TO_DEFAULT)
  1637. {
  1638. folder = g_pManager->currentfolder;
  1639. }
  1640. else
  1641. {
  1642.         SCI_TRACE_LOW("error:wrong folder id");
  1643. return;
  1644. }
  1645. value = MMI_GetFfsTime();
  1646. SCI_TRACE_LOW("FNH MMI_GetFfsTime = %u",MMI_GetFfsTime());
  1647. SCI_TRACE_LOW("FNH value = %u",value);
  1648. sprintf(fname,"%lu",value);
  1649. strcat(fname, ".mms");
  1650. SCI_TRACE_LOW("FNH fname = %s",fname);
  1651. if(filename != NULL)
  1652. {
  1653. SCI_MEMSET(filename,0,sizeof(filename));
  1654. SCI_STRCPY(filename,fname);
  1655. }
  1656. SCI_TRACE_LOW("FNH start of send message");
  1657. pMms_Doc = (P_MMS_DOCUMENT)cms_integrate_mms(g_peditdoc);
  1658. SCI_TRACE_LOW("fnh pMMS_Doc = %d",pMms_Doc);
  1659. SCI_TRACE_LOW("FNH after cms_integrate_mms");
  1660. if(!MMS_SetMmsFile(pMms_Doc,fname))
  1661. {
  1662. SCI_TRACE_LOW("FNH error:MMS_SetMmsFile failed");
  1663. if (pMms_Doc)
  1664. {
  1665. MMS_DeleteMms(pMms_Doc);
  1666. pMms_Doc = NULL;
  1667. }
  1668. return;
  1669. }
  1670. SCI_TRACE_LOW("FNH before insert to");
  1671. if ((g_p_mms_to) || (g_p_mms_to_group))//插入电话号码
  1672. {
  1673. p_MMS_RECEPIENT plist = NULL;
  1674. char *phone_list = NULL;
  1675. uint16 single_tele_len = 0;
  1676. uint16 group_tele_len = 0;
  1677. SCI_TRACE_LOW("FNH enter g_p_mms_to");
  1678. if (g_p_mms_to)
  1679. {
  1680. single_tele_len = GetReceiverListLen(g_p_mms_to);
  1681. SCI_TRACE_LOW("FNH g_p_mms_to len = %d",single_tele_len);
  1682. }
  1683. if (g_p_mms_to_group)
  1684. {
  1685. if (g_p_mms_to_group->cur_group)
  1686. {
  1687. group_tele_len = GetReceiverListLen(g_p_mms_to_group->cur_group);
  1688. }
  1689. }
  1690. phone_list_len = single_tele_len+group_tele_len+1;
  1691. phone_list    = (char *)cms_malloc(phone_list_len); 
  1692. if(!phone_list)
  1693. {
  1694. SCI_TRACE_LOW("malloc failed:phone list len = %d",phone_list_len);
  1695. return;
  1696. }
  1697. SCI_MEMSET(phone_list,0,phone_list_len); 
  1698. if (g_p_mms_to)
  1699. {
  1700. plist = g_p_mms_to;
  1701. while(plist->p_next)
  1702. {
  1703. strcat((char *)phone_list,(const char *)(plist->m_address)); 
  1704. strcat((char *)phone_list,",");
  1705. plist = plist->p_next;
  1706. }
  1707. strcat((char *)phone_list,(const char *)(plist->m_address)); // xuelianb modify[2005-11-08]
  1708. }
  1709. plist = NULL;
  1710. if (g_p_mms_to_group)
  1711. {
  1712. if (g_p_mms_to_group->cur_group)
  1713. {
  1714. plist = g_p_mms_to_group->cur_group;
  1715. if (g_p_mms_to)
  1716. {
  1717. strcat((char *)phone_list,",");
  1718. }
  1719. while(plist->p_next)
  1720. {
  1721. strcat((char *)phone_list,(const char *)(plist->m_address)); 
  1722. strcat((char *)phone_list,",");
  1723. plist = plist->p_next;
  1724. }
  1725. strcat((char *)phone_list,(const char *)(plist->m_address)); // xuelianb modify[2005-11-08]
  1726. }
  1727. }
  1728. // SCI_TRACE_LOW("FNH to phone_list = %s",phone_list);
  1729. MMS_SetMmsHeadField(pMms_Doc, MMS_TO, (long)0, (char *)phone_list);
  1730. if (phone_list)
  1731. {
  1732. cms_free(phone_list);
  1733. phone_list = NULL;
  1734. }
  1735. SCI_TRACE_LOW("FNH set to ok");
  1736. }
  1737. if ((g_p_mms_cc) ||(g_p_mms_cc_group))
  1738. {
  1739. p_MMS_RECEPIENT plist = NULL;
  1740. char *phone_list = NULL;
  1741. uint16 single_tele_len = 0;
  1742. uint16 group_tele_len = 0;
  1743. SCI_TRACE_LOW("FNH enter g_p_mms_cc");
  1744. if (g_p_mms_cc)
  1745. {
  1746. single_tele_len = GetReceiverListLen(g_p_mms_cc);
  1747. SCI_TRACE_LOW("FNH g_p_mms_cc len = %d",single_tele_len);
  1748. }
  1749. if (g_p_mms_cc_group)
  1750. {
  1751. if (g_p_mms_cc_group->cur_group)
  1752. {
  1753. group_tele_len = GetReceiverListLen(g_p_mms_cc_group->cur_group);
  1754. }
  1755. }
  1756. phone_list_len = single_tele_len+group_tele_len+1;
  1757. phone_list    = (char *)cms_malloc(phone_list_len); 
  1758. if(!phone_list)
  1759. {
  1760. SCI_TRACE_LOW("malloc failed:phone list len = %d",phone_list_len);
  1761. return;
  1762. }
  1763. SCI_MEMSET(phone_list,0,phone_list_len); 
  1764. if (g_p_mms_cc)
  1765. {
  1766. plist = g_p_mms_cc;
  1767. while(plist->p_next)
  1768. {
  1769. strcat((char *)phone_list,(const char *)(plist->m_address)); 
  1770. strcat((char *)phone_list,",");
  1771. plist = plist->p_next;
  1772. }
  1773. strcat((char *)phone_list,(const char *)(plist->m_address)); // xuelianb modify[2005-11-08]
  1774. }
  1775. plist = NULL;
  1776. if (g_p_mms_cc_group)
  1777. {
  1778. if (g_p_mms_cc_group->cur_group)
  1779. {
  1780. plist = g_p_mms_cc_group->cur_group;
  1781. if (g_p_mms_cc)
  1782. {
  1783. strcat((char *)phone_list,",");
  1784. }
  1785. while(plist->p_next)
  1786. {
  1787. strcat((char *)phone_list,(const char *)(plist->m_address)); 
  1788. strcat((char *)phone_list,",");
  1789. plist = plist->p_next;
  1790. }
  1791. strcat((char *)phone_list,(const char *)(plist->m_address)); // xuelianb modify[2005-11-08]
  1792. }
  1793. }
  1794. // SCI_TRACE_LOW("FNH cc phone_list = %s",phone_list);
  1795. MMS_SetMmsHeadField(pMms_Doc, MMS_CC, (long)0, (char *)phone_list);
  1796. if (phone_list)
  1797. {
  1798. cms_free(phone_list);
  1799. phone_list = NULL;
  1800. }
  1801. SCI_TRACE_LOW("FNH set cc ok");
  1802. }
  1803. if ((g_p_mms_bcc) ||(g_p_mms_bcc_group))
  1804. {
  1805. p_MMS_RECEPIENT plist = NULL;
  1806. char *phone_list = NULL;
  1807. uint16 single_tele_len = 0;
  1808. uint16 group_tele_len = 0;
  1809. SCI_TRACE_LOW("FNH enter g_p_mms_bcc");
  1810. if (g_p_mms_bcc)
  1811. {
  1812. single_tele_len = GetReceiverListLen(g_p_mms_bcc);
  1813. SCI_TRACE_LOW("FNH g_p_mms_b len = %d",single_tele_len);
  1814. }
  1815. if (g_p_mms_bcc_group)
  1816. {
  1817. if (g_p_mms_bcc_group->cur_group)
  1818. {
  1819. group_tele_len = GetReceiverListLen(g_p_mms_bcc_group->cur_group);
  1820. }
  1821. }
  1822. phone_list_len = single_tele_len+group_tele_len+1;
  1823. phone_list    = (char *)cms_malloc(phone_list_len); 
  1824. if(!phone_list)
  1825. {
  1826. SCI_TRACE_LOW("malloc failed:phone list len = %d",phone_list_len);
  1827. return;
  1828. }
  1829. SCI_MEMSET(phone_list,0,phone_list_len); 
  1830. if (g_p_mms_bcc)
  1831. {
  1832. plist = g_p_mms_bcc;
  1833. while(plist->p_next)
  1834. {
  1835. strcat((char *)phone_list,(const char *)(plist->m_address)); 
  1836. strcat((char *)phone_list,",");
  1837. plist = plist->p_next;
  1838. }
  1839. strcat((char *)phone_list,(const char *)(plist->m_address)); // xuelianb modify[2005-11-08]
  1840. }
  1841. plist = NULL;
  1842. if (g_p_mms_bcc_group)
  1843. {
  1844. if (g_p_mms_bcc_group->cur_group)
  1845. {
  1846. plist = g_p_mms_bcc_group->cur_group;
  1847. if (g_p_mms_bcc)
  1848. {
  1849. strcat((char *)phone_list,",");
  1850. }
  1851. while(plist->p_next)
  1852. {
  1853. strcat((char *)phone_list,(const char *)(plist->m_address)); 
  1854. strcat((char *)phone_list,",");
  1855. plist = plist->p_next;
  1856. }
  1857. strcat((char *)phone_list,(const char *)(plist->m_address)); // xuelianb modify[2005-11-08]
  1858. }
  1859. }
  1860. // SCI_TRACE_LOW("FNH bcc phone_list = %s",phone_list);
  1861. MMS_SetMmsHeadField(pMms_Doc, MMS_BCC, (long)0, (char *)phone_list);
  1862. if (phone_list)
  1863. {
  1864. cms_free(phone_list);
  1865. phone_list = NULL;
  1866. }
  1867. SCI_TRACE_LOW("FNH set bcc ok");
  1868. }
  1869. MMS_SetMmsHeadField(pMms_Doc, MMS_MESSAGE_CLASS, (long)MMS_MESSAGE_CLASS_TYPE_PERSONAL, (char *)0);
  1870. SCI_TRACE_BUF("FNH before sendmmshead g_p_mms_subject = %x",g_p_mms_subject,10);
  1871. MMS_SetMmsHeadField(pMms_Doc, MMS_SUBJECT, (long)0, (char*)g_p_mms_subject);//设置主题
  1872. if (g_nv_setting_mirror.anonymous == MMS_MSG_SETTINGS_ON)//匿名发送
  1873. {
  1874. MMS_SetMmsHeadField(pMms_Doc, MMS_SENDER_VISIBILITY,(long)MMS_SENDER_VISIBILITY_HIDE, (char *)0);
  1875. }
  1876. else
  1877. {
  1878. MMS_SetMmsHeadField(pMms_Doc, MMS_SENDER_VISIBILITY,(long)MMS_SENDER_VISIBILITY_SHOW, (char *)0);
  1879. }
  1880. if (g_nv_setting_mirror.prior == MMS_MSG_SETTINGS_PRIORITY_LOW)
  1881. {
  1882. MMS_SetMmsHeadField(pMms_Doc, MMS_PRIORITY, (long)MMS_PRIORITY_VALUE_LOW, (char *)0);
  1883. }
  1884. else if (g_nv_setting_mirror.prior == MMS_MSG_SETTINGS_PRIORITY_NORMAL)
  1885. {
  1886. MMS_SetMmsHeadField(pMms_Doc, MMS_PRIORITY, (long)MMS_PRIORITY_VALUE_NORMAL, (char *)0);
  1887. }
  1888. else
  1889. {
  1890. MMS_SetMmsHeadField(pMms_Doc, MMS_PRIORITY, (long)MMS_PRIORITY_VALUE_HIGH, (char *)0);
  1891. }
  1892. if (g_nv_setting_mirror.delivery_rpt == MMS_MSG_SETTINGS_ON)
  1893. {
  1894. MMS_SetMmsHeadField(pMms_Doc, MMS_DELIVERY_REPORT, (long)MMS_DELIVERY_REPORT_YES, (char *)0);
  1895. }
  1896. else
  1897. {
  1898. MMS_SetMmsHeadField(pMms_Doc, MMS_DELIVERY_REPORT, (long)MMS_DELIVERY_REPORT_NO, (char *)0);
  1899. }
  1900. SCI_TRACE_LOW("SEND MMS SET READRPT IS %d",g_nv_setting_mirror.read_rpt);
  1901. if (g_nv_setting_mirror.read_rpt== MMS_MSG_SETTINGS_ON)
  1902. {
  1903. MMS_SetMmsHeadField(pMms_Doc, MMS_READ_REPORT, (long)MMS_READ_REPORT_YES, (char *)0);
  1904. }
  1905. else
  1906. {
  1907. MMS_SetMmsHeadField(pMms_Doc, MMS_READ_REPORT, (long)MMS_READ_REPORT_NO, (char *)0);
  1908. }//modify liangliu 2005-12-28 for readrpt.
  1909. if (g_nv_setting_mirror.valid_period == MMS_MSG_VALID_PERIOD_12_HOUR)
  1910. {
  1911. // expire = MMIMMS_Get_Cur_Second();
  1912. // SCI_TRACE_LOW("FNH expire = %ld",expire);
  1913. expire = 0;
  1914. expire = expire + (3600 * 12);// - 8*3600;
  1915. SCI_TRACE_LOW("FNH expire = %ld",expire);
  1916. MMS_SetMmsHeadField(pMms_Doc, MMS_EXPIRY, (long)expire, (char *)0);
  1917. }
  1918. else if (g_nv_setting_mirror.valid_period == MMS_MSG_VALID_PERIOD_1_DAY)
  1919. {
  1920. // expire = MMIMMS_Get_Cur_Second();
  1921. // SCI_TRACE_LOW("FNH expire = %ld",expire);
  1922. expire = 0;
  1923. expire = expire + (3600 * 24) ;//- 8*3600;
  1924. SCI_TRACE_LOW("FNH expire = %ld",expire);
  1925. MMS_SetMmsHeadField(pMms_Doc, MMS_EXPIRY, (long)expire, (char *)0);
  1926. }
  1927. else if (g_nv_setting_mirror.valid_period == MMS_MSG_VALID_PERIOD_1_WEEK)
  1928. {
  1929. // expire = MMIMMS_Get_Cur_Second();
  1930. // SCI_TRACE_LOW("FNH expire = %ld",expire);
  1931. expire = 0;
  1932. expire = expire + (3600 * 24*7);// - 8*3600;
  1933. SCI_TRACE_LOW("FNH expire = %ld",expire);
  1934. MMS_SetMmsHeadField(pMms_Doc, MMS_EXPIRY, (long)expire, (char *)0);
  1935. }
  1936. if (g_set_date.year != 0)
  1937. {
  1938. long cursecond = 0;
  1939. cursecond = MMI_Tm2Second(0,g_set_date.minute,g_set_date.hour,g_set_date.day,g_set_date.month,g_set_date.year);
  1940. SCI_TRACE_LOW("FNH set date cursecond = %ld",cursecond); //这时得到的秒数是从2000年开始的
  1941. cursecond = cursecond + (365*23 +366*7)*24*3600 - 8*3600; //标准时间应该是从1970年开始计算,并且要减去东八区的差额秒数
  1942. SCI_TRACE_LOW("FNH set date cursecond = %ld",cursecond);
  1943. MMS_SetMmsHeadField(pMms_Doc,MMS_DELIVERY_TIME,(long)cursecond,(char *)0);
  1944. SCI_MEMSET(&g_set_date,0,sizeof(MMS_SEND_ONTIME_TIME));
  1945. }
  1946. //end of set head field
  1947. SCI_TRACE_LOW("FNH start of MMS_EncodeMms");
  1948. if(!MMS_EncodeMms(pMms_Doc))
  1949. {
  1950. SCI_TRACE_LOW("FNH error:MMS_EncodeMms failed");
  1951. if (pMms_Doc)
  1952. {
  1953. MMS_DeleteMms(pMms_Doc);
  1954. pMms_Doc = NULL;
  1955. }
  1956. if (phone_list)
  1957. {
  1958. mms_Free(phone_list);
  1959. phone_list = NULL;
  1960. }
  1961. mmsf_Remove(fname);
  1962. return ;
  1963. }
  1964. //added by liangliu 2005-11-5 for sendbox 
  1965.     {
  1966. MMSHANDLE mmsdoc=0;
  1967. pMessageList  mlist =PNULL;
  1968. /* first: get new mms document */
  1969. mmsdoc = (MMSHANDLE)pMms_Doc;
  1970. if(mmsdoc==0)
  1971. {
  1972. SCI_TRACE_LOW("error:mmsdoc==0");
  1973. return ;
  1974. }
  1975. mlist = MMIMMS_GetMMSMessage(mmsdoc,1);
  1976. SCI_TRACE_LOW("FNH g_peditdoc->totalsize = %d",g_peditdoc->totalsize);
  1977. mlist->size = g_peditdoc->totalsize;
  1978. g_progressneedsize =g_peditdoc->totalsize;
  1979. SCI_TRACE_LOW("FNH mlist->size = %d",mlist->size);
  1980. MMIMMS_AddManagerList(folder,mlist);
  1981. if(folder_id ==SAVE_MMS_TO_DRAFTBOX)
  1982. {
  1983. MMIMMS_CreateSaveMMSWaitingWin();
  1984. g_savemmsstate = MMS_MSG_SAVEMMS_FOR_DRAFTSAVE;
  1985. MMIMMS_SaveMMS(g_pManager->draftfolder->currentmessage);
  1986. }
  1987. }
  1988. //added end
  1989. MMS_DeleteMms(pMms_Doc);
  1990. pMms_Doc = NULL; // xuelianb modify[2005-11-09]
  1991. }
  1992. /* ----------------------------------------------------------------------------
  1993. * Function 发送彩信: CmsSendMessage
  1994. * Purpose: 发送彩信
  1995. * Input:  发送状态
  1996. * Returns: void
  1997. * Author:nihongf@mobilesoft.com.cn
  1998. * ----------------------------------------------------------------------------*/ 
  1999. void CmsSendMessage(MMIMMS_SEND_MMS_STATUS sendstate)
  2000. {
  2001. MMS_CONFIG_SETTING  cfgset;
  2002. MMS_SEND_SETTING    sendset;
  2003. char fname[MMS_FILE_NAME_LEN];
  2004. SCI_TRACE_LOW("FNH IN sendMessage Before GetCurrentTime");
  2005. if (sendstate == SEND_NEW_MMS)
  2006. {
  2007. SaveMmsMessage(SAVE_MMS_TO_OUTBOX,fname);
  2008. }
  2009. else if (sendstate == SEND_OUTBOX_MMS)
  2010. {
  2011. SCI_STRCPY(fname,(char *)g_pManager->currentfolder->currentmessage->filename);
  2012. }
  2013. //开始发送
  2014.     MMS_Init();
  2015. cfgset.wap_gateway = (unsigned char *)g_nv_setting_mirror.gateway;
  2016. SCI_TRACE_LOW("FNH cfgset.wap_gateway = %s",cfgset.wap_gateway);
  2017. cfgset.mms_centery = (char *)g_nv_setting_mirror.centre_addr;
  2018. SCI_TRACE_LOW("FNH cfgset.mms_centery = %s",cfgset.mms_centery);
  2019. cfgset.wap_port = atoi((char *)g_nv_setting_mirror.port);
  2020. SCI_TRACE_LOW("FNH cfgset.wap_port = %d",cfgset.wap_port);
  2021.     SCI_TRACE_LOW(" FNH  Sending..............................");
  2022. if(!MMS_Machine_Config(&cfgset))
  2023.     {
  2024. SCI_TRACE_LOW("error:MMS_Machine_Config(&cfgset) failed");
  2025. return;
  2026.     }
  2027.     sendset.send_vfilename = fname;  
  2028.     sendset.conf_vfilename = (char*)"confirm.mms";
  2029.     if(!MMS_SendMms(&sendset,mms_lib_callback))
  2030.     {
  2031. SCI_TRACE_LOW("FNH error:mms send failed");
  2032. return;
  2033.     }
  2034. }
  2035. /* ----------------------------------------------------------------------------
  2036. * Function Name: MMIMMS_GetTotalSize
  2037. * Purpose:得到当前编辑彩信的资源大小
  2038. * Input:  T_VOID
  2039. * Returns:T_WORD
  2040. * Author:nihongf@mobilesoft.com.cn
  2041. * ----------------------------------------------------------------------------*/ 
  2042. T_WORD MMIMMS_GetTotalSize(T_VOID)
  2043. {
  2044. return g_peditdoc->totalsize;
  2045. }
  2046. /******************************************************************************
  2047.  * 函数定义: MMIMMS_ReadManagerInboxFile
  2048.  * 函数说明: 读取当前存储结构的文件
  2049.  * 参数说明: 空
  2050.  * 返回值: 空
  2051.  * 代码编写者: liangliu
  2052.  * 代码编写日期: 10/17/2005
  2053. ********************************************************************************/
  2054. void   MMIMMS_ReadManagerInboxFile(void)
  2055. {
  2056.     FFS_OVERLAPPED_T                 overlapped;
  2057. //    HFS  cur_hefs = FFS_INVALID_HANDLE;
  2058.     uint32                           size = 0;
  2059.     uint32  transmitted;
  2060.     FFS_READFILE_RESULT_T  *param_read_ptr =PNULL;
  2061. SCI_TRACE_LOW("MMIMMS_ReadManagerInboxFile IN -------");
  2062. FILE_CdMMSPath();
  2063. if(FILE_CheckExist((const char*)MANAGER_FLASH_INBOXNAME) == TRUE)
  2064. {
  2065. SCI_TRACE_LOW("fnh inbox.txt is exist!");
  2066. inboxfile_openstatus = FILE_Create((const char*)MANAGER_FLASH_INBOXNAME, FFS_MODE_READ|FFS_MODE_OPEN_EXISTING);
  2067. SCI_TRACE_LOW("fnh inboxfile_openstatus = %d",inboxfile_openstatus);
  2068.         if(FFS_INVALID_HANDLE != inboxfile_openstatus) 
  2069.         {
  2070. FFS_ERROR_E ffs_error = 0;
  2071. size = FFS_GetLength(g_filetype,inboxfile_openstatus);
  2072. if (size == 0)
  2073. {
  2074. SCI_TRACE_LOW("fnh read inbox size is zero!");
  2075. FFS_Close(g_filetype,inboxfile_openstatus);
  2076. inboxfile_openstatus = FFS_INVALID_HANDLE;
  2077. MMIMMS_ReadManagerOutboxFile();
  2078. return ;
  2079. }
  2080. param_read_ptr =(FFS_READFILE_RESULT_T *)cms_malloc(sizeof(FFS_READFILE_RESULT_T));
  2081. if (param_read_ptr == PNULL)
  2082. {
  2083. SCI_TRACE_LOW("fnh malloc param_read_ptr fail!");
  2084. FFS_Close(g_filetype,inboxfile_openstatus);
  2085. inboxfile_openstatus = FFS_INVALID_HANDLE;
  2086. MMIMMS_ReadManagerOutboxFile();
  2087. return ;
  2088. }
  2089. SCI_MEMSET(param_read_ptr, 0, sizeof(FFS_READFILE_RESULT_T));
  2090. param_read_ptr->hefs = inboxfile_openstatus;//传递的参数
  2091. param_read_ptr->buf_size = size;
  2092. SCI_TRACE_LOW("fnh size is %d",size);
  2093. param_read_ptr->buf_ptr = (uint8*)cms_malloc(param_read_ptr->buf_size);
  2094. if (param_read_ptr->buf_ptr == PNULL)
  2095. {
  2096. SCI_TRACE_LOW("fnh malloc param_read_ptr->buf_ptr fail!");
  2097. if (param_read_ptr != NULL)
  2098. {
  2099. cms_free(param_read_ptr);
  2100. param_read_ptr = NULL;
  2101. }
  2102. FFS_Close(g_filetype,inboxfile_openstatus);
  2103. inboxfile_openstatus = FFS_INVALID_HANDLE;
  2104. MMIMMS_ReadManagerOutboxFile();
  2105. return ;
  2106. }
  2107. overlapped.offset = 0;
  2108. overlapped.param = (FFS_PARAM)param_read_ptr; //free it in call back function
  2109.             overlapped.complete_route = MMIVC_CallBackReadManagerInboxFile;
  2110. ffs_error = FFS_Read(g_filetype,inboxfile_openstatus, 
  2111. param_read_ptr->buf_ptr,
  2112. param_read_ptr->buf_size, 
  2113. &transmitted, 
  2114. &overlapped);
  2115.             if( ( FFS_ERROR_IO_PENDING != ffs_error )&&(FFS_NO_ERROR != ffs_error))
  2116.             {
  2117. SCI_TRACE_LOW("FNH THE inbox FILE READ FAIL!");
  2118. FFS_Close(g_filetype,inboxfile_openstatus);
  2119. inboxfile_openstatus = FFS_INVALID_HANDLE;
  2120. if (param_read_ptr->buf_ptr!= NULL)
  2121. {
  2122. cms_free(param_read_ptr->buf_ptr);
  2123. param_read_ptr->buf_ptr = NULL;
  2124. }
  2125. if (param_read_ptr != NULL)
  2126. {
  2127. cms_free(param_read_ptr);
  2128. param_read_ptr = NULL;
  2129. }
  2130. MMIMMS_ReadManagerOutboxFile();
  2131. return ;
  2132.             }
  2133.         }
  2134.         else//打开文件失败
  2135.         {
  2136. SCI_TRACE_LOW("FNH THE inbox FILE IS failed!");
  2137. MMIMMS_ReadManagerOutboxFile();
  2138. return;
  2139.         }
  2140. }
  2141. else
  2142. {
  2143. SCI_TRACE_LOW("FNH THE inbox FILE IS not exist!");
  2144. MMIMMS_ReadManagerOutboxFile();
  2145. return;
  2146. }
  2147. }
  2148. /******************************************************************************
  2149.  * 函数定义: MMIMMS_ReadManagerOutboxFile
  2150.  * 函数说明: 读取发件箱的文件
  2151.  * 参数说明: 空
  2152.  * 返回值: 空
  2153.  * 代码编写者: liangliu
  2154.  * 代码编写日期: 10/17/2005
  2155. ********************************************************************************/
  2156. void MMIMMS_ReadManagerOutboxFile(void)
  2157. {
  2158. FFS_OVERLAPPED_T                 overlapped;
  2159.     HFS  cur_hefs = FFS_INVALID_HANDLE;
  2160.     uint32                           size = 0;
  2161.     uint32  transmitted;
  2162.     FFS_READFILE_RESULT_T  *param_read_ptr =PNULL;
  2163. SCI_TRACE_LOW("MMIMMS_ReadManagerOutboxFile IN -------");
  2164. FILE_CdMMSPath();
  2165. if(FILE_CheckExist((const char*)MANAGER_FLASH_OUTBOXNAME) == TRUE)
  2166. {
  2167. cur_hefs = FILE_Create((const char*)MANAGER_FLASH_OUTBOXNAME, FFS_MODE_READ|FFS_MODE_OPEN_EXISTING);
  2168.         if(FFS_INVALID_HANDLE != cur_hefs)
  2169.         {
  2170. FFS_ERROR_E ffs_error = 0;
  2171. size = FFS_GetLength(g_filetype,cur_hefs);
  2172. if (size == 0)
  2173. {
  2174. SCI_TRACE_LOW("fnh read outbox size is zero!");
  2175. FFS_Close(g_filetype,cur_hefs);
  2176. cur_hefs = FFS_INVALID_HANDLE ;
  2177. MMIMMS_ReadManagerSentboxFile();
  2178. return ;
  2179. }
  2180. param_read_ptr =(FFS_READFILE_RESULT_T *)cms_malloc(sizeof(FFS_READFILE_RESULT_T));
  2181. if (param_read_ptr == NULL)
  2182. {
  2183. SCI_TRACE_LOW("fnh param_read_ptr malloc is fail !");
  2184. FFS_Close(g_filetype,cur_hefs);
  2185. cur_hefs = FFS_INVALID_HANDLE;
  2186. MMIMMS_ReadManagerSentboxFile();
  2187. return;
  2188. }
  2189. SCI_MEMSET(param_read_ptr, 0, sizeof(FFS_READFILE_RESULT_T));
  2190. param_read_ptr->hefs = cur_hefs;//传递的参数
  2191. param_read_ptr->buf_size = size;
  2192. param_read_ptr->buf_ptr = (uint8*)cms_malloc(param_read_ptr->buf_size);
  2193. if (param_read_ptr->buf_ptr == NULL)
  2194. {
  2195. SCI_TRACE_LOW("FNH param_read_ptr->buf_ptr malloc is fail");
  2196. if (param_read_ptr != NULL)
  2197. {
  2198. cms_free(param_read_ptr);
  2199. param_read_ptr = NULL;
  2200. }
  2201. FFS_Close(g_filetype,cur_hefs);
  2202. cur_hefs = FFS_INVALID_HANDLE;
  2203. MMIMMS_ReadManagerSentboxFile();
  2204. return;
  2205. }
  2206. overlapped.offset = 0;
  2207. overlapped.param = (FFS_PARAM)param_read_ptr; //free it in call back function
  2208. overlapped.complete_route = MMIVC_CallBackReadManagerOutboxFile;
  2209. ffs_error = FFS_Read(g_filetype,cur_hefs, 
  2210. param_read_ptr->buf_ptr,
  2211. param_read_ptr->buf_size, 
  2212. &transmitted, 
  2213. &overlapped);         
  2214.             if(  (FFS_ERROR_IO_PENDING != ffs_error ) &&(FFS_NO_ERROR != ffs_error))
  2215.             {
  2216. SCI_TRACE_LOW("FNH read outbox file is read error");
  2217. FFS_Close(g_filetype,cur_hefs);
  2218. cur_hefs = FFS_INVALID_HANDLE;
  2219. if (param_read_ptr->buf_ptr != NULL)
  2220. {
  2221. cms_free(param_read_ptr->buf_ptr);
  2222. param_read_ptr->buf_ptr = NULL;
  2223. }
  2224. if (param_read_ptr != NULL)
  2225. {
  2226. cms_free(param_read_ptr);
  2227. param_read_ptr = NULL;
  2228. }
  2229. MMIMMS_ReadManagerSentboxFile();
  2230. return ;
  2231.             }
  2232.         }
  2233.         else//打开文件失败
  2234.         {
  2235. SCI_TRACE_LOW("FNH read outbox file is failed");
  2236. MMIMMS_ReadManagerSentboxFile();
  2237. return ;
  2238.         }
  2239. }
  2240. else
  2241. {
  2242. SCI_TRACE_LOW("FNH read outbox file is not exist");
  2243. MMIMMS_ReadManagerSentboxFile();
  2244. return;
  2245. }
  2246. }
  2247. /******************************************************************************
  2248.  * 函数定义: MMIMMS_ReadManagerSentboxFile
  2249.  * 函数说明: 读取已发信箱的文件
  2250.  * 参数说明: 空
  2251.  * 返回值: 空
  2252.  * 代码编写者: liangliu
  2253.  * 代码编写日期: 10/17/2005
  2254. ********************************************************************************/
  2255. void MMIMMS_ReadManagerSentboxFile(void)
  2256. {
  2257. FFS_OVERLAPPED_T                 overlapped;
  2258.     HFS  cur_hefs = FFS_INVALID_HANDLE;
  2259.     uint32                           size = 0;
  2260.     uint32  transmitted;
  2261.     FFS_READFILE_RESULT_T  *param_read_ptr =PNULL;
  2262. SCI_TRACE_LOW("MMIMMS_ReadManagerSentboxFile IN -------");
  2263. FILE_CdMMSPath();
  2264. if(FILE_CheckExist((const char*)MANAGER_FLASH_SENTBOXNAME) == TRUE)
  2265. {
  2266. cur_hefs = FILE_Create((const char*)MANAGER_FLASH_SENTBOXNAME, FFS_MODE_READ|FFS_MODE_OPEN_EXISTING);
  2267.         if(FFS_INVALID_HANDLE != cur_hefs)
  2268.         {
  2269. FFS_ERROR_E ffs_error = 0;
  2270. size = FFS_GetLength(g_filetype,cur_hefs);
  2271. if (size == 0)
  2272. {
  2273. SCI_TRACE_LOW("FNH read sentboxfile size is zero!");
  2274. FFS_Close(g_filetype,cur_hefs);
  2275. cur_hefs = FFS_INVALID_HANDLE;
  2276. MMIMMS_ReadManagerDraftboxFile();
  2277. return ;
  2278. }
  2279. param_read_ptr = (FFS_READFILE_RESULT_T *)cms_malloc(sizeof(FFS_READFILE_RESULT_T));
  2280. if (param_read_ptr == NULL)
  2281. {
  2282. SCI_TRACE_LOW("fnh param_read_ptr malloc fail");
  2283. FFS_Close(g_filetype,cur_hefs);
  2284. cur_hefs = FFS_INVALID_HANDLE;
  2285. MMIMMS_ReadManagerDraftboxFile();
  2286. return;
  2287. }
  2288. SCI_MEMSET(param_read_ptr, 0, sizeof(FFS_READFILE_RESULT_T));
  2289. param_read_ptr->hefs = cur_hefs;//传递的参数
  2290. param_read_ptr->buf_size = size;
  2291. param_read_ptr->buf_ptr = (uint8*)cms_malloc(param_read_ptr->buf_size);
  2292. if (param_read_ptr->buf_ptr == NULL)
  2293. {
  2294. SCI_TRACE_LOW("FNH param_read_ptr->buf_ptr malloc fail");
  2295. if (param_read_ptr != NULL)
  2296. {
  2297. cms_free(param_read_ptr);
  2298. param_read_ptr = NULL;
  2299. }
  2300. FFS_Close(g_filetype,cur_hefs);
  2301. cur_hefs = FFS_INVALID_HANDLE;
  2302. MMIMMS_ReadManagerDraftboxFile();
  2303. return ;
  2304. }
  2305. overlapped.offset = 0;
  2306. overlapped.param = (FFS_PARAM)param_read_ptr; //free it in call back function
  2307. overlapped.complete_route = MMIVC_CallBackReadManagerSentboxFile;
  2308. ffs_error = FFS_Read(g_filetype,cur_hefs, 
  2309. param_read_ptr->buf_ptr,
  2310. param_read_ptr->buf_size, 
  2311. &transmitted, 
  2312. &overlapped);
  2313.             if(  (FFS_ERROR_IO_PENDING != ffs_error ) &&(FFS_NO_ERROR != ffs_error))
  2314.             {
  2315. FFS_Close(g_filetype,cur_hefs);
  2316. cur_hefs = FFS_INVALID_HANDLE;
  2317. if (param_read_ptr->buf_ptr != NULL)
  2318. {
  2319. cms_free(param_read_ptr->buf_ptr);
  2320. param_read_ptr->buf_ptr = NULL;
  2321. }
  2322. if (param_read_ptr != NULL)
  2323. {
  2324. cms_free(param_read_ptr);
  2325. param_read_ptr = NULL;
  2326. }
  2327. SCI_TRACE_LOW("fnh read sentbox file is empty");
  2328. MMIMMS_ReadManagerDraftboxFile();
  2329. return ;
  2330.             }
  2331.         }
  2332.         else//打开文件失败
  2333.         {
  2334. SCI_TRACE_LOW("fnh read sentbox file is failed");
  2335. MMIMMS_ReadManagerDraftboxFile();
  2336. return;
  2337.         }
  2338. }
  2339. else
  2340. {
  2341. SCI_TRACE_LOW("fnh read sentbox file is not exist");
  2342. MMIMMS_ReadManagerDraftboxFile();
  2343. return;
  2344. }
  2345. }
  2346. /******************************************************************************
  2347.  * 函数定义: MMIMMS_ReadManagerDraftboxFile
  2348.  * 函数说明: 读取草稿箱的文件
  2349.  * 参数说明: 空
  2350.  * 返回值: 空
  2351.  * 代码编写者: liangliu
  2352.  * 代码编写日期: 10/17/2005
  2353. ********************************************************************************/
  2354. void MMIMMS_ReadManagerDraftboxFile(void)
  2355. {
  2356.     FFS_OVERLAPPED_T                 overlapped;
  2357.     HFS  cur_hefs = FFS_INVALID_HANDLE;
  2358.     uint32                           size = 0;
  2359.     uint32  transmitted;
  2360.     FFS_READFILE_RESULT_T *param_read_ptr =PNULL;
  2361. SCI_TRACE_LOW("MMIMMS_ReadManagerDraftboxFile IN -------");
  2362. FILE_CdMMSPath();
  2363. if(FILE_CheckExist((const char*)MANAGER_FLASH_DRAFTBOXNAME) == TRUE)
  2364. {
  2365. cur_hefs = FILE_Create((const char*)MANAGER_FLASH_DRAFTBOXNAME, FFS_MODE_READ|FFS_MODE_OPEN_EXISTING);
  2366.         if(FFS_INVALID_HANDLE != cur_hefs)
  2367.         {
  2368. FFS_ERROR_E ffs_error = 0;
  2369. size = FFS_GetLength(g_filetype,cur_hefs);
  2370. if (size == 0)
  2371. {
  2372. SCI_TRACE_LOW("fnh read draftboxfile is zero");
  2373. FFS_Close(g_filetype,cur_hefs);
  2374. cur_hefs = FFS_INVALID_HANDLE;
  2375. MMK_PostMsg(VIRTUAL_WIN_ID, MSG_MANAGERFILE_READ_OK, PNULL, PNULL);
  2376. return ;
  2377. }
  2378. param_read_ptr = (FFS_READFILE_RESULT_T *)cms_malloc(sizeof(FFS_READFILE_RESULT_T));
  2379. if (param_read_ptr == NULL)
  2380. {
  2381. SCI_TRACE_LOW("fnh param_read_ptr malloc fail");
  2382. FFS_Close(g_filetype,cur_hefs);
  2383. cur_hefs = FFS_INVALID_HANDLE;
  2384. MMK_PostMsg(VIRTUAL_WIN_ID,MSG_MANAGERFILE_READ_OK,PNULL,PNULL);
  2385. return;
  2386. }
  2387. SCI_MEMSET(param_read_ptr, 0, sizeof(FFS_READFILE_RESULT_T));
  2388. param_read_ptr->hefs = cur_hefs;//传递的参数
  2389. param_read_ptr->buf_size = size;
  2390. param_read_ptr->buf_ptr = (uint8*)cms_malloc(param_read_ptr->buf_size);
  2391. if (param_read_ptr->buf_ptr == NULL)
  2392. {
  2393. SCI_TRACE_LOW("fnh param_read_ptr->buf_ptf malloc fail");
  2394. FFS_Close(g_filetype,cur_hefs);
  2395. cur_hefs = FFS_INVALID_HANDLE;
  2396. if (param_read_ptr != NULL)
  2397. {
  2398. cms_free(param_read_ptr);
  2399. param_read_ptr = NULL;
  2400. }
  2401. MMK_PostMsg(VIRTUAL_WIN_ID,MSG_MANAGERFILE_READ_OK,PNULL,PNULL);
  2402. return;
  2403. }
  2404. overlapped.offset = 0;
  2405. overlapped.param = (FFS_PARAM)param_read_ptr; //free it in call back function
  2406. overlapped.complete_route = MMIVC_CallBackReadManagerDraftboxFile;
  2407. ffs_error = FFS_Read(g_filetype,cur_hefs, 
  2408. param_read_ptr->buf_ptr,
  2409. param_read_ptr->buf_size, 
  2410. &transmitted, 
  2411. &overlapped);
  2412.             if( ( FFS_ERROR_IO_PENDING != ffs_error )&&(FFS_NO_ERROR != ffs_error))
  2413.             {
  2414. SCI_TRACE_LOW("FNH read draftbox is empty");
  2415. FFS_Close(g_filetype,cur_hefs);
  2416. cur_hefs = NULL;
  2417. if (param_read_ptr->buf_ptr != NULL)
  2418. {
  2419. cms_free(param_read_ptr->buf_ptr);
  2420. param_read_ptr->buf_ptr = NULL;
  2421. }
  2422. if (param_read_ptr!= NULL)
  2423. {
  2424. cms_free(param_read_ptr);
  2425. param_read_ptr = NULL;
  2426. }
  2427. MMK_PostMsg(VIRTUAL_WIN_ID, MSG_MANAGERFILE_READ_OK, PNULL, PNULL);
  2428. return;
  2429.             }
  2430.         }
  2431.         else//打开文件失败
  2432.         {
  2433. SCI_TRACE_LOW("FNH read draftbox is failed");
  2434. MMK_PostMsg(VIRTUAL_WIN_ID, MSG_MANAGERFILE_READ_OK, PNULL, PNULL);
  2435. return;
  2436.         }
  2437. }
  2438. else
  2439. {
  2440. SCI_TRACE_LOW("FNH read draftbox is not exist");
  2441. MMK_PostMsg(VIRTUAL_WIN_ID, MSG_MANAGERFILE_READ_OK, PNULL, PNULL);
  2442. return;
  2443. }
  2444. }
  2445. /* ----------------------------------------------------------------------------
  2446. * Function Name: MMIMMS_AddManagerList
  2447. * Purpose:在指定的目录上增加list信息
  2448. * Input:  folder 当前操作的文件夹,mlist 增加的信息
  2449. * Returns: 
  2450. * Author:nihongf@mobilesoft.com.cn
  2451. * ----------------------------------------------------------------------------*/ 
  2452. void MMIMMS_AddManagerList(pMessageFolder folder, pMessageList mlist)
  2453. {
  2454. if(folder == NULL)
  2455. {
  2456. SCI_TRACE_LOW("MMIMMS_AddManagerList error:folder is NULL");
  2457. return;
  2458. }
  2459. /* temp code start */
  2460. if(folder->messagenumber == 0)
  2461. {
  2462. if(folder->root)
  2463. {
  2464. folder->root = NULL;
  2465. }
  2466. }
  2467. if(folder->root == mlist)
  2468. {
  2469. return;
  2470. }
  2471. mlist->next = folder->root;
  2472. folder->root = mlist;
  2473. /* reset current message in send folder */
  2474. folder->currentmessage = mlist;
  2475. SCI_TRACE_LOW("fnh before messagenumber add");
  2476. folder->messagenumber++;
  2477. }
  2478. /******************************************************************************
  2479.  * 函数定义: MMIMMS_AddaautoMMSList
  2480.  * 函数说明: 在指定的目录上增加list信息
  2481.  * 参数说明:传递进来的结构已经分配了空间。
  2482.  * 返回值: 空
  2483.  * 代码编写者: liangliu@palmsource.com
  2484.  * 代码编写日期: 4/27/2006
  2485. ********************************************************************************/
  2486. void MMIMMS_AddAutodownList(pAutoDownloadMMSList mlist)
  2487. {
  2488. pAutoDownloadMMSList  autolist = PNULL;
  2489. if(g_pautoDownloadMMSRoot == PNULL)
  2490. {
  2491. g_pautoDownloadMMSRoot = mlist;
  2492. }else
  2493. {
  2494. autolist = g_pautoDownloadMMSRoot;
  2495. while(autolist->next != PNULL)
  2496. {
  2497. autolist = autolist->next;
  2498. }
  2499. autolist->next = mlist;
  2500. }
  2501. g_num_autodw ++;
  2502. SCI_TRACE_LOW("FNH MMIMMS_AddAutodownList g_num_autodw = %d",g_num_autodw);
  2503. }
  2504. /* ----------------------------------------------------------------------------
  2505. * Function Name: MMIMMS_FreeAutodownList
  2506. * Purpose: 释放整个自动签名链表
  2507. * Input:  void
  2508. * Returns: void
  2509. * Author:nihongf@mobilesoft.com.cn
  2510. * ----------------------------------------------------------------------------*/ 
  2511. void MMIMMS_FreeAutodownList(void)
  2512. {
  2513. pAutoDownloadMMSList  autolist = PNULL;
  2514. uint16 i =0;
  2515.     if(g_pautoDownloadMMSRoot)
  2516. {
  2517. for(autolist = g_pautoDownloadMMSRoot; g_pautoDownloadMMSRoot; )
  2518. {
  2519. g_pautoDownloadMMSRoot = g_pautoDownloadMMSRoot->next;
  2520. cms_free(autolist);
  2521. autolist = PNULL;
  2522. i++;
  2523. }
  2524. g_pautoDownloadMMSRoot = PNULL;
  2525.     }  
  2526. g_num_autodw = 0;
  2527. SCI_TRACE_LOW("FNH FreeAutodownList i = %d",i);
  2528. SCI_TRACE_LOW("FNH FreeAutodownList g_num_autodw = %d",g_num_autodw);
  2529. }
  2530. /* ----------------------------------------------------------------------------
  2531. * Function Name: MMIMMS_DeleteAutodownList
  2532. * Purpose: 删除自动签名链表的某一接点
  2533. * Input:  void
  2534. * Returns: void
  2535. * Author:nihongf@mobilesoft.com.cn
  2536. * ----------------------------------------------------------------------------*/ 
  2537. void MMIMMS_DeleteAutodownList(void)
  2538. {
  2539.    pAutoDownloadMMSList  curautolist = PNULL;
  2540.    pAutoDownloadMMSList  templist = PNULL;
  2541. SCI_TRACE_LOW("FNH IN MMIMMS_DeletAutodownList!");
  2542. SCI_TRACE_LOW("FNH g_pautoDownloadMMSRoot = %d",g_pautoDownloadMMSRoot);
  2543. SCI_TRACE_LOW("FNH g_num_autodw = %d",g_num_autodw);
  2544.    if (g_pautoDownloadMMSRoot)
  2545.    {
  2546.    if ((g_pautoDownloadMMSRoot->autolist->state == 1) || (g_pautoDownloadMMSRoot->autolist->needautodw == 0))
  2547.    {
  2548.    curautolist = g_pautoDownloadMMSRoot;
  2549.    g_pautoDownloadMMSRoot = g_pautoDownloadMMSRoot->next;
  2550.    cms_free(curautolist);
  2551.    curautolist = PNULL;
  2552.    g_num_autodw --;
  2553.    SCI_TRACE_LOW("FNH g_num_autodw = %d",g_num_autodw);
  2554.    }
  2555.    else
  2556.    {
  2557.    curautolist = g_pautoDownloadMMSRoot;
  2558.    templist = curautolist->next;
  2559.    while(templist)
  2560.    {
  2561.    if ((templist->autolist->state == 1) || (templist->autolist->needautodw == 0))
  2562.    {
  2563.    curautolist->next = templist->next;
  2564.    cms_free(templist);
  2565.    templist = PNULL;
  2566.    g_num_autodw --;
  2567.    SCI_TRACE_LOW("FNH g_num_autodw = %d",g_num_autodw);
  2568.    break;
  2569.    }
  2570.    curautolist = templist;
  2571.    templist = templist->next;
  2572.    }
  2573.    }
  2574.    }
  2575. SCI_TRACE_LOW("FNH out MMIMMS_DeletAutodownList!");
  2576. }
  2577. /******************************************************************************
  2578.  * 函数定义: MMIMMS_ReadManagerInboxFile
  2579.  * 函数说明: 读取收件箱文件的回调处理
  2580.  * 参数说明: 空
  2581.  * 返回值: 空
  2582.  * 代码编写者: liangliu
  2583.  * 代码编写日期: 10/17/2005
  2584. ********************************************************************************/
  2585. LOCAL void MMIVC_CallBackReadManagerInboxFile(
  2586. FFS_ERROR_E a, 
  2587. FFS_RESULT result, 
  2588. FFS_PARAM param
  2589. )
  2590. {
  2591. FFS_READFILE_RESULT_T *efs_param_ptr = PNULL;
  2592. FFS_READFILE_RESULT_T         efs_result;
  2593. //init
  2594. SCI_MEMSET(&efs_result, 0, sizeof(efs_result));
  2595. efs_param_ptr = (FFS_READFILE_RESULT_T *)param;
  2596. //post message
  2597. efs_result.hefs = efs_param_ptr->hefs;
  2598. efs_result.buf_ptr = efs_param_ptr->buf_ptr;
  2599. efs_result.buf_size     = efs_param_ptr->buf_size;
  2600. if(efs_param_ptr != NULL)
  2601. {
  2602. cms_free(efs_param_ptr);
  2603. efs_param_ptr = NULL;
  2604. }
  2605. MMK_PostMsg(VIRTUAL_WIN_ID, MSG_MANAGERFILEREAD_INBOX_OK, &efs_result, sizeof(FFS_READFILE_RESULT_T));
  2606. MMI_TriggerMMITask();
  2607. }
  2608. /******************************************************************************
  2609.  * 函数定义: MMIMMS_ReadManagerInboxFile
  2610.  * 函数说明: 读取发件箱文件的回调处理
  2611.  * 参数说明: 空
  2612.  * 返回值: 空
  2613.  * 代码编写者: liangliu
  2614.  * 代码编写日期: 10/17/2005
  2615. ********************************************************************************/
  2616. LOCAL void MMIVC_CallBackReadManagerOutboxFile(
  2617.  FFS_ERROR_E a, 
  2618.  FFS_RESULT result, 
  2619.  FFS_PARAM param
  2620.  )
  2621. {
  2622. FFS_READFILE_RESULT_T *efs_param_ptr = PNULL;
  2623. FFS_READFILE_RESULT_T         efs_result;
  2624. //init
  2625. SCI_MEMSET(&efs_result, 0, sizeof(efs_result));
  2626. efs_param_ptr = (FFS_READFILE_RESULT_T *)param;
  2627. efs_result.hefs = efs_param_ptr->hefs;
  2628. efs_result.buf_ptr = efs_param_ptr->buf_ptr;
  2629. efs_result.buf_size     = efs_param_ptr->buf_size;
  2630. if(efs_param_ptr != NULL)
  2631. {
  2632. cms_free(efs_param_ptr);
  2633. efs_param_ptr = NULL;
  2634. }
  2635. MMK_PostMsg(VIRTUAL_WIN_ID, MSG_MANAGERFILEREAD_OUTBOX_OK,&efs_result, sizeof(FFS_READFILE_RESULT_T));
  2636. MMI_TriggerMMITask();
  2637. }
  2638. /* ----------------------------------------------------------------------------
  2639. * Function Name: MMIVC_CallBackReadManagerSentboxFile
  2640. * Purpose: 读取已发信箱的回调函数
  2641. * Input:  FFS_ERROR_E a, 
  2642.   FFS_RESULT result, 
  2643.   FFS_PARAM param
  2644. * Returns: void
  2645. * Author:nihongf@mobilesoft.com.cn
  2646. * ----------------------------------------------------------------------------*/ 
  2647. LOCAL void MMIVC_CallBackReadManagerSentboxFile(
  2648.   FFS_ERROR_E a, 
  2649.   FFS_RESULT result, 
  2650.   FFS_PARAM param
  2651.   )
  2652. {
  2653. FFS_READFILE_RESULT_T *efs_param_ptr = PNULL;
  2654. FFS_READFILE_RESULT_T         efs_result;
  2655. SCI_MEMSET(&efs_result, 0, sizeof(efs_result));
  2656. efs_param_ptr = (FFS_READFILE_RESULT_T *)param;
  2657. efs_result.hefs = efs_param_ptr->hefs;
  2658. efs_result.buf_ptr = efs_param_ptr->buf_ptr;
  2659. efs_result.buf_size     = efs_param_ptr->buf_size;
  2660. if(efs_param_ptr != NULL)
  2661. {
  2662. cms_free(efs_param_ptr);
  2663. efs_param_ptr = NULL;
  2664. }
  2665. MMK_PostMsg(VIRTUAL_WIN_ID, MSG_MANAGERFILEREAD_SENTBOX_OK, &efs_result, sizeof(FFS_READFILE_RESULT_T));
  2666. MMI_TriggerMMITask();
  2667. }
  2668. /* ----------------------------------------------------------------------------
  2669. * Function Name: MMIVC_CallBackReadManagerDraftboxFile
  2670. * Purpose: 读取草稿信箱的回调函数
  2671. * Input:  FFS_ERROR_E a, 
  2672.   FFS_RESULT result, 
  2673.   FFS_PARAM param
  2674. * Returns: void
  2675. * Author:nihongf@mobilesoft.com.cn
  2676. * ----------------------------------------------------------------------------*/ 
  2677. LOCAL void MMIVC_CallBackReadManagerDraftboxFile(
  2678.    FFS_ERROR_E a, 
  2679.    FFS_RESULT result, 
  2680.    FFS_PARAM param
  2681.    )
  2682. {
  2683. FFS_READFILE_RESULT_T *efs_param_ptr = PNULL;
  2684. FFS_READFILE_RESULT_T         efs_result;
  2685. //init
  2686. SCI_MEMSET(&efs_result, 0, sizeof(efs_result));
  2687. efs_param_ptr = (FFS_READFILE_RESULT_T *)param;
  2688. efs_result.hefs = efs_param_ptr->hefs;
  2689. efs_result.buf_ptr = efs_param_ptr->buf_ptr;
  2690. efs_result.buf_size = efs_param_ptr->buf_size;
  2691. if(efs_param_ptr != NULL)
  2692. {
  2693. cms_free(efs_param_ptr);
  2694. efs_param_ptr = NULL;
  2695. }
  2696. MMK_PostMsg(VIRTUAL_WIN_ID, MSG_MANAGERFILEREAD_DRAFTBOX_OK, &efs_result, sizeof(FFS_READFILE_RESULT_T));
  2697. MMI_TriggerMMITask();
  2698. }
  2699. /* ----------------------------------------------------------------------------
  2700. * Function Name: MMIMMS_NetLinkFailed
  2701. * Purpose: 网络连接失败的处理
  2702. * Input:  void
  2703. * Returns: void
  2704. * Author:nihongf@mobilesoft.com.cn
  2705. * ----------------------------------------------------------------------------*/ 
  2706. PUBLIC void MMIMMS_NetLinkFailed(void)
  2707. {
  2708. if(g_issendingreadrpt == TRUE&&MMK_IsFocusWin(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID))
  2709. {
  2710. MMK_PostMsg(MMIMMS_SEND_MMSREADRPT_WAITING_WIN_ID,MSG_MMS_SENDED_FAILED,PNULL,PNULL);
  2711. }
  2712. else{
  2713. if(MMK_IsFocusWin(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID)||MMK_IsFocusWin(MMIMMS_SEND_MMS_WAITING_WIN_ID))
  2714. {
  2715. if(MMK_IsFocusWin(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID))
  2716. {
  2717. // MMK_CloseWin(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID);
  2718. SCI_TRACE_LOW("FNH NETLINKFAILED");
  2719. MMK_PostMsg(MMIMMS_DOWNLOAD_DOWNLOADING_WIN_ID,MSG_MMS_RECV_FAILED,PNULL,PNULL); //fnh modify [2006-07-25]
  2720. }else if(MMK_IsFocusWin(MMIMMS_SEND_MMS_WAITING_WIN_ID))
  2721. {
  2722. MMK_CloseWin(MMIMMS_SEND_MMS_WAITING_WIN_ID);            
  2723. }
  2724. PUBWIN_OpenPromptAlertWin(
  2725. PUBWIN_SOFTKEY_ONE, 
  2726. TXT_MMS_NET_FAILED,
  2727. IMAGE_PROMPT_ICON_ALERT, 
  2728. ALERT_TIMEOUT, 
  2729. PNULL
  2730. ); 
  2731. }
  2732.     }
  2733. }
  2734. /* ----------------------------------------------------------------------------
  2735. * Function Name: MMIMMS_HandleReadOK
  2736. * Purpose: 在虚拟窗口的处理函数中调用,处理读文件操作
  2737. * Input:  MMI_MESSAGE_ID_E  msg_id, 
  2738.   DPARAM param
  2739. * Returns: void
  2740. * Author:nihongf@mobilesoft.com.cn
  2741. * ----------------------------------------------------------------------------*/ 
  2742. PUBLIC void MMIMMS_HandleReadOK(MMI_MESSAGE_ID_E  msg_id, DPARAM param)
  2743. {
  2744. FILE_HANDLE      cmshandle = 0 ;
  2745. FFS_READFILE_RESULT_T * efs_result_ptr;
  2746. FFS_SAVEFILE_RESULT_T     * efs_writeresult_ptr;
  2747. switch(msg_id)
  2748. {
  2749. case MSG_MANAGERFILE_READ_OK:  //if read ffs file fail, then set it to default value
  2750. SCI_TRACE_LOW("init:MSG_MANAGERFILE_READ_OK");
  2751. MMIMMS_GetManagerDocument(ALL_BOX);
  2752. g_ismmsinit = TRUE;
  2753. break;
  2754.     case   MSG_MMS_CONFIGFILE_READ_OK:      //read first
  2755. efs_result_ptr = (FFS_READFILE_RESULT_T*)param;
  2756. FILE_Close(efs_result_ptr->hefs);
  2757. cmshandle = mmsf_Open((char*)MMSCONFIGFILE, "wb");
  2758. mmsf_Write((char*)efs_result_ptr->buf_ptr,efs_result_ptr->buf_size, 1, cmshandle);
  2759. mmsf_Close(cmshandle);
  2760. if(efs_result_ptr->buf_ptr != NULL)
  2761. {
  2762. cms_free(efs_result_ptr->buf_ptr);
  2763. efs_result_ptr->buf_ptr = NULL;
  2764. }
  2765. MMIMMS_ReadManagerInboxFile();
  2766. break;
  2767. case MSG_MANAGERFILEREAD_INBOX_OK:  //read second
  2768. SCI_TRACE_LOW("init:MSG_MANAGERFILEREAD_INBOX_OK");
  2769. efs_result_ptr = (FFS_READFILE_RESULT_T*)param;
  2770. FILE_Close(efs_result_ptr->hefs);
  2771. inboxfile_openstatus = FFS_INVALID_HANDLE;
  2772. cmshandle = mmsf_Open((char*)"\cmsinbox.cnf", "wb");
  2773. SCI_TRACE_LOW("FNH cmshandle = %d",cmshandle);
  2774. mmsf_Write((char*)efs_result_ptr->buf_ptr,efs_result_ptr->buf_size, 1, cmshandle);
  2775. mmsf_Close(cmshandle);
  2776. MMIMMS_GetManagerDocument(INBOX);
  2777. if(efs_result_ptr->buf_ptr != NULL)
  2778. {
  2779. cms_free(efs_result_ptr->buf_ptr);
  2780. efs_result_ptr->buf_ptr = NULL;
  2781. }
  2782. MMIMMS_ReadManagerOutboxFile();
  2783. break;
  2784. case MSG_MANAGERFILEREAD_OUTBOX_OK:  //read third
  2785. SCI_TRACE_LOW("init:MSG_MANAGERFILEREAD_OUTBOX_OK");
  2786. efs_result_ptr = (FFS_READFILE_RESULT_T*)param;
  2787. FILE_Close(efs_result_ptr->hefs);
  2788. cmshandle = mmsf_Open((char*)"\cmsoutbox.cnf", "wb");
  2789. mmsf_Write((char*)efs_result_ptr->buf_ptr,efs_result_ptr->buf_size, 1, cmshandle);
  2790. mmsf_Close(cmshandle);
  2791. MMIMMS_GetManagerDocument(OUTBOX);
  2792. if(efs_result_ptr->buf_ptr != NULL)
  2793. {
  2794. cms_free(efs_result_ptr->buf_ptr);
  2795. efs_result_ptr->buf_ptr = NULL;
  2796. }
  2797. MMIMMS_ReadManagerSentboxFile();
  2798. break;
  2799. case MSG_MANAGERFILEREAD_SENTBOX_OK:  //read four
  2800. SCI_TRACE_LOW("init:MSG_MANAGERFILEREAD_SENTBOX_OK");
  2801. efs_result_ptr = (FFS_READFILE_RESULT_T*)param;
  2802. FILE_Close(efs_result_ptr->hefs);
  2803. cmshandle = mmsf_Open((char*)"\cmssentbox.cnf", "wb");
  2804. mmsf_Write((char*)efs_result_ptr->buf_ptr,efs_result_ptr->buf_size, 1, cmshandle);
  2805. mmsf_Close(cmshandle);
  2806. MMIMMS_GetManagerDocument(SENTBOX);
  2807. if(efs_result_ptr->buf_ptr != NULL)
  2808. {
  2809. cms_free(efs_result_ptr->buf_ptr);
  2810. efs_result_ptr->buf_ptr = NULL;
  2811. }
  2812. MMIMMS_ReadManagerDraftboxFile();
  2813. break;
  2814. case MSG_MANAGERFILEREAD_DRAFTBOX_OK:  // read five
  2815. SCI_TRACE_LOW("init:MSG_MANAGERFILEREAD_DRAFTBOX_OK");
  2816. efs_result_ptr = (FFS_READFILE_RESULT_T*)param;
  2817. FILE_Close(efs_result_ptr->hefs);
  2818. cmshandle = mmsf_Open((char*)"\cmsdraftbox.cnf", "wb");
  2819. mmsf_Write((char*)efs_result_ptr->buf_ptr,efs_result_ptr->buf_size, 1, cmshandle);
  2820. mmsf_Close(cmshandle);
  2821. MMIMMS_GetManagerDocument(DRAFTBOX);
  2822. if(efs_result_ptr->buf_ptr != NULL)
  2823. {
  2824. cms_free(efs_result_ptr->buf_ptr);
  2825. efs_result_ptr->buf_ptr = NULL;
  2826. }
  2827. g_ismmsinit =TRUE;
  2828.         SCI_TRACE_LOW("INIT IS OK !!!");
  2829. break;
  2830. case MSG_MANAGERFILEWRITE_INBOX_OK:
  2831. efs_writeresult_ptr = (FFS_SAVEFILE_RESULT_T*)param;
  2832. FFS_Close(g_filetype, efs_writeresult_ptr->hefs);
  2833. inboxfile_openstatus = FFS_INVALID_HANDLE;
  2834. mmsf_Remove((char*)"\cmsinbox.cnf");
  2835. break;
  2836. case MSG_MANAGERFILEWRITE_OUTBOX_OK:
  2837. efs_writeresult_ptr = (FFS_SAVEFILE_RESULT_T*)param;
  2838. FFS_Close(g_filetype, efs_writeresult_ptr->hefs);
  2839. mmsf_Remove((char*)"\cmsoutbox.cnf" );
  2840.                 break;
  2841. case MSG_MANAGERFILEWRITE_SENTBOX_OK:
  2842. efs_writeresult_ptr = (FFS_SAVEFILE_RESULT_T*)param;
  2843. FFS_Close(g_filetype, efs_writeresult_ptr->hefs);
  2844. mmsf_Remove((char*)"\cmssentbox.cnf" );
  2845.                 break;
  2846. case MSG_MANAGERFILEWRITE_DRAFTBOX_OK:
  2847. efs_writeresult_ptr = (FFS_SAVEFILE_RESULT_T*)param;
  2848. FFS_Close(g_filetype, efs_writeresult_ptr->hefs);
  2849. mmsf_Remove((char*)"\cmsdraftbox.cnf" );
  2850. break;
  2851. case MSG_MMS_DELETEMANAGERINBOXOK:
  2852. break;
  2853. case MSG_MMS_DELETEMANAGERFILE_OK:
  2854.   break;
  2855. case MSG_MMS_VIDEO_SAVE_OK:
  2856. #ifdef HAVE_MPEG4
  2857. if (MMK_IsOpenWin(MMIMULTIM_DOWANLOAD_WAIT_WIN_ID)) //46351
  2858. {
  2859. MMK_CloseWin(MMIMULTIM_DOWANLOAD_WAIT_WIN_ID);
  2860. }
  2861. efs_writeresult_ptr = (FFS_SAVEFILE_RESULT_T*)param;
  2862. FFS_Close(efs_writeresult_ptr->dev_type, efs_writeresult_ptr->hefs);
  2863. if(efs_writeresult_ptr->write_result == SAVEFS_WRITE_SUCCEED)
  2864. {
  2865. /* if(efs_writeresult_ptr->buf_ptr != PNULL)
  2866. {
  2867. cms_free(efs_writeresult_ptr->buf_ptr);
  2868. efs_writeresult_ptr->buf_ptr = PNULL;
  2869. }
  2870. */ {
  2871. uint16 ucs2_name_arr[UCS2_NAME_MAX_LEN] = {0};
  2872. int ucs2_name_len = 0;
  2873. uint32     timevalue = 0 ;
  2874. ucs2_name_len = GUI_GB2UCS(ucs2_name_arr, (uint8 *)g_videoname_arr, strlen((char*)g_videoname_arr));
  2875. timevalue = MMI_GetFfsTime();
  2876. #ifdef MMI_APP_6800_PRJ
  2877. #else
  2878. MMIMPEG4_AddOne(
  2879. ucs2_name_arr,
  2880. ucs2_name_len,
  2881. efs_writeresult_ptr->dev_type,
  2882. efs_writeresult_ptr->buf_size,
  2883. 1,
  2884. timevalue
  2885. );
  2886. #endif
  2887. }
  2888. PUBWIN_OpenPromptAlertWin(
  2889. PUBWIN_SOFTKEY_ONE,
  2890. TXT_SUCCESS,
  2891. IMAGE_PROMPT_ICON_SUCCESS,
  2892. MMI_3SECONDS,
  2893. PNULL);
  2894. }else
  2895. {
  2896. PUBWIN_OpenPromptAlertWin(
  2897. PUBWIN_SOFTKEY_ONE,
  2898. TXT_ERROR,
  2899. IMAGE_PROMPT_ICON_FAIL,
  2900. MMI_3SECONDS,
  2901. PNULL);
  2902. }
  2903. #endif
  2904. break;
  2905. /* case MSG_MMS_SAVE_AUTO_SIGN_OK:
  2906. SCI_TRACE_LOW("in MSG_MMS_SAVE_AUTO_SIGN_OK");
  2907. if (MMK_IsOpenWin(MAIN_PROMPTALERT_WIN_ID)) //46351
  2908. {
  2909. MMK_CloseWin(MAIN_PROMPTALERT_WIN_ID);
  2910. }
  2911. efs_writeresult_ptr = (FFS_SAVEFILE_RESULT_T*)param;
  2912. SCI_TRACE_LOW("fnh write_result = %d",efs_writeresult_ptr->write_result);
  2913. if(efs_writeresult_ptr->write_result == SAVEFS_WRITE_SUCCEED)
  2914. {
  2915. FFS_Close(g_filetype, efs_writeresult_ptr->hefs);
  2916. if(efs_writeresult_ptr->buf_ptr != PNULL)
  2917. {
  2918. cms_free(efs_writeresult_ptr->buf_ptr);
  2919. efs_writeresult_ptr->buf_ptr = PNULL;
  2920. }
  2921. PUBWIN_OpenPromptAlertWin(
  2922. PUBWIN_SOFTKEY_ONE,
  2923. TXT_SUCCESS,
  2924. IMAGE_PROMPT_ICON_SUCCESS,
  2925. MMI_3SECONDS,
  2926. PNULL);
  2927. }else
  2928. {
  2929. FFS_Close(g_filetype, efs_writeresult_ptr->hefs);
  2930. PUBWIN_OpenPromptAlertWin(
  2931. PUBWIN_SOFTKEY_ONE,
  2932. TXT_ERROR,
  2933. IMAGE_PROMPT_ICON_SUCCESS,
  2934. MMI_3SECONDS,
  2935. PNULL);
  2936. }
  2937. break;
  2938. */ case MSG_MMS_MP3_SAVE_OK:
  2939. #ifdef HAVE_MP3
  2940.  efs_writeresult_ptr = (FFS_SAVEFILE_RESULT_T*)param;
  2941. FFS_Close(efs_writeresult_ptr->dev_type, efs_writeresult_ptr->hefs);
  2942. if (MMK_IsOpenWin(MMIMULTIM_DOWANLOAD_WAIT_WIN_ID)) //46351
  2943. {
  2944. MMK_CloseWin(MMIMULTIM_DOWANLOAD_WAIT_WIN_ID);
  2945. }
  2946. if(efs_writeresult_ptr->write_result == SAVEFS_WRITE_SUCCEED)
  2947. {
  2948. {
  2949. uint16 ucs2_name_arr[UCS2_NAME_MAX_LEN] = {0};
  2950. int ucs2_name_len = 0;
  2951. uint32     timevalue = 0 ;
  2952. ucs2_name_len = GUI_GB2UCS(ucs2_name_arr, (uint8 *)g_mp3name_arr, strlen((char*)g_mp3name_arr));
  2953. timevalue = MMI_GetFfsTime();
  2954. MMIMP3_AddOne(
  2955. ucs2_name_arr,
  2956. ucs2_name_len,
  2957. efs_writeresult_ptr->dev_type,
  2958. efs_writeresult_ptr->buf_size,
  2959. 1,
  2960. timevalue
  2961. );
  2962. }
  2963. PUBWIN_OpenPromptAlertWin(
  2964. PUBWIN_SOFTKEY_ONE,
  2965. TXT_SUCCESS,
  2966. IMAGE_PROMPT_ICON_SUCCESS,
  2967. MMI_3SECONDS,
  2968. PNULL);
  2969. }
  2970. else
  2971. {
  2972. PUBWIN_OpenPromptAlertWin(
  2973. PUBWIN_SOFTKEY_ONE,
  2974. TXT_ERROR,
  2975. IMAGE_PROMPT_ICON_FAIL,
  2976. MMI_3SECONDS,
  2977. PNULL);
  2978. }
  2979. MMK_CloseWin(MMIMMS_DOWNLOAD_MP3_NAME_WIN_ID);
  2980. #endif
  2981. break;
  2982. default:
  2983. break;
  2984. }
  2985. }
  2986. /*==============================================================
  2987. *   函数名: MMIMMS_SaveManagerInboxFile
  2988. *   输入: 空
  2989. *   输出: void
  2990. *   功能描述: 存储相应涉及收件箱的虚拟文件到flash资源。
  2991.                                    因为为异步文件系统,目前顺序是:收件箱;发件箱;
  2992.                                    已发邮件;草稿箱。
  2993. *   代码编写者: liangliu
  2994. *   代码编写日期: 10/28/2005
  2995. *   修改原因:
  2996. *   修改人员:
  2997. *   修改日期:
  2998.  ==============================================================*/
  2999. void MMIMMS_SaveManagerInboxFile(MMS_SAVE_INBOX_STATUS saveinboxfilestate)
  3000. {
  3001. //FILE_HANDLE   cmshandle = 0;
  3002. uint8*   tempbuf = NULL;
  3003. //int           curroffset;
  3004. uint32        filelen = 0;
  3005. //static HFS s_hefs = FFS_INVALID_HANDLE;
  3006. // HFS cur_hefs = FFS_INVALID_HANDLE;
  3007. //uint32 file_size = 0;
  3008. //uint16         *file_name =NULL;
  3009. //uint16          *dir_name =PNULL;
  3010. //uint16          unicodelong  = 0 ;
  3011. //MMI_STRING_T    prompt_str;
  3012. FFS_ERROR_E efs_error;
  3013. FFS_OVERLAPPED_T overlapped;
  3014. uint32 transmit;
  3015. //uint8 *efs_buf_ptr = PNULL;
  3016. FFS_SAVEFILE_RESULT_T *param_save_ptr = PNULL;
  3017. g_inboxneedsave = FALSE;
  3018. SCI_TRACE_LOW("MMIMMS_SaveManagerInboxFile IN ------------");
  3019. mmsf_GetConstFileData((char *)"\cmsinbox.cnf",(char **)&tempbuf,(int *)&filelen);
  3020. SCI_TRACE_LOW("fnh filelen = %d",filelen);
  3021. SCI_TRACE_LOW("fnh tempbuf len = %d",SCI_STRLEN((char *)tempbuf));
  3022. if (filelen > 0)
  3023. {
  3024. SCI_TRACE_LOW("here the cmshandle is >0 -in ");
  3025. if(0!=FILE_CdMMSPath())
  3026. {
  3027. FILE_CreateDir( (char *)MMIMMS_MMS_DIR);
  3028. FILE_CdMMSPath();
  3029. }
  3030. inboxfile_openstatus = FILE_Create((char*)MANAGER_FLASH_INBOXNAME, FFS_MODE_CREATE_ALWAYS | FFS_MODE_WRITE);
  3031. if (inboxfile_openstatus == FFS_INVALID_HANDLE)
  3032. {
  3033. //the reason may be that I have not closed the former opened file with the same name
  3034. FILE_Close(inboxfile_openstatus); //close former file
  3035. inboxfile_openstatus = FILE_Create((char*)MANAGER_FLASH_INBOXNAME, FFS_MODE_CREATE_ALWAYS | FFS_MODE_WRITE);
  3036. if (inboxfile_openstatus == FFS_INVALID_HANDLE)
  3037. {
  3038. SCI_TRACE_LOW("HERE Creat the file is failed------------ ");
  3039. mmsf_Remove((char*)"\cmsinbox.cnf");
  3040. MMK_PostMsg(VIRTUAL_WIN_ID, MSG_MMS_DELETEMANAGERINBOXOK, PNULL, PNULL);
  3041. return ;
  3042. }
  3043. }
  3044. SCI_TRACE_LOW("here create the inboxmanagerfile is ok-----------");
  3045. param_save_ptr = (FFS_SAVEFILE_RESULT_T*)cms_malloc(sizeof(FFS_SAVEFILE_RESULT_T));
  3046. if (param_save_ptr == NULL)
  3047. {
  3048. SCI_TRACE_LOW("fnh param_save_ptr malloc fail");
  3049. FILE_Close(inboxfile_openstatus );
  3050. inboxfile_openstatus = FFS_INVALID_HANDLE;
  3051. mmsf_Remove((char *)"\cmsinbox.cnf");
  3052. MMK_PostMsg(VIRTUAL_WIN_ID, MSG_MMS_DELETEMANAGERINBOXOK, PNULL, PNULL);
  3053. return;
  3054. }
  3055. SCI_MEMSET(param_save_ptr, 0, sizeof(FFS_SAVEFILE_RESULT_T));
  3056. param_save_ptr->buf_ptr = tempbuf;
  3057. param_save_ptr->hefs = inboxfile_openstatus;//传递的参数
  3058. param_save_ptr->buf_size = filelen;
  3059. overlapped.offset = 0;
  3060. overlapped.param = (FFS_PARAM)param_save_ptr; //free it in call back function
  3061. if(saveinboxfilestate == MMS_SAVE_INBOX)
  3062. {
  3063. overlapped.complete_route = SaveFS_SaveInboxFile_CallBack;
  3064. }else
  3065. {
  3066. overlapped.complete_route = SaveFS_SaveInboxPUSHFile_CallBack;
  3067. }
  3068. efs_error = FILE_Write(
  3069. inboxfile_openstatus,
  3070. tempbuf,
  3071. filelen,
  3072. &transmit,
  3073. &overlapped
  3074. );
  3075.         if( ( FFS_ERROR_IO_PENDING != efs_error )&&(FFS_NO_ERROR != efs_error))
  3076. {
  3077. if (param_save_ptr != NULL)
  3078. {
  3079. cms_free(param_save_ptr);
  3080. param_save_ptr = NULL;
  3081. }
  3082. FILE_Close(inboxfile_openstatus );
  3083. inboxfile_openstatus = FFS_INVALID_HANDLE;
  3084. mmsf_Remove((char*)"\cmsinbox.cnf");
  3085. MMK_PostMsg(VIRTUAL_WIN_ID, MSG_MMS_DELETEMANAGERINBOXOK, PNULL, PNULL);
  3086. return ;
  3087. }
  3088. }
  3089. else
  3090. {
  3091. FILE_CdMMSPath();
  3092. SCI_TRACE_LOW("fnh saveinboxfile filelen is zero!");
  3093. mmsf_Remove((char*)"\cmsinbox.cnf");
  3094. if(FILE_CheckExist((const char*)MANAGER_FLASH_INBOXNAME) == TRUE)
  3095. {      
  3096. FFS_ERROR_E ffs_error = 0;
  3097. uint16  ucs2_name_arr[UCS2_NAME_MAX_LEN] = {0};
  3098. int ucs2_name_len = 0;
  3099. ucs2_name_len = GUI_GB2UCS(ucs2_name_arr, (uint8 *)MANAGER_FLASH_INBOXNAME, SCI_STRLEN((char*)MANAGER_FLASH_INBOXNAME));
  3100. overlapped.offset         = 0;
  3101. overlapped.complete_route = MMIVC_CallBackDeleteManagerInboxFile;
  3102. overlapped.param          = PNULL;
  3103. ffs_error  =  FFS_AYS_Delete(FS_UDISK, (const wchar*)ucs2_name_arr, &overlapped);
  3104. SCI_TRACE_LOW("VC:DeleteVideoFile FFS_AYS_Delete = %d", ffs_error);
  3105. }
  3106. MMK_PostMsg(VIRTUAL_WIN_ID, MSG_MMS_DELETEMANAGERINBOXOK, PNULL, PNULL);
  3107. SCI_TRACE_LOW("VC: MMIVC_CallBackDeleteMMSFile run");
  3108. MMI_TriggerMMITask();
  3109. }
  3110. }
  3111. /*==============================================================
  3112. *   函数名: MMIMMS_SaveManagerOutboxFile
  3113. *   输入: 空
  3114. *   输出: void
  3115. *   功能描述: 存储相应涉及发件箱的虚拟文件到flash资源。
  3116.                                    因为为异步文件系统,目前顺序是:收件箱;发件箱;
  3117.                                    已发邮件;草稿箱。
  3118. *   代码编写者: liangliu
  3119. *   代码编写日期: 10/28/2005
  3120. *   修改原因:
  3121. *   修改人员:
  3122. *   修改日期:
  3123.  ==============================================================*/
  3124. void MMIMMS_SaveManagerOutboxFile()
  3125. {
  3126. //FILE_HANDLE   cmshandle = 0;
  3127. uint8*   tempbuf = NULL;
  3128. //int   curroffset;
  3129. uint32   filelen = 0;
  3130. //static HFS s_hefs = FFS_INVALID_HANDLE;
  3131. HFS cur_hefs = FFS_INVALID_HANDLE;
  3132. //uint32 file_size = 0;
  3133. //uint16         *file_name =NULL;
  3134. //uint16 * dir_name =PNULL;
  3135. //uint16  unicodelong  = 0 ;
  3136. //MMI_STRING_T     prompt_str;
  3137. FFS_ERROR_E efs_error;
  3138. FFS_OVERLAPPED_T overlapped;
  3139. uint32 transmit;
  3140. //uint8 *efs_buf_ptr = PNULL;
  3141. FFS_SAVEFILE_RESULT_T *param_save_ptr = PNULL;
  3142. SCI_TRACE_LOW("MMIMMS_SaveManagerOutboxFile IN ---------");
  3143. mmsf_GetConstFileData((char *)"\cmsoutbox.cnf",(char **)&tempbuf,(int *)&filelen);
  3144. SCI_TRACE_LOW("fnh filelen = %d",filelen);
  3145. SCI_TRACE_LOW("fnh tempbuf len = %d",SCI_STRLEN((char *)tempbuf));
  3146. if (filelen > 0)
  3147. {
  3148. SCI_TRACE_LOW("enter filelen > 0");
  3149. if(0!=FILE_CdMMSPath())
  3150. {
  3151.    FILE_CreateDir( (char *)MMIMMS_MMS_DIR);
  3152.    FILE_CdMMSPath();
  3153. }
  3154. cur_hefs = FILE_Create((char*)MANAGER_FLASH_OUTBOXNAME, FFS_MODE_CREATE_ALWAYS | FFS_MODE_WRITE);
  3155. if (cur_hefs == FFS_INVALID_HANDLE)
  3156. {
  3157. //the reason may be that I have not closed the former opened file with the same name
  3158. FILE_Close(cur_hefs); //close former file
  3159. cur_hefs = FILE_Create((char*)MANAGER_FLASH_OUTBOXNAME, FFS_MODE_CREATE_ALWAYS | FFS_MODE_WRITE);
  3160. if (cur_hefs == FFS_INVALID_HANDLE)
  3161. {
  3162. SCI_TRACE_LOW("HERE Creat outboxfile is failed------------ ");
  3163. mmsf_Remove((char*)"\cmsoutbox.cnf");
  3164. if (g_mailbox_status == SEND_OUTBOX_MMS)
  3165. {
  3166.   MMK_PostMsg(
  3167. MMIMMS_SAVE_MMS_WAITING_WIN_ID, 
  3168. MSG_MANAGERFILEWRITE_OUTBOX_FAILED, 
  3169. PNULL, 
  3170. PNULL
  3171. );
  3172. }
  3173. return ;
  3174. }
  3175. }
  3176. SCI_TRACE_LOW("HERE Create Oouboxfile is success !");
  3177. param_save_ptr = (FFS_SAVEFILE_RESULT_T*)cms_malloc(sizeof(FFS_SAVEFILE_RESULT_T));
  3178. if (param_save_ptr == NULL)
  3179. {
  3180. SCI_TRACE_LOW("here create outboxfile is fail!");
  3181. mmsf_Remove((char *)"\cmsoutbox.cnf");
  3182. FILE_Close(cur_hefs);
  3183. cur_hefs = FFS_INVALID_HANDLE;
  3184. if (g_mailbox_status == SEND_OUTBOX_MMS)
  3185. {
  3186.   MMK_PostMsg(
  3187. MMIMMS_SAVE_MMS_WAITING_WIN_ID, 
  3188. MSG_MANAGERFILEWRITE_OUTBOX_FAILED, 
  3189. PNULL, 
  3190. PNULL
  3191. );
  3192. }
  3193. return;
  3194. }
  3195. SCI_MEMSET(param_save_ptr, 0, sizeof(FFS_SAVEFILE_RESULT_T));
  3196. param_save_ptr->buf_ptr = tempbuf;
  3197. param_save_ptr->hefs = cur_hefs;//传递的参数
  3198. param_save_ptr->buf_size = filelen;
  3199. overlapped.offset = 0;
  3200. overlapped.param = (FFS_PARAM)param_save_ptr; //free it in call back function
  3201. overlapped.complete_route = SaveFS_SaveOutboxFile_CallBack; 
  3202. efs_error = FILE_Write(
  3203. cur_hefs,
  3204. tempbuf,
  3205. filelen,
  3206. &transmit,