張 庚,陳 廣,楊 瑩,陳瑩瑩
(1.中國電力科學(xué)研究院,北京100192;2.四川省電力公司,四川成都610041;3.河北遠(yuǎn)東哈里斯通信有限公司,河北石家莊050200;4.華北電力大學(xué),北京102206)
統(tǒng)一通信(Unified Communication,UC)是指融合了通信技術(shù)(Communication Technology,CT)和信息技術(shù)(Information Technology,IT)應(yīng)用的綜合解決方案,通過融合多種通信方式,為用戶創(chuàng)造隨時隨地、使用任何設(shè)備和網(wǎng)絡(luò)進(jìn)行自由溝通的應(yīng)用環(huán)境,以滿足辦公的移動性和靈活性的需求。
通訊錄是統(tǒng)一通信的基本業(yè)務(wù)功能,它不但能提供給企業(yè)用戶和個人用戶所需的通信目錄信息,而且還可以作為觸發(fā)統(tǒng)一通信其他相關(guān)業(yè)務(wù)的入口[1]。但在實(shí)際統(tǒng)一通信中應(yīng)用網(wǎng)絡(luò)通訊錄時,存在信息更新不及時、格式混雜和隱私泄露等問題,從而導(dǎo)致用戶體驗(yàn)不佳[2]。
為了解決以上問題,從統(tǒng)一通信的企業(yè)應(yīng)用環(huán)境出發(fā),基于XMPP協(xié)議,對網(wǎng)絡(luò)通訊錄業(yè)務(wù)在統(tǒng)一通信下的信息同步、格式轉(zhuǎn)換和隱私保護(hù)等關(guān)鍵技術(shù)進(jìn)行了軟件設(shè)計實(shí)現(xiàn)。對網(wǎng)絡(luò)通訊錄在統(tǒng)一通信系統(tǒng)中的應(yīng)用有一定的實(shí)踐意義。
網(wǎng)絡(luò)通訊錄是一種基于客戶端/服務(wù)器結(jié)構(gòu)的通訊錄,利用網(wǎng)絡(luò)來實(shí)現(xiàn)通訊錄存儲和備份的服務(wù),通過在不同設(shè)備間聯(lián)系人信息的同步,使得不同終端可以共享統(tǒng)一的通訊錄,獲取相同的用戶體驗(yàn)。
統(tǒng)一通信系統(tǒng)服務(wù)器端采用開源的Openfire服務(wù)器框架進(jìn)行二次開發(fā),Openfire是基于XMPP協(xié)議開源的實(shí)時協(xié)作服務(wù)器,采用Java語言進(jìn)行開發(fā),具有跨平臺的特點(diǎn),同時Openfire實(shí)現(xiàn)了插件機(jī)制,方便擴(kuò)展[3]。因此,網(wǎng)絡(luò)通訊錄的服務(wù)器部分采用插件開發(fā)的形式進(jìn)行實(shí)現(xiàn)。
服務(wù)器端負(fù)責(zé)對客戶端進(jìn)行驗(yàn)證,管理實(shí)體間的連接,處理實(shí)體間消息的解析和轉(zhuǎn)發(fā)等。服務(wù)器存儲和管理與網(wǎng)絡(luò)通訊錄相關(guān)的XML文檔,如網(wǎng)絡(luò)通訊錄列表和訪問權(quán)限列表等[4]。
網(wǎng)絡(luò)通訊錄可以按照單位、部門和組織名稱進(jìn)行多級分組,不同組內(nèi)及組間有不同的訪問權(quán)限,訪問權(quán)限機(jī)制的運(yùn)行是在服務(wù)器端實(shí)現(xiàn)的,服務(wù)器根據(jù)收到的消息判斷此客戶端的角色并給予相應(yīng)的訪問權(quán)限。
在ASP.NET平臺下通過封裝的DOM類庫解析和存取XML文檔,完成對XML文檔的數(shù)據(jù)提取,將解析后的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫作為網(wǎng)絡(luò)通訊錄中聯(lián)系人的描述信息。
客戶端是在.Net開發(fā)環(huán)境下,利用WPF技術(shù)進(jìn)行設(shè)計開發(fā)??蛻舳双@取服務(wù)器所提供的所有功能并通過圖形化界面、良好的接口呈現(xiàn)給用戶。
客戶端與服務(wù)器通過XML在TCP套接字的5222端口進(jìn)行通信,而不需要客戶端之間直接進(jìn)行通信。
XMPP協(xié)議是一種以XML為基礎(chǔ)的開放式實(shí)時通信協(xié)定,為客戶端與服務(wù)器之間的通信提供了規(guī)則和數(shù)據(jù)結(jié)構(gòu)等相關(guān)約定[5]。
本系統(tǒng)使用開源的agsXMPP來完成對系統(tǒng)的協(xié)議棧支持。asgXMPP是基于XMPP協(xié)議的C#開源庫,通過異步套接字、與工廠模式結(jié)合的快速XML解析器以及自有的輕量級XML DOM3項(xiàng)技術(shù),創(chuàng)建了一個輕量和快速的跨平臺類庫。
網(wǎng)絡(luò)通訊錄應(yīng)該具有如下功能[6]:
①顯示用戶在線狀態(tài);
②顯示所有聯(lián)系人和聯(lián)系人分組;
③搜索聯(lián)系人;
④管理聯(lián)系人列表:添加新的聯(lián)系人、可以刪除已有的聯(lián)系人、創(chuàng)建和刪除分組,把聯(lián)系人歸類到指定的分組等。
客戶端可以向任意擁有統(tǒng)一通信賬號的用戶發(fā)起添加好友請求。添加好友是相互的,向一個用戶發(fā)出添加好友請求后,需要等待對方同意才能建立雙向的好友關(guān)系,XMPP服務(wù)器會在各自的聯(lián)系人列表里添加對方的賬號,相互之間可以設(shè)置分組,可以看到對方的在線狀態(tài)。
對于XMPP協(xié)議的統(tǒng)一通信客戶端,只要對方所在的服務(wù)器也遵循XMPP協(xié)議,雙方可以在不同的服務(wù)器上、不同的企業(yè)組織里以及不同的客戶端進(jìn)行信息交流。這個過程主要由XMPP服務(wù)器完成。
假定用戶A和B同為網(wǎng)絡(luò)通訊錄的使用者,數(shù)據(jù)同步流程如圖1所示。
在A與B互相添加好友成功后,XMPP服務(wù)器會在各自的網(wǎng)絡(luò)通訊錄中添加對方的信息,包括姓名、賬號和聯(lián)系方式等。每個人的信息均有時間戳來標(biāo)識其創(chuàng)建時間或修改時間,若A在客戶端修改了其聯(lián)系方式并保存成功,這時服務(wù)器會發(fā)現(xiàn)其時間戳有變動,則認(rèn)為A的信息有更新,將自動更新網(wǎng)絡(luò)通訊錄中與A有關(guān)的信息,而無需通過廣播等方式通知A的好友。這樣,無論B通過任何終端使用網(wǎng)絡(luò)通訊錄時,都將會得到更新后的A的聯(lián)系方式。
這樣的同步策略使用戶的網(wǎng)絡(luò)通訊錄自動更新,克服了一般通訊錄因聯(lián)系人信息改變而使數(shù)據(jù)失效的問題,同時避免了通過廣播等方式通知時信息傳遞丟失的情況,保證了用戶持有的各個終端的通訊錄數(shù)據(jù)同步更新,方便用戶對網(wǎng)絡(luò)通訊錄的管理,使得信息無阻礙地在系統(tǒng)內(nèi)進(jìn)行流轉(zhuǎn)。
在使用網(wǎng)絡(luò)通訊錄時,除了手工錄入數(shù)據(jù)之外,數(shù)據(jù)的來源大多取自于用戶的導(dǎo)入過程,目前主流的通訊錄使用的格式包括.vcf、.csv、.xls和 xml等。由于原始數(shù)據(jù)格式不可控,因此需要兼容多種格式的通訊錄[7]。
3.2.1 通訊錄格式
(1)vCard格式(.vcf)
Outlook Express和大部分智能手機(jī)通訊錄的使用是vCard格式,這是一種采用純文本的類XML格式[8],使用( )換行表示多個鍵,冒號(:)把鍵名和鍵值分開。分號(;)用來加入?yún)?shù),如:
Name[;Attribute=AttributeValue]:Value[;MoreValue]其中[]內(nèi)容為可選。
(2).csv格式
.csv格式是逗號分隔值來標(biāo)示的通訊錄格式[9],通常都是純文本文件。第一行是鍵名,以半角逗號分開,其他行都是該鍵名對應(yīng)的鍵值,同樣以半角逗號分開。使用( )換行表示多條記錄。
(3).xml格式
.xml格式以 <?xml version="1.0"? > 為信息記錄的開始,以<>元素標(biāo)簽內(nèi)部的信息標(biāo)示鍵名,以同名元素標(biāo)簽</>標(biāo)示結(jié)尾,之間為鍵值,如<tag>Value</tag>。所有標(biāo)簽必須成對出現(xiàn)。
(4).xls
.xls通訊錄文件格式是Microsoft Excel工作表格式,可以使用Excel工具轉(zhuǎn)換為.csv格式。
3.2.2 格式轉(zhuǎn)換過程
在統(tǒng)一通信系統(tǒng)企業(yè)通訊錄模塊中,用戶數(shù)據(jù)采用XML語言定義,XML允許使用者自定義標(biāo)記描述數(shù)據(jù)元素,突破了HTML固定標(biāo)記集合的約束。XML格式可擴(kuò)展性和內(nèi)容標(biāo)準(zhǔn)化的優(yōu)點(diǎn),可有效攜帶文本和圖片等信息,便于客戶端與服務(wù)器間的信息交流。本文在通訊錄格式互通性方面采取統(tǒng)一轉(zhuǎn)換為xml格式的方法,將數(shù)據(jù)格式統(tǒng)一為xml格式文檔,進(jìn)行客戶端與服務(wù)器的信息傳輸。
根據(jù)3.1節(jié)的格式規(guī)范分析,系統(tǒng)設(shè)計的不同通訊錄的格式轉(zhuǎn)換互通的步驟如下:
①區(qū)分鍵名和對應(yīng)鍵值,如圖2所示;
②建立鍵名與xml元素的映射關(guān)系;
網(wǎng)絡(luò)通訊錄部分識別其他通訊錄的格式,但由于具體手機(jī)通訊錄的字段名稱有差異,因此需要用戶手動選擇字段的映射關(guān)系,系統(tǒng)將用戶已經(jīng)建立的映射關(guān)系進(jìn)行存庫,之后如遇到相同的鍵名,則自動建立映射關(guān)系,圖3為格式轉(zhuǎn)換流程圖。
圖3 格式轉(zhuǎn)換流程圖
這種方式需要用戶對業(yè)務(wù)和數(shù)據(jù)本身有所分析和了解,如vCard格式中“TEL;WORK;VOICE”字段表示工作電話;“TEL;CELL;VOICE”字段表示手機(jī)號碼。系統(tǒng)對常用的映射關(guān)系給予信息提示,降低普通用戶使用的難度,以便準(zhǔn)確進(jìn)行數(shù)據(jù)映射操作。
③預(yù)覽映射關(guān)系,對于不適宜的映射關(guān)系可以返回上一步進(jìn)行修改;
④如圖3所示,根據(jù)映射關(guān)系,將鍵值作為到映射后的xml元素值進(jìn)行轉(zhuǎn)換;
⑤xml格式的信息存取。
在.NET Framework開發(fā)環(huán)境下,使用XML作為存儲和傳輸各種數(shù)據(jù)的格式時,可以利用DataSet存儲和傳輸XML格式的數(shù)據(jù)[10]。
DataSet是ADO.NET的中心概念和主要組件,DataSet在內(nèi)部是用XML來描述數(shù)據(jù)的。DataSet所有數(shù)據(jù)都加載在內(nèi)存上執(zhí)行的,可以提高數(shù)據(jù)訪問速度,提高硬盤數(shù)據(jù)的安全性,保證程序運(yùn)行的速度和穩(wěn)定性。
在實(shí)現(xiàn)中,使用WriteXmlSchema方法將組織結(jié)構(gòu)保存為XML組織結(jié)構(gòu),并且可以使用WriteXml方法保存組織結(jié)構(gòu)和數(shù)據(jù)。若要讀取既包含組織結(jié)構(gòu)也包含數(shù)據(jù)的XML文檔,使用ReadXml方法,將XML文檔內(nèi)容導(dǎo)入到DataSet中。
3.2.3 沖突處理策略
對于其他格式的通訊錄的導(dǎo)入到本系統(tǒng)需要對沖突情況進(jìn)行策略制定。沖突情況包括:導(dǎo)入的條目數(shù)據(jù)格式異常、重復(fù)條目等。對條目格式異常的策略包括:忽略和另存為本地文件。對重復(fù)項(xiàng)的策略包括:覆蓋現(xiàn)有條目、忽略重復(fù)項(xiàng)和另存為本地文件。
網(wǎng)絡(luò)通訊錄由于涉及用戶的聯(lián)系方式等私人信息,因此其隱私的安全性需要格外引起重視。
3.3.1 傳輸安全性
網(wǎng)絡(luò)通訊錄信息在客戶端與服務(wù)器的傳輸過程中的安全,由安全模塊負(fù)責(zé)維護(hù),避免數(shù)據(jù)丟失或泄漏,如圖4所示。
圖4 信息傳輸?shù)陌踩?/p>
安全模塊負(fù)責(zé)通訊錄業(yè)務(wù)數(shù)據(jù)安全處理,如加解密等。在服務(wù)器與客戶端信息傳送過程中,首先將二進(jìn)制碼轉(zhuǎn)換為Base64碼,之后再進(jìn)行加密,加密算法由各網(wǎng)絡(luò)實(shí)體建立會話時通過TLS協(xié)商[11],在本系統(tǒng)中使用MD5進(jìn)行加密。
3.3.2 呈現(xiàn)安全性
在網(wǎng)絡(luò)通訊錄客戶端信息呈現(xiàn)時,由于其實(shí)現(xiàn)了通訊錄的共享,考慮到用戶的隱私,系統(tǒng)必須提供隱私保護(hù)功能,有4種策略供用戶選擇:
①允許用戶選擇不加入網(wǎng)絡(luò)通訊錄中,即不公開用戶任何信息;
②允許用戶的信息只對特定人員公開,如設(shè)置密友圈,對其信息保持透明;
③允許用戶只公開姓名,不公開聯(lián)系方式,使用者可以直接點(diǎn)擊撥號,而無需獲知對方的具體聯(lián)系號碼。如電話以 8XXXXXXX1,手機(jī)以1XXXXXXXXX6的形式呈現(xiàn),只呈現(xiàn)號碼首位和末位,其余隱蔽;
④允許用戶完全公開其個人信息;這種策略適用于企業(yè)客服賬號等情況,以滿足對外開放的需要。
服務(wù)器根據(jù)用戶選擇的隱私策略,在其向客戶端傳送時,即對網(wǎng)絡(luò)通訊錄的信息進(jìn)行了針對性的屏蔽,客戶端只需照常負(fù)責(zé)呈現(xiàn)即可,如圖5所示。
圖5 隱私策略的處理
3.3.3 用戶權(quán)限管理
在客戶端為用戶提供多種權(quán)限的管理[12],用戶可以自行設(shè)置黑白名單,自主管理,對辦公電話和私人電話設(shè)置不同的隱私級別等,服務(wù)器端負(fù)責(zé)對所有用戶的身份驗(yàn)證和數(shù)據(jù)查看權(quán)限的控制,使權(quán)限設(shè)置更為精細(xì),以提高用戶的隱私保護(hù)安全性。
設(shè)計的網(wǎng)絡(luò)通訊錄已在企業(yè)應(yīng)用環(huán)境下得以成功使用,網(wǎng)絡(luò)通訊錄利用數(shù)據(jù)同步技術(shù),從群體角度減少通訊錄錄入的總體工作量,有效降低了用戶維護(hù)通訊錄的成本,從而促進(jìn)了用戶與好友的溝通交流;在數(shù)據(jù)映射和格式轉(zhuǎn)換中,采用了xml數(shù)據(jù)格式,以統(tǒng)一的方式來對不同系統(tǒng)中異構(gòu)的通訊錄數(shù)據(jù)進(jìn)行轉(zhuǎn)換,使系統(tǒng)可以兼容其他客戶端通訊錄數(shù)據(jù),拓展了軟件的可用性;同時注重用戶的隱私數(shù)據(jù)保護(hù),確保信息使用安全。
但是所研究的技術(shù)不適用于本地通訊錄的范疇,且在網(wǎng)絡(luò)情況不佳時,用戶體驗(yàn)較差。在格式轉(zhuǎn)換部分,現(xiàn)有的方式需要用戶對業(yè)務(wù)和數(shù)據(jù)本身有所分析和了解,才能進(jìn)行數(shù)據(jù)映射操作,在下一步工作中,可以改進(jìn)開發(fā)更為簡便易用的系統(tǒng)。
作為一項(xiàng)基本業(yè)務(wù)功能,通訊錄在統(tǒng)一通信系統(tǒng)中具有舉足輕重的地位,通過研究并實(shí)現(xiàn)企業(yè)統(tǒng)一通信應(yīng)用環(huán)境下網(wǎng)絡(luò)通訊錄信息同步、格式轉(zhuǎn)換和隱私保護(hù)等方面的關(guān)鍵技術(shù),確保網(wǎng)絡(luò)通訊錄能夠提供準(zhǔn)確、及時和安全的聯(lián)系信息,有助于提升用戶體驗(yàn)。
[1] YDT 2014-2009,統(tǒng)一通信業(yè)務(wù)需求[S].
[2] 苗凱.XMPP的安全機(jī)制分析[J].通信技術(shù),2003(8):101 -103.
[3] 潘鳳,王華軍,苗放,等.基于XMPP協(xié)議和Openfire的即時通信系統(tǒng)的開發(fā)[J].計算機(jī)時代,2008(3):15-19.
[4] 歐偉新.統(tǒng)一通信企業(yè)通訊錄設(shè)計技術(shù)與實(shí)現(xiàn)[D].南京:南京郵電大學(xué),2012:18 -22.
[5] rfc3920,Extensible Messaging and Presence Protocol(XMPP):Core[S].
[6] 劉志福.基于XMPP的iOS上的IM客戶端的研究與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2012:25-29.
[7] 葛春林,周杰,蔡磊.基于 XML和 COM(MAPI)的通用地址簿設(shè)計[J].計算機(jī)應(yīng)用與軟件,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數(shù)據(jù)庫入門經(jīng)典-C#編程篇[M].北京:清華大學(xué)出版社,2003:346-371.
[11]劉培鶴,牛曉蕾,杜鵬,等.企業(yè)即時通信系統(tǒng)安全性分析與設(shè)計[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2007(2):78-81.
[12]張力.基于XMPP協(xié)議的企業(yè)級即時通訊系統(tǒng)設(shè)計與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2011:29-32.