摘 要:總結了當前電子郵件領域的相關技術,研究了BREW移動平臺和組件技術以及基于組件的軟件開發,包括組件模型、組件接口、組件組合。運用組件技術,設計和實現了基于BREW平臺、符合3G技術標準的智能手機電子郵件客戶端,極大地提高了系統程序的執行速度和穩定性。
關鍵詞:無線二進制運行環境; 組件技術; 郵件系統; 智能手機
中圖分類號:TP311 文獻標志碼:A
文章編號:1001-3695(2008)07-2094-03
Design and implementation of smartphone e-mail client
based on BREW and component
CHEN Liang-chen, SUN Gong-xing, YAN Xiao-fei, WU Huan
(Computing Center, Institute of High Energy Physics, Chinese Academy of Sciences, Beijing 100049, China)
Abstract:Summarizes the current related technology to e-mail, studied the BREW mobile platform and component technology and component-based software development, including component model, component interfaces, component combinations. Based on the BREW platform and component technology, Designed and implemented an e-mail client, meetingthe 3G technical standards, greatly enhancing the system’s speed of procedures and stability.
Key words:BREW; component; e-mail system; smartphone
隨著網絡技術和通信產業的不斷發展,移動終端已經由原來單一的通話功能向話音、數據、圖像綜合的方向演變,功能越來越完善。電子郵件是人們聯系溝通的重要手段,已成為移動終端必備的重要功能之一。目前移動終端上流行的電子郵件系統在容量和速度以及支持收發郵件大小上存在很多局限和問題,不能滿足人們日益增長的需求,這些都是因為郵件系統設計不合理導致的。中興通訊公司手機事業部的終端業務組件項目,自主研發移動終端電子郵件客戶端軟件系統,采用軟件開發的主流方法——組件技術。
組件技術為軟件開發提供了改良的方法,它向過時的設想提出了挑戰。組件表現為技術變革的基礎,就像面向對象先前表現出的一樣。在嵌入式系統開發中,應用組件技術可以更有效地支持復用技術,具有減少應用開發代碼量、改善軟件質量、利于軟件升級和維護、便于移植和剪裁等優點,得到了越來越多的重視。基于組件的軟件開發也將是今后軟件開發的主流方法。
1 相關技術
1.1 BREW平臺
無線二進制運行環境(BREW)是高通公司面向CDMA網絡無線互聯網發射平臺上增值業務開發運行的基本平臺。它提供一個高效、低成本、可擴展和熟悉的應用程序執行環境(AEE),著重開發可無縫植入任何實際手持設備的應用程序。它是專門為無線設備設計的一個瘦薄而高效的應用程序執行環境,可充分擴展,其面向對象的應用程序執行環境允許使用C或C++開發小程序和共享模塊(本文即是在VC++6.0環境下,用C語言進行開發的)。其提供了一組內容豐富、使用便捷的接口,通過這些接口功能,供應商可以提供成套的完整的資訊、商務、娛樂功能。BREW的設計還十分注重效率和節約移動設備的RAM,它支持應用程序(小程序)和共享模塊并實現動態加載,小程序和模塊開發成獨立的DLL,并在運行時加載到Emulator。
1.2 組件技術
1)組件接口 接口定義功能函數,是一組相關函數的集合,分離了定義與實現,徹底消除了接口調用者與實現者之間的耦合,增強了信息封裝性。接口具有惟一性、不變性、繼承性和多態性,同一接口在不同組件內有不同的實現方式。接口描述了組件對外提供的服務,在組件與組件之間、組件與客戶之間均通過接口進行交互。一個組件可以實現多個組件接口,而一個特定的組件接口也可以被多個組件來實現,如圖1所示。
接口分為兩類:a)服務接口。所在的組件已經實現了此接口類型的功能,可以向組件外部提供服務。b)請求接口。其所在組件內沒有實現此接口的功能,組件需要向外部請求此接口的實現。在一個應用程序中,組件的接口起決定性作用。
2)組件組合 它是基于組件開發的重點,目的是通過綁定多個簡單組件構成功能更加復雜的組件,也是利用現存的組件組合成大粒度的組件,進而組成整個系統的技術。
為了設計和復用組件,復合組件的接口應該避免提供子組件所沒有請求或者提供的接口,而采用它所包含子組件提供的接口。復合組件的連接規則如圖2所示。
圖2中,rr表示require interface 到 require interface 的連接;pp表示 provode interface到 provode interface 的連接;rp表示 require interface到 provode interface 的連接;pr表示 provode interface到 require interface 的連接。復合組件的組合方式越簡單,組建構造程序的抽象程度就越高。通常組件模型有三種連接模式,即直接連接、選擇連接和代碼塊粘連。
3)組件復用 軟件復用的思想已經有了很長時間。最傳統的復用方式是以代碼庫的方式(如數學計算和圖形庫等),從當今的復用層次來看,這種方式只是低級的代碼復用,對于程序在體系結構上的相同和差異并沒有太大幫助。接著是復用面向對象方式的程序框架(framework)提高開發速度, 但這種方式會出現在程序中修改框架非常困難的問題,因為框架已經作為代碼嵌入到程序中。基于組件的方法可以構造在體系結構和功能都容易修改的程序。
1.3 電子郵件的工作原理
電子郵件的工作過程遵循客戶—服務器模式。電子郵件系統的體系結構分為兩部分,即MDA(mail delivery agent,用戶代理)/ MTA(mail transport agent,消息傳輸代理)和UA(mail user agent,郵件用戶代理)。UA面向用戶,而MDA/MTA是在后臺運行的,它們共同完成電子郵件的全部功能。使用電子郵件的用戶不能夠直接與郵件傳輸代理發生作用,它們必須通過UA與之交互。UA負責為用戶提供管理郵件的界面,通常包括查看信件、管理郵件夾、編輯、生成和發送新郵件,以及回復和轉發信件,它的功能是通過電子郵件客戶程序完成。電子郵件的工作原理如圖3所示。
2 基于組件的郵件系統設計
2.1 終端平臺軟件構架
P601A手機為雙模移動話機,軟件以高通MSM6250平臺軟件系統為基礎,提供手機Applet模塊,完成手機的各項功能。整個終端軟件系統由操作系統、協議軟件和應用層軟件組成。其系統結構如圖4所示。操作系統采用高通公司的REX系統。 REX是基于優先級調度的多任務實時嵌入式操作系統。在P601A手機平臺軟件中,REX負責系統中所有資源的調度、各任務間的通信以及相關的中斷服務和文件服務。協議軟件包括物理層軟件和協議兩大部分,采用高通MSM6250平臺。P601A手機 Applet是系列平臺軟件中惟一與用戶交互的模塊,通過鍵盤、LCD、攝像頭和音頻等外設展示,提供給用戶各項功能,滿足用戶使用WCDMA/GSM/GPRS雙模手機的需求。UI應用層軟件滿足開放性和平臺無關性。通過BREW OEM對AMSS/DMSS API進行封裝,向上提供與設備無關的BREW API/QCT EXTENSION API接口。應用層軟件通過調用BREW API/QCT EXTENSION API和協議層、SIM卡、NVRAM鍵盤、LCD等硬件設備進行信息交互,完成應用層的各項功能。
圖4中的e-mail模塊是本手機應用軟件層的一個Applet,它與UMB、Browser、流媒體一起,構成手機的四大數據業務軟件。E-mail模塊運行于高通BREW集成開發環境之上,屬于應用層軟件。
2.2 郵件系統軟件構架
E-mail軟件系統基于功能劃分為多個模塊,每個模塊就是一個子組件,每個子組件實現相對獨立的功能,各子組件之間的耦合度較低,這種設計方式有利于軟件的維護,同時方便于將來的擴展。E-mail組件組合設計如圖5所示。
UI子組件完成對編輯界面、閱讀界面、設置界面、郵箱界面,以及用戶的操作響應與交互。郵件管理子組件完成對郵件的操作控制,包括讀取、存儲郵件和收件箱、發件箱、已發箱、草稿箱和用戶文件夾的管理。賬戶管理子組件完成對用戶賬戶的設置,包括與郵件管理和收發郵件邏輯模塊的交互。收發控制子組件模塊負責將調用協議部分提供的服務,根據上層調用的功能需要,組織邏輯流程,與郵件服務器進行交互。這些組件都是獨立的。確定每個組件的服務接口和請求接口,然后分別完成各子組件功能,最后通過各組件提供的接口運用組件組合技術實現整個組件的功能。
E-mail系統模塊運行于手機集成開發環境之上,又是整個手機軟件系統應用層之上的一個應用組件,通過它向外提供的接口和其他組件提供的接口組合實現手機上的各種應用。
3 基于組件的郵件系統實現
3.1 郵件接收模塊組件的實現
1)公共數據結構流程 郵件接收流程中,通常是連接服務器,然后發送命令與服務器交互,完成相應功能后退出服務器,斷開連接。考慮協議命令發送和服務器數據接收較為復雜,在具體實現時考慮與邏輯處理模塊分開,邏輯處理模塊作為協議模塊的上層,函數指針容器數據結構則是為邏輯處理模塊與協議模塊交互提供支持。具體流程:a)邏輯層發起連接操作或發送命令操作,協議層完成發送命令具體操作,若有錯誤立即返回;b)等待服務器返回數據;c)服務器數據返回,協議層被調用,判斷數據合法性,然后通過容器對象調用邏輯處理層相應函數;d)邏輯層根據底層的數據判斷作相應的邏輯處理,然后驅動下一個步驟;e)所有步驟完成,或者出現錯誤,郵件接收模塊退出。
2)接口函數 郵件接收模塊向UI層提供接口函數,如表1所示。
表1 郵件接收和發送模塊接口函數列表
函數名稱函數功能
IRS_Init / IRS_UnInit初始化郵件接收模塊/卸載模塊
IRS_InitCB初始化相關容器結構
IRS_Recv_Mail開始接收郵件
IRS_Recv_Cancel取消郵件接收
IRS_Recv_GetRecvMails取得當前連接/新郵件信息鏈表
IRS_Recv_GetRecvNum取得當前連接已接收新郵件數目
IRS_Recv_GetTotalNum取得當前連接需接收新郵件數目
IRS_Recv_GetCurMailSize取得當前接收郵件的大小
IRS_Recv_GetCurRecvSize取得當前接收郵件已接收大小
UI層通過調用郵件接收模塊提供的接口函數,執行接收郵件、查看運行狀態等功能,將接口函數的執行結果通過UI顯示出來。
3.2 郵件發送模塊組件的實現
1)公共數據結構流程 郵件發送流程中,通常是連接服務器,然后發送命令與服務器交互,完成相應功能后退出服務器,斷開連接。考慮協議命令發送和服務器數據接收較為復雜,在具體實現時考慮與邏輯處理模塊分開,邏輯處理模塊作為協議模塊的上層,函數指針容器數據結構則是為邏輯處理模塊與協議模塊交互提供支持。具體流程:a)邏輯層發起連接操作或發送命令操作,協議層完成發送命令的具體操作,若有錯誤立即返回;
b)等待服務器返回數據;c)服務器數據返回,協議層被調用,判斷數據合法性,然后通過容器對象調用邏輯處理層相應函數;d)邏輯層根據底層的數據判斷作相應的邏輯處理,然后驅動下一個步驟;e)所有步驟完成,或者出現錯誤,郵件發送模塊退出。
2)接口函數 郵件發送模塊向UI層提供接口函數,如表2所示。
表2 郵件接收和發送模塊接口函數列表
函數名稱函數功能
IRS_Init / IRS_UnInit初始化發送模塊/卸載該模塊
IRS_InitCB初始化相關容器結構
IRS_Send_SendMail開始發送郵件
IRS_Send_Cancel取消發送郵件
IRS_Send_SetSendMails設置要發送的郵件
IRS_Send_AddSendMails增加要發送的郵件
IRS_Send_GetSendMailNum取得當前發送第幾封郵件
IRS_Send_GetMails取得需要發送郵件鏈表
IRS_Send_GetFailMails取得發送失敗的郵件鏈表
UI層通過調用郵件接收模塊和郵件發送模塊提供的接口函數,執行發送郵件、查看運行狀態等功能,將接口函數的執行結果通過UI顯示出來。
3.3 郵件封裝解析組件的實現
1)公共數據結構流程 郵件封裝是對用戶編寫郵件的支持,用戶通過UI的各個按鍵編寫郵件,編寫完成后,用戶選擇保存郵件,觸發UI調用郵件封裝解析模塊中的郵件封裝函數,即mime_package函數。郵件封裝模塊設計了一個通用的郵件格式,包括標題、收件人、抄送人、主題、正文和附件列表六個部分。程序將郵件封裝為特殊編碼格式的文本流,以文本流的形式保存在內存中,然后發送給目標郵箱地址。
郵件解析是將接收到本地的特殊編碼格式的文本流郵件解析成為mail_mime結構體形式的郵件。用戶通過UI的各個按鍵選擇閱讀郵件,觸發UI調用郵件封裝解析模塊中的郵件解析函數,即mime_parse函數。將文本流格式郵件解析成為mail_mime結構體形式,包括標題、收件人、抄送人、主題、正文和附件列表六個部分。
2)接口函數 郵件封裝解析接口提供了兩個接口函數mime_package和mime_parse,如表3所示。
表3 郵件封裝解析模塊接口函數列表
函數名稱函數功能
mime_package轉換mail_mime結構體為文本流
mime_parse轉換文本流為mail_mime結構體
mime_package用來將mail_mime結構體轉換為文本流,mail_mime結構體由UI層實例化,即用戶通過UI編輯界面編輯郵件,然后調用郵件封裝模塊,獲得郵件文本流。mime_parse用來將文本流轉換為mail_mime結構,即郵件接收模塊從服務器端接收郵件數據,以文本流的形式保存在內存中,然后調用郵件解析模塊,得到mail_mime的實例化對象,由UI顯示出來。
4 結束語
本文的重點是通過學習組件技術,完成移動終端下郵件客戶端軟件系統的研究與實現。分析了移動終端開發平臺的特點,結合系統需求分析,提出了基于組件技術的移動終端郵件收發系統的詳細設計,并實現了各個模塊。
本文設計出的移動終端e-mail軟件系統通過反復測試,通過公司驗收,已經應用于一款支持WCDMA和GSM的高端3G手機上。但有很多更為復雜的情況,考慮不夠詳細,另外功能的實現,還需要在以后的工作中更加優化和完善。同時對軟件組件技術的應用還有待于進一步的研究。
參考文獻:
[1]陳良臣,廖碧成,林碧英,等.基于OpenPGP的安全郵件系統的研究與設計[J] .計算機應用研究,2007,24(3): 157-159,168.
[2]周建國,魏洪波,晏蒲柳,等.一種新的基于CA的安全電子郵件系統的研究與實現[J] .武漢大學學報:理學版,2002,48(5):635-639.
[3]蘆東昕,賀連軍,黃鳳崗,等.基于BREW平臺支持IMAP4的智能手機郵件客戶端的設計與實現[J] .計算機應用,2006,26(9):2247-2249.
[4]曲傳久,陳榕,趙岳松.基于構件的智能手機郵件系統的設計與實現[J] .計算機工程與應用,2005,26(1):104-107.
[5]陳建奇,張玉清,李學農,等.安全電子郵件的研究與實現[J] .計算機工程,2002,28(6):121-122.
[6]BLUM R.開放源碼郵件系統安全[M].杜鵬,譯.北京:人民郵電出版社,2002:253-324.
[7]周建國,晏蒲柳,李凱.實現雙向認證的安全電子郵件系統的研究[J].計算機應用研究,2004,21(12):121-122.
[8]陳良臣, 林碧英, 張朔.嵌入式組件在終端上的研究與設計[J].計算機技術與發展,2006,12(11):166-169.
[9]劉雪艷,張貴倉.嵌入式軟件組件模型的研究與設計[J].佳木斯大學學報,2004,22(1):19-22.
[10]ERRMERICH W,KAVEH N.Component technologies JavaBeans,COM,CORBA,EMJ,EJB and the CORBA component model[J].ACM,2001,28(3):311-312.
[11]FRIEDRICH I F,STANKOVIC J.A survey of convigurable,component based operating systems for embedded application[J].IEEE,2001,22(4):54-68.
注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。”