精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Mozilla Thunderbird的擴展開發

運維 系統運維
觸發事件可以在我們自己的MFC子程序中模擬目標程序中的事件。Mozilla平臺下如何擴展Thunderbird,本文主要講的是,通過socket通信來實現MFC對Thunderbird的控制需求。

  最近遇到這樣一個需求:在我們的MFC程序中控制Thunderbird。拿到這個奇怪的需求后,有了這么幾個想法:1)用全局鉤子試著勾住Thunderbird,可細想好像不對。2)用spy++探查點擊Thunderbird的各個菜單,按鈕時觸發的事件,總歸是win32平臺上跑的程序,歸根到底還是事件觸發,從理論上說應該是可以在我們自己的MFC程序中模擬標目程序中的各個事件觸發。

  但接觸到Mozilla的socket方面的知識后,放棄了上面的想法,改用socket通信來實現此需求。一來Thunderbird源代碼可以自行修改,因此可以加入一些代碼使之成為一個類似HTTP服務器的服務器端程序,二來使用socket進行連接與語言無關,因此C++的程序可以和javascript的程序完成通信,但缺點也很明顯,要占用端口,只涉及到本地機器的通信卻使用了socket這樣的網絡通信機制。

  先來介紹下完成這個功能用到的基本知識:由于輸入流基接口nsIInputStream沒有提供任何從javascript中讀取數據的方法,而只能在C++中讀取,因此我們必須使用一個可腳本化的輸入流來對其進行包裝,這個可腳本化的輸入流實現了nsIScriptableInputStream接口。

  當然也可以使用其他流類型,比如為了讀取二進制數據,我們可以使用nsIBinaryInputStream,反正在javascript中,你總得以其他形式的流來包裝基流。

  在Mozilla中,網絡數據的讀和寫是在一個單獨的線程中進行的,從socket中讀數據是異步的,這就意味著只要socket中有數據存在,就在后臺讀取數據,而程序會收到數據可讀的通知信息,這就意味著我們需要創建一個監聽者來監聽這個信息。

  對于異步讀取數據,我們還需要創建一個輸入流Pump,之所以Mozilla選擇“泵”這個名稱是因為當有數據存在時它就發送小塊的數據給監聽者。這個Pump實現了nsIInputStreamPump接口,這個接口繼承自nsIRequest,后者提供了暫停連接和特定的緩存行為(這些一般的socket程序用不上,但像HTTP這樣構建在socket上的高層次應用會用得上的)。

  pump.asyncRead(dataListener,null);

  asyncRead函數用來給Pump對象設置一個監聽者,當有數據到來或連接關閉時,監聽者就會被調用。監聽者對象應該實現nsIStreamListener接口,這個接口有一個方法onDataAvailable,當有額外數據可讀時就會被調用。此接口繼承自nsIRequestObserver,這個接口有兩個方法,onStartRequest,onStopRequest,這兩個方法在輸入流的開始和結束時分別被調用,因此這3個方法都應該實現。

  下面是客戶端代碼,使用最簡單的阻塞式TCP連接:

  

  1. void CClientTestDlg::OnSend()  
  2.  
  3.   {//發送按鈕  
  4.  
  5.   UpdateData();  
  6.  
  7.   if(str.IsEmpty())  
  8.  
  9.   {  
  10.  
  11.   list.InsertString(0,"發送的字符串不能為空。");  
  12.  
  13.   return;  
  14.  
  15.   }  
  16.  
  17.   //strcpy(msg.msg,(LPCTSTR)str);  
  18.  
  19.   char szText[1024];  
  20.  
  21.   strcpy(szText,(LPCTSTR)str);  
  22.  
  23.   SOCKET socket = ::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  
  24.  
  25.   if(socket==INVALID_SOCKET)  
  26.  
  27.   {  
  28.  
  29.   list.InsertString(0,"創建socket發生錯誤。");  
  30.  
  31.   return;  
  32.  
  33.   }  
  34.  
  35.   SOCKADDR_IN servAddr;  
  36.  
  37.   servAddr.sin_family = AF_INET;  
  38.  
  39.   servAddr.sin_port = htons(25501);  
  40.  
  41.   servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");  
  42.  
  43.   if(::connect(socket,(sockaddr*)&servAddr,sizeof(servAddr))==-1)  
  44.  
  45.   {  
  46.  
  47.   list.InsertString(0,"連接服務器發生錯誤。");  
  48.  
  49.   return;  
  50.  
  51.   }  
  52.  
  53.   if(::send(socket,szText,strlen(szText),0) == SOCKET_ERROR)// recv(ServerSocket,buf,sizeof(buf),0);  
  54.  
  55.   {  
  56.  
  57.   list.InsertString(0,"發送數據發生錯誤。");  
  58.  
  59.   return;  
  60.  
  61.   }  
  62.  
  63.   int bytesRecv = SOCKET_ERROR;  
  64.  
  65.   char buffer[1024];  
  66.  
  67.   memset(buffer,0,1024);  
  68.  
  69.   bytesRecv = recv( socket, buffer, 1024, 0 );  
  70.  
  71.   DWORD dwerr = WSAGetLastError();  
  72.  
  73.   CString str;  
  74.  
  75.   str.Format("%s",buffer);  
  76.  
  77.   list.InsertString(0,str);  
  78.  
  79.   ::closesocket(socket);  
  80.  
  81.   } 

#p#

  服務器端代碼,通過修改Thunderbird源代碼,使之成為一個類似HTTP服務器的服務器端

 

  1.  //***************************************************************************  
  2.  
  3.   //Author: phinecos  
  4.  
  5.   //Date : 2008/5/19  
  6.  
  7.   //Description:服務器監聽對象  
  8.  
  9.   //Contact:phinecos@163.com  
  10.  
  11.   //***************************************************************************  
  12.  
  13.   //服務器端對象  
  14.  
  15.   const CI = Components.interfaces, CC = Components.classes, CR = Components.results;  
  16.  
  17.   var gServer = null;//服務器對象  
  18.  
  19.   var gUtility = null;//工具類對象  
  20.  
  21.   //var gConnection = null;//客戶端連接對象  
  22.  
  23.   function tBirdBiffServerOnLoad()  
  24.  
  25.   {//啟動監聽服務器  
  26.  
  27.   try  
  28.  
  29.   {  
  30.  
  31.   gUtility = new tBirdBiffUtility();//新建日志對象  
  32.  
  33.   gUtility.initialize();  
  34.  
  35.   gUtility.log("tBirdBiffServerUi.tBirdBiffServerOnLoad", "Thunderbird biff server loaded");  
  36.  
  37.   gServer = new tBirdBiffServer();//新建服務器對象  
  38.  
  39.   gServer.initialize();//初始化服務器端  
  40.  
  41.   gUtility.log("tBirdBiffServerOnLoad","start server");  
  42.  
  43.   }  
  44.  
  45.   catch(err)  
  46.  
  47.   {  
  48.  
  49.   gUtility.log("tBirdBiffServerOnLoad","start server failed");  
  50.  
  51.   }  
  52.  
  53.   }  
  54.  
  55.   function tBirdBiffServerOnClose()  
  56.  
  57.   {//關閉服務器  
  58.  
  59.   gUtility.log("tBirdBiffServerOnClose","close server");  
  60.  
  61.   gServer.finalize();  
  62.  
  63.   gServer = null;  
  64.  
  65.   gUtility = null;  
  66.  
  67.   }  
  68.  
  69.   function tBirdBiffServer()  
  70.  
  71.   {  
  72.  
  73.   this.serverSocket = null;//服務器端socket  
  74.  
  75.   this.port = null;//服務器端口  
  76.  
  77.   this.initialized = false;  
  78.  
  79.   gUtility.log("tBirdBiffServer constructor","construct ok");  
  80.  
  81.   }  
  82.  
  83.   tBirdBiffServer.prototype =  
  84.  
  85.   {  
  86.  
  87.   getServerSocket: function()  
  88.  
  89.   {//創建服務器端socket  
  90.  
  91.   this.serverSocket = CC["@mozilla.org/network/server-socket;1"].createInstance(CI.nsIServerSocket);  
  92.  
  93.   if(!this.serverSocket)  
  94.  
  95.   {  
  96.  
  97.   gUtility.log("tBirdBiffServer.getServerSocket","Unable to get a server socket");  
  98.  
  99.   }  
  100.  
  101.   else  
  102.  
  103.   {  
  104.  
  105.   try  
  106.  
  107.   {  
  108.  
  109.   this.serverSocket.init(this.port, false, -1);//初始化socket,綁定到端口port上  
  110.  
  111.   this.serverSocket.asyncListen(tBirdBiffServerSocketListener);//開始異步監聽  
  112.  
  113.   gUtility.log("tBirdBiffServer.getServerSocket","Server socket established");  
  114.  
  115.   }  
  116.  
  117.   catch(e)  
  118.  
  119.   {  
  120.  
  121.   gUtility.log("tBirdBiffServer.getServerSocket, Server socket established error");  
  122.  
  123.   this.serverSocket = null;  
  124.  
  125.   }  
  126.  
  127.   }  
  128.  
  129.   },  
  130.  
  131.   closeServerSocket: function()  
  132.  
  133.   {//關閉服務器端socket  
  134.  
  135.   if(!this.serverSocket)  
  136.  
  137.   {  
  138.  
  139.   this.serverSocket.close(null);  
  140.  
  141.   this.serverSocket = null;  
  142.  
  143.   }  
  144.  
  145.   },  
  146.  
  147.   initialize: function()  
  148.  
  149.   {  
  150.  
  151.   if(this.initialized)  
  152.  
  153.   {  
  154.  
  155.   return;  
  156.  
  157.   }  
  158.  
  159.   this.port = 25501;//獲取端口號  
  160.  
  161.   gUtility.log("tBirdBiffServer.initialize","port is: "+this.port);  
  162.  
  163.   this.getServerSocket();//創建服務器端socket  
  164.  
  165.   this.initialized = true;  
  166.  
  167.   gUtility.log("tBirdBiffServer.initialize","initialize ok!");  
  168.  
  169.   },  
  170.  
  171.   finalize: function()  
  172.  
  173.   {//退出程序  
  174.  
  175.   if(!this.initialized)  
  176.  
  177.   {  
  178.  
  179.   return;  
  180.  
  181.   }  
  182.  
  183.   this.closeServerSocket();//關閉服務器端socket  
  184.  
  185.   gUtility.log("tBirdBiffServer.finalize","server Finalized");  
  186.  
  187.   },  
  188.  
  189.   }  
  190.  
  191.   var listener =  
  192.  
  193.   {  
  194.  
  195.   finished : function(data)  
  196.  
  197.   {//數據讀取完畢  
  198.  
  199.   ParseCommand(data);//解析命令字  
  200.  
  201.   }  
  202.  
  203.   }  
  204.  
  205.   const tBirdBiffServerSocketListener =  
  206.  
  207.   {  
  208.  
  209.   onSocketAccepted: function(serverSocket, clientSocket)  
  210.  
  211.   {//接受來自客戶端的socket請求  
  212.  
  213.   gUtility.log("tBirdBiffServerSocketListener.onSocketAccepted","Got a connection from: " + clientSocket.host + ":" + clientSocket.port);  
  214.  
  215.   var outputData = "Ok,server get your command";  
  216.  
  217.   var outstream = clientSocket.openOutputStream(0,0,0);  
  218.  
  219.   outstream.write(outputData,outputData.length);  
  220.  
  221.   try  
  222.  
  223.   {  
  224.  
  225.   //打開輸入流  
  226.  
  227.   var stream = clientSocket.openInputStream(0,0,0);  
  228.  
  229.   var instream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);  
  230.  
  231.   instream.init(stream);  
  232.  
  233.   var dataListener =  
  234.  
  235.   {  
  236.  
  237.   data : "",//來自客戶端的數據  
  238.  
  239.   onStartRequest: function(request, context){},  
  240.  
  241.   onStopRequest: function(request, context, status){  
  242.  
  243.   instream.close();  
  244.  
  245.   outstream.close();  
  246.  
  247.   listener.finished(this.data);  
  248.  
  249.   },  
  250.  
  251.   onDataAvailable: function(request, context, inputStream, offset, count){  
  252.  
  253.   this.data += instream.read(count);  
  254.  
  255.   },  
  256.  
  257.   };  
  258.  
  259.   var pump = Components.classes["@mozilla.org/network/input-stream-pump;1"].createInstance(Components.interfaces.nsIInputStreamPump);  
  260.  
  261.   pump.init(stream, -1, -1, 0, 0, false);  
  262.  
  263.   pump.asyncRead(dataListener,null);  
  264.  
  265.   }  
  266.  
  267.   catch(err)  
  268.  
  269.   {  
  270.  
  271.   gUtility.log("tBirdBiffServerConnection.setSocket",e);  
  272.  
  273.   return false;  
  274.  
  275.   }  
  276.  
  277.   },  
  278.  
  279.   onStopListening: function(serverSocket, status)  
  280.  
  281.   {//服務器端停止監聽  
  282.  
  283.   gUtility.log("tBirdBiffServerSocketListener.onStopListening","Server socket has stopped listening");  
  284.  
  285.   }  
  286.  
  287.   } 

【編輯推薦】

  1. Thunderbird 郵件導入導出的方法
  2. Thunderbird的安裝方法
  3. Thunderbird 配置手冊
  4. Ubuntu下安裝Thunderbird
  5. Thunderbird 的相關擴展
  6. Thunderbird中常見問題解決
  7. 圖文并茂 Thunderbird設置教程
  8. Thunderbird的使用技巧
責任編輯:zhaolei 來源: 網絡轉載
相關推薦

2011-01-18 17:49:29

2011-01-21 16:14:30

Thunderbird

2024-03-11 10:19:30

Plasmo瀏覽器Web

2009-06-12 14:31:59

Google WaveGoogle Wave

2011-07-21 13:30:18

Apple Safari 瀏覽器

2011-01-19 09:25:40

互聯網

2021-05-27 14:58:07

ThunderbirdMozilla密鑰

2012-10-22 16:49:56

IBMdw

2011-01-21 14:30:02

Thunderbird技巧

2016-09-21 12:34:10

Chrome瀏覽器插件

2011-01-18 17:35:08

Thunderbird安裝方法

2011-05-12 16:30:44

Mozill應用商店HTML5

2011-12-07 10:03:11

Mozilla新聞

2011-01-21 17:00:49

Thunderbird日歷

2011-01-18 18:28:49

Thunderbird配置

2011-01-21 15:00:08

Thunderbirdmail

2011-01-18 18:54:48

Thunderbird

2009-07-28 17:27:26

Sun網絡架構

2011-01-21 17:22:36

Thunderbird

2011-01-21 17:12:48

ThunderbirdIMAP
點贊
收藏

51CTO技術棧公眾號

日韩一级片中文字幕| 污网站在线免费| 黄色软件在线观看| 美国一区二区三区在线播放| 久热精品视频在线免费观看| 中文字幕 欧美 日韩| 乱人伦视频在线| 中文字幕在线视频一区| 精品免费国产| 在线免费看av的网站| 伊人久久成人| 中文字幕亚洲综合| 中国免费黄色片| 欧美爱爱视频| 欧美日韩黄色大片| 久久人妻无码一区二区| 国产视频三级在线观看播放| 国产高清不卡一区| 国产精品成人aaaaa网站| 久久午夜无码鲁丝片午夜精品| 奇米色欧美一区二区三区| 91精品国产麻豆国产自产在线| 久久精品99国产| 午夜激情在线| 中文字幕中文字幕在线一区 | 成人精品动漫一区二区三区| 在线观看国产91| 国自产拍偷拍精品啪啪一区二区 | 久久久噜噜噜久噜久久| 亚洲精品国产熟女久久久| 99精品中文字幕在线不卡| 欧美日韩一区二区欧美激情| 人妻熟妇乱又伦精品视频| 亚洲婷婷噜噜| 亚洲色图在线播放| 亚洲精品中文字幕在线| 黄色毛片在线观看| aaa亚洲精品| 国产精品9999久久久久仙踪林| 中文无码精品一区二区三区| 美女久久网站| 97超碰蝌蚪网人人做人人爽| 五月天婷婷网站| 国产一区激情| 欧美美最猛性xxxxxx| 中日韩一级黄色片| 天堂美国久久| 久久精品亚洲94久久精品| 最新中文字幕av| 欧美日韩激情在线一区二区三区| 亚洲精品视频二区| 少妇特黄一区二区三区| 自拍欧美一区| 一区二区三区黄色| 日韩影视一区二区三区| 日韩在线综合| 久久久精品久久久久| 777777国产7777777| 91欧美日韩| 日韩在线一区二区三区免费视频| 香蕉成人在线视频| 偷拍欧美精品| 久久6精品影院| 日产精品久久久久久久| 国产一区二区三区的电影| 青青草原一区二区| 国产精品午夜一区二区| 日本免费在线视频不卡一不卡二| 国产精品爱啪在线线免费观看| 人妻中文字幕一区二区三区| 麻豆国产精品一区二区三区| 91手机视频在线观看| 国产ts人妖调教重口男| 国产激情一区二区三区四区| 国产精品一区二区免费看| 亚洲欧美自偷自拍| 中文字幕精品—区二区四季| 免费在线观看污污视频| 激情影院在线| 日韩欧美一区视频| 国产一伦一伦一伦| 91麻豆精品国产91久久久久推荐资源| 亚洲成年人影院在线| 国产精品1000部啪视频| 精品日韩视频在线观看| 国内精品二区| 福利视频在线导航| 中文字幕字幕中文在线中不卡视频| 久久久成人精品一区二区三区 | 精品国产一区二区三区四区在线观看 | 亚洲片在线观看| 国产美女高潮视频| 亚洲黄色天堂| 国产精品视频网站| 欧美熟女一区二区| 中文字幕第一页久久| 香港三级日本三级a视频| 久久青青视频| 欧美一区二区福利在线| 成人免费av片| 最新国产精品| 国产精品成人免费视频| 国产成人a人亚洲精品无码| 91视频观看免费| 亚洲黄色网址在线观看| 在线观看网站免费入口在线观看国内| 欧美三级电影一区| 国产精品麻豆入口| 国产精品99一区二区三区| 国外色69视频在线观看| 国产精品国产一区二区三区四区| www.欧美色图| 欧美激情视频给我| 国产aaa免费视频| 日本三级一区| 日韩一区二区三区在线| 真实乱视频国产免费观看| 久久久久美女| 91精品国产成人| av中文字幕播放| 亚洲国产精品成人综合| 日韩五码在线观看| 精品91福利视频| 尤物九九久久国产精品的分类 | 欧美扣逼视频| 亚洲影院在线观看| 五月天开心婷婷| 红桃视频在线观看一区二区| 久久久久这里只有精品| 99热这里只有精品3| 国产精品五月天| 50路60路老熟妇啪啪| 加勒比视频一区| 久久99国产精品久久久久久久久| 一区二区视频网| 国产日韩欧美精品电影三级在线| 日韩少妇内射免费播放18禁裸乳| 风间由美性色一区二区三区四区| 美女久久久久久久久久久| 一级黄色大毛片| 国产精品天美传媒沈樵| 国产视频手机在线播放| 精品国产午夜| 国产成人综合亚洲| 蝌蚪视频在线播放| 日本韩国欧美在线| b站大片免费直播| 久久久噜噜噜久久狠狠50岁| 精品999在线观看| 久久影院午夜精品| 日韩av在线高清| 国产精品久久久久久久妇| bt欧美亚洲午夜电影天堂| 僵尸世界大战2 在线播放| aaa国产精品| 久久久在线免费观看| 亚洲奶汁xxxx哺乳期| 亚洲一区自拍偷拍| 日本不卡视频一区| 中国女人久久久| 麻豆成人av| 欧美成人ⅴideosxxxxx| 在线色欧美三级视频| 91亚洲欧美激情| 亚洲欧洲综合另类| 涩视频在线观看| 99精品国产福利在线观看免费| 精品欧美国产| 精品免费av一区二区三区| 日韩中文综合网| a在线观看免费| 亚洲二区在线视频| 在线免费观看日韩av| 三级成人在线视频| 影音先锋男人的网站| 中文在线综合| 欧日韩不卡在线视频| 成人影院免费观看| 欧美一级国产精品| 精品美女久久久久| 亚洲国产成人私人影院tom| 午夜天堂在线视频| 亚洲精品麻豆| 亚洲成人18| 波多野结衣在线一区二区 | 99精品视频在线观看免费| 女人和拘做爰正片视频| 日韩中文欧美| 国产精品三区在线| 草莓视频成人appios| 九九九久久国产免费| 外国精品视频在线观看| 欧美日韩性生活| 久久精品免费在线| 亚洲国产精品国自产拍av| 苍井空张开腿实干12次| 日韩精品成人一区二区三区| 中文字幕在线中文| 国产一区二区三区探花| 成人欧美一区二区三区视频xxx | 欧美性感美女h网站在线观看免费| 国产在线观看h| 国产91露脸合集magnet| 热久久精品免费视频| 欧美日韩三级电影在线| 国产视频在线观看一区二区| 天天操狠狠操夜夜操| 欧美亚洲不卡| 亚洲欧美精品| 日韩美女毛片| av一区二区三区免费| a屁视频一区二区三区四区| 国模视频一区二区| 国产在线观看a| 中文字幕国产日韩| 欧美精品a∨在线观看不卡 | 精品免费av| 国产青春久久久国产毛片| 色婷婷成人网| 国产精品精品视频| 在线天堂资源www在线污| 欧美激情精品久久久久久蜜臀| wwwww在线观看免费视频| 日韩精品在线免费播放| 亚洲av无码专区在线| 欧美喷潮久久久xxxxx| 欧美h在线观看| 亚洲h动漫在线| 免费麻豆国产一区二区三区四区| 国产精品毛片高清在线完整版| 加勒比一区二区| 99久久伊人久久99| 国产日韩视频一区| 高清国产一区二区三区| 97超碰免费在线观看| 久久97超碰国产精品超碰| 中文字幕永久视频| 老妇喷水一区二区三区| 国产91在线免费| 中文字幕高清在线免费播放| 国产成+人+日韩+欧美+亚洲| 亚洲老女人av| 免费美女久久99| 黄色手机在线视频| 麻豆91在线看| 亚洲精品20p| 精品一区二区久久久| 波多野结衣xxxx| 经典三级在线一区| 中文字幕 欧美日韩| 精品影院一区二区久久久| 国产精品区在线| 国产一区二区三区香蕉| 国产5g成人5g天天爽| 国产老肥熟一区二区三区| 亚洲图片 自拍偷拍| 国产成人综合亚洲网站| 国产精品嫩草69影院| 99精品在线免费| 人妻熟女aⅴ一区二区三区汇编| www国产亚洲精品久久麻豆| 国产成人无码一区二区在线观看| 久久综合久久鬼色中文字| 国产av自拍一区| 亚洲国产精品激情在线观看| 中文字幕电影av| 亚洲在线成人精品| 天堂а√在线中文在线新版| 在线一区二区三区四区五区| 亚洲免费视频二区| 欧美一级生活片| 黄色一级大片在线免费看国产一 | 国产精品热视频| 日韩午夜视频在线| 亚洲一区二区少妇| 菁菁伊人国产精品| 日产精品久久久一区二区| 99tv成人| 亚洲国产成人精品无码区99| 视频在线在亚洲| 日本高清免费观看| 成人午夜看片网址| 特级西西www444人体聚色| 国产精品美女久久久久久| 欧美日韩人妻精品一区二区三区| 午夜精品久久久久久久蜜桃app| 国产寡妇亲子伦一区二区三区四区| 欧美午夜一区二区三区免费大片| 99草在线视频| 亚洲免费视频网站| 国产激情视频在线观看| 国产91精品久久久久久久| 欧美啪啪网站| 久久国产一区二区| 天天操夜夜操国产精品| www.99热这里只有精品| 美女任你摸久久| 午夜av免费看| 成人免费在线视频| 在线观看免费av片| 日韩午夜激情视频| 韩国三级在线观看久| 欧美成人在线免费视频| 午夜激情成人网| 懂色av一区二区三区在线播放| 国产在线日韩精品| 妞干网在线观看视频| 精品一区二区免费看| 一出一进一爽一粗一大视频| 日韩美女视频一区二区| av片免费观看| 精品国产三级电影在线观看| 成年人在线视频| 91精品国产色综合久久不卡98| 国产精品久久久久久久久久久久久久久 | 久久av国产紧身裤| 男人的天堂成人| 日韩精品亚洲专区| 久久久久成人精品无码中文字幕| 一区视频在线播放| 日本一本在线观看| 日韩av在线免播放器| 免费男女羞羞的视频网站在线观看 | 日韩av在线直播| 欧美aaaaaaa| 91亚洲一区精品| 色97色成人| 天天爽夜夜爽一区二区三区| 91免费在线视频观看| 久久高清免费视频| 欧美v亚洲v综合ⅴ国产v| 高清全集视频免费在线| 国产精品一区二区3区| 国产精品亚洲人成在99www| 春日野结衣av| av一区二区久久| 国产精品自拍视频一区| 欧美一区二区三区免费观看视频| 尤物在线视频| 91精品国产综合久久香蕉的用户体验| 国产欧美日韩免费观看 | 黄色一级视频免费| 欧美一区二区在线视频| 毛片免费不卡| 91在线免费观看网站| 中文精品电影| 美女又黄又免费的视频| 一区二区视频在线看| 精品人妻伦一区二区三区久久| 另类图片亚洲另类| 精品一区二区三区免费看| 97超碰免费观看| 国产精品综合av一区二区国产馆| 永久看片925tv| 日韩亚洲欧美一区| xxx性欧美| 久久er99热精品一区二区三区 | 亚洲日本在线天堂| 精品国产无码一区二区三区| 美女av一区二区| 荡女精品导航| 日本在线视频www| 亚洲国产精品高清| www.麻豆av| 97久久精品人人澡人人爽缅北| 欧美一区二区三区红桃小说| 欧美 日韩精品| 国产精品免费免费| 精品久久人妻av中文字幕| 欧美激情中文字幕乱码免费| 欧美丝袜美腿| 手机看片福利盒子久久| 亚洲欧洲日产国码二区| www.成人免费视频| 亚洲3p在线观看| 精品毛片免费观看| 成人免费黄色av| 精品日本高清在线播放 | 国模视频一区二区| 国产成人影院| 天天操夜夜操很很操| 欧美日韩国产精品专区 | 高清在线视频日韩欧美| 精品中文一区| 天堂网成人在线| 欧美日韩国内自拍| 黄色片免费在线观看| 国产精品有限公司| 美国毛片一区二区三区| 国产精品111| 一个色综合导航| 成人动态视频| 校园春色 亚洲色图| 一二三区精品视频| 成人亚洲综合天堂| 国产麻豆日韩| 激情久久五月天| 伊人手机在线视频| 欧美精品xxx| 999国产精品永久免费视频app|