<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 一個(gè)點(diǎn)到點(diǎn)的郵件系統設計

一個(gè)點(diǎn)到點(diǎn)的郵件系統設計

作者: 時(shí)間:2005-11-24 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:簡(jiǎn)單介紹在多功能電話(huà)上實(shí)現點(diǎn)郵件收發(fā)系統的技術(shù)和過(guò)程。在通信方面,系統使用串口通信,通過(guò)Modem用電話(huà)號碼作為收發(fā)者的地址,避免網(wǎng)絡(luò )通信中需要IP地址的問(wèn)題。在架構上,系統分為服務(wù)層和客戶(hù)層:服務(wù)層負責通信鏈路的建立和數據的收發(fā),客戶(hù)層負責郵件管理和客戶(hù)界面,增加了系統的靈活性。由于Modem的傳輸速率有限,好的通信協(xié)議有助于提高郵件的收發(fā)速率,因此結合現有串口通信協(xié)議的特點(diǎn),并實(shí)現TMP協(xié)議。通過(guò)該協(xié)議,郵件收發(fā)系統每秒可以收發(fā)2 KB的郵件數據。

關(guān)鍵詞:點(diǎn)到點(diǎn)  串口通信 AT指令

引 言


  大量嵌入式設備已經(jīng)進(jìn)入人們的日常生活和工作中,人們對嵌入式設備的要求越來(lái)越高,功能也越來(lái)越復雜。筆者與一個(gè)嵌入式硬件制造商合作,為其嵌入式電話(huà)產(chǎn)品建立了一個(gè)軟件系統,包括操作系統、驅動(dòng)程序和一系列應用軟件。其中點(diǎn)到點(diǎn)郵件收發(fā)系統是一個(gè)有明顯特色的應用。

  本系統是一個(gè)基于串口通信的點(diǎn)到點(diǎn)郵件收發(fā)軟件。運行在嵌入式系統上的郵件收發(fā)程序通過(guò)Modem以撥號方式連上遠端的嵌入式系統,然后進(jìn)行郵件發(fā)送工作。系統結構如圖1所示。
   
                 圖1Tmail系統結構

  從用戶(hù)角度看,其發(fā)送流程與普通的電子郵件差不多。用戶(hù)在編輯好郵件以后,在收信人一欄中填入對方的電話(huà)號碼,點(diǎn)擊發(fā)送,系統就會(huì )把郵件發(fā)送給對應電話(huà)號碼的遠端用戶(hù)處,當然遠端也必須接有同樣的嵌入式系統。

  系統運行在基于A(yíng)RM的S3C2410芯片嵌入式目標板上[1]。操作系統是定制的嵌入式Linux,圖形界面使用Qt/Embedded支持。

1 系統的構架

  系統主要由數據傳輸、郵件編碼、郵件管理和用戶(hù)界面四部分組成。由于要時(shí)刻監視串口的狀態(tài),所以系統要一直處于運行狀態(tài)。但由于嵌入式系統的內存資源和計算資源有限,要盡量減少程序運行時(shí)帶給整個(gè)系統的負載,采用了兩層的結構,分別叫作服務(wù)層和用戶(hù)層。服務(wù)層負責數據傳輸和郵件編碼,用C語(yǔ)言編寫(xiě),生成的可執行文件較小,一直處于運行狀態(tài);用戶(hù)層負責郵件的管理和用戶(hù)界面,用C++配以Qt/Embedded編寫(xiě),由于有大量的界面元素,所以其可執行文件較大,只有用戶(hù)需要查看和發(fā)送郵件時(shí)才運行。這樣就可以大大減少占用的資源,使整個(gè)系統具有更快的速度。

  用戶(hù)層與服務(wù)層的通信分兩個(gè)方面:一方面,當用戶(hù)層運行時(shí)通過(guò)信號和共享內存實(shí)現實(shí)時(shí)通信;另一方面,當用戶(hù)層沒(méi)有運行時(shí),用文件暫存收到的郵件,在用戶(hù)層運行后,再由它通知用戶(hù)。

  當需要發(fā)送郵件時(shí),用戶(hù)層先把本地郵件拷貝到共享內存中,然后發(fā)送信號通知服務(wù)層,服務(wù)層接收到信號后,把郵件取出、編碼和發(fā)送。在發(fā)送過(guò)程中,為了讓用戶(hù)看到發(fā)送的進(jìn)度,服務(wù)端把狀態(tài)信息放在共享內存中,然后發(fā)送信號通知用戶(hù)層更新?tīng)顟B(tài)。當接收郵件時(shí),若用戶(hù)層沒(méi)有運行,則把收到的郵件解碼后暫存到文件中;若用戶(hù)層運行著(zhù),則服務(wù)層通過(guò)共享內存和信號不斷把接收進(jìn)度傳遞給用戶(hù)層,使其顯示給用戶(hù),但此時(shí)并不會(huì )把郵件數據傳給用戶(hù)層,因為此時(shí)的郵件數據是經(jīng)過(guò)編碼的,等所有數據都接收結束后,服務(wù)層才會(huì )把郵件解碼成本地郵件,然后再傳送給用戶(hù)層保存、顯示。

2 服務(wù)層的設計與實(shí)現

2.1 串口的初始化

  在Linux中,串口的設備文件一般為/dev/ttyS0和/dev/ttyS1,分別表示串口1和串口2。首先要用open命令打開(kāi)串口,然后根據具體的應用來(lái)配置串口,比如設置波特率、校驗方法、數據位、停止位和流控制等。

2.2 連接的建立和拆除

  連接的建立過(guò)程,就如同一般的撥號上網(wǎng)過(guò)程。不同的只是,撥打的電話(huà)號碼不是ISP的號碼,而是收信人的號碼,因此需要在收信人方建立一個(gè)撥號服務(wù)器,使它能夠接通外來(lái)的連接請求。Linux下的pppd軟件可以實(shí)現撥號功能,mgetty可以用作撥號服務(wù)器。用pppd和mgetty來(lái)建立連接太過(guò)奢侈,因為只需建立物理上連通的鏈路,而不需要用PPP協(xié)議建立網(wǎng)絡(luò )層鏈路[2]。

  本系統是用AT指令來(lái)編寫(xiě)撥號和撥號服務(wù)器代碼的。AT指令是一組對Modem的操作指令,其中絕大多數指令都以AT開(kāi)頭,以/r結尾[3]。用到的AT指令有:

① 初始化指令――AT;
② 撥號指令――ATDT電話(huà)號碼;
③ 應答指令――ATA;
④ 掛斷指令――+++ATH0。

  工作流程為雙方打開(kāi)串口并初始化后,都向Modem發(fā)送初始化指令(AT),如果返回“OK”,表示成功。成功后,接入方不斷讀取串口(1次/s)等待“RING”字符串。撥號方,通過(guò)撥號指令撥打對方電話(huà)號碼,并讀取串口等待“CONNECT”字符串。此時(shí),接入方會(huì )在串口讀到“RING”,然后向串口發(fā)送應答指令(ATA),并讀取串口等待“CONNECT”字符串。此后,如果雙方都讀取到“CONNECT”,表示連接已經(jīng)建立,可以在此鏈路上傳輸數據。等數據傳輸完成后,撥號方用掛斷指令(+++ATH0)拆除連接。程序的流程如圖2所示。
          
                圖2建立和拆除連接流程

2.3 數據傳輸協(xié)議

  現在著(zhù)名的串口協(xié)議主要有XMODEM和ZMODEM。XMODEM協(xié)議是一種使用撥號調制解調器的個(gè)人計算機通信中廣泛使用的異步文件運輸協(xié)議。這種協(xié)議以128字節塊的形式傳輸數據,并且每個(gè)塊都使用一個(gè)校驗和過(guò)程來(lái)進(jìn)行錯誤檢測。如果接收方關(guān)于一個(gè)塊的校驗和與它在發(fā)送方的校驗和相同時(shí),接收方就向發(fā)送方發(fā)送一個(gè)認可字節。然而,這種對每個(gè)塊都進(jìn)行認可的策略將導致低性能,特別是具有很長(cháng)傳播延遲的衛星連接的情況時(shí),問(wèn)題更加嚴重[4]。ZMODEM協(xié)議是XMODEM文件傳輸協(xié)議的一種增強形式,它不需要對每個(gè)塊都進(jìn)行認可。事實(shí)上,它只是簡(jiǎn)單地要求對損壞的塊進(jìn)行重發(fā)。它不僅能傳輸更大的數據,而且錯誤率更小。包含一種名為檢查點(diǎn)重啟的特性,如果通信鏈接在數據傳輸過(guò)程中中斷,能從斷點(diǎn)處而不是從開(kāi)始處恢復傳輸[5]。

  結合XMODEM和ZMODEM優(yōu)點(diǎn),根據點(diǎn)到點(diǎn)郵件的特性,設計了一個(gè)稱(chēng)之為T(mén)MP(Telephone Mail Protocol)的協(xié)議。

① 郵件發(fā)送方先發(fā)送一個(gè)郵件信息包(其中包括發(fā)送方的電話(huà)號碼和郵件長(cháng)度),然后等待接收方應答。

② 接收方接收到郵件信息包后,發(fā)送應答包,等待郵件內容包。

③ 發(fā)送方接收到應答包后,開(kāi)始發(fā)送郵件內容,直到郵件發(fā)送完畢或收到重發(fā)包。

④ 接收方接收郵件內容包,并檢查其檢驗和,如有誤則發(fā)送重發(fā)包,否則一直接收。

⑤ 發(fā)送方若收到重發(fā)包,則根據重發(fā)包內容重發(fā)部分郵件;若郵件發(fā)送完畢,還未收到重發(fā)包,則發(fā)送郵件結束確認包,要求接收方確認已正確接收到郵件。

⑥ 接收方接收到郵件結束確認包后,發(fā)送應答包,表示自己已正確接收到郵件。

⑦ 發(fā)送方接收到應答包后斷開(kāi)連接。

⑧ 在此過(guò)程中,等待都有超時(shí)計時(shí),一旦超時(shí)就會(huì )斷開(kāi)連接;接收方接收到錯誤的包都會(huì )要求重發(fā),而如果發(fā)送方接收到錯誤的包則會(huì )馬上停止發(fā)送,斷開(kāi)連接。

⑨ 包采用變長(cháng)包,最大長(cháng)度為128字節,結構為
        
其中:
◇ S為包起始符,取值為0x02,占1字節;
◇ E為包結束符,取值為0x03,占1字節;
◇ 包號本為占4字節的整型,但在傳輸過(guò)程中為了防止與包起始和結束符混淆,把它編成了BCD碼,占8字節;
◇ 包類(lèi)型也編成了BCD碼,占2字節;
◇ 檢驗和是以字節為單位,把包號、包類(lèi)型和數據累加起來(lái),然后再編成BCD碼,占2字節;
◇ 數據根據包的類(lèi)型不同而不同,最多可以有114字節。

  由于包的判斷只是依靠包起始符和結束符,包中的其他字段絕對不能與這兩個(gè)字符相同,所以對有些可能產(chǎn)生混淆字符的字段進(jìn)行了編碼。

一共有五種類(lèi)型的數據包:

① 郵件內容包。包類(lèi)型為0x00,數據是編碼的郵件片斷。

② 郵件信息包。包類(lèi)型為0x81,數據是編成BCD碼的發(fā)送方電話(huà)號碼和郵件長(cháng)度。

③ 郵件結束確認包。包類(lèi)型為0x82,無(wú)數據。

④ 應答包。包類(lèi)型為0x83,無(wú)數據。

⑤ 重發(fā)包。包類(lèi)型為0x84,數據是編成BCD碼的新包號和重發(fā)起始位置。

2.4 包的發(fā)送和接收

  包的發(fā)送和接收就是按照包的格式定義讀寫(xiě)串口。郵件的收發(fā)過(guò)程就是依照TMP協(xié)議收發(fā)包的過(guò)程。

2.5郵件的編碼和解碼

  本系統要求發(fā)送的郵件是可以帶附件的。在初始化串口時(shí)使用的是7位數據,而附件內容可能是二進(jìn)制數據,這和普通電子郵件碰到的問(wèn)題一樣,要涉及到對郵件的編碼問(wèn)題。在設計該系統前,已經(jīng)實(shí)現了普通電子郵件的客戶(hù)端軟件,所以就把普通電子郵件的編碼方法應用到這里,也就是點(diǎn)到點(diǎn)郵件也用MIME格式來(lái)編碼[6]。

3 客戶(hù)層的設計與實(shí)現

3.1 本地郵件的格式

  本地郵件是指起草的、已發(fā)的或收到的存放在各信件箱中的郵件。

  本地郵件可以有兩種存放方式:①按照MIME編碼,把編碼后的郵件放在郵箱中。②按照郵件的組成部分存放在郵箱中。第①種方式的好處是,郵件在發(fā)送前和接收后不需要編碼,另外也不需要備份附件文件,可以加快郵件發(fā)送和接收速度。但它有兩個(gè)最大的缺點(diǎn),一是因為附件都會(huì )編入郵件中,需要大量的存儲空間;二是每次顯示郵件時(shí),都需要把郵件解碼,保存時(shí)還要編碼,需要大量的計算資源。這兩點(diǎn)對于資源有限的嵌入式系統來(lái)說(shuō)都是很大的問(wèn)題。所以這里選擇了第②種方式。
本地郵件是以文本方式存放在文件中的。本地郵件由發(fā)件人、收件人、抄送人、已發(fā)送人、時(shí)間、標題、正文、回復地址和附件九部分組成。在文件中,除正文外其余八部分都各占1行。其中,抄送人和已發(fā)送人可以有多個(gè),之間用分號隔開(kāi),附件部分的每個(gè)附件都有附件名和實(shí)際文件名組成。這兩個(gè)文件名間用斜杠隔開(kāi),而不同的附件用分號隔開(kāi)。另外,正文放在郵件的最后,與上面八部分之間有一個(gè)空行格開(kāi),正文所占行數以正文內容而定。一個(gè)本地郵件如下所示:

Date:2004-08-14
To:67165848
From: 67165762
Cc:67161234;67164321
Sent:67165848;67161234
Subject:peer to peer mailer Test
InReplyTo:67165762
Attachments:logo.png/20040814085700;face.png/200408145701

This is a Tmailer Test!
Hello World!

3.2 郵件箱文件的組織形式

一共有四個(gè)郵件箱,它們分別是:
① 草稿箱(draftbox)――存放起草了但尚未準備發(fā)送的郵件。
② 發(fā)件箱(sendbox)――存放起草完成,可以發(fā)送的郵件。
③ 已發(fā)郵件箱(sentbox)――存放已發(fā)送出去的郵件。
④ 收件箱(inbox)――存放收到的郵件。

  每個(gè)郵件箱由兩個(gè)文件組成:郵件內容文件和郵件索引文件。如草稿箱就有草稿郵件內容文件draftbox和草稿郵件索引文件draftbox.index。

  郵件內容文件存放的是該郵件箱中的所有郵件,格式如本地郵件所示。郵件索引文件存放的是每個(gè)郵件的基本信息(在顯示郵件列表時(shí)要用的信息)及該郵件在內容文件中存放的信息。一個(gè)郵件的索引結構如下所示:
typedef struct {
chardate[40];// 起草、收到或發(fā)出的日期
charfrom[64];// 發(fā)件人或收件人
charsubject[140];// 標題
longsize;
// 郵件的大小(在內容文件中所占的字節數)
longposInFile;// 在內容文件中的偏移
intflag;// bit0 = 已讀; bit1 = 是否有附件
}mail_summery_t;

  由于索引文件較小,當顯示某一郵箱的郵件列表時(shí),可以一次性把整個(gè)索引文件內容裝入索引數組中,因此郵件列表的顯示可以不用讀取郵件內容文件,完全取決于索引文件的內容。添加郵件時(shí),在內容文件末尾添加郵件內容,在索引數組中添加一個(gè)索引記錄;修改郵件時(shí),不管原郵件在內容文件中的數據,在內容文件末尾添加郵件內容,修改該郵件索引記錄;刪除郵件時(shí),只需刪除索引記錄即可。

  索引文件的使用有兩大好處:一是在顯示郵件列表時(shí)不用從較大的內容文件中提取想要顯示的信息;二是方便了郵件的訪(fǎng)問(wèn)??梢詫?shí)現郵件的隨機訪(fǎng)問(wèn),如果沒(méi)有索引文件,在每次修改和刪除郵件時(shí),都需要移動(dòng)大量的數據?,F在,雖然會(huì )造成存儲空間的浪費,但這可以提高速度,對于資源有限的嵌入式系統很重要。此外,通過(guò)定時(shí)判斷郵件內容文件的利用率可以壓縮內容文件的大小,盡量減少空間的浪費。

3.3 附件的管理

  在郵件中,附件較之郵件其他信息很大,所以郵件管理中附件的管理十分重要。

① 用戶(hù)在起草郵件并粘貼附件時(shí)要把附件文件備份出來(lái),否則如果用戶(hù)不小心把附件文件刪除后再發(fā)送郵件,就不能發(fā)送該附件了。所以要特別開(kāi)辟出一個(gè)文件夾來(lái)存放備份的附件。

② 用戶(hù)收到郵件并郵件解碼后,把其所帶的附件保存到特定的文件夾。

③ 用戶(hù)在刪除郵件時(shí),也要刪除備份的附件,否則浪費空間。

④ 由于附件文件名有可能相同,所以備份附件時(shí)要使用惟一文件名。產(chǎn)生惟一文件名的方法是取當前時(shí)間字符串加上一個(gè)隨機值字符串。

3.4 郵件的抄送

  本系統也實(shí)現了郵件的抄送功能,即一份郵件可以發(fā)給多個(gè)收信人。用戶(hù)層程序把郵件內容及收信人列表(收件人+抄送人-已發(fā)送人)傳送給服務(wù)層,服務(wù)層程序根據收信人列表逐個(gè)發(fā)送郵件,并記錄發(fā)送成功的收信人。在給所有收信人都發(fā)送過(guò)后(當然不一定每個(gè)都成功發(fā)送),返回一個(gè)已發(fā)送成功的收件人列表給客戶(hù)層,客戶(hù)層把這個(gè)列表添加到本地郵件的sent字段中。當郵件的所有收信人,包括收件人和抄送人都收到郵件后,就認為該郵件發(fā)送完畢,把它移入已發(fā)送郵件箱。

3.5 界面的設計和實(shí)現

Tmailer主要有六個(gè)界面:
① 主菜單對話(huà)框。Tmailer運行后就是該界面。界面上有六個(gè)按鈕,分別用于起草郵件,進(jìn)入4個(gè)郵件箱和退出程序。

② 郵件編輯對話(huà)框。用于編輯郵件,主要有收件人、抄送人、標題和正文4個(gè)編輯框。

③ 郵件查看對話(huà)框。用于查看收到的郵件,不能編輯。這個(gè)對話(huà)框上有兩個(gè)特殊按鈕,“轉發(fā)”按鈕和“回復”按鈕。當點(diǎn)擊“回復”按鈕時(shí),Tmailer先會(huì )起草一篇新郵件,然后把當前郵件的InReplyTo填寫(xiě)到新郵件的收件人欄中,把當前的正文稍作修改填寫(xiě)到新郵件的正文中,然后就可以編輯和發(fā)送該新郵件了。當點(diǎn)擊“轉發(fā)”按鈕時(shí),Tmailer也會(huì )先起草一篇新郵件,把當前的正文稍作修改填寫(xiě)到新郵件的正文中,把當前附件粘貼到新郵件中,然后只要填上收件人就可以轉發(fā)郵件了。

④ 郵件箱對話(huà)框。用于顯示郵件列表和管理郵件。4個(gè)郵件箱共用該界面,不同的郵箱只是個(gè)別按鈕有所不同。當選中郵件按下回車(chē)鍵后,程序會(huì )根據當前所在的郵件箱選擇用郵件編輯對話(huà)框或郵件查看對話(huà)框顯示選中郵件。對于有附件的郵件,在每個(gè)郵件前都有一個(gè)標記標識。在收件箱中,未打開(kāi)郵件會(huì )以粗體顯示,打開(kāi)后就以正常字體顯示。

⑤ 附件編輯對話(huà)框:用于編輯(粘貼和刪除)附件,在郵件編輯對話(huà)框中點(diǎn)擊“附件“按鈕可以打開(kāi)該對話(huà)框。

⑥ 附件查看對話(huà)框。用于查看和保存接收郵件的附件。如果查看的附件是圖像文件,Tmailer會(huì )通過(guò)Qt/Embedded的程序間通信機制把圖像信息傳遞給圖像顯示程序,讓它來(lái)顯示圖像。

結語(yǔ)

  本文介紹了一個(gè)在嵌入式系統上點(diǎn)到點(diǎn)的設計和實(shí)現,重點(diǎn)講述了如何在計算、存儲資源有限的特殊環(huán)境下,來(lái)設計點(diǎn)通信軟件;如何運用AT指令操作Modem;對具體的應用如何來(lái)有效地設計串口的通信協(xié)議和如何對郵件進(jìn)行合理有效的管理。本系統已經(jīng)成功地運行在一款多功能電話(huà)上,將來(lái)通過(guò)擴展還可以增強群發(fā)、定時(shí)發(fā)送等功能。

                  參考文獻
1 Samsung Electronics. S3C2410X 32?Bit Risc Microprocessor User's Manual Revision 1.2, 2003
2 Robert Hart. PPP Howto. http://www.faqs.org/docs/LinuxHowto/PPPHowto.html, 1997
3 Michael R. Sweet. Serial Programming Guide for POSIX Operating Systems(5th Edition). http://digilander.libero.it/robang/rubrica/serial.htm,1999
4 Richard Stevens W. Unix環(huán)境高級編程. 北京:機械工業(yè)出版社, 2000
5 Matt Welsh. Linux權威指南. 第3版. 北京:中國電力出版社, 2000
金震江:碩士研究生,主要研究方向為嵌入式系統。呂強:教授,主要研究方向為計算機操作系統、分布式計算、計算語(yǔ)言學(xué)等。褚亞銘:碩士研究生,主要研究方向為嵌入式操作系統。楊季文:教授,主要研究方向為計算機中文信息處理技術(shù)、計算機操作系統。

c++相關(guān)文章:c++教程




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>