藍牙核心規范V5.2)7.2-深入詳解之SDP(五星推薦☆☆☆☆☆)

      網友投稿 704 2022-05-30

      藍牙篇之藍牙核心規范(V5.2)深入詳解匯總

      目錄

      1. SDP(The Service Discovery protocol )作用

      2.SDP客戶端和服務器架構

      3.服務記錄

      4.服務屬性

      5.服務類別

      7.搜索服務

      8.瀏覽服務

      9.數據表示

      藍牙核心規范(V5.2)7.2-深入詳解之SDP(五星推薦☆☆☆☆☆)

      10.協議描述

      10.服務屬性定義

      11.SERVICEDISCOVERYSERVER服務類屬性定義

      12.BROWSEGROUPDESCRIPTOR服務類屬性定義

      1. SDP(The Service Discovery protocol )作用

      為應用程序提供了一種發現哪些服務可用并確定這些可用服務的方法。解決藍牙環境的獨特特性。

      SDP提供了一種發現服務及其屬性的機制(包括相關的服務訪問協議),但它沒有提供利用這些服務的機制(例如提供服務訪問協議)。

      2.SDP客戶端和服務器架構

      SDP客戶端-服務器交互

      服務發現機制為客戶端應用程序提供了發現服務器應用程序提供的服務的存在以及這些服務的屬性的手段。服務的屬性包括所提供的服務的類型或類別,以及利用該服務所需的機制或協議信息。

      SDP服務器作用

      維護由服務記錄列表組成的SDP數據庫描述與服務器關聯的服務的特征的。每個服務記錄包含有關單個服務的信息。客戶端可以檢索SDP服務器通過發出SDP請求。

      SDP客戶端如何使用服務器

      如果客戶端或與客戶端相關聯的應用程序決定使用服務,則它將打開與服務提供商的單獨連接,以利用該服務.

      多個應用程序提供服務如何處理?

      如果一個設備上的多個應用程序提供服務,則SDP服務器可以代表這些服務提供者來處理有關他們所提供的服務信息的請求

      多個客戶端應用程序如何處理?

      多個客戶端應用程序可以利用一個SDP客戶端代表該客戶端應用程序查詢服務器。

      潛在客戶端如何訪問可用服務器?

      必須通過SDP以外的方式通知潛在客戶端,以便客戶端可以使用SDP查詢服務器關于其服務。

      服務器不可用時,客戶端如何知道?

      當服務器保持接近或由于任何原因不可用時,就不會通過服務發現協議發出顯式通知。但是,客戶端可以使用SDP來輪詢服務器,如果服務器不再響應請求,則可能會推斷該服務器不可用。

      3.服務記錄

      什么是服務?

      服務是指可以代表另一個實體提供信息、執行操作或控制資源的任何實體。一種服務可以作為軟件、硬件或硬件和軟件的組合來實現。

      服務記錄是記錄的什么?

      可服務的所有信息,服務器記錄本質就是服務屬性的列表。

      服務記錄句柄

      一個32位的數字,它應唯一地標識SDP服務器內的每個服務記錄。每個句柄只在每個SDP服務器中是唯一的。

      服務記錄句柄應在連續的L2CAP連接中保持有效,而服務數據庫狀態屬性值應保持不變。

      服務記錄句柄應保持有效,直到相應的服務被永久刪除或以不兼容的方式更改

      4.服務屬性

      服務屬性由兩個組件組成:一個屬性ID和一個屬性值。

      Attribute ID

      屬性ID是一個16位的無符號整數,它可以區分每個服務屬性和服務記錄中的其他服務屬性。屬性ID還標識關聯的屬性值的語義。

      Attribute value

      屬性值是一個變量長度的字段,其含義由與之相關聯的屬性ID和包含該屬性的服務記錄的服務類決定。在服務發現協議中,一個屬性值被表示為一個數據元素。通常,任何類型的數據元素都允許作為屬性值,受服務類定義中指定的約束,為該屬性分配一個屬性ID,并為該屬性值分配一個含義。

      5.服務類別

      服務類別定義

      提供了表示該類實例的服務記錄中包含的所有屬性的定義(每個屬性定義都指定屬性ID的數值、屬性值的預期用途以及屬性值的格式)

      UUID

      每個服務類唯一的標識符,服務類標識符包含在服務器ClassIDList屬性的屬性值。

      如果在產品的SDP數據庫中暴露了服務類UUID,則包含SDP記錄的產品應符合定義與UUID對應的服務的規范。

      新服務類別

      當定義現有服務類的新服務類時,新服務類保留其超類中定義的所有屬性。可以定義特定于新服務類的其他屬性。換句話說,向現有服務類的某些實例添加新屬性的機制是創建一個新的服務類,該服務類是現有服務類的子類。

      7.搜索服務

      服務搜索事務允許客戶端根據這些服務記錄中包含的屬性的值來檢索特定服務記錄的服務記錄句柄。一旦SDP客戶端有了一個服務記錄句柄,它就可以請求特定屬性的值。

      UUID(Universally Unique Identifiers)

      可用于搜索服務的服務的重要屬性被表示為uuid。

      UUID是一個通用的唯一標識符,保證在不同的應用程序中是唯一的所有的空間和時間。

      UUID是128位的值

      藍牙基礎UUID

      Bluetooth_Base_UUID:00000000000000000-8000-00805F9B34FB

      為什么我們看到了有16位和32位的UUID?

      為了減少存儲和傳輸128位UUID值的負擔,已經預先分配了一系列UUID值,以分配給常用的、已注冊的目的。

      預先分配范圍內的UUID值有用16位或32位值表示的別名。這些別名通常被稱為16位和32位的uuid,但每個都實際上代表一個128位的UUID值。

      128BIT uuid計算公式

      128_bit_value = 16_bit_value * 2^96 + Bluetooth_Base_UUID

      128_bit_value = 32_bit_value * 2^ 96 + Bluetooth_Base_UUID

      注意:可以直接比較兩個16位UUid,比如兩個32位UUid或兩個128位UUid。如果要比較兩個不同大小的uuid,則在進行比較前必須將較短的UUID轉換為較長的UUID格式。

      服務搜索模式

      用于定位匹配的服務記錄的uuid的列表。

      如果該服務搜索模式中的每個UUID都包含在該服務記錄的任何屬性值中,則該服務搜索模式將與該服務記錄相匹配。

      uuid不需要包含在任何特定屬性中,或包含在服務記錄中的任何特定順序中。

      如果服務所包含的UUId構成服務記錄屬性值中UUId的子集,則服務搜索模式匹配。

      有效的服務搜索模式必須至少包含一個UUID。

      8.瀏覽服務

      什么是瀏覽服務?

      客戶端根據服務的某些期望特征(由UUID表示)搜索服務。但是,有時希望發現SDP服務器的服務記錄描述了哪些類型的服務,而不需要任何關于這些服務的先驗信息。這個尋找任何所提供的服務的過程

      客戶端瀏覽SDP服務器的過程

      1.它將創建一個包含表示根瀏覽組的UUID的服務搜索模式

      2.通過將根瀏覽組的UUID在瀏覽組列表屬性中作為一個值,所有可以在頂層瀏覽的服務都成為根瀏覽組的成員

      9.數據表示

      SDP定義了一種簡單的機制來描述屬性ID、屬性ID范圍和屬性值中包含的數據。所使用的原語構造是數據元素。

      數據元素類型用5位類型描述符表示。類型描述符包含在數據元素頭的第一個字節的最重要的(高階)5位中。已經定義了以下類型。

      數據元素大小描述符

      數據元素大小描述符表示為3位大小索引,后面跟著0、8、16或32位。大小索引包含在數據元素頭的第一個字節的最小重要的(行字器)3位中。大小索引的編碼如下。

      數據元素示例

      10.協議描述

      SDP是一個簡單的協議,對底層傳輸的要求最小。它可以通過可靠的數據包傳輸進行工作(甚至不可靠,如果客戶端執行超時并在必要時重復請求)

      SDP使用一個請求/響應模型,其中每個事務由一個請求協議數據單元(PDU)和一個響應PDU組成。在SDP與藍牙L2CAP傳輸協議一起使用的情況下,每次連接到給定SDP服務器的SDP瞬間不超過一個SDP請求PDU。換句話說,客戶端應等待對其當前請求的響應,然后再發出對同一L2CAP連接的另一個請求。將SDP限制為發送一個未確認的請求PDU提供了一種簡單的流控制形式。

      傳輸字節順序

      服務發現協議應按標準網絡字節順序(大中位數)傳輸多字節字段,在不重要(低階)字節之前傳輸更重要(高階)字節。

      協議數據單元格式

      每個SDP PDU由一個PDU頭和PDU特定的參數組成。標頭包含三個字段:一個PDUID、一個事務處理ID和一個參數長度。這里描述了每個標題字段。參數可以包括延續狀態參數,如下所述;每種PDU類型的PDU特定參數稍后將在單獨的PDU描述中描述。

      PDU ID:

      TransactionID:

      ParameterLength:

      部分響應與連續態

      當SDP請求超出單個響應PDU的響應時應該怎么做?

      SDP服務器應生成部分響應和延續狀態參數。繼續狀態參數可以由客戶端在后續請求中提供,以檢索完整響應的下一部分。延續狀態參數是一個可變長度字段,其第一個字節包含字段中延續信息的附加字節數(info字長)

      客戶端接收到部分響應和連續狀態參數后的操作:

      它可以重新發出原始請求(使用新的事務ID),并在新請求中包含繼續狀態,向服務器指示需要原始響應的剩余部分。“信息長度”字段的最大允許值為16(0x10)。

      錯誤處理

      如果服務器確定請求的格式不正確,或由于任何原因,服務器無法使用適當的PDU類型進行響應,則應使用SDP_ERROR_RSP PDU進行響應

      SDP_ERROR_RSP PDU

      PDU parameters:

      服務搜索事務

      SDP_SERVICE_SEARCH_REQ PDU

      SDP客戶端生成一個SDP_SERVICE_SEARCH_REQ,以定位與作為PDU的第一個參數給 出的服務搜索模式相匹配的服務記錄。在收到此請求后,SDP服務器應檢查其服務記錄數據庫,并返回包含其SDP數據庫中匹配給定服務搜索模式的服務記錄句柄或適當的錯誤響應的SDP_SERVICE_SEARCH_RSP。

      PDU參數:

      ServiceSearchPattern:

      MaximumServiceRecordCount:

      Continue status:

      SDP_SERVICE_SEARCH_RSP PDU

      SDP服務器在收到有效的SDP_SERVICE_SEARCH_REQ時生成一個SDP_SERVICE_SEARCH_RSP。

      該響應包含與請求中給出的服務搜索模式相匹配的服務記錄的服務記錄句柄的列表。如果生成部分響應,則應只包含完整的服務記錄句柄;服務記錄句柄值不得在多個pdu之間進行分割.

      PDU參數:

      TotalServiceRecordCount:

      CurrentServiceRecordCount:

      ServiceRecordHandleList:

      ServiceRecordHandleList:

      服務屬性事務

      SDP_SERVICE_ATTR_REQ PDU

      SDP客戶端生成一個SDP_SERVICE_ATTR_REQ,以從特定的服務記錄中檢索指定的屬性值。所需服務記錄的服務記錄句柄和要從該服務記錄中檢索到的所需屬性id的列表作為參數提供。

      SDP_SERVICE_ATTR_RSP PDU

      SDP服務器在收到有效的SDP_SERVICE_ATTR_REQ時生成一個SDP_SERVICE_ATTR_RSP。響應包含請求服務記錄的屬性列表(屬性ID和屬性值)。

      服務指定的屬性事務處理

      SDP_SERVICE_SEARCH_ATTR_REQ PDU

      SDP_SERVICE_SEARCH_ATTR_REQ事務將SDP_SERVICE_SEARCH_REQ和SDP_SERVICE_ATTR_-REQ的功能組合為單個請求。作為參數,它同時包含服務搜索模式和要從與服務搜索模式相匹配的服務記錄中檢索到的屬性列表。SDP_SERVICE_SEARCH_ATTR_REQ及其響應更為復雜,可能比單獨的SDP_-服務搜索和SDP_ServiceAttribute事務需要更多的字節。但是,使用SDP_-SERVICE_SEARCH_ATTR_REQ可以減少SDP事務的總數,特別是在檢索多個服務記錄時。

      每個服務記錄的服務記錄句柄包含在該服務的服務記錄句柄屬性中,可以與其他屬性一起被請求。

      SDP_SERVICE_SEARCH_ATTR_RSP PDU

      SDP服務器在收到有效的SDP_SERVICE_SEARCH_ATTR_REQ時生成一個SDP_SERVICE_SEARCH_ATTR_RSP。響應包含與請求的服務搜索模式匹配的服務記錄中的屬性列表(包括屬性ID和屬性值)。

      10.服務屬性定義

      什么是通用屬性定義?

      通用屬性是那些定義與所有服務記錄通用的服務屬性。這并不意味著每個服務記錄都包含所有這些服務屬性的值。但是,如果服務記錄具有屬性標識為通用屬性的通用屬性,則該屬性值應符合通用屬性的定義。

      在每個服務記錄實例中只需要存在兩個屬性。它們是服務器記錄句柄(屬性ID0x0000)和服務ClassIDList(屬性ID0x0001)。服務記錄中的所有其他服務屬性都是可選的。

      ServiceRecordHandle屬性

      服務記錄句柄是一個唯一標識SDP服務器內的32位服務記錄。一般來說,每個句柄只在每個SDP服務器中是唯一的。如果SDP服務器S1和SDP服務器S2都包含相同的服務記錄(代表相同的服務),則用于引用這些相同的服務記錄的服務記錄句柄是完全獨立的。一般來說,用于引用S1上的服務的句柄如果呈現給S2將毫無意義。保留服務記錄處理柄值0x000000001-0x0000FFFF以供將來使用。

      ServiceClassIDList屬性

      服務ClassIDList屬性由一個數據元素序列組成,其中每個數據元素都是一個表示給定服務記錄所符合的服務類的UUID。除非定義服務類的配置文件規范另有規定,否則應該從最特定的類到最一般的類列出。當配置文件被增強時,應該在服務ClassID列表的末尾(在任何現有的UUID之后)添加任何新的UUID,以盡量減少與遺留實現的互操作性問題。服務類標識列表應至少包含一個服務類UUID。

      ServiceRecordState 屬性

      服務記錄狀態是一個32位的整數,用于方便緩存服務屬性。如果該屬性包含在服務記錄中,則在服務記錄中添加、刪除或更改任何其他屬性值時,應更改其值。這允許客戶端檢查此單個屬性的值。如果自上次檢查以來其值沒有更改,則客戶端知道服務記錄中的其他屬性值沒有更改。

      ServiceID屬性

      服務標識是一個UUIDID,它普遍且唯一地標識服務記錄所描述的服務實例。如果由多個SDP服務器中的服務記錄描述了相同的服務,則此服務屬性特別有用。

      ProtocolDescriptorList屬性

      “協議描述符列表”屬性描述了可用于訪問服務記錄所描述的服務的一個或多個協議堆棧。

      如果協議描述符列表描述了單個堆棧,則它采用了數據元素序列的形式,其中序列中的每個元素都是一個協議描述符。每個協議描述符依次是一個數據元素序列,其第一個元素是標識協議的UUID,其連續元素是特定于協議的參數。潛在的特定于協議的參數是協議版本號和連接端口號。協議描述符按從最底層協議到用于訪問該服務的最高層協議的順序列出。

      如果可以使用一種以上的協議堆棧來訪問該服務,則協議描述符列表采用數據元素替代方案的形式,其中每個成員都是如前一段所述的數據元素序列。

      協議描述符

      協議描述符標識通信協議并提供協議的參數。協議描述符用數據元素序列表示。序列中的第一個數據元素應是標識協議的UUID。附加的數據元件可選地提供特定于協議的信息,例如L2CAP協議/服務多路復用器(PSM)和RFCOMM服務器信道號(CN)。

      AdditionalProtocolDescriptorList屬性

      附加協議描述符列表屬性包含協議描述符列表元素序列。每個元素都具有與第5.1.5節中描述的協議描述器列表相同的格式。元素的順序很重要,應該在使用此屬性的配置文件中指定和修復。

      BrowseGroupList屬性

      瀏覽組列表屬性由一個數據元素序列組成,其中每個元素都是一個UUID,它表示服務記錄所屬的瀏覽組。頂級瀏覽組ID稱為PuricBrowseRoot,表示瀏覽層次結構的根,來自分配數字的值為00001002-0000-1000-8000-00805F9B34FB(UUID16:0x1002)。

      LanguageBaseAttributeIDList屬性

      ServiceInfoTimeToLive屬性

      ServiceTimeToLive屬性是一個32位整數,包含服務記錄中的信息預計保留的秒數有效且不變。此時間間隔從從SDP服務器檢索屬性值。此值并不意味著保證服務記錄保持可用或不變。它是這只是一個提示,客戶端可以使用它來確定適當的輪詢間隔,以重新驗證服務記錄內容。

      ServiceAvailability屬性

      服務可用性屬性是一個8位無符號整數,它表示服務接受其他客戶端的相對能力。值為0xFF表示該服務當前未在使用中,因此已完全可用,而值為0x00表示該服務不接受新客戶端。對于支持多個同時使用的客戶端的服務,中間值表示在線性規模上的服務的相對可用性。

      例如,當0、1、2和3個客戶端使用該服務時,可以接受多達3個客戶端的服務應該分別提供0xFF、0xAA、0x55和0x00的服務可用性值。值0xAA約為(2/3)*0xFF,表示2/3的可用性,而值0x55約為(1/3)*0xFF,并表示1/3的可用性。可用性值近似為

      ( 1 - ( current_number_of_clients / maximum_number_of_clients ) ) * 0xFF

      當最大客戶端數量較大時,必須修改此公式,以確保0x00和0xFF的服務可用性值分別保留為其定義的不可用性和完全可用性含義。

      注意:服務可以支持的最大客戶端數量可能會根據服務的當前客戶端所使用的資源而有所不同。

      服務可用性的非零值并不能保證該服務將可供使用。它應被視為可用性狀態的提示或近似值。

      BluetoothProfileDescriptorList屬性

      BluetoothProfileDescriptorList屬性由一個數據元素序列組成,其中每個元素都是一個配置文件描述符,其中包含關于此服務記錄所表示的服務符合的藍牙配置文件的信息。每個配置文件描述符都是一個數據元素序列,其第一個元素是分配給該配置文件的UUID,其第二個元素是一個16位的配置文件版本號。

      配置文件的每個版本都被分配了一個16位無符號整數配置文件版本號,該版本號由兩個8位字段組成。高階8位包含主要版本號字段,低階8位包含次要版本號字段。每個配置文件的初始版本都有一個主要版本為1,另一個次要版本為0。當對配置文件進行向上兼容的更改時,次要版本號將會增加。如果對配置文件進行了不兼容的更改,主要版本號。

      DocumentationURL屬性

      此屬性是一個指向服務記錄所描述的服務上的文檔的URL。

      ClientExecutableURL屬性

      此屬性包含一個URL,該應用程序引用了可用于利用服務記錄所描述的服務的應用程序的位置。由于不同的操作環境需要不同的可執行格式,因此已經定義了一種機制,允許此單個屬性用于定位適合于客戶端設備的操作環境的可執行文件。在屬性值URL中,第一個值為0x2A(ASCII字符“*”)的字節將用字符串表示所需操作環境的字符串替換。

      表示操作環境的標準化字符串的列表包含在“已分配的數字”中。

      例如,假定客戶端執行表URL屬性的值為http://my.fake/public/*/client.exe。在能夠執行SH3WindowsCE文件的設備上,此URL將被更改為http://my.fake/public/sh3-microsoft-wince/client.exe。在能夠執行Windows98二進制文件的設備上,此URL將被更改為http://my.fake/public/i86-microsoftwin98/client.exe.

      IconURL屬性

      此屬性包含一個URL,該圖標引用了可用于表示服務記錄所描述的服務的圖標的位置。由于不同的硬件設備需要不同的圖標格式,因此已經定義了一種機制,允許使用此單一屬性來定位適合于客戶端設備的圖標。在屬性值URL中,第一個值為0x2A(ASCII字符“*”)的字節將被一個表示所需圖符格式的字符串替換

      表示圖標格式的標準化字符串列表包含在“已分配的數字”中。

      例如,假設IconURL屬性的值為http://my.fake/公共/圖標/*。在一個更喜歡使用256種顏色的24x24個圖標的設備上,這個URL將被更改為http://my.fake/public/icons/24x24x8.png。在一個更喜歡10x10個單色圖標的設備上,這個URL將被更改為http://my.fake/public/icons/10x10x1.png。

      ServiceName 屬性

      服務名稱屬性是一個包含由服務記錄所代表的服務名稱的字符串。它應該簡短,適合顯示有代表服務的圖標。偏移量0x0000被添加到屬性ID基礎(包含在語言基礎屬性ID列表屬性中),以計算該屬性的屬性ID。

      ServiceDescription屬性

      此屬性是一個包含對該服務的簡要描述的字符串。其長度應小于200個字符。該偏移量0x0001被添加到屬性ID基礎(包含在語言基礎屬性ID列表屬性中),以計算該屬性的屬性ID。

      ProviderName屬性

      此屬性是一個包含提供該服務的人員或組織的名稱的字符串。該偏移量0x0002被添加到屬性ID基礎(包含在語言基礎屬性ID列表屬性中),以計算該屬性的屬性ID。

      保留通用屬性ID

      保留0x000E到0x0x00FF范圍內的屬性id供將來使用。

      11.SERVICEDISCOVERYSERVER服務類屬性定義

      ServiceRecordHandle屬性

      在服務記錄句柄的通用屬性定義中描述。

      值為0x00000000的32位整數

      ServiceClassID列表屬性

      一種表示服務發現服務器服務類ID的UUID。

      VersionNumberList屬性

      版本數字列表是一個數據元素序列,其中序列中的每個元素都是一個由SDP服務器支持的版本號。

      版本號是一個由兩個字段組成的16位無符號整數。高階8位包含主要版本號字段,低階8位包含次要版本號字段。SDP的初始版本的主要版本為1,次要版本為0。當對協議進行向上兼容的更改時,次要版本號將會增加。如果對SDP進行了不兼容的更改,則將增加主要版本號。這保證了如果客戶端和服務器支持一個通用的主要版本號,那么如果每個版本號只使用一個客戶端和服務器都支持的次要版本號的規范特性,它們就可以進行通信。

      ServiceDatabaseState屬性

      服務數據庫狀態是一個32位的整數,用于方便服務記錄的緩存。如果存在此屬性,則當將任何其他服務記錄添加或刪除到服務器的SDP數據庫時,應更改其值。如果自上次客戶端查詢其值以來,該值沒有更改,則客戶端知道a)沒有添加或刪除SDP服務器維護的其他服務記錄;b)從服務器獲取的任何服務記錄句柄仍然有效。在使用在之前的連接期間獲得的任何服務記錄句柄之前,在建立到服務器的連接時,客戶端應查詢此屬性的值。

      當修改現有的服務記錄時,包括服務屬性的添加、刪除或修改時,服務數據庫狀態屬性不會更改。服務記錄的服務記錄狀態屬性指示修改該服務記錄的時間。

      保留屬性id

      保留在0x0202到0x02FF范圍內的屬性id以供將來使用。

      12.BROWSEGROUPDESCRIPTOR服務類屬性定義

      此服務類描述了為藍牙設備上提供的每個瀏覽組描述符服務提供的服務記錄。本節中列出的屬性只有在服務CrassIDList屬性包含BrowseGroupDescriptorServiceClassID.時才有效注意:所有的通用屬性都可以包含在瀏覽組描述器類的服務記錄中。

      注意:所有的通用屬性都可以包含在瀏覽組描述器類的服務記錄中。

      ServiceClassIDList屬性

      在服務類id列表的通用屬性定義中描述。

      表示BrowseGroupDescriptorServiceClassID的UUID。

      GroupID屬性

      此屬性包含一個UUID,可用于定位此服務記錄所描述的瀏覽組成員的服務。

      TCP/IP 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:當大數據深度學習失效時
      下一篇:分布式主動感知在智能運維中的實踐|分享實錄(物聯網中全面感知特點能夠感知哪些數據)
      相關文章
      亚洲国产成人久久精品影视| 欧美亚洲国产SUV| 国产a v无码专区亚洲av| 亚洲成a∨人片在无码2023 | 亚洲Aⅴ无码一区二区二三区软件| 亚洲成_人网站图片| 亚洲欧洲日产专区| 亚洲午夜一区二区电影院| 亚洲福利电影一区二区?| 亚洲尹人香蕉网在线视颅| 亚洲制服中文字幕第一区| 亚洲天堂男人天堂| 精品日韩亚洲AV无码一区二区三区 | 亚洲制服在线观看| 亚洲一级毛片中文字幕| 亚洲宅男精品一区在线观看| 亚洲激情视频图片| 亚洲日韩一区二区一无码| 亚洲AV无码AV男人的天堂不卡| 亚洲精华国产精华精华液网站| 亚洲精品精华液一区二区| 亚洲国产欧美一区二区三区| 亚洲精品伦理熟女国产一区二区| 亚洲高清毛片一区二区| 国产亚洲精品精品精品| 亚洲女人被黑人巨大进入| 4338×亚洲全国最大色成网站| 亚洲精品乱码久久久久久按摩 | 亚洲香蕉久久一区二区三区四区| 亚洲中文久久精品无码1| 日本亚洲免费无线码| 国产精品国产亚洲区艳妇糸列短篇 | 久久精品国产精品亚洲下载| 国产亚洲情侣一区二区无码AV| 亚洲香蕉网久久综合影视| 亚洲高清国产AV拍精品青青草原| 亚洲精品福利视频| 亚洲videos| 国产精品亚洲一区二区在线观看| 亚洲精品视频在线看| 国产亚洲精品a在线无码|