日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WAPPUSH 原理 基于短信网关WAP推送的实现

發布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WAPPUSH 原理 基于短信网关WAP推送的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:?http://blog.163.com/htlxyz@126/blog/static/168594029200962011411709/


基于短信網關WAP推送的實現
WAP PUSH既有信息發送主動、及時的特點,又有可隨時隨地接收信息的優勢,因而具有良好的應用前景。該文簡單介紹了WAP PUSH系統框架、推送協議和推送方式,重點介紹了通過短信網關實現WAP推送的實現方法。?
1 WAP推送技術簡介

  1.1 什么是WAP推送

  WAP推送(PUSH)技術是一種建立在客戶服務器上的機制,就是由服務器主動將信息發往客戶端的技術。同傳統的拉(PULL)技術相比,最主 要的區別在于推送(PUSH)技術是由服務器主動向客戶機發送信息,而拉(PULL)技術則是由客戶機主動請求信息。PUSH技術的優勢在于信息的主動性 和及時性。

  PUSH技術在Internet中沒能取得大的成功,原因是多方面的。主要原因在于固定網中計算機等固定設備為用戶提供了足夠的資源和能力去查 找信息所以用戶通常將它作為一個瀏覽信息的窗口,而不是被動的信息接收者。同時固定網用戶對于信息準確性的要求遠甚于對其及時性的要求,因此PUSH技術 未能得到廣泛的應用。

  而在移動網中,由于存在著網絡帶寬、移動終端能力以及自費標準高昂等諸多限制,使得用戶查找信息受到了一定的限制,如果將重要的信息主動及時地 推送到用戶的移動設備上無疑會大大方便用戶。移動通信的優點是移動設備能夠隨時隨地接收信息因此PUSH技術在移動網中可以大展拳腳,WAP PUSH正是PUSH技術和移動通信兩者揚長避短相結合的產物。WAP PUSH是在移動網絡中應用的PUSH技術,它結合了一般PUSH技術和移動網絡的特點。它的系統框架、使用協議和服務方式與固定網上的PUSH技術有很 大不同。

  1.2 WAP PUSH系統框架

  WAP PUSH框架主要包括推送發起者(PI:PUSH Initiator)、推送代理網關(PPG:PUSH ProxyGateway)和推送客戶(PC:PUSH Client)三個功能部分。PI位于Internet中,而PC在WAP領域,PI和WAP客戶端所使用的協議是不同的,需要在中間建立一個協議轉換 網關即PPG。PPG通過推送訪問協議(PAP:PUSH AccessProtocol)與PI通信,通過推送空間傳輸協議(PUSH OTA:PUSH over-the-Air)完成向客戶推送信息的數據傳輸任務。

  PPG完成推送體系結構中的大部分工作,包括從Internet到移動網的訪問接入,以及與其有關的認證、安全、客戶端控制等所有工作。PPG 所提供的主要服務包括:1)PI的標識、鑒權和訪問控制;2)對推送內容進行語法分析,并依據數據類型定義(DTD)檢錯糾錯;3)客戶尋址與信息傳 輸;4)PAP與PUSH OTA間的協議轉換;5)為提高無線信道中的傳輸效率,對信息進行壓縮、編譯等處理。

  另外,PPG還可以通過別名機制實現組播和廣播,即將某些特定的地址別名映射到組播或廣播的操作中,具體方案可以由系統實現者決定。不同的客戶端,其能力是不同的,PPG還要負責響應PI的客戶能力查詢請求,以便于PI針對不同的客戶端構造合適的內容格式。

  1.3 推送協議

  PAP是PI與PPG間的通信協議,它使用可擴展標記語言(XML)作為消息的描述語言,通過簡單的請求響應機制完成數據的傳輸。PAP可以在多種通信協議(包括超文本傳輸協議(HTTP)、簡單郵件傳輸協議(SMTP)等)之上實現。

  而PUSH OTA是運行于無線會話協議(WSP)之上的一個較為簡單的協議層,負責從PPG到客戶代理的數據傳輸。PUSH OTA可使用面向連接的會話和無連接會話兩種WSP層服務,對于使用連接會話的推送,需要在PPG和客戶端間預先有一個激活的會話上下文;對于無連接的推 送,則通過預留的端口來完成通信。

  1.4 推送服務方式

  WAP的推送協議中定義了服務指示(SI:Service Indication)和服務加載(SL:Service Load)兩項服務,以給用戶和網絡運營者更多的選擇。服務指示是將新信息的指示和相關的通用資源標識符(URI)推送給用戶,由用戶選擇是立即處理信息 還是以后處理。服務加載是將一項服務的URI推送給用戶,然后客戶端自動地使用PULL技術根據該URI啟動服務。兩種服務的區別在于用戶是否介入推送信 息的處理過程。SL對推送信息的處理對用戶來說是透明的,而SI則在指示用戶的同時,請用戶對隨后的處理做出選擇。
PUSH可以將某一站點或某一 業務的鏈接通過短信發送到支持WAP PUSH功能的手機上,這樣用戶只需要閱讀這條短信,打開短信中的鏈接,就可以直接訪問業務了。因此,WAP PUSH實現了短信和WAP業務的結合,節省了用戶尋找業務的時間,方便用戶直接找到并使用自己喜歡的業務。

  2 短消息網關簡介

  短消息網關(ISMG)是處于短消息中心(SMSC)和業務提供商(SP)之間的設備,它為這兩個實體的數據交換提供安全、快捷的通道。網關與 短消息中心之間使用SMPP協議(Short Message Peer to Peer,短消息點對點協議), 與SP之間使用CMPP協議(China Mobile Peer to Peer,中國移動點對點協議),因此短消息網關需要完成協議的轉換、計費、路由、安全和網絡管理等功能。具體說來, SMPP通信代理系統主要實現網關和GSM網中短消息中心(SMSC)的連接,確保準確接收和發送數據,實現高效、可靠的數據傳輸。為了達到規范要求的不 超過0.001%的數據丟包率,SMPP通信代理需要支持流量控制。CMPP通信代理系統主要是實現和SP服務提供商的連接,與SMPP通信代理系統不同 的是,由于協議的影響,CMPP通信代理是服務器端,需等待SP的連接,而SMPP通信代理是客戶端,需要主動連接SMSC。短消息網關處理系統是網關中 最復雜的處理進程,它完成的任務包括:向GNS(匯接網關) 查詢路由,維護路由表,進行協議轉換和數據分發。防火墻系統主要為網關系統提供安全保障,它包括IP包過濾和身份驗證。短信網關計費系統主要形成各種計費 話單,為計費提供依據。業務管理系統主要完成對業務進行統計報告,生成報表,為運營者對用戶數據的添加、修改、刪除以及對網關系統的監控、查詢、操作和維 護提供接口和界面。

  3 基于短信網關發送WAP PUSH

  WAP PUSH的發送有兩種途徑,一個是通過PPG網關,另外一個是通過SMPP協議。其中SMPP是一個基本協議,在中國主要有三個由其派生的協議:中國移動 的CMPP協議,中國聯通的SGIP(在CDMA上是ETIP),以及小靈通的SMGP。通過中國移動的PPG網關發送WAP PUSH有著開發周期長,調測流程較復雜等不足,而使用CMPP協議即基于短信網關來進行WAP PUSH發送靈活性比較高,相對比較簡單。

  3.1 WAP PUSH發送的實現模式

  可通過計算機串口上連接GSM MODEM,用它向手機發送WAP PUSH。這種方法發WAP PUSH又分三種模式:BLOCK 模式、TEXT 模式和PDU 模式。BLOCK 模式現在用的很少了, TEXT 模式則只能發送ASCII 碼,它不能發送中文的UNICODE碼,而PDU 模式開發起來則較為復雜,它需要編寫專門的函數來將文本轉換為PDU 格式,但PDU 模式被所有手機支持,可以使用任何字符集,它也是手機默認的編碼方式,所以選用PDU模式發送WAP PUSH.

  3.2 PDU 模式?

用PDU 模式發送 WAP PUSH可以使用三種編碼: 7-bit 編碼、8-bit 編碼和UCS2 編碼。7-bit 編碼用于發送普通的ASCII 字符,8-bit 編碼通常用于發送數據消息,UCS2 編碼用于發送Unicode 字符。由于要實現中文WAP PUSH的發送,所以選擇用UCS2 編碼,即中文Unicode 碼。?
⑴ UCS2 編碼原理 所謂UCS2 編碼,是將單個的字符(1-2 個字節)按ISO/IEC10646 的規定,轉變為16 位 的Unicode 寬字符。即將單個的字符轉換為由四位的‘0’-‘9’、‘A’-‘F’的數字和字 母組成的字符串。待發送的消息以UCS2 碼的形式進行發送。?
⑵ 通過UCS2 編碼我們得到中文Unicode 碼,接著就可以進行發送PDU 串的編制了。從表面上看,PDU 串是ASCII 碼串,同樣由‘0’-‘9’、‘A’-‘F’這些數字和字母組成。它們是8 位字節的十六進制數,或者BCD 碼十進制數。PDU 串除了包含所發送的消息本身外,還包含很多其它參數信息,如服務中心號碼、目標號碼和編碼方式等

  例如

0051000BA13108086406F600F5A7850B05040B8423F_
0000303010129060603AE81EA8DCA02056A0045C6080C033231312e_
3133362e3135332e33302f776170707573682f70757368496e6465782e_
6a73703f7075736849643d3035303531313134313630353231000103E8A_
FB7E782B9E587BBE4BBA5E4B88BE993BEE68EA5E88EB7E58F96E5BDA9E4BFA1E58685
E5AEB9000101_

  為一串可以成功發送的WAP PUSH,其中包括了漢字描述和WAP頁面地址。具體分析如下

  00 SMSC 地址信息的長度 00表示用手機上設置短信中心號碼,PDU 串的“SMSC 址格式”段和“SMSC 地址”段將省去

  51 基本參數(TP-MTI/VFP) 不要求發送回復

  00 消息基準值(TP-MR)

  0B 對方電話的長度

  A1 目標地址格式 A1表示為國內格式

  3108086406F6 目標地址,補‘F’湊成偶數位后奇偶位互換

  00 協議標識(TP-PID) 是普通GSM 類型,點到點方式

  F5 用戶信息編碼方式 (TP-DCS)

  A7 有效期(TP-VP)

  85 用戶信息長度(TP-UDL)

  0B WAP PUSH頭部的總長度

  05040B8423F0表示接下來是一個WAP PUSH

  00 表示是Concatenated Short Messages

  03 長度

  03 reference number

  01 表示分成1個短信發送

  01 當前包的序號

  29060603AE81EA8DCA WSP

  02 標記位

  05 -//WAPFORUM//DTD SI 1.0//EN

  6A UTF-8

  00 標記開始

  45 <si>

  C6 <indication

  08 <action=signal-high>

  0C href="http://

  03 字符串開始

3231312e3133362e3135332e33302f776170707573682f
70757368496e6465782e6a73703f7075736849643d3035303531313134313630353231 URL

  00 URL 字符串結束

  01 >

  03 內容描述字符串開始

  E8AFB7E782B9E587BBE4BBA5E4B88BE993BEE68EA_
5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9 內容描述字符串

  00 內容描述字符串結束

  01 </si>

  01 </indication>

  由以上分析可以看出,WAP PUSH可以被當作一種特殊的短信來發送,WAP PUSH包發送的內容實際上跟通過PPG網關發送的XML原理相同,但是經過了壓縮。壓縮之后的格式稱為WBXML,這種格式將一些標記用代碼來表示。然 而WBXML的縮略標記分為兩部分,一部分是所有類型的XML都通用的,另一部分是不同類型的XML有著不同的解釋。
用戶接收到此類信息時,在客 戶端手機支持WAP的情況下,可以直接訪問到信息中加載的WAP網站地址,這樣服務器也達到了推廣業務方便用戶使用的目的。由于在UCS2 編碼方式下,可發送短消息的最大字符數是140字節,即WAP PUSH中的推送URL與描述文字的總字符數為140,因此描述文字的字數限制與推送的URL長度有關。

  4 結束語

  WAP PUSH技術結合了PUSH技術的優勢和移動通信服務的特性,具有良好的應用前景。但是WAP PUSH技術仍然存在著一些亟待解決的問題,如信息的鑒權與認證、信息的準確性、如何避免垃圾信息等。如何解決好這些問題將是WAP PUSH技術成功的關鍵。另外,隨著GPRS技術和3G無線通信技術的發展,無線信道的帶寬將逐步增大,WAP PUSH也將能進一步推送多媒體信息,有著更寬廣的應用前景

0:12 | 添加評論 | 固定鏈接 | 引用通告 (0) | 記錄它 | WAP開發
9月15日
什么是WAP PUSH?

所 謂推(PUSH)技術是一種基于客戶服務器機制、由服務器主動將信息發往客戶端的技術,其傳送的信息通常是用戶事先預訂的。同傳統的拉(PULL)技術相 比,最主要的區別在于前者是由服務器主動向客戶機發送信息,而后者則是由客戶機主動請求信息。PUSH技術的優勢在于信息的主動性和及時性,而弱勢則是信 息的準確性較差。

??? PUSH技術在Internet中沒能取得大的成功,原因是多方面的。在固定網中 計算機等固定設備為用戶提供了足夠的資源和能力去查找信息 所以用戶通 常將它作為一個瀏覽信息的窗口,而不是被動的信息接收者。固定網用戶對于信息準確性的要求遠甚于對其及時性的要求。

??? 而在移動網中,由于存在著網絡帶寬、移動設備能力以及高昂的資費標準等諸多限制,用戶無法像在固定網中一樣方便地查找信息,如果將重要的信息主動及時地推 送到用戶的移動設備上 無疑會大大方便用戶。移動通信的優點是移動設備能夠隨時隨地接收信息 因此PUSH技術可以在移動網中大顯身手,WAP PUSH正是PUSH技術和移動通信兩者揚長避短相結合的產物。

??? WAP PUSH是在移動網絡中應用的PUSH技術 它既具有一般PUSH技術的特點 又擁有移動網絡的特點。它的系統框架、使用協議和服務方式與固定網上的PUSH技術有很大不同。

???????? WAP PUSH技術結合了PUSH技術的優勢和移動通信服務的特性,具有良好的應用前景。將PUSH技術應用于移動通信領域可以產生許多電信增值業務 這包括移 動中收發電子郵件,隨時獲得股價信息、天氣預報、新聞以及位置相關服務等。所有這些服務的共同特點在于用戶對信息的及時性要求比較高,用戶希望能夠通過手 機、PDA等移動設備隨時隨地地得到該種服務。但是,WAP PUSH技術仍然存在著一些亟待解決的問題,如信息的鑒權與認證、信息的準確性、如何避免垃圾信息等。如何解決好這些問題將是WAP PUSH技術成功的關鍵。另外,隨著GPRS技術和3G無線通信技術的發展,無線信道的帶寬將逐步增大,WAP PUSH也將能進一步推送多媒體信息。?
其實WAP Push沒有那么神秘- -
??????????????????????????????????????


只要寫一個XML文件,然后用WBXML編碼就可以了。下面是一個Sample

<si>

<indication href="http://wap.fractalist.cn/" action="signal-high">

??? 挑戰脈動,挑戰你我

</indication

</si>

這個XML的DTD定義在http://www.openmobilealliance.org/tech/dtd/si.dtd

WMXML定義在http://www.w3.org/1999/06/NOTE-wbxml-19990624/

編碼后作為二進制短消息發送給用戶,記得講tp_udhi設為1就可以了

WBXML編碼的代碼如下:

#include <map>
#include <vector>
#include <string>
#include <time.h>
#pragma warning(disable : 4267)
#include <StringHelper.h>
#pragma warning(default : 4267)
#include <boost/cstdint.hpp>

#include <sstream>
#include <iomanip>

using boost::uint8_t;
using std::cout;
using std::endl;
using std::setw;
using std::hex;
using std::setfill;

/// <summary>
/// Series of well known constants and static uint8_t values used when encoding
/// a document to WBXML
/// </summary>
class WBXML
{
public:
static const uint8_t CHAR_NULL = 0x00;

static const uint8_t VERSION_1_1 = 0x01;
static const uint8_t VERSION_1_2 = 0x02;

static const uint8_t CHARSET_UTF_8 = 0x6A;

static const uint8_t TAGTOKEN_END = 0x01;
static const uint8_t TOKEN_INLINE_STRING_FOLLOWS = 0x03;
static const uint8_t TOKEN_OPAQUEDATA_FOLLOWS = 0xC3;

static uint8_t setTagTokenIndications(uint8_t token, bool hasAttributes, bool hasContent)
{
if (hasAttributes)
?? token |= 0xC0;
if (hasContent)
?? token |= 0x40;

return token;
}
};

/// <summary>
/// Encapsulates the Service Indication WAP Push instruction.
/// Full documentation can be found athttp://www.openmobilealliance.org/tech/affiliates/wap/wap-167-serviceind-20010731-a.pdf?doc=wap-167-serviceind-20010731-a.pdf
/// </summary>
class ServiceIndication
{
public:
// Allowed values of the action attribute of the indication tag
enum Action {NotSet = -1, signal_none = 0, signal_low, signal_medium, signal_high, Delete};
// Well known DTD token
static const uint8_t DOCUMENT_DTD_ServiceIndication = 0x05;?? // ServiceIndication 1.0 Public Identifier

// Tag Tokens
static const uint8_t TAGTOKEN_si = 0x5;
static const uint8_t TAGTOKEN_indication = 0x6;
static const uint8_t TAGTOKEN_info = 0x7;
static const uint8_t TAGTOKEN_item = 0x8;

// Attribute Tokens
static const uint8_t ATTRIBUTESTARTTOKEN_action[5];
static const uint8_t ATTRIBUTESTARTTOKEN_created = 0xA;
static const uint8_t ATTRIBUTESTARTTOKEN_href = 0xB;
static const uint8_t ATTRIBUTESTARTTOKEN_href_http = 0xC;?? // http://
static const uint8_t ATTRIBUTESTARTTOKEN_href_http_www = 0xD; //?http://www.
static const uint8_t ATTRIBUTESTARTTOKEN_href_https = 0xE;?? // https://
static const uint8_t ATTRIBUTESTARTTOKEN_href_https_www = 0xE; //?https://www.
static const uint8_t ATTRIBUTESTARTTOKEN_si_expires = 0x10;
static const uint8_t ATTRIBUTESTARTTOKEN_si_id = 0x11;
static const uint8_t ATTRIBUTESTARTTOKEN_ // Attribute Value Tokens
static const uint8_t ATTRIBUTEVALUETOKEN_com = 0x85;????? // .com/
static const uint8_t ATTRIBUTEVALUETOKEN_edu = 0x86;????? // .edu/
static const uint8_t ATTRIBUTEVALUETOKEN_net = 0x87;????? // .net/
static const uint8_t ATTRIBUTEVALUETOKEN_org = 0x88;????? // .org/

private:
static std::map<std::string, uint8_t> m_hrefStartTokens;
static std::map<std::string, uint8_t> m_attributeValueTokens;
static int initializeServiceIndication()
{
m_hrefStartTokens["https://www."] = ATTRIBUTESTARTTOKEN_href_https_www;
m_hrefStartTokens["http://www."] = ATTRIBUTESTARTTOKEN_href_http_www;
m_hrefStartTokens["https://"] = ATTRIBUTESTARTTOKEN_href_https;
m_hrefStartTokens["http://"] = ATTRIBUTESTARTTOKEN_href_http;

m_attributeValueTokens[".com/"] = ATTRIBUTEVALUETOKEN_com;
m_attributeValueTokens[".edu/"] = ATTRIBUTEVALUETOKEN_edu;
m_attributeValueTokens[".net/"] = ATTRIBUTEVALUETOKEN_net;
m_attributeValueTokens[".org/"] = ATTRIBUTEVALUETOKEN_org;
return 0;
}

std::string m_href;
std::string m_text;
time_t m_createdAt;
time_t m_expiresAt;
Action m_action;

public:
ServiceIndication(const std::string & href, const std::string & text, Action action) :
?? m_href(href), m_text(text), m_action(action)
{
static int __unused = initializeServiceIndication();
}

ServiceIndication(const std::string & href, const std::string & text, time_t createdAt, time_t expiresAt) :
m_href(href), m_text(text), m_action(Action::NotSet), m_createdAt(createdAt), m_expiresAt(expiresAt)
{
}

ServiceIndication(const std::string & href, const std::string & text, time_t createdAt, time_t expiresAt, Action action) :
m_href(href), m_text(text), m_action(action), m_createdAt(createdAt), m_expiresAt(expiresAt)
{
}

/// <summary>
/// Generates a uint8_t array comprising the encoded Service Indication
/// </summary>
/// <returns>The encoded body</returns>
//01 05 6a 00 45 c6 0c 03 77 61 702e6672616374616c6973742e636e0008 01034120574150205075736820
//746f20746865204672616374616c6973742073697465000101

//01 05 6a 00 45 c6 0b 03 68 74 74703a2f2f7761702e6672616374616c6973742e636e0008010341205741
//50205075736820746f20746865204672616374616c6973742073697465000101

std::vector<uint8_t> getWBXMLBytes() const
{
std::vector<uint8_t> vec;
vec.push_back(WBXML::VERSION_1_1);
vec.push_back(DOCUMENT_DTD_ServiceIndication);
vec.push_back(WBXML::CHARSET_UTF_8);
vec.push_back(WBXML::CHAR_NULL);

// start xml doc
vec.push_back(WBXML::SetTagTokenIndications(TAGTOKEN_si, false, true));
vec.push_back(WBXML::SetTagTokenIndications(TAGTOKEN_indication, true , true));

// href attribute
// this attribute has some well known start tokens that?
// are contained within a static hashtable. Iterate through
// the table and chose the token.
size_t i = 0;
uint8_t hrefTagToken = ATTRIBUTESTARTTOKEN_href;
for(std::map<std::string, uint8_t>::const_iterator it = m_hrefStartTokens.begin(); it != m_hrefStartTokens.end(); ++it)
{
?? const std::string & startString = (*it).first;
?? if(m_href.find(startString) == 0)
?? {
??? hrefTagToken = (*it).second;
??? i = startString.length();
??? break;
?? }
}
vec.push_back(hrefTagToken);

writeInlineString(vec, m_href.substr(i));
/*?
* Date elements removed as does not seem to be supported
* by all handsets, or I"m doing it incorrectly, or it"s a version 1.2
* thing.

// created attrbute
stream.WriteByte(ATTRIBUTESTARTTOKEN_created);
WriteDate(stream, this.CreatedAt);

// si-expires attrbute
stream.WriteByte(ATTRIBUTESTARTTOKEN_si_expires);
WriteDate(stream, this.ExpiresAt);
*/
// action attibute
if (m_action != Action::NotSet)
?? vec.push_back(getActionToken(m_action));

// close indication element attributes
vec.push_back(WBXML::TAGTOKEN_END);

// text of indication element
writeInlineString(vec, m_text);

// close indication element
vec.push_back(WBXML::TAGTOKEN_END);
// close si element
vec.push_back(WBXML::TAGTOKEN_END);

return vec;
}


private:
/// <summary>
/// Gets the token for the action attribute
/// </summary>
/// <param name="action">Interruption level instruction to the handset</param>
/// <returns>well known uint8_t value for the action attribute</returns>
uint8_t getActionToken(Action action) const
{
return ATTRIBUTESTARTTOKEN_action[(int)action];
}

/// <summary>
/// Encodes an inline string into the stream using UTF8 encoding
/// </summary>
/// <param name="stream">The target stream</param>
/// <param name="text">The text to write</param>
void writeInlineString(std::vector<uint8_t> & vec, const std::string & text) const
{
// indicate that the follow bytes comprise a string
vec.push_back(WBXML::TOKEN_INLINE_STRING_FOLLOWS);

// write character bytes
std::string utf8Text = stringutil::w2utf8(stringutil::a2w(text));
copy(utf8Text.begin(), utf8Text.end(), back_inserter(vec));

// end is indicated by a null uint8_t
vec.push_back(WBXML::CHAR_NULL);
}
/// <summary>
/// Encodes the DateTime to the stream.
/// DateTimes are encoded as Opaque Data with each number in the string represented
/// by its 4-bit binary value
/// eg: 1999-04-30 06:40:00
/// is encoded as 199904300640.
/// Trailing zero values are not included.
/// </summary>
/// <param name="stream">Target stream</param>
/// <param name="date">DateTime to encode</param>
void writeDate(std::vector<uint8_t> & vec, time_t date) const
{
struct tm * gm = gmtime(&date);
uint8_t buffer[7];

buffer[0] = (uint8_t)( (gm->tm_year + 1900) / 100);
buffer[1] = (uint8_t)((gm->tm_year + 1900) % 100);
buffer[2] = (uint8_t)(gm->tm_mon + 1);
buffer[3] = (uint8_t)(gm->tm_mday);

uint8_t dateLength = 4;

if(gm->tm_hour != 0)
{
?? buffer[4] = (uint8_t)gm->tm_hour;
?? dateLength = 5;
}

if(gm->tm_min != 0)
{
?? buffer[5] = (uint8_t)gm->tm_min;
?? dateLength = 6;
}

if(gm->tm_sec != 0)
{
?? buffer[6] = (uint8_t)gm->tm_sec;
?? dateLength = 7;
}

// write to stream
vec.push_back(WBXML::TOKEN_OPAQUEDATA_FOLLOWS);
vec.push_back(dateLength);
copy(buffer, buffer + dateLength, back_inserter(vec));
}
};

const uint8_t ServiceIndication::ATTRIBUTESTARTTOKEN_action[5] = {0x5, 0x6, 0x7, 0x8, 0x9};
std::map<std::string, uint8_t> ServiceIndication::m_hrefStartTokens = std::map<std::string, uint8_t>();
std::map<std::string, uint8_t> ServiceIndication::m_attributeValueTokens = std::map<std::string, uint8_t>();

/// <summary>
/// Well known values used when generating WSP (Wireless Session Protocol) headers
/// </summary>
class WSP
{
public:
static const uint8_t TRANSACTIONID_CONNECTIONLESSWSP = 0x25;

static const uint8_t PDUTYPE_PUSH = 0x06;

static const uint8_t HEADER_CONTENTLENGTH = 0x8D;

static const uint8_t HEADER_CONTENTTYPE_application_vnd_wap_sic_utf_8[4];

static const uint8_t HEADER_APPLICATIONTYPE = 0xaf;
static const uint8_t HEADER_APPLICATIONTYPE_x_wap_application_id_w2 = 0x82;

static const uint8_t HEADER_PUSHFLAG[2];

};

const uint8_t WSP::HEADER_CONTENTTYPE_application_vnd_wap_sic_utf_8[4] = {0x03,0xAE,0x81,0xEA};
const uint8_t WSP::HEADER_PUSHFLAG[2] = {0xB4, 0x84};

/// <summary>
/// Well known values used when generating a WDP (Wireless Datagram Protocol) header
/// </summary>
class WDP
{
public:
static const uint8_t INFORMATIONELEMENT_IDENTIFIER_APPLICATIONPORT = 0x05;
};

/// <summary>
/// Encapsulates an SMS WAP Push message
/// </summary>
class PushMessage
{
private:
// Ports for the WDP information element, instructing the handset which?
// application to load on receving the message
static const uint8_t WDP_DESTINATIONPORT[2];
static const uint8_t WDP_SOURCEPORT[2];

ServiceIndication serviceIndication;

public:
PushMessage(const std::string & href, const std::string & text) :
serviceIndication(href, text, ServiceIndication::signal_high)
{
}

/// <summary>
/// Generates the body of the SMS message
/// </summary>
/// <returns>uint8_t array</returns>
std::vector<uint8_t> getSMSBytes() const
{
std::vector<uint8_t> vec;

getWDPHeaderBytes(vec);
#ifdef _DEBUG
cout << "getWDPHeaderBytes\n";
for(size_t i = 0; i < vec.size(); ++i)
{
?? cout << hex << setw(2) << setfill("0") << ((int)vec[i]);
}
cout << "\n" << endl;
size_t start = vec.size();
#endif
getPDUBytes(vec);
#ifdef _DEBUG
cout << "getPDUBytes\n";
for(size_t i = start; i < vec.size(); ++i)
{
?? cout << hex << setw(2) << setfill("0") << ((int)vec[i]);
}
cout << "\n" << endl;
#endif

return vec;
}

/// <summary>
/// Generates the PDU (Protocol Data Unit) comprising the encoded Service Indication
/// and the WSP (Wireless Session Protocol) headers
/// </summary>
/// <returns>uint8_t array comprising the PDU</returns>
void getPDUBytes(std::vector<uint8_t> & vec) const
{
std::vector<uint8_t> body = serviceIndication.getWBXMLBytes();

std::vector<uint8_t> header = getWSPHeaderBytes((uint8_t)body.size());
#ifdef _DEBUG
cout << "getWSPHeaderBytes\n";
for(size_t i = 0; i < header.size(); ++i)
{
?? cout << hex << setw(2) << setfill("0") << ((int)header[i]);
}
cout << "\n" << endl;

cout << "serviceIndication.getWBXMLBytes\n";
for(size_t i = 0; i < body.size(); ++i)
{
?? cout << hex << setw(2) << setfill("0") << ((int)body[i]);
}
cout << "\n" << endl;
#endif

copy(header.begin(), header.end(), back_inserter(vec));
copy(body.begin(), body.end(), back_inserter(vec));
}

/// <summary>
/// Generates the WSP (Wireless Session Protocol) headers with the well known
/// uint8_t values specfic to a Service Indication
/// </summary>
/// <param name="contentLength">the length of the encoded Service Indication</param>
/// <returns>uint8_t array comprising the headers</returns>
//25060a03ae81eaaf828dc1b484
//25060a03ae81eaaf828dc8b484

std::vector<uint8_t> getWSPHeaderBytes(uint8_t contentLength) const
{
std::vector<uint8_t> vec;

vec.push_back(WSP::TRANSACTIONID_CONNECTIONLESSWSP);
vec.push_back(WSP::PDUTYPE_PUSH);

uint8_t headerLength = sizeof(WSP::HEADER_CONTENTTYPE_application_vnd_wap_sic_utf_8) / sizeof(WSP::HEADER_CONTENTTYPE_application_vnd_wap_sic_utf_8[0])
?? + sizeof(WSP::HEADER_APPLICATIONTYPE)
?? + sizeof(WSP::HEADER_APPLICATIONTYPE_x_wap_application_id_w2)
?? + sizeof(WSP::HEADER_CONTENTLENGTH)
?? + 1
?? + sizeof(WSP::HEADER_PUSHFLAG) / sizeof(WSP::HEADER_PUSHFLAG[0]);
vec.push_back(headerLength);

copy(WSP::HEADER_CONTENTTYPE_application_vnd_wap_sic_utf_8
?? , WSP::HEADER_CONTENTTYPE_application_vnd_wap_sic_utf_8 + sizeof(WSP::HEADER_CONTENTTYPE_application_vnd_wap_sic_utf_8) / sizeof(WSP::HEADER_CONTENTTYPE_application_vnd_wap_sic_utf_8[0])
?? , back_inserter(vec));


vec.push_back(WSP::HEADER_APPLICATIONTYPE);
vec.push_back(WSP::HEADER_APPLICATIONTYPE_x_wap_application_id_w2);

vec.push_back(WSP::HEADER_CONTENTLENGTH);
vec.push_back((uint8_t)(contentLength + 128));

copy(WSP::HEADER_PUSHFLAG
?? , WSP::HEADER_PUSHFLAG + sizeof(WSP::HEADER_PUSHFLAG) / sizeof(WSP::HEADER_PUSHFLAG[0])
?? , back_inserter(vec));

return vec;
}

/// <summary>
/// Generates the WDP (Wireless Datagram Protocol) or UDH (User Data Header) for the?
/// SMS message. In the case comprising the Application Port information element
/// indicating to the handset which application to start on receipt of the message
/// </summary>
/// <returns>uint8_t array comprising the header</returns>
void getWDPHeaderBytes(std::vector<uint8_t> & vec) const
{
uint8_t headerLength = sizeof(WDP::INFORMATIONELEMENT_IDENTIFIER_APPLICATIONPORT)
?? + 1
?? + sizeof(WDP_DESTINATIONPORT) / sizeof(WDP_DESTINATIONPORT[0])
?? + sizeof(WDP_SOURCEPORT) / sizeof(WDP_SOURCEPORT[0]);
vec.push_back(headerLength);

vec.push_back(WDP::INFORMATIONELEMENT_IDENTIFIER_APPLICATIONPORT);
vec.push_back((uint8_t)(sizeof(WDP_DESTINATIONPORT) / sizeof(WDP_DESTINATIONPORT[0]) + sizeof(WDP_SOURCEPORT) / sizeof(WDP_SOURCEPORT[0])));
copy(WDP_DESTINATIONPORT
?? , WDP_DESTINATIONPORT + sizeof(WDP_DESTINATIONPORT) / sizeof(WDP_DESTINATIONPORT[0])
?? , back_inserter(vec));
copy(WDP_SOURCEPORT
?? , WDP_SOURCEPORT + sizeof(WDP_SOURCEPORT) / sizeof(WDP_SOURCEPORT[0])
?? , back_inserter(vec));
}
};

const uint8_t PushMessage::WDP_DESTINATIONPORT[] = {0x0b, 0x84};
const uint8_t PushMessage::WDP_SOURCEPORT[] = {0x23, 0xf0};

總結

以上是生活随笔為你收集整理的WAPPUSH 原理 基于短信网关WAP推送的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

香蕉久久久久久av成人 | 婷婷 中文字幕 | 婷婷中文字幕综合 | www.伊人色.com | 日韩美在线 | 婷婷国产一区二区三区 | 国产精品欧美日韩在线观看 | 91精品国产自产在线观看永久 | 日韩av网站在线播放 | 久久国内视频 | 国产精品福利小视频 | 五月婷婷丁香激情 | 激情一区二区三区欧美 | 亚洲一级片在线看 | 成人在线视频免费 | 久久久久高清毛片一级 | 97精品国产手机 | 亚洲国产成人在线观看 | 狠狠干网址| 在线不卡的av | 天天色棕合合合合合合 | 激情综合网五月 | 国产精品99蜜臀久久不卡二区 | 99热99热 | 综合久久久久久久久 | 亚洲 成人 一区 | 国产精品毛片一区视频播不卡 | 午夜国产在线 | 日批视频国产 | 国产精品小视频网站 | 国产精品一二三 | 国产亚洲无 | 美女久久久久久久久久 | 久久综合欧美 | www国产亚洲 | 涩涩网站在线观看 | 最新中文字幕在线资源 | 天天操夜夜操天天射 | 免费男女网站 | 免费观看成年人视频 | 日韩av成人在线观看 | 麻豆影视网 | 久草在线 | 18国产精品福利片久久婷 | 久久久国产精品一区二区中文 | 久久色亚洲 | 日批视频在线观看免费 | 亚洲a成人v | 91精品第一页 | 国产精品99久久久久 | 97精产国品一二三产区在线 | 久久一区二区三区四区 | 国产精品99久久久久久久久久久久 | 亚洲精品美女久久久久 | 国产夫妻av在线 | 99热在线国产 | 欧美日韩国产伦理 | 中文在线a∨在线 | 久久久精品久久日韩一区综合 | 中文字幕中文字幕中文字幕 | 国产精品中文在线 | aaawww| 国产永久免费高清在线观看视频 | 在线观看的av | 精品爱爱| 久久色网站 | 久久免费视频6 | 欧美日韩裸体免费视频 | 成人av地址| 婷婷四房综合激情五月 | 黄色小说在线免费观看 | 日韩毛片在线播放 | 欧美精品被 | 色综合久久久久 | 最近乱久中文字幕 | 天天爱天天操天天干 | 天天色播 | 91亚洲激情| japanesefreesexvideo高潮 | 久草在线视频免费资源观看 | 国产精品美女久久久 | 国产一区二区电影在线观看 | 午夜国产在线观看 | 中文字幕免 | 亚洲高清精品在线 | 久久国产美女视频 | 久久激情小说 | 天天操天天怕 | 日本中文一区二区 | 玖玖视频 | 国产一区二区精 | 2023av| 在线看的av网站 | 超碰97国产在线 | 亚洲热久久 | 国产在线综合视频 | 久久婷婷精品 | 成年人免费在线观看 | 国产一区二区高清视频 | av电影免费看 | 香蕉视频在线播放 | 中文字幕资源在线观看 | 久久免费视频1 | 97超碰在 | 欧美少妇xxx | 欧美日韩高清免费 | 国产精品国产毛片 | 97人人超 | 国内视频1区| 午夜精品久久久久久99热明星 | 中文字幕丝袜美腿 | 中文字幕在线观看三区 | 国产精品久久久毛片 | 国内精品免费久久影院 | 久久久久久国产精品免费 | 久久伊人精品一区二区三区 | av视屏在线播放 | 精品亚洲欧美一区 | 精品国产激情 | 天天操夜夜操夜夜操 | 婷婷伊人五月 | 亚洲激情精品 | 热久久免费视频精品 | 91亚色视频| 日韩av一区二区在线 | 欧美日韩一区二区免费在线观看 | 欧美成人黄色片 | 在线免费色 | 欧美激情精品一区 | 黄色电影小说 | 久久夜夜操| 五月香视频在线观看 | 久久99国产精品视频 | 精品福利国产 | 日韩欧美国产免费播放 | 日韩欧美精品在线 | 日韩欧美在线视频一区二区 | 一级特黄aaa大片在线观看 | 国产成人在线免费观看 | 狠狠色伊人亚洲综合网站色 | 国产精品久久久久久久妇 | 小草av在线播放 | 精品国产欧美一区二区三区不卡 | 亚洲第一香蕉视频 | 激情视频在线高清看 | av电影在线观看完整版一区二区 | 最新中文字幕视频 | 国内99视频 | 超碰在线观看97 | 久久精品一区二区三 | www..com毛片 | 国产黄色片免费在线观看 | 一级大片在线观看 | 91成人精品国产刺激国语对白 | 亚洲精品女 | 国产一二三区av | 亚洲永久字幕 | 97视频在线观看播放 | 91黄色在线视频 | 999久久国产精品免费观看网站 | 久草在线网址 | 欧美另类性| 中字幕视频在线永久在线观看免费 | 亚洲特级片 | 在线电影 你懂得 | 国产精品九九久久99视频 | www五月| 成人免费观看视频网站 | 欧美性生交大片免网 | 免费高清国产 | 亚洲国产日韩精品 | 中国成人一区 | 久久精品视频免费观看 | 色综合 久久精品 | 欧美成人影音 | 国产专区视频 | 精品国产乱码久久久久久浪潮 | 久久全国免费视频 | 五月婷婷六月丁香 | 日韩手机在线观看 | 最新日本中文字幕 | 久久午夜鲁丝片 | 日韩欧美在线观看一区二区三区 | 91自拍视频在线观看 | 免费观看一级特黄欧美大片 | 最近日本韩国中文字幕 | 国产视频在线免费 | 免费成人在线观看 | 天天干天天色2020 | 97在线观看免费高清完整版在线观看 | 久久午夜视频 | 亚洲三级在线 | 亚洲综合网 | 久久人人97超碰精品888 | 日韩激情片在线观看 | 成人黄色毛片视频 | 中文av字幕在线观看 | 国产日韩亚洲 | 欧美日韩一区二区三区免费视频 | 丁香婷婷久久久综合精品国产 | 在线小视频 | 国内精品久久久久久久影视简单 | 亚州日韩中文字幕 | 久久久久电影 | 午夜精品电影 | 国产精品美女久久久网av | 亚洲精品视 | 亚洲视频在线观看 | 天天天色 | 日韩欧美在线中文字幕 | 91一区二区三区久久久久国产乱 | 中文字幕影片免费在线观看 | 国产中文字幕一区二区三区 | 摸bbb搡bbb搡bbbb| 黄污视频大全 | 中文字幕av在线电影 | 国产明星视频三级a三级点| 天天操夜夜操 | 亚洲精品美女免费 | 亚洲自拍av在线 | 免费h精品视频在线播放 | 亚洲成aⅴ人片久久青草影院 | 久久永久免费视频 | 国产一区电影在线观看 | 最近高清中文字幕在线国语5 | 中文字幕在线观看1 | 久久精品视频一 | 国产一区在线播放 | 日韩一区二区三区视频在线 | 一区二区不卡 | 国产系列 在线观看 | 亚洲国产精品女人久久久 | 伊人狠狠色丁香婷婷综合 | 免费在线激情电影 | 国产一级一片免费播放放 | 日韩精品一区二区三区免费观看视频 | av成人在线播放 | 日日夜夜天天人人 | 国产91区 | 婷婷色综 | 午夜美女wwww | 精品久久久久久久久久国产 | 欧美日韩国产精品久久 | 亚洲国产日韩精品 | 又湿又紧又大又爽a视频国产 | 亚洲免费成人 | 天天操天天操天天操天天操天天操天天操 | 欧美大码xxxx | 成人亚洲欧美 | 日韩一级电影网站 | 97自拍超碰 | 视频在线日韩 | 欧美先锋影音 | 欧美永久视频 | 色在线亚洲 | 国产精品永久在线观看 | 久久综合影音 | 91精品国产欧美一区二区 | 久久乐九色婷婷综合色狠狠182 | 日日摸日日添日日躁av | 深爱激情开心 | 国产在线观看一 | 最近更新中文字幕 | 一区二区三区手机在线观看 | 国产精品高潮在线观看 | 国产免费片 | www.香蕉视频 | 一区二区三区在线不卡 | 四虎成人av| av在线免费观看网站 | 婷香五月 | 久久亚洲私人国产精品va | 久久午夜免费视频 | 欧美无极色| 一区二区三区久久 | 中文字幕 国产 一区 | 水蜜桃亚洲一二三四在线 | 9在线观看免费高清完整版在线观看明 | 精品久久久久久久 | 99综合电影在线视频 | 亚洲香蕉在线观看 | 国产成人精品免高潮在线观看 | 久艹在线免费观看 | 久草在在线视频 | 日韩电影一区二区在线 | 亚洲精品国产第一综合99久久 | 麻豆影视在线播放 | 成人av.com | 国产一区视频在线 | 久久激情视频免费观看 | 亚洲成人动漫在线观看 | 99免费看片 | 九九热免费精品视频 | 国产色一区| 国产视频在线观看免费 | 黄色av免费电影 | 久久久久久中文字幕 | 97精品视频在线播放 | 国产一区二区视频在线播放 | 国产精品久久久久久久久大全 | 国产精品18久久久久久久久 | 808电影免费观看三年 | 婷婷成人亚洲综合国产xv88 | 国产一级三级 | 免费av网址在线观看 | 国产在线高清视频 | 国产精品国产三级国产aⅴ无密码 | 日韩视频精品在线 | 中文字幕专区高清在线观看 | 日本乱视频| 欧美久久久久久久久久久久 | 精品久久久久国产免费第一页 | 婷婷丁香在线观看 | 亚洲精品无 | 五月天久久综合网 | 日韩特级毛片 | 国产午夜精品理论片在线 | 91麻豆精品国产91久久久久久久久 | 99成人免费视频 | 婷婷激情综合网 | 高清在线一区二区 | 在线国产99 | 日日天天av| 最新的av网站 | 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲一区二区视频在线播放 | 久久艹在线观看 | av大片网址| 欧美另类色图 | 日韩精品国产一区 | 99在线精品视频观看 | 日韩区在线观看 | 日韩特级黄色片 | 国产精品美女999 | 久久综合影视 | 伊人五月婷 | 99视频导航| 夜夜骑首页| 天天天射| 99热在线观看 | 麻豆视频国产精品 | 九九九九九九精品任你躁 | 久久精品国产一区二区 | 国产一区在线观看免费 | 福利视频第一页 | 少妇bbbb | 在线观看黄色的网站 | 有码视频在线观看 | 日韩av电影一区 | 亚洲国产精品成人综合 | 久久免费视频7 | 片网站 | 又黄又刺激视频 | 国产精品久久久久久超碰 | 91在线成人 | 精品国偷自产国产一区 | 特级xxxxx欧美 | 涩av在线| 国产午夜不卡 | 国产精品mm| 91av社区| 91成人在线免费观看 | 欧美日韩精 | 日本黄色免费电影网站 | 成人午夜剧场在线观看 | 色婷婷97| 91精品导航 | 91你懂的| 天天操夜夜看 | 2021久久 | 麻豆视频在线观看 | 这里只有精彩视频 | 六月丁香伊人 | 五月婷婷一区二区三区 | 国产不卡在线 | 色中色资源站 | 91传媒免费在线观看 | 国产成人精品一区二区三区福利 | 中文字幕在线观看完整版 | 中文字幕中文字幕在线中文字幕三区 | 国产精品人人做人人爽人人添 | www欧美xxxx | 99国产情侣在线播放 | 欧美性黄网官网 | 91香蕉视频在线下载 | 中文字幕永久在线 | 国产黄在线 | 91视频这里只有精品 | 中文字幕色网站 | 九九视频在线观看视频6 | 激情av网 | 激情综合网五月 | 最新亚洲视频 | 丁香激情婷婷 | 在线免费视频你懂的 | 中文字幕在线观看视频一区二区三区 | 亚洲国产成人av网 | 国产黄色片在线免费观看 | 亚洲成人免费 | 中文字幕欧美三区 | 成人免费共享视频 | 免费观看午夜视频 | 国内揄拍国产精品 | 久久1区 | 国产成人久久精品一区二区三区 | 伊人婷婷在线 | 91激情视频在线观看 | 久久国产视频网 | 最近中文字幕完整高清 | 久久亚洲电影 | 国产在线观看黄 | 国产色视频123区 | 国产精品久久伊人 | 久久国产精品99久久久久 | 99 精品 在线| 日本视频精品 | 欧美成人在线免费 | 国产一区视频在线播放 | 国产免费a| 91视视频在线直接观看在线看网页在线看 | 日本中文字幕视频 | 成人av免费网站 | 97电影网手机版 | 国产精品第一 | av免费网站在线观看 | 欧美人牲 | 一级a性色生活片久久毛片波多野 | 免费的成人av | 九九九视频在线 | 深爱激情亚洲 | 成全在线视频免费观看 | 伊人五月天综合 | 日韩免费在线视频 | 麻豆视频一区 | 国产一级免费播放 | 日韩高清在线观看 | 久久国产精品二国产精品中国洋人 | 国产精品免费一区二区三区在线观看 | 午夜视频一区二区 | 国产日韩精品视频 | av资源免费看 | 黄色免费网站 | 久久视频国产 | 中文字幕在线一区观看 | 午夜精品久久久久久久久久久久 | 五月婷婷久久综合 | 5月丁香婷婷综合 | 国产精品美女久久久久久久 | 免费电影一区二区三区 | 韩国av免费看 | 日日操日日 | 久久综合偷偷噜噜噜色 | 亚洲综合色视频 | 国产一级一片免费播放放 | 伊人电影在线观看 | 国产成人亚洲在线观看 | 亚洲精品在线网站 | 久操中文字幕在线观看 | 免费视频黄 | 伊人久久在线观看 | 成人精品在线 | 久久深夜 | 97网| 国产日韩视频在线播放 | 日韩理论电影在线观看 | 精品播放 | 亚洲尺码电影av久久 | 国产中文在线视频 | 91精品国产三级a在线观看 | 99热国产在线 | 三级av中文字幕 | 天天操天天干天天 | 操老逼免费视频 | 日韩免费在线观看网站 | 黄色成人影视 | 久久精品视频免费播放 | 草久久av| 日本精品免费看 | 日韩成人在线免费观看 | 国产自在线 | 天天操网站 | 亚洲国产小视频在线观看 | 亚洲国产午夜 | 亚洲婷婷伊人 | 久久久亚洲成人 | 国产精品久久久精品 | 美女黄频视频大全 | 日韩精品不卡在线 | 黄色av一级片| 波多野结衣小视频 | 色综合天| 亚洲国产精品va在线看黑人 | 欧美日韩中文字幕综合视频 | 天天操天天色综合 | 中文字幕 二区 | 精品免费一区二区三区 | 在线色亚洲 | 久久婷婷开心 | 国产v亚洲v | 最近免费中文视频 | 五月婷婷色综合 | 奇米网777| 亚洲精品在线网站 | 久久综合成人 | av黄色在线播放 | 亚洲理论在线观看电影 | 97超碰在线久草超碰在线观看 | 四虎8848免费高清在线观看 | 狠狠色丁香婷婷综合久小说久 | 欧美在线aaa | 日韩在线不卡视频 | 亚洲成人av在线播放 | 亚洲国产精品第一区二区 | 色婷婷狠狠操 | 国产精品男女 | 亚洲精品18日本一区app | 国产一区二区三区免费视频 | 久草在线免费色站 | 激情五月综合网 | 夜添久久精品亚洲国产精品 | 91av九色 | 成年人app网址 | 最近中文字幕免费观看 | 日韩中文字幕第一页 | 99精品免费久久久久久久久 | 免费看一级 | 亚洲精品乱码久久久久久蜜桃欧美 | 久久免费视频国产 | 亚洲九九九在线观看 | 欧美91精品国产自产 | 天天综合天天做天天综合 | 五月天久久 | 亚洲 欧洲 国产 日本 综合 | 一区中文字幕 | 国产在线播放观看 | 免费视频一区二区 | 亚洲人成在线观看 | 九七视频在线观看 | 黄色一集片 | 欧美一区二区在线刺激视频 | 97人人添人澡人人爽超碰动图 | 成人网大片| 激情 亚洲| 激情婷婷久久 | 免费电影一区二区三区 | 国产91在线观看 | 日韩电影一区二区在线观看 | 午夜视频在线观看一区二区三区 | 国产在线欧美 | 黄色免费网站大全 | 九九色网| 久久午夜色播影院免费高清 | 999久久久欧美日韩黑人 | 在线观看片 | 中文字幕有码在线播放 | 久久人人爽人人爽人人片 | 粉嫩一区二区三区粉嫩91 | 日韩精品最新在线观看 | 久草视频2 | 9999在线视频 | 欧美日韩国产三级 | 久久怡红院| 欧美日韩国产伦理 | 国产一级久久久 | 丁香婷婷色 | 精品国产一区二区三区在线观看 | 天天爱天天操 | 日日夜夜天天综合 | 国产黄色大片 | 99久久激情视频 | 欧美亚洲免费在线一区 | 亚洲天堂精品视频在线观看 | 成人av一区二区兰花在线播放 | 2018亚洲男人天堂 | 另类老妇性bbwbbw高清 | 操老逼免费视频 | 91精品国产成人 | 精品国产美女在线 | 欧美精品国产综合久久 | 在线观看黄网站 | 一区二区三区在线观看中文字幕 | 欧美日韩中字 | 午夜精品电影一区二区在线 | 亚洲永久字幕 | 国产高清在线永久 | 国产精品美女久久久久久久 | 亚洲欧美精品一区二区 | 国产精品色视频 | 超碰成人av| 2018亚洲男人天堂 | 97超碰人人澡人人爱 | av超碰在线| 色.com| 97视频免费在线观看 | 国产黄色一级片 | 国产男女无遮挡猛进猛出在线观看 | 欧美午夜a| 日韩av免费在线看 | 日日干av | 黄色免费高清视频 | 国产精品毛片一区 | 中文字幕日本电影 | 91日韩在线 | 久久久高清视频 | 婷婷六月天在线 | 久久一区二区三区四区 | 97超碰超碰久久福利超碰 | 欧美黄色高清 | 人人爽人人av | www天天操| 午夜私人影院久久久久 | 国产高潮久久 | 成人中文字幕在线观看 | 色悠悠久久综合 | 午夜精品视频一区 | 免费一级片在线观看 | 亚洲午夜久久久久久久久电影网 | 超碰伊人网 | 亚洲高清视频在线播放 | 国产二级视频 | 99久热在线精品视频成人一区 | 久久这里只有精品首页 | 日韩乱码在线 | 久久躁日日躁aaaaxxxx | 免费在线观看成年人视频 | 8090yy亚洲精品久久 | 日日操天天操狠狠操 | 91av久久 | 成年人电影毛片 | 久久精品久久精品久久精品 | 91福利试看| 免费v片 | 日韩高清不卡一区二区三区 | 日韩黄色在线观看 | 国产精品久久久久久久久久久久午夜片 | 日韩区在线观看 | 国产无套视频 | 少妇精品久久久一区二区免费 | 免费人人干 | 欧美极品少妇xbxb性爽爽视频 | 精品96久久久久久中文字幕无 | 亚洲专区视频在线观看 | 狠狠干综合 | 在线看片成人 | av一区二区在线观看中文字幕 | 天天射天天操天天色 | 婷婷色在线资源 | 亚洲精品午夜国产va久久成人 | 天天躁日日躁狠狠躁av麻豆 | 国产精品一区在线 | 玖玖在线精品 | 91亚洲国产 | av爱干| 久久久久久久久福利 | 91污在线 | 超碰97在线人人 | 黄色一级影院 | 狠狠色丁香九九婷婷综合五月 | 婷婷久月| 日日色综合 | 99精品热 | 欧美一级视频一区 | 天天干天天操天天干 | bbbbb女女女女女bbbbb国产 | 婷婷激情久久 | 日韩伦理一区二区三区av在线 | 亚洲三级黄色 | 一级黄色a视频 | 麻豆国产露脸在线观看 | 91热爆视频 | 超碰国产在线观看 | 免费不卡中文字幕视频 | 中文字幕一区二区三区四区 | 久青草视频 | 最新一区二区三区 | 在线免费观看欧美日韩 | 久久五月精品 | 国产精品美女久久久久久 | 精品亚洲欧美无人区乱码 | 天天操夜操视频 | 天天在线免费视频 | 成人午夜精品久久久久久久3d | 夜夜爽夜夜操 | 日韩一三区 | 色婷婷六月天 | 久久观看最新视频 | 欧美成人亚洲成人 | 色av男人的天堂免费在线 | 天天操天天爱天天爽 | 91黄色在线看 | 久久国产亚洲视频 | 最新中文字幕在线观看视频 | 国产精品国产三级国产aⅴ无密码 | 成人三级黄色 | 中国黄色一级大片 | 国产v在线播放 | 国产精品美女www爽爽爽视频 | 亚洲人毛片| 日日干干夜夜 | 久久久免费精品 | 欧美精品三级在线观看 | 91九色蝌蚪视频 | 久久久久久视频 | av东方在线| 欧美精品久久久久久 | 色多多污污 | 日韩精品视频一二三 | 久操视频在线 | 狠狠干美女 | 国产成人久久av977小说 | 国产精品久久久久婷婷二区次 | 国产高清视频在线播放一区 | 91av精品| 日韩二三区 | 国产精品永久免费 | 久久精品久久久精品美女 | 人人超碰在线 | 久久精品这里热有精品 | 久久免费视频这里只有精品 | 精品久久久久久一区二区里番 | 亚洲最大免费成人网 | 18做爰免费视频网站 | 99久久久| 久久午夜免费观看 | 国产精品成人av在线 | 四虎国产视频 | 久久久在线免费观看 | 97视频在线看 | 伊人中文在线 | 亚洲精品色视频 | 天天摸夜夜操 | 婷婷午夜| 天天操天| 99视频免费 | 久草在在线| 少妇bbb| 日本黄色黄网站 | www.狠狠色.com| 久久婷婷国产 | 草久在线| 久久激情小视频 | 久久人人爽人人爽 | 久久久久婷 | 国产麻豆剧传媒免费观看 | 91av福利视频 | 国产真实在线 | 在线免费视频你懂的 | 国产精品久久久久久久久岛 | 久久毛片高清国产 | 国产在线精品福利 | 久久这里 | 国产高清精品在线观看 | 国产视频一区精品 | 亚洲激精日韩激精欧美精品 | 日韩av在线免费播放 | 色中文字幕在线观看 | 十八岁免进欧美 | 99精品在线直播 | 黄色一级在线观看 | 91人人爽久久涩噜噜噜 | 在线看国产一区 | 国产中文视频 | 玖玖精品在线 | 精品国产电影一区 | 中文字幕在线影院 | www.午夜视频 | 中文字幕乱码在线播放 | 伊人资源站 | 91久久影院 | 免费观看9x视频网站在线观看 | 午夜天天操 | 欧美日韩在线精品一区二区 | 激情视频综合网 | 麻豆视频免费版 | 国产成人精品一区二区三区网站观看 | 天堂av官网 | 成人一区二区三区在线观看 | 又黄又刺激的网站 | 国产精品99久久免费黑人 | 天天综合色天天综合 | 天天干,天天操,天天射 | 懂色av懂色av粉嫩av分享吧 | 久久精品精品 | 99精品美女 | 免费在线播放 | 91在线永久 | 亚洲国产黄色片 | 日韩欧美一区二区三区视频 | 免费aa大片 | 人人狠狠综合久久亚洲婷 | 日韩免费视频网站 | 成人宗合网| 久久高清精品 | 97成人超碰 | 九九热在线播放 | 免费视频资源 | 69xx视频| 精品国产精品国产偷麻豆 | 黄视频网站大全 | 菠萝菠萝蜜在线播放 | 国产999视频| 久久99网站 | 国产福利91精品 | 亚洲成人精品久久 | 9999精品视频 | 久久精品99国产国产 | 最近最新最好看中文视频 | 91男人影院 | 欧美一级淫片videoshd | 久草在线视频精品 | 伊人久久国产 | 色吧久久| 日韩高清不卡一区二区三区 | 国产精品毛片一区二区三区 | 欧美福利在线播放 | 黄色高清视频在线观看 | 在线观看中文字幕2021 | 国产最新在线 | 黄色亚洲片 | 亚洲毛片在线观看. | 亚洲自拍偷拍色图 | 久久综合99| 日韩在线观看第一页 | 亚洲三级在线 | 中国一级片视频 | 精品久久一级片 | jizzjizzjizz亚洲 | 成人黄色片在线播放 | 97视频在线播放 | 亚洲日韩中文字幕在线播放 | 国产精选在线观看 | 一区二区三区四区久久 | 日韩免费三级 | 亚洲免费观看在线视频 | 91av视频在线播放 | 黄毛片在线观看 | 欧美韩国日本在线观看 | 日韩在线精品一区 | 欧美日韩亚洲第一 | 99在线视频免费观看 | 国产精品一区二区中文字幕 | 国产成人亚洲在线电影 | 丁香六月在线 | 九色91福利| 成人在线一区二区三区 | 天天色图 | 国产96精品 | 欧美日韩精品免费观看 | 欧美成人精品欧美一级乱黄 | 久久天天躁狠狠躁亚洲综合公司 | 国产一级久久久 | 国产婷婷一区二区 | 久久久国产精品一区二区中文 | 四季av综合网站 | 综合久色 | 日日久视频 | www.在线看片.com | 日韩高清一二区 | 久久99久久99精品免费看小说 | 久久久久久久网 | 欧美日韩中文另类 | 久久午夜精品 | 日本三级不卡视频 | 成人一区二区在线观看 | 国产在线不卡精品 | 国产99久久久国产精品成人免费 | 处女av在线 | 中文国产成人精品久久一 | www99精品 | 婷婷丁香六月 | 99综合久久 | 成年人看片 | 免费在线观看污 | 国产一级精品绿帽视频 | 国产精品美女久久久久久网站 | 国产91小视频 | 国产在线91在线电影 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 国产无套精品久久久久久 | 色综合久久中文综合久久牛 | 亚洲精品男人的天堂 | 中文字幕色婷婷在线视频 | 亚洲 中文 欧美 日韩vr 在线 | 日韩欧美在线高清 | 欧美日韩一级在线 | 日韩精品第1页 | 六月色婷 | 91在线你懂的 | 国产五月| 99精品国产在热久久 | 黄色天堂在线观看 | 婷婷久久一区二区三区 | 日韩欧美一区二区三区视频 | www.天天草| 国产精品资源在线观看 | 日韩欧美国产精品 | 日韩欧美电影在线 | 成人免费观看视频大全 | 91丨九色丨丝袜 | 国产又粗又猛又爽 | 欧美肥妇free | 米奇狠狠狠888 | 九月婷婷色 | 成人午夜免费福利 | 亚洲国产成人av网 | 成人h在线观看 | 日韩激情中文字幕 | 国产福利91精品 | 欧美成人按摩 | 日韩免费av在线 | 丁香五月缴情综合网 | www.久艹| 日韩欧美视频一区二区三区 | 亚洲国产精品va在线看黑人 | 久久精品视频18 | 少妇高潮流白浆在线观看 | 欧美在线观看小视频 | 久久试看 | 亚洲欧美偷拍另类 | 99国产精品 | 丁香婷婷综合激情 | 国产免费高清 | 91免费观看视频在线 | 粉嫩av一区二区三区四区五区 | 久久精品视频中文字幕 | 久久成人综合 | 日本中文字幕观看 | 国产福利精品在线观看 | 九九热视频在线免费观看 | 久久a免费视频 | 午夜久久电影网 | 欧美日韩久久不卡 | 免费一级特黄毛大片 | 欧美一级电影在线观看 | 婷婷丁香自拍 | av免费线看 | 2019av在线视频 | 久久久国产精品电影 | 亚洲精品乱码白浆高清久久久久久 | 中文字幕视频一区二区 | 免费特级黄色片 | 久久久精品福利视频 | 亚洲国产偷 | 日韩欧美在线视频一区二区三区 | 久久激五月天综合精品 | 免费看色网站 | 精品久久久久久久久久 | 免费看高清毛片 | 蜜桃麻豆www久久囤产精品 | 91麻豆精品国产91久久久无需广告 | 久久国产精品一区二区三区 | 欧美一级久久久久 | 亚洲 欧美 另类人妖 | 日韩电影在线一区二区 | 色播五月激情综合网 | 国产成人高清在线 | 性日韩欧美在线视频 | 久久久国产99久久国产一 | 91在线播放国产 | 亚洲激情视频在线 | 超碰国产在线播放 | 免费看短| 精品亚洲视频在线 | 黄av资源| 久久综合九色综合97_ 久久久 | 中文字幕视频一区二区 | 在线视频日韩精品 | 免费精品视频 | 久久精品亚洲综合专区 | 欧美日韩中文在线 | 狠狠干狠狠久久 | 久久成人国产 | 国产精品99久久久久的智能播放 | 又黄又爽又无遮挡免费的网站 | 亚洲最大色 | 日韩亚洲在线 | 欧美日韩中文在线观看 | 亚洲精品久久久久久中文传媒 | 三级黄在线 | 亚洲天天在线 | 成人久久国产 | 色婷婷啪啪免费在线电影观看 | 国产精品亚 | 中文在线a在线 | 永久免费视频国产 | 亚洲三级av | 日韩免费视频网站 | 97视频人人免费看 | 亚洲视频在线观看网站 | 五月导航| 麻豆国产电影 | 激情久久一区二区三区 | 色综合久久中文综合久久牛 | 亚洲国产高清视频 | 国产精品扒开做爽爽的视频 | 最近中文字幕国语免费av | 欧美亚洲国产一卡 | 青青河边草免费观看完整版高清 |