張 庚,陳 廣,楊 瑩,陳瑩瑩
(1.中國電力科學研究院,北京100192;2.四川省電力公司,四川成都610041;3.河北遠東哈里斯通信有限公司,河北石家莊050200;4.華北電力大學,北京102206)
統一通信(Unified Communication,UC)是指融合了通信技術(Communication Technology,CT)和信息技術(Information Technology,IT)應用的綜合解決方案,通過融合多種通信方式,為用戶創造隨時隨地、使用任何設備和網絡進行自由溝通的應用環境,以滿足辦公的移動性和靈活性的需求。
通訊錄是統一通信的基本業務功能,它不但能提供給企業用戶和個人用戶所需的通信目錄信息,而且還可以作為觸發統一通信其他相關業務的入口[1]。但在實際統一通信中應用網絡通訊錄時,存在信息更新不及時、格式混雜和隱私泄露等問題,從而導致用戶體驗不佳[2]。
為了解決以上問題,從統一通信的企業應用環境出發,基于XMPP協議,對網絡通訊錄業務在統一通信下的信息同步、格式轉換和隱私保護等關鍵技術進行了軟件設計實現。對網絡通訊錄在統一通信系統中的應用有一定的實踐意義。
網絡通訊錄是一種基于客戶端/服務器結構的通訊錄,利用網絡來實現通訊錄存儲和備份的服務,通過在不同設備間聯系人信息的同步,使得不同終端可以共享統一的通訊錄,獲取相同的用戶體驗。
統一通信系統服務器端采用開源的Openfire服務器框架進行二次開發,Openfire是基于XMPP協議開源的實時協作服務器,采用Java語言進行開發,具有跨平臺的特點,同時Openfire實現了插件機制,方便擴展[3]。因此,網絡通訊錄的服務器部分采用插件開發的形式進行實現。
服務器端負責對客戶端進行驗證,管理實體間的連接,處理實體間消息的解析和轉發等。服務器存儲和管理與網絡通訊錄相關的XML文檔,如網絡通訊錄列表和訪問權限列表等[4]。
網絡通訊錄可以按照單位、部門和組織名稱進行多級分組,不同組內及組間有不同的訪問權限,訪問權限機制的運行是在服務器端實現的,服務器根據收到的消息判斷此客戶端的角色并給予相應的訪問權限。
在ASP.NET平臺下通過封裝的DOM類庫解析和存取XML文檔,完成對XML文檔的數據提取,將解析后的數據導入數據庫作為網絡通訊錄中聯系人的描述信息。
客戶端是在.Net開發環境下,利用WPF技術進行設計開發。客戶端獲取服務器所提供的所有功能并通過圖形化界面、良好的接口呈現給用戶。
客戶端與服務器通過XML在TCP套接字的5222端口進行通信,而不需要客戶端之間直接進行通信。
XMPP協議是一種以XML為基礎的開放式實時通信協定,為客戶端與服務器之間的通信提供了規則和數據結構等相關約定[5]。
本系統使用開源的agsXMPP來完成對系統的協議棧支持。asgXMPP是基于XMPP協議的C#開源庫,通過異步套接字、與工廠模式結合的快速XML解析器以及自有的輕量級XML DOM3項技術,創建了一個輕量和快速的跨平臺類庫。
網絡通訊錄應該具有如下功能[6]:
①顯示用戶在線狀態;
②顯示所有聯系人和聯系人分組;
③搜索聯系人;
④管理聯系人列表:添加新的聯系人、可以刪除已有的聯系人、創建和刪除分組,把聯系人歸類到指定的分組等。
客戶端可以向任意擁有統一通信賬號的用戶發起添加好友請求。添加好友是相互的,向一個用戶發出添加好友請求后,需要等待對方同意才能建立雙向的好友關系,XMPP服務器會在各自的聯系人列表里添加對方的賬號,相互之間可以設置分組,可以看到對方的在線狀態。
對于XMPP協議的統一通信客戶端,只要對方所在的服務器也遵循XMPP協議,雙方可以在不同的服務器上、不同的企業組織里以及不同的客戶端進行信息交流。這個過程主要由XMPP服務器完成。
假定用戶A和B同為網絡通訊錄的使用者,數據同步流程如圖1所示。
在A與B互相添加好友成功后,XMPP服務器會在各自的網絡通訊錄中添加對方的信息,包括姓名、賬號和聯系方式等。每個人的信息均有時間戳來標識其創建時間或修改時間,若A在客戶端修改了其聯系方式并保存成功,這時服務器會發現其時間戳有變動,則認為A的信息有更新,將自動更新網絡通訊錄中與A有關的信息,而無需通過廣播等方式通知A的好友。這樣,無論B通過任何終端使用網絡通訊錄時,都將會得到更新后的A的聯系方式。
這樣的同步策略使用戶的網絡通訊錄自動更新,克服了一般通訊錄因聯系人信息改變而使數據失效的問題,同時避免了通過廣播等方式通知時信息傳遞丟失的情況,保證了用戶持有的各個終端的通訊錄數據同步更新,方便用戶對網絡通訊錄的管理,使得信息無阻礙地在系統內進行流轉。
在使用網絡通訊錄時,除了手工錄入數據之外,數據的來源大多取自于用戶的導入過程,目前主流的通訊錄使用的格式包括.vcf、.csv、.xls和 xml等。由于原始數據格式不可控,因此需要兼容多種格式的通訊錄[7]。
3.2.1 通訊錄格式
(1)vCard格式(.vcf)
Outlook Express和大部分智能手機通訊錄的使用是vCard格式,這是一種采用純文本的類XML格式[8],使用( )換行表示多個鍵,冒號(:)把鍵名和鍵值分開。分號(;)用來加入參數,如:
Name[;Attribute=AttributeValue]:Value[;MoreValue]其中[]內容為可選。
(2).csv格式
.csv格式是逗號分隔值來標示的通訊錄格式[9],通常都是純文本文件。第一行是鍵名,以半角逗號分開,其他行都是該鍵名對應的鍵值,同樣以半角逗號分開。使用( )換行表示多條記錄。
(3).xml格式
.xml格式以 <?xml version="1.0"? > 為信息記錄的開始,以<>元素標簽內部的信息標示鍵名,以同名元素標簽</>標示結尾,之間為鍵值,如<tag>Value</tag>。所有標簽必須成對出現。
(4).xls
.xls通訊錄文件格式是Microsoft Excel工作表格式,可以使用Excel工具轉換為.csv格式。
3.2.2 格式轉換過程
在統一通信系統企業通訊錄模塊中,用戶數據采用XML語言定義,XML允許使用者自定義標記描述數據元素,突破了HTML固定標記集合的約束。XML格式可擴展性和內容標準化的優點,可有效攜帶文本和圖片等信息,便于客戶端與服務器間的信息交流。本文在通訊錄格式互通性方面采取統一轉換為xml格式的方法,將數據格式統一為xml格式文檔,進行客戶端與服務器的信息傳輸。
根據3.1節的格式規范分析,系統設計的不同通訊錄的格式轉換互通的步驟如下:
①區分鍵名和對應鍵值,如圖2所示;
②建立鍵名與xml元素的映射關系;
網絡通訊錄部分識別其他通訊錄的格式,但由于具體手機通訊錄的字段名稱有差異,因此需要用戶手動選擇字段的映射關系,系統將用戶已經建立的映射關系進行存庫,之后如遇到相同的鍵名,則自動建立映射關系,圖3為格式轉換流程圖。

圖3 格式轉換流程圖
這種方式需要用戶對業務和數據本身有所分析和了解,如vCard格式中“TEL;WORK;VOICE”字段表示工作電話;“TEL;CELL;VOICE”字段表示手機號碼。系統對常用的映射關系給予信息提示,降低普通用戶使用的難度,以便準確進行數據映射操作。
③預覽映射關系,對于不適宜的映射關系可以返回上一步進行修改;
④如圖3所示,根據映射關系,將鍵值作為到映射后的xml元素值進行轉換;
⑤xml格式的信息存取。
在.NET Framework開發環境下,使用XML作為存儲和傳輸各種數據的格式時,可以利用DataSet存儲和傳輸XML格式的數據[10]。
DataSet是ADO.NET的中心概念和主要組件,DataSet在內部是用XML來描述數據的。DataSet所有數據都加載在內存上執行的,可以提高數據訪問速度,提高硬盤數據的安全性,保證程序運行的速度和穩定性。
在實現中,使用WriteXmlSchema方法將組織結構保存為XML組織結構,并且可以使用WriteXml方法保存組織結構和數據。若要讀取既包含組織結構也包含數據的XML文檔,使用ReadXml方法,將XML文檔內容導入到DataSet中。
3.2.3 沖突處理策略
對于其他格式的通訊錄的導入到本系統需要對沖突情況進行策略制定。沖突情況包括:導入的條目數據格式異常、重復條目等。對條目格式異常的策略包括:忽略和另存為本地文件。對重復項的策略包括:覆蓋現有條目、忽略重復項和另存為本地文件。
網絡通訊錄由于涉及用戶的聯系方式等私人信息,因此其隱私的安全性需要格外引起重視。
3.3.1 傳輸安全性
網絡通訊錄信息在客戶端與服務器的傳輸過程中的安全,由安全模塊負責維護,避免數據丟失或泄漏,如圖4所示。

圖4 信息傳輸的安全性
安全模塊負責通訊錄業務數據安全處理,如加解密等。在服務器與客戶端信息傳送過程中,首先將二進制碼轉換為Base64碼,之后再進行加密,加密算法由各網絡實體建立會話時通過TLS協商[11],在本系統中使用MD5進行加密。
3.3.2 呈現安全性
在網絡通訊錄客戶端信息呈現時,由于其實現了通訊錄的共享,考慮到用戶的隱私,系統必須提供隱私保護功能,有4種策略供用戶選擇:
①允許用戶選擇不加入網絡通訊錄中,即不公開用戶任何信息;
②允許用戶的信息只對特定人員公開,如設置密友圈,對其信息保持透明;
③允許用戶只公開姓名,不公開聯系方式,使用者可以直接點擊撥號,而無需獲知對方的具體聯系號碼。如電話以 8XXXXXXX1,手機以1XXXXXXXXX6的形式呈現,只呈現號碼首位和末位,其余隱蔽;
④允許用戶完全公開其個人信息;這種策略適用于企業客服賬號等情況,以滿足對外開放的需要。
服務器根據用戶選擇的隱私策略,在其向客戶端傳送時,即對網絡通訊錄的信息進行了針對性的屏蔽,客戶端只需照常負責呈現即可,如圖5所示。

圖5 隱私策略的處理
3.3.3 用戶權限管理
在客戶端為用戶提供多種權限的管理[12],用戶可以自行設置黑白名單,自主管理,對辦公電話和私人電話設置不同的隱私級別等,服務器端負責對所有用戶的身份驗證和數據查看權限的控制,使權限設置更為精細,以提高用戶的隱私保護安全性。
設計的網絡通訊錄已在企業應用環境下得以成功使用,網絡通訊錄利用數據同步技術,從群體角度減少通訊錄錄入的總體工作量,有效降低了用戶維護通訊錄的成本,從而促進了用戶與好友的溝通交流;在數據映射和格式轉換中,采用了xml數據格式,以統一的方式來對不同系統中異構的通訊錄數據進行轉換,使系統可以兼容其他客戶端通訊錄數據,拓展了軟件的可用性;同時注重用戶的隱私數據保護,確保信息使用安全。
但是所研究的技術不適用于本地通訊錄的范疇,且在網絡情況不佳時,用戶體驗較差。在格式轉換部分,現有的方式需要用戶對業務和數據本身有所分析和了解,才能進行數據映射操作,在下一步工作中,可以改進開發更為簡便易用的系統。
作為一項基本業務功能,通訊錄在統一通信系統中具有舉足輕重的地位,通過研究并實現企業統一通信應用環境下網絡通訊錄信息同步、格式轉換和隱私保護等方面的關鍵技術,確保網絡通訊錄能夠提供準確、及時和安全的聯系信息,有助于提升用戶體驗。
[1] YDT 2014-2009,統一通信業務需求[S].
[2] 苗凱.XMPP的安全機制分析[J].通信技術,2003(8):101 -103.
[3] 潘鳳,王華軍,苗放,等.基于XMPP協議和Openfire的即時通信系統的開發[J].計算機時代,2008(3):15-19.
[4] 歐偉新.統一通信企業通訊錄設計技術與實現[D].南京:南京郵電大學,2012:18 -22.
[5] rfc3920,Extensible Messaging and Presence Protocol(XMPP):Core[S].
[6] 劉志福.基于XMPP的iOS上的IM客戶端的研究與實現[D].廣州:華南理工大學,2012:25-29.
[7] 葛春林,周杰,蔡磊.基于 XML和 COM(MAPI)的通用地址簿設計[J].計算機應用與軟件,2009,26(12):82-85.
[8] rfc2426,vCard MIME Directory Profile[S].
[9] rfc4180,Common Format and MIME Type for Comma -Separated Values(CSV)Files[S].
[10]張哲峰,黃翔宇.ASP.NET數據庫入門經典-C#編程篇[M].北京:清華大學出版社,2003:346-371.
[11]劉培鶴,牛曉蕾,杜鵬,等.企業即時通信系統安全性分析與設計[J].網絡安全技術與應用,2007(2):78-81.
[12]張力.基于XMPP協議的企業級即時通訊系統設計與實現[D].武漢:華中科技大學,2011:29-32.