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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

TinyWebServer:一个Linux下C++轻量级Web服务器(上)

發布時間:2023/12/13 46 生活家
生活随笔 收集整理的這篇文章主要介紹了 TinyWebServer:一个Linux下C++轻量级Web服务器(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

入門學習了Linux的系統編程和網路編程,應該寫一個小項目來練練手啦。這里模仿的是Github上一個開源項目:TinyWebServer。

項目地址:https://github.com/qinguoyi/TinyWebServer

非常感謝社長(TinyWebServer項目owner)的項目,項目代碼量不算多,但是麻雀雖小五臟俱全,是一個非常好的把學過的各個知識點串在一起的小項目!!這里想講一下實現過程以及其中的一些坑和收獲(我學習的是項目的raw version)。這篇(上)就先講項目最最最重要那些功能。閱讀本文或者說要完全理解這個項目需要有Linux系統編程基礎和網絡編程基礎,以及對計算機網路和http有一定了解。

博主水平十分有限(不是謙虛呀qaq),文章很可能有遺漏/錯誤,請大家也自行思考,歡迎指出討論。

(更新中~~~~~)

概括

項目分成Main模塊,epoll模塊,http模塊,lock模塊,threadpool模塊,log模塊,timer模塊,mysql模塊。先簡單講一下各個模塊的功能。main模塊就是服務器主函數,主要是負責把各個模塊組合協調工作。epoll模塊是寫epoll相關的函數。http模塊是最關鍵的,提供處理http請求以及處理后返回http響應的所有函數。后面的lock就是提供同步工具(互斥鎖/條件鎖/信號量),threadpool當然就是線程池提供工作線程來處理http請求,log日記模塊,mysql數據庫模塊提供數據庫服務,timer定時器模塊主要任務是負責定時清理長時間無反應的連接。

main模塊

首先由main開始,主函數要協調各個模塊進行工作,主要任務就是調用epoll函數監聽各種事件并對事件調用相應的處理模塊,接下啦詳細講一下:

在開始監聽之前我們先創建listenfd并用epoll對其監聽,然后我們開始正式工作,不斷while知道WebServer停止服務,在while中我們調用epoll_wait函數得到所有有反應的事件,我們對這些事件分成幾類來進行處理(根據事件的sockfd來判斷):

  ①新連接請求,判斷條件是sockfd == listenfd,那么沒什么好說的我們accept接受請求就是了,并且保存好用戶連接數據(ip,端口,connfd等),然后就把connfd掛到eoll上監聽它的讀事件

  ②對端關閉,判斷條件是EPOLLRDHUP | EPOLLHUP | EPOLLERR,那么我們這邊也關閉該連接相關資源。

  ③讀事件且是信號事件,判斷條件是(sockfd==pipefd[0]) && (whatopt & EPOLLIN),這里為什么信號會當成epoll的讀事件?是因為統一了信號源,在信號的回調函數想管道里寫東西,然后epoll監聽管道,所以會監聽到讀事件,這里也許需要配合信號模塊的講解才容易理解。

  ④讀事件且是客戶端發送請求報文,判斷條件是EPOLLIN,那么這里是讀又不是信號,那么就是客戶端的請求報文啦,那么我們把這次的讀數據全部讀到我們提前為該客戶的準備的讀數據緩沖區,然后我們把一個任務插入到線程池的任務隊列中。于是我們就不用管了,工作線程自然會處理。

  ⑤寫事件,判斷條件是EPOLLOUT。WebServer只用一種寫事件就是我們的工作線程做好了請求報文的處理,并且已經搓好了響應報文放在了客戶的寫數據緩沖區中,那么我們的任務就是調用函數把響應報文發送給瀏覽器。

這里直接講main函數,可以看到整個服務器是怎么工作的,當然也有可能還沒有接觸到響應的各個模塊所以有些懵逼,但是這里先有個大概流程了解后面了解清除所有模塊工作之后回來會更加清晰。

  1     while (!stop_server)
  2     {
  3         int total = epoll_wait(epollfd,events,MAX_EVENT_NUMBER,-1);
  4         if (total < 0 && errno != EINTR) {
  5                 //把錯誤記錄到日志
  6             break;
  7         }
  8 
  9         for (int i = 0; i < total; i++) {
 10             int sockfd = events[i].data.fd;
 11             int whatopt = events[i].events;
 12 
 13             //有新連接請求事件
 14             if (sockfd == listenfd) {
 15                 struct sockaddr_in client_address;
 16                 socklen_t client_address_len = sizeof(client_address);
 17                 
 18                 //LT
 19                 int connfd = accept(listenfd, (struct sockaddr*)&client_address, &client_address_len);
 20                 if (connfd < 0) {
 21                     //accept錯誤
 22                     continue;
 23                 }
 24                 if (http_conn::m_user_count >= MAX_FD) {
 25                     //用戶數量超過最大描述符了
 26                     continue;
 27                 }
 28 
 29                 in_addr client_ip;
 30                 memcpy(&client_ip, &client_address.sin_addr.s_addr, 4);
 31                 printf("ip:%s connect
", inet_ntoa(client_ip) );
 32                  
 33                 // 初始化新客戶,并在這里面把課后掛到epoll監聽樹上
 34                 users[connfd].init(connfd, client_address);    
 35 
 36                 //創造timer和client_data
 37                 user_timer[connfd].address = client_address;
 38                 user_timer[connfd].sockfd = connfd;
 39                 
 40                 util_timer* timer = new util_timer;
 41                 timer->user_data = &user_timer[connfd];
 42                 timer->cb_func = cb_func;
 43                 timer->expire = time(NULL) + 6 * TIMESLOT;
 44 
 45                 user_timer[connfd].timer = timer;
 46                 //上面創造好了timer,加入到鏈表中
 47                 timer_lst.add_timer(timer);
 48             }
 49             //對端關閉連接事件(EPOLLRDHUP | EPOLLHUP 這兩個是關閉)
 50             else if (whatopt & (EPOLLRDHUP | EPOLLHUP | EPOLLERR)) {
 51                 //對端關閉了,我們這邊也關閉然后取消定時器
 52                 util_timer* timer = user_timer[sockfd].timer;
 53                 timer->cb_func(&user_timer[sockfd]);
 54                 if (timer) timer_lst.del_timer(timer);
 55             }
 56             //因為統一了事件源,信號處理當成讀事件來處理
 57             //怎么統一?就是信號回調函數哪里不立即處理而是寫到:pipe的寫端
 58             else if ((sockfd==pipefd[0]) && (whatopt & EPOLLIN)) {
 59                 int sig;
 60                 char signals[1024];
 61                 int ret = recv(pipefd[0], signals, sizeof(signals), 0);
 62                 if (ret == -1) continue;
 63                 if (ret == 0) continue;
 64                 //在這里處理信號
 65                 for (int i = 0; i < ret; i++) {
 66                     switch (signals[i])
 67                     {
 68                     case SIGALRM:
 69                         timeout = true;
 70                         break;
 71                     case SIGTERM:
 72                         stop_server = true;
 73                     default:
 74                         break;
 75                     }
 76                 }
 77             }
 78             /*輸入事件,理想步驟是:
 79             process->porcess_read(不斷parse_line->parse_status_line/parse_headers/parse_content
 80             ->do_request)->process_write(add_line/heads/content...)
 81             ->把報文搓到輸出緩沖區
 82            */
 83             else if (whatopt & EPOLLIN) {
 84                 //開始處理這個瀏覽器請求
 85                 util_timer* timer = user_timer[sockfd].timer;
 86                 if (users[sockfd].read_once()) {        //1,把所有數據讀進來
 87                     pool->append(users + sockfd);   //2,讀完之后把往線程池任務隊列放入一個任務,這里process函數最后會添加監聽寫時間
 88                 
 89                     //因為有了新請求,所以把這個客戶的不活躍事件延后
 90                     //延后時間之后做出位置調整
 91                     if (timer) {
 92                         timer->expire = time(NULL) + 6 * TIMESLOT;
 93                         timer_lst.adjust_timer(timer);
 94                     }
 95                 }
 96                 //read_once()失敗,關閉連接吧
 97                 else {
 98                     timer->cb_func(&user_timer[sockfd]);
 99                     if (timer) timer_lst.del_timer(timer);
100                 }
101             }
102             //輸出事件
103             else if (whatopt & EPOLLOUT) {
104                 util_timer* timer = user_timer[sockfd].timer;
105                 //在上面讀事件已經搓好響應報文就等這里write把輸出緩沖區發送給瀏覽器
106                 if (users[sockfd].write()) {        //write函數最后會重新監聽讀事件
107                     //跟讀事件一樣,延后這個客戶的不活躍事件
108                     if (timer) {
109                         timer->expire = time(NULL) + 6 * TIMESLOT;
110                         timer_lst.adjust_timer(timer);
111                     }
112                 }
113                 else {      //這里的話就是write發送給瀏覽器失敗,關閉連接
114                     timer->cb_func(&user_timer[sockfd]);
115                     if (timer) timer_lst.del_timer(timer);
116                 }
117             }
118         }
119 
120         if (timeout) {
121             timer_handler();
122             printf("Now %d clients connect
", http_conn::m_user_count);
123             timeout = false;
124         }
125     }

main模塊

epoll模塊

epoll模塊就是和epoll相關的我們需要的函數在這里定義,這里比較簡答就不細講了,看代碼注釋肯定能懂。

 1 int epoll_myinit() {
 2     int epollfd = epoll_create(5);
 3     assert(epollfd != -1);
 4     return epollfd;
 5 }
 6 
 7 //把文件描述符fd設為非阻塞
 8 int setnoblocking(int fd) {
 9     int old_option = fcntl(fd, F_GETFL);
10     int new_option = old_option | O_NONBLOCK;
11     fcntl(fd, F_SETFL, new_option);
12     return old_option;
13 }
14 
15 //把fd添加到監聽紅黑樹epollfd上
16 void addfd(int epollfd, int fd, bool oneshot) {
17     epoll_event event;
18     event.data.fd = fd;
19 
20     event.events = EPOLLIN | EPOLLRDHUP;        //讀事件
21     //EPOLLRDHUP 表示讀關閉。
22     //1 對端發送 FIN (對端調用close 或者 shutdown(SHUT_WR)).
23     //2 本端調用 shutdown(SHUT_RD). 當然,關閉 SHUT_RD 的場景很少。
24 
25     if (oneshot)
26         event.events |= EPOLLONESHOT;
27     /*eppll 即使使用ET模式,一個socket上的某個事件還是可能被觸發多次,采用線程城池的方式來處理事件,可能一個socket同時被多個線程處理
28        如果對描述符socket注冊了EPOLLONESHOT事件,那么操作系統最多觸發其上注冊的一個可讀、可寫或者異常事件,且只觸發一次。。想要下次再觸發則必須使用epoll_ctl重置該描述符上注冊的事件,包括EPOLLONESHOT 事件。
29        EPOLLONESHOT:只監聽一次事件,當監聽完這次事件之后,如果還需要繼續監聽這個socket的話,需要再次把這個socket加入到EPOLL隊列里
30        */
31 
32     epoll_ctl(epollfd, EPOLL_CTL_ADD, fd, &event);
33     setnoblocking(fd);              //設置為非阻塞,如果ET是必須的
34 }
35 //把fd從監聽紅黑樹epollfd上摘下來
36 void removefd(int epollfd, int fd) {
37     epoll_ctl(epollfd, EPOLL_CTL_DEL, fd,0);
38     close(fd);
39 }
40 //將事件重置為EPOLLONESHOT
41 void modfd(int epollfd, int fd, int ev) {
42     epoll_event event;
43     event.data.fd = fd;
44     //LT
45     event.events = ev | EPOLLONESHOT | EPOLLRDHUP;
46     epoll_ctl(epollfd, EPOLL_CTL_MOD, fd, &event);
47 }

epoll模塊

locker模塊

locker模塊包裝了一些我們做線程同步的工具類,具體有:信號量類,互斥鎖,條件變量類。沒有什么太特別的,就是把這些工具函數將他們的錯誤處理包裝起來方便使用。

 1 #ifndef LOCKER_H
 2 #define LOCKER_H
 3 
 4 #include<exception>
 5 #include<pthread.h>
 6 #include<semaphore.h>
 7 
 8 //一個簡單的信號量類
 9 class sem
10 {
11 public:
12     sem() {
13         if (sem_init(&m_sem, 0, 0) != 0)
14             throw std::exception();
15     }
16     sem(int num) {
17         if (sem_init(&m_sem, 0, num) != 0)
18             throw std::exception();
19     }
20     ~sem() {
21         sem_destroy(&m_sem);
22     }
23 
24     //加鎖與解鎖
25     bool wait() {
26         return sem_wait(&m_sem) == 0;
27     }
28     bool post() {
29         return sem_post(&m_sem) == 0;
30     }
31 
32 private:
33     sem_t m_sem;
34 };
35 
36 
37 //簡單的互斥鎖
38 class locker
39 {
40 public:
41     locker() {
42         if (pthread_mutex_init(&m_mutex,NULL) != 0)
43             throw std::exception();
44     }
45     ~locker() {
46         pthread_mutex_destroy(&m_mutex);
47     }
48 
49     bool lock() {
50         return pthread_mutex_lock(&m_mutex) == 0;
51     }
52     bool unlock() {
53         return pthread_mutex_unlock(&m_mutex) == 0;
54     }
55     pthread_mutex_t* get() {
56         return &m_mutex;
57     }
58 
59 private:
60     pthread_mutex_t m_mutex;
61 };
62 
63 
64 //簡單的條件變量
65 class cond
66 {
67 public:
68     cond() {
69         if (pthread_cond_init(&m_cond, NULL) != 0)
70             throw std::exception();
71     }
72     ~cond() {
73         pthread_cond_destroy(&m_cond);
74     }
75 
76     //設置條件變量
77     bool wait(pthread_mutex_t* m_mutex) {
78         return pthread_cond_wait(&m_cond, m_mutex);
79     }
80     bool timewait(pthread_mutex_t* m_mutex, struct timespec t) {
81         return pthread_cond_timedwait(&m_cond, m_mutex, &t)==0;
82     }
83     //條件變量滿足,喚醒阻塞在m_mutex互斥量的線程
84     bool signal() {
85         return pthread_cond_signal(&m_cond) == 0;
86     }
87     bool broadcast() {
88         return pthread_cond_broadcast(&m_cond) == 0;
89     }
90 
91 private:
92     pthread_cond_t m_cond;
93 };
94 
95 #endif // !LOCKER_H

locker模塊

threadpool模塊

一個web服務器幾乎離不開多線程了,在main那里我們說到main把所有讀時間能讀到的數據都存放在客戶讀緩沖區中,然后就插入任務到任務隊列等待線程去完成。我們來仔細講一下:

線程池類有兩個最為關鍵的成員:

  pthread_t* m_threads; //線程池數組
  std::list<T*> m_workqueue; //請求隊列

什么是請求隊列,就是一個存儲任務的list,我們在main函數把新任務放到list的尾部,然后所有線程爭奪list中的任務(這里要使用條件變量),爭奪到的線程先對任務隊列加互斥鎖然后從list頭取出任務結構體,在這個任務結構體內有一個回調函數,這個函數就是真正的工作(包括解析http請求報文,對請求資源的檢查,搓響應報文一條龍)當然這個函數我們放在http模塊以更加模塊化,從線程的角度就是我們拿到任務然后調用這個函數,線程就是在漫長的這個函數中度過了。

  然后是線程池數組,這個線程池還是比較簡單的線程池(沒有對線程的動態刪減等等),那么我們就是在線程池構造的時候就創建好約定個數的線程儲存在線程數組里,并且把線程detach掉,這樣我們就不需要對線程進行回收等等操作。線程的關鍵是線程的工作函數run(),這個函數不斷while循環直到被條件變量喚醒然后上鎖從list尾取出任務,開始執行任務(函數是porcess,看下個模塊)

  1 #ifndef THREADPOOL_H
  2 #define THREADPOOL_H
  3 
  4 #include<cstdio>
  5 #include<pthread.h>
  6 #include<exception>
  7 #include<list>
  8 
  9 #include "../lock/locker.h"
 10 #include"../CGImysql/sql_connection_pool.h"
 11 
 12 template<typename T>
 13 class threadpool
 14 {
 15 public:
 16     /*thread_number是線程池中線程的數量,max_requests是請求隊列中最多允許的、等待處理的請求的數量*/
 17     threadpool(connection_pool* connPool, int thread_number = 8, int max_request = 10000);
 18     ~threadpool();
 19     bool append(T* request);
 20 
 21 private:
 22     /*工作線程運行的函數,它不斷從工作隊列中取出任務并執行之*/
 23     static void* worker(void* arg);
 24     void run();
 25 
 26 private:
 27     int m_thread_number;        //線程池線程數
 28     int m_max_requests;            //請求隊列的最大請求數
 29 
 30     pthread_t* m_threads;        //線程池  數組
 31     std::list<T*> m_workqueue;        //請求    隊列
 32 
 33     locker m_queuelocker;                //請求隊列的互斥鎖
 34     sem m_queuestat;                    //請求隊列的信號量(可以看出要處理的任務數)
 35 
 36     bool m_stop;            //線程池結束標志
 37     connection_pool* m_connPool;            //數據庫連接池
 38 };
 39 
 40 //線程池構造函數
 41 template<typename T>
 42 threadpool<T>::threadpool(connection_pool* connPool, int thread_number, int max_request) :
 43     m_thread_number(thread_number), m_max_requests(max_request), m_stop(false), m_threads(NULL), m_connPool(connPool) {
 44     if (thread_number <= 0 || max_request <= 0)    //不合理的線程數量和請求隊列數量
 45         throw std::exception();
 46     m_threads = new pthread_t[m_thread_number];
 47     if (!m_threads)
 48         throw std::exception();
 49     //創造thread_number個線程并且存儲起來
 50     for (int i = 0; i < thread_number; i++) {
 51         if (pthread_create(m_threads + i, NULL, worker, this) != 0) {
 52             delete[] m_threads;        //失敗
 53             throw std::exception();
 54         }
 55         if (pthread_detach(m_threads[i])) {
 56             delete[] m_threads;        //失敗
 57             throw std::exception();
 58         }
 59     }
 60 }
 61 
 62 //線程池析構函數
 63 template<typename T>
 64 threadpool<T>::~threadpool() {
 65     delete[] m_threads;
 66     m_stop = true;
 67 }
 68 
 69 //將“待辦工作”加入到請求隊列
 70 template<typename T>
 71 bool threadpool<T>::append(T *request) {
 72     m_queuelocker.lock();
 73     if (m_workqueue.size() > m_max_requests) {
 74         m_queuelocker.unlock();
 75         return false;
 76     }
 77     m_workqueue.push_back(request);
 78     m_queuelocker.unlock();
 79     m_queuestat.post();
 80     return true;
 81 }
 82 
 83 //線程回調函數/工作函數,arg其實是this
 84 template<typename T>
 85 void* threadpool<T>::worker(void *arg) {
 86     threadpool* pool = (threadpool*)arg;
 87     pool->run();
 88     return pool;
 89 }
 90 
 91 //回調函數會調用這個函數工作
 92 //工作線程就是不斷地等任務隊列有新任務,然后就加鎖取任務->取到任務解鎖->執行任務
 93 template<typename T>
 94 void threadpool<T>::run() {
 95     while (!m_stop) {
 96         //請求隊列長度--,互斥鎖鎖住
 97         m_queuestat.wait();
 98         m_queuelocker.lock();
 99         
100         if (m_workqueue.empty()) {
101             m_queuelocker.unlock();
102             continue;
103         }
104 
105         T* request = m_workqueue.front();
106         m_workqueue.pop_front();
107         
108         m_queuelocker.unlock();
109 
110         if (!request) continue;
111 
112         //
113         connectionRAII mysqlcon(&request->mysql, m_connPool);
114 
115         request->process();
116     }
117 }
118 
119 
120 #endif // THREADPOOL_H

threadpool模塊

線程池的數量是不是越多服務器的性能越高呢?其實不是這樣的,簡單來說線程數量和計算機的CPU核心數成一定關系時,表現會較好。從網上找到一個回答(出處不詳

http模塊

好的到了這里我們終于到了最關鍵的http模塊了,在http模塊我們將完成最關鍵的處理http請求報文和搓http響應報文的工作。如果一個個函數細細講這一塊可以講很久很久。。。

我們先看看主要函數以及它們的協調合作:

我們先理解這一塊使用到的“狀態機設計模式”,我們學過UML里的狀態圖,那么我們應該很容易理解這個設計模式。簡單理解就是,我們經常會遇到需要根據不同的情況作出不同的處理的情況,這時候我們寫出大量的if else使得邏輯十分混亂。那么我們可以這樣設計:我們在類里面設計一個狀態,并且允許一個對象在其內部狀態改變時改變它的行為,對象看起來似乎修改了它的類。感覺說起來還是比較抽象,看代碼會比較容易理解,其實就是看狀態調用不同的函數。

在http中我們如何使用狀態機,我們有兩個狀態機:主狀態機和從狀態機。

//主狀態機的狀態:解析請求行  解析請求頭  解析消息體(僅用于解析POST請求)
enum CHECK_STATE { CHECK_STATE_REQUESTLINE = 0, CHECK_STATE_HEADER, CHECK_STATE_CONTENT };
//報文解析的結果:請求不完整需要繼續讀取請求報文數據  獲得了完整的HTTP請求  HTTP請求報文有語法錯誤  服務器內部錯誤,該結果在主狀態機邏輯switch的default下,一般不會觸發
enum HTTP_CODE { NO_REQUEST, GET_REQUEST, BAD_REQUEST, NO_RESOURCE, FORBIDDEN_REQUEST, FILE_REQUEST, INTERNAL_ERROR, CLOSED_CONNECTION };
//從狀態機的狀態:完整讀取一行  報文語法有誤  讀取的行不完整
enum LINE_STATUS { LINE_OK = 0, LINE_BAD, LINE_OPEN };

這一部分知識強烈建議看一下社長公眾號系列文章,我們需要重點理解主狀態機和從狀態機,我的個人理解是主狀態機是更為宏觀一點的他主要關注當前解析到 請求行 / 請求頭 / 請求主體 ?那么我們的代碼就要根據這個主狀態機的狀態判斷當前的解析進度從而判斷當前進度下一步要做的動作(舉個例子:比如我現在是請求頭狀態并且也發現現在已經把最后一行請求頭解析完了,那么我們就變換主狀態機狀態,這時下一次代碼就能判斷到當前解析到請求主體了所以調用相關的函數)。

那么從狀態機又怎么理解呢?從狀態機就是更加聚焦于一行行,著眼更加細致,他關心的是當前這一行讀完整了/不完整/格式有誤,亦即從狀態機關注一行的解析狀態。(那么顯然這里可以想到其實每一個主狀態機狀態可能對應多輪的從狀態改變,類似與包含關系),所以從狀態機的函數會關注當前字符是什么,根據這個字符判斷當前是讀完了嗎是格式錯誤嗎等等。

我們從狀態機的角度看看這個函數調用:

http模塊就講到這里了,具體每個函數實現還是得認真看代碼,有很多很多細節值得學習,這里怕是講不完。

OK到這里我們就講了TinyWebServer的前五個模塊了,寫成這樣其實webserver已經能夠基礎工作了,監聽/請求/響應都可以完成了。后面我們要對這個服務器增加更多的模塊,使得他的性能上升和提供更多的功能。

參考資料:

TinyWebServer項目地址:https://github.com/qinguoyi/TinyWebServer

社長的系列講解博文:http://mp.weixin.qq.com/mp/homepage?__biz=MzAxNzU2MzcwMw==&hid=6&sn=353ef6eadc7a8daf9c82d005c15adcd2&scene=18

總結

以上是生活随笔為你收集整理的TinyWebServer:一个Linux下C++轻量级Web服务器(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

国产不卡在线看 | 九九热视频在线免费观看 | 久久天天躁 | 麻豆综合网 | 超碰在线人人草 | 日韩欧美精品一区 | 色福利网| 91女人18片女毛片60分钟 | 国产精品成人久久久 | 日韩欧美国产精品 | 国产成人精品亚洲a | 欧美日韩xx | av免费看在线 | 中文字幕av最新 | 99视频在线精品国自产拍免费观看 | 中文字幕在线播放日韩 | 五月天久久综合网 | 成人免费观看视频大全 | 日韩三级免费观看 | 在线看不卡av | 99久久精品国产免费看不卡 | 中文字幕在线国产 | 69欧美视频 | 91精品视频一区二区三区 | 国产精品一级视频 | 丝袜美腿一区 | 精品国产aⅴ麻豆 | 精品视频9999 | 亚洲精品乱码久久久久久久久久 | 视频在线观看亚洲 | 国产 日韩 在线 亚洲 字幕 中文 | 成人午夜电影网站 | 亚洲精品在线一区二区 | 国产精品久久久久久欧美 | 国产91在线观看 | 国产成人在线一区 | 99精品欧美一区二区蜜桃免费 | 国产精品久久久久久电影 | 日韩在线精品一区 | 2022久久国产露脸精品国产 | 久久艹免费 | 欧美与欧洲交xxxx免费观看 | 五月天综合激情网 | 91精品免费在线 | 日韩高清在线观看 | 久久久国产在线视频 | 在线观看一级视频 | 欧美激情视频一区二区三区 | 日韩精品高清视频 | 久久伊人色综合 | 日韩高清 一区 | 久草在线资源观看 | 免费91在线 | 国产一区高清在线观看 | 国产又粗又猛又色 | 久久精品网站免费观看 | 国产一级视频在线 | 精品视频专区 | 日韩精品中文字幕久久臀 | 一区精品久久 | 中文字幕亚洲字幕 | 玖玖玖影院 | avav片| av电影免费在线播放 | 久久精彩免费视频 | 天天综合区 | 亚洲精品久久久久58 | 日韩91在线 | 欧美激情第一页xxx 午夜性福利 | 欧美成人按摩 | 久久久国产精品人人片99精片欧美一 | 久久成年人网站 | 精品999| 91精品一| 四虎国产永久在线精品 | 99九九99九九九视频精品 | 精品99免费视频 | 国产成人精品在线 | 亚洲欧美在线综合 | 久久久午夜精品理论片中文字幕 | 国产黄色片在线免费观看 | 欧美天天综合网 | 在线精品视频在线观看高清 | 一级片观看 | 97超碰国产精品女人人人爽 | 特级西西444www高清大视频 | 精品国产成人av在线免 | 久久国精品 | 色婷五月天 | 四虎影视精品 | 天天搞天天干 | 国产在线视频一区二区三区 | 狠狠色丁香婷婷综合久小说久 | 狠狠干夜夜操天天爽 | 天天摸天天操天天舔 | 91av片| 九九久久婷婷 | 亚洲视频免费在线看 | 亚洲精品国产第一综合99久久 | 人人射| 亚洲高清网站 | 久草精品视频在线观看 | 99视频免费观看 | 久久精品国产免费看久久精品 | 日日操夜 | 国产二区精品 | 久草网站 | 日本乱视频| 久久久精品福利视频 | 国产高清一区二区 | 手机在线中文字幕 | 爱爱av网站| 天天操人人干 | 欧美另类高潮 | 精品96久久久久久中文字幕无 | 成人h动漫在线看 | 日韩免费一区二区 | 91精品综合在线观看 | 日韩视频中文字幕 | 国产一级在线视频 | 91国内在线视频 | 精品一区二区在线免费观看 | 国产欧美日韩视频 | 91大神在线观看视频 | 国产96在线视频 | 在线观看av大片 | 在线观看成人小视频 | 国产午夜精品一区二区三区 | 在线观看国产www | 高清免费在线视频 | 五月天天色 | 国产成人精品日本亚洲999 | 午夜精品久久久久久久99无限制 | 精品96久久久久久中文字幕无 | 日本黄色免费播放 | 国产视频久久久久 | a v在线视频 | 成 人 黄 色 视频 免费观看 | 新av在线| 国产成人61精品免费看片 | 国产精品24小时在线观看 | 久草在线免费在线观看 | 亚洲一二视频 | 三级视频片 | 国产精品久久99综合免费观看尤物 | 免费观看91视频大全 | 欧美一级视频在线观看 | 中文字幕网站 | 久久久国产精品久久久 | 日韩午夜剧场 | 不卡av电影在线 | 国产喷水在线 | 最新国产精品亚洲 | 又爽又黄又刺激的视频 | 永久免费av在线播放 | 日韩精品中文字幕在线不卡尤物 | 久久在线视频精品 | 国产女教师精品久久av | 公与妇乱理三级xxx 在线观看视频在线观看 | 超碰国产人人 | 女人18精品一区二区三区 | 久久久成人精品 | 国产色女 | 又湿又紧又大又爽a视频国产 | 91精品999 | 久草在线电影网 | 中国一级特黄毛片大片久久 | 免费看搞黄视频网站 | 国产精品18久久久久久久网站 | 99这里都是精品 | freejavvideo日本免费 | 五月婷婷黄色 | 国产区免费| 午夜视频福利 | 免费日韩视| 亚洲精品欧美成人 | 国模吧一区 | 久久视频在线观看免费 | 日韩免费电影一区二区三区 | 久久久久女人精品毛片 | 欧美色综合久久 | 91黄色在线看 | 97在线看片 | 色综合久久久久综合体 | 丁香九月婷婷 | 日本精品在线视频 | 久久精品国产成人精品 | 黄色三级在线观看 | 色激情五月 | 在线免费精品视频 | 美女视频黄免费网站 | 精品国产乱码一区二区三区在线 | 久久久精华网 | 国产精品 中文字幕 亚洲 欧美 | 久久午夜精品影院一区 | 精品日本视频 | 又黄又刺激视频 | 日韩一级黄色片 | 亚洲男男gaygay无套 | 97av在线视频| www.婷婷色| 热久久最新地址 | 久久久精品免费看 | 日韩欧美一区二区三区在线 | 九九久久在线看 | 日本中文字幕电影在线免费观看 | 色片网站在线观看 | 99精品在线看 | 国产视频在线观看免费 | 国产精品99久久久久久久久久久久 | 久久99国产精品免费网站 | 天天玩天天操天天射 | 久久激情小视频 | 在线观看成人 | 在线观看av中文字幕 | 久久五月婷婷丁香社区 | 久久久国产精品人人片99精片欧美一 | 在线激情影院一区 | 日本久久久久久久久久 | 精品久久久一区二区 | 国产夫妻性生活自拍 | 91大神精品视频在线观看 | 国产黄色免费 | 国产精品精品国产婷婷这里av | 国产亚洲精品成人 | 欧美亚洲精品一区 | 国产一区 在线播放 | aa一级片 | 久久看片| 天天操天操 | 日韩一区二区三区在线看 | 欧美日韩一区二区视频在线观看 | 天天做日日爱夜夜爽 | 中文字幕视频网站 | 国产成人精品日本亚洲999 | 黄色小说视频网站 | 在线导航av | 婷婷草| 精品免费观看 | 国产福利精品视频 | 成人午夜在线电影 | 日韩有色| 永久av免费在线观看 | 亚洲一区不卡视频 | 在线午夜电影神马影院 | 日韩理论在线 | 91精品国产亚洲 | 成人久久网 | 99 视频 高清 | 天天干,天天射,天天操,天天摸 | 成人免费大片黄在线播放 | 国产成人一区二区三区影院在线 | 91在线资源 | av在线不卡观看 | 婷婷综合国产 | 欧美性色网站 | 国产精品中文字幕在线播放 | 久久久久久久久久久久久久免费看 | 日韩性色 | a级黄色片视频 | 91爱爱电影 | 国产一级片久久 | 欧美巨大| 黄色午夜| 日韩网站在线播放 | 人人添人人澡人人澡人人人爽 | 精品视频在线播放 | 欧美伦理一区 | 国产福利小视频在线 | 狠狠狠色丁香综合久久天下网 | 久久国产网站 | 中文字幕亚洲国产 | 精品一区二区三区久久久 | 国产精品 日本 | 成人app在线播放 | 国内精品久久久久久中文字幕 | 成人av在线网址 | 国产专区精品视频 | 亚洲成av人片在线观看无 | 91麻豆精品国产91久久久更新时间 | 久久久www成人免费精品张筱雨 | 亚洲国产成人在线观看 | 亚洲国产最新 | 亚洲1区在线 | 欧美日韩不卡在线观看 | 超碰在线97免费 | 中文字幕在线观 | 天堂网中文在线 | 99精品免费久久久久久久久 | 日韩在线国产精品 | 在线视频 区 | 久久黄色片子 | 国产一区欧美二区 | 久久久久久久久久久网站 | 深夜免费小视频 | 国色天香在线观看 | 91精品国产自产91精品 | 久久人人添人人爽添人人88v | 免费看黄的视频 | 久久天天躁狠狠躁夜夜不卡公司 | 久草精品在线观看 | 国产黄色观看 | 日日夜夜添 | 国产一级在线视频 | 日本黄色大片儿 | 97电院网手机版 | 在线免费观看国产黄色 | 91麻豆精品91久久久久同性 | 国产偷v国产偷∨精品视频 在线草 | 乱男乱女www7788 | 中文在线8资源库 | 成人一区二区在线观看 | 国产99久久99热这里精品5 | 黄色中文字幕在线 | 96久久欧美麻豆网站 | 成 人 黄 色 视频免费播放 | 中文字幕在线一区二区三区 | 人人澡人 | 久久久高清免费视频 | 成人午夜在线电影 | 欧美一区二区在线免费观看 | 手机看片国产日韩 | 精品国产一区二区久久 | 亚洲最新av在线 | 国产在线免费av | 成人黄视频 | 精品九九久久 | 五月婷婷综合在线视频 | 欧美日韩成人一区 | 一级国产视频 | 美女网站色在线观看 | 国产日本高清 | 中文字幕在线免费播放 | 欧美一区二区三区四区夜夜大片 | 天堂在线视频中文网 | 免费日韩 精品中文字幕视频在线 | 国产精品久久网站 | 中文字幕在线观看亚洲 | 国模吧一区| 国产伦精品一区二区三区… | 少妇激情久久 | 国产精品久久片 | 91亚洲狠狠婷婷综合久久久 | 久草久热| 亚洲精品99久久久久中文字幕 | av免费成人 | 国产亚洲永久域名 | 成人三级网站在线观看 | 成人va天堂| 国产精品精品久久久久久 | 精品视频免费播放 | 精品一区二区三区久久久 | 91久久久久久久 | 国产亚洲精品成人av久久ww | 日韩精品电影在线播放 | 成人国产精品久久久久久亚洲 | 国产极品尤物在线 | 九九精品视频在线观看 | 99精品色| 香蕉视频在线免费看 | 天天操夜夜看 | 日日夜夜操av | 欧美男男激情videos | 免费看污在线观看 | 国产精品久久久久久久久久尿 | 成人精品久久 | 婷婷色中文网 | 欧美综合久久久 | 日韩免费在线播放 | 久久黄色免费观看 | 亚洲精品午夜国产va久久成人 | 国产精品igao视频网网址 | 天天干天天操天天干 | 国产成人久久77777精品 | 探花视频在线版播放免费观看 | 久久爱www. | 99视频在线精品国自产拍免费观看 | 日本一区二区免费在线观看 | 国产成人精品综合 | 国产一区二区三区在线 | 国产黄色精品视频 | 日韩高清毛片 | 九九九热精品免费视频观看网站 | 亚洲激精日韩激精欧美精品 | 不卡av在线播放 | 欧美精品在线一区二区 | 人人干人人做 | 又长又大又黑又粗欧美 | 日韩精品一区二区三区在线播放 | 久久精品视频在线播放 | 久久国产精品视频 | 97天堂网| 日韩欧美高清免费 | 日韩精品一区二区免费视频 | 久久婷婷色综合 | 欧美久久久久久久久中文字幕 | 五月天狠狠操 | 天天操天天摸天天射 | 精品在线你懂的 | av电影亚洲 | 国产精品 美女 | 国产黄a三级| 亚洲女人av| 欧美一级淫片videoshd | 久久久伊人网 | 久久久影视 | 麻豆精品传媒视频 | 一区二区欧美日韩 | 精品视频资源站 | 日韩在线观看电影 | 美女久久久久久久久久久 | 在线日韩 | 一级一级一片免费 | 精品国产乱码久久久久久1区二区 | 国产乱码精品一区二区三区介绍 | 国产伦精品一区二区三区… | 亚洲视频第一页 | 97超碰人人网 | 五月天亚洲综合 | 久久久免费观看视频 | 91视频免费观看 | 国产午夜精品免费一区二区三区视频 | 麻豆免费在线视频 | 97超视频| 国产一区二区在线视频观看 | 在线视频一区观看 | 亚洲丝袜一区 | 国内精品久久久久 | 午夜精品一区二区三区在线视频 | 亚洲二区精品 | 久久综合丁香 | 中文字幕免费国产精品 | 99热播精品 | 一区二区三区免费 | 伊人婷婷色 | 国产xxxx做受性欧美88 | 久久亚洲在线 | 久久狠狠亚洲综合 | 五月婷婷在线视频观看 | 国产精品观看视频 | 亚洲国产精品成人女人久久 | 午夜精品视频免费在线观看 | 精品国产aⅴ一区二区三区 在线直播av | 91视频-88av | 日韩视频在线一区 | 91自拍视频在线 | 久久久久久久99精品免费观看 | 国产97色在线 | 日韩av午夜 | 国产 在线 高清 精品 | 香蕉视频导航 | 99久久久精品 | 成片视频免费观看 | 久久九九久久精品 | 久精品在线观看 | 99成人在线视频 | 又黄又爽又色无遮挡免费 | 一区二区三区精品在线 | 91中文字幕在线 | 伊人久久一区 | 伊人影院得得 | 色天堂在线视频 | 在线免费观看国产视频 | 亚洲一区精品二人人爽久久 | 日本激情中文字幕 | 日韩av一区二区在线影视 | 婷婷伊人综合亚洲综合网 | 91精品国产自产91精品 | 激情网婷婷 | 日韩欧美一区二区三区在线 | 欧美性生活免费 | 日韩在线网址 | www.99久久.com | 午夜视频播放 | 日韩精品一卡 | 午夜91视频| 青青射 | 成人免费观看视频大全 | 成人免费网视频 | 在线影院 国内精品 | 国产精品久久久久久影院 | 国产最顶级的黄色片在线免费观看 | 日韩中文字幕免费 | 欧美久久影院 | 国产一二区视频 | 99精品视频播放 | 久久精品中文视频 | 欧美精品中文 | 欧美日韩在线播放 | 特级西西444www大精品视频免费看 | 日韩欧美一区视频 | av官网在线 | 婷婷六月天综合 | 国产精品一区二区吃奶在线观看 | 五月婷婷六月综合 | 国产精品久久久久免费观看 | 一区二精品 | av专区在线 | 婷婷综合成人 | 亚洲国产免费看 | av成人在线看 | 国产香蕉97碰碰久久人人 | 男女啪啪视屏 | 日韩欧美中文 | 欧美一二三视频 | 有码中文字幕在线观看 | 国产老妇av | 在线免费观看涩涩 | 国产一二三四在线观看视频 | 日本在线成人 | 色婷婷视频在线 | 国产最新精品视频 | 一级理论片在线观看 | 亚洲一区视频免费观看 | 欧美日本中文字幕 | 日韩视频免费播放 | 午夜国产福利在线 | 97色婷婷成人综合在线观看 | 日日操网站 | 色九九视频 | 热99久久精品 | 日本三级不卡 | 美女一级毛片视频 | www操操操 | 91免费视频网站在线观看 | av在线播放亚洲 | 久久精品a | 色综合久久天天 | 一级黄色片在线观看 | 三级av黄色 | 综合色综合色 | 国产精品久久久久久久久久新婚 | 国产亚洲va综合人人澡精品 | 国产一区二区网址 | 国产91影院 | 天堂网中文在线 | 黄色小说在线免费观看 | 免费看黄在线观看 | 日韩a在线播放 | 2021av在线 | 日韩精品一区二区在线视频 | 亚洲午夜久久久影院 | 日韩精品久久一区二区三区 | 最新国产精品拍自在线播放 | 97人人模人人爽人人喊中文字 | 欧美亚洲精品在线观看 | 免费网址在线播放 | 天天操天天曰 | 国产精品久久久久久久久久尿 | 欧美一级特黄高清视频 | 在线视频app| 日韩欧美精品一区二区 | 成人午夜网 | 国产破处精品 | 国产无套精品久久久久久 | 国产一区二区在线观看视频 | 中文国产成人精品久久一 | 国产一二区视频 | 麻豆视频免费入口 | 亚洲精品国产精品国产 | 五月天视频网 | 女人高潮特级毛片 | 国产精品一区在线观看 | 国产精品手机在线观看 | 91成年人在线观看 | 国产黄色资源 | 婷婷丁香色 | 欧美日韩亚洲在线观看 | 欧美大片在线观看一区 | 天天玩天天干天天操 | av免费线看 | 亚洲色图av| 国产白浆视频 | 亚洲尺码电影av久久 | 最新午夜 | 成人污视频在线观看 | 精品亚洲免费视频 | 亚洲免费观看在线视频 | 最近中文字幕完整高清 | 久久老司机精品视频 | 欧美精品成人在线 | 日韩精品欧美专区 | 欧美天天射 | 亚洲欧美国产视频 | 毛片美女网站 | 国产精品久久久免费 | 二区中文字幕 | av在线电影播放 | 久热超碰 | 日本激情视频中文字幕 | 在线亚洲观看 | 日韩精品欧美专区 | 免费在线观看黄网站 | 亚洲三级黄色 | 国产精品成人一区二区 | 国产精品久久久久aaaa九色 | 黄色三级免费片 | 婷婷色狠狠 | 午夜精品久久一牛影视 | 久久五月婷婷丁香 | 婷婷激情影院 | 中文字幕亚洲精品日韩 | 成人午夜性影院 | 日本精品久久久久影院 | 在线视频 日韩 | 久久国产乱 | 日韩中文字幕视频在线 | 久艹在线播放 | 在线免费国产视频 | 99在线观看视频网站 | 中文字幕av在线免费 | 亚洲精品高清视频 | 91视频在线国产 | 亚洲永久国产精品 | 一区二区三区免费在线观看视频 | 中文字幕一区二区三 | 日韩激情小视频 | 国产精品久久久久久久久久了 | 国产一级片一区二区三区 | 毛片网站在线观看 | 日本精品久久久一区二区三区 | 99久久精品无码一区二区毛片 | 五月天婷婷丁香花 | 精品国产视频在线 | 久久婷婷开心 | 亚洲欧美精品一区 | 久草在线资源观看 | www.com.日本一级 | 欧美激情精品久久久久久 | 欧美精品久久久久久久久久丰满 | 久久在线看 | 激情综合网天天干 | 久久精品免费 | 2023国产精品自产拍在线观看 | 玖玖在线看 | 久久99精品久久久久久秒播蜜臀 | 久久视屏网 | 九九精品视频在线 | av在线电影网站 | 91久久久久久久一区二区 | 成年人三级网站 | 日韩高清在线一区 | 91麻豆精品国产91久久久久久 | 涩涩网站免费 | 亚洲精品自拍视频在线观看 | av在线免费网站 | 色婷婷九月 | av线上免费看 | 国产一区在线免费观看 | 国产精品国产亚洲精品看不卡15 | 中文字幕在线观看日本 | 亚洲精品高清在线观看 | 黄色视屏av | 久久成人人人人精品欧 | www.精选视频.com | 免费久久网 | 免费视频久久久 | 精品国产乱码久久久久 | 中中文字幕av在线 | 中文字幕乱视频 | 国产精彩视频一区二区 | 91久久精 | 黄色大片视频网站 | 亚洲综合情 | 亚洲一级黄色大片 | 在线导航av| 免费网站观看www在线观看 | 在线视频一二三 | 网址你懂的在线观看 | 婷婷激情综合 | 国产精品日韩在线播放 | 久久99亚洲热视 | 一区二区三区日韩在线 | 欧美一级性生活 | 91桃色免费观看 | 久久精品欧美一区 | 日韩av资源在线观看 | 国产麻豆电影在线观看 | 综合天天久久 | 999久久久精品视频 日韩高清www | 色丁香久久| av一级一片| 男女视频久久久 | 日韩精品视频免费专区在线播放 | 亚洲午夜久久久久久久久 | 黄色日本免费 | 精品黄色视| 国产精品久久久久久久久久尿 | 97色视频在线 | 99视频精品全部免费 在线 | 一级淫片a| 9色在线视频| 欧美成人一区二区 | 人人爽人人爽av | 欧美成人区 | 久久这里只有精品23 | 西西444www大胆高清视频 | 国产精品视频最多的网站 | 亚洲人成影院在线 | 日韩av电影免费观看 | 亚洲国产精品成人女人久久 | 精品视频免费看 | 成人小电影在线看 | 久久99国产视频 | 久久久电影 | 中文字幕丝袜制服 | 久久99久久99精品免视看婷婷 | 国内视频在线 | 四虎天堂| 国产在线专区 | 一区免费观看 | 国产黄色一级片在线 | 亚洲精品久久久久久国 | 手机av网站 | 夜夜躁狠狠躁 | 久久成人亚洲欧美电影 | 999国内精品永久免费视频 | 黄色a视频 | 中文网丁香综合网 | 国产午夜精品一区二区三区嫩草 | 天天操综合网站 | 国产3p视频 | 精品一区二三区 | 日韩视频免费 | 狠狠狠狠狠狠狠 | 中文字幕一区二区三区四区视频 | 青青草国产精品视频 | 亚洲成av | 亚洲一区二区三区四区精品 | 在线视频日韩精品 | 麻豆视频网址 | 正在播放日韩 | 久久精品一二区 | 欧美做受69 | 亚洲 欧美 另类人妖 | 91精品国产乱码久久 | 日韩欧美电影在线观看 | 亚洲国产黄色片 | 99久久精品久久久久久动态片 | 国产在线精品观看 | 中文字幕在线久一本久 | 成年美女黄网站色大片免费看 | 日韩av高清| 狠狠五月婷婷 | 精品久久久久久久久久久久久久久久久久 | 麻豆成人网 | 天天射综合 | 久久电影网站中文字幕 | 免费高清看电视网站 | 在线视频一二区 | 69国产精品成人在线播放 | 亚洲第一区在线观看 | 国产999视频 | 九精品 | 亚洲视频播放 | 亚洲一区二区三区91 | 欧美性高跟鞋xxxxhd | 精品视频专区 | 国产精品免费在线 | 国产精品久久久久久久久久久久午夜片 | 狠狠狠狠狠干 | 国产小视频免费在线观看 | 国产精品 中文在线 | 国产精品久久久久久久久久东京 | 91亚洲精品久久久中文字幕 | 中文字幕乱视频 | 黄色成人av在线 | 国产精品久久久久久一区二区三区 | 久久久麻豆视频 | 免费成人在线电影 | 美女视频国产 | 欧美精品在线一区二区 | 久久艹影院 | 欧美一级激情 | 99热这里只有精品免费 | 丁香综合五月 | 999久久a精品合区久久久 | 久久手机免费视频 | 日韩美女黄色片 | 国产精品久久久久影院 | 国产麻豆成人传媒免费观看 | 五月婷婷综合色拍 | 九九在线高清精品视频 | 国产成人av一区二区三区在线观看 | 亚洲欧洲一级 | 久久99精品久久久久久久久久久久 | 韩国av一区二区三区在线观看 | 十八岁以下禁止观看的1000个网站 | 美女禁18| 狠狠狠狠狠色综合 | 欧美日韩在线精品一区二区 | 午夜体验区 | 国产精品第2页 | 手机成人av | 午夜视频在线瓜伦 | 色婷婷激情网 | 麻豆影视网站 | 九九99| 国产精品久久 | 久久99国产一区二区三区 | av免费观看高清 | 在线视频 成人 | 日韩在线视频一区 | 探花视频免费观看高清视频 | www.在线观看av | 五月天综合网站 | 丝袜制服综合网 | 精品国产乱码久久久久久天美 | 久久人人爽人人爽人人片av免费 | 91av原创| 久久污视频 | 久久r精品| 国产精品久久电影网 | 中文永久字幕 | 日日夜夜av | 欧美久草网 | 国产99久久精品 | 久久精品8| 日本韩国精品一区二区在线观看 | 天天干天天上 | 成人av亚洲 | 欧美日韩一区二区在线 | 欧美特一级 | 久久99精品国产 | 国产精品成人国产乱 | 东方av免费在线观看 | 亚洲黄在线观看 | 一区免费视频 | 亚洲成人精品久久久 | 最近高清中文字幕 | 色婷婷狠狠五月综合天色拍 | 91丨九色丨蝌蚪丨对白 | 国产精品久久久久国产精品日日 | av综合网址| 亚洲综合欧美日韩狠狠色 | 另类老妇性bbwbbw高清 | 91精品国产综合久久福利不卡 | 国产成人精品久久久久 | 黄色aaaaa| 欧美日韩久久不卡 | 欧美激情精品 | 成人久久免费 | 久久视频这里有久久精品视频11 | 国产成人精品亚洲日本在线观看 | 超碰在线cao| 日韩黄色中文字幕 | 久久不射影院 | 黄色av在| 免费视频久久久久 | 精品欧美乱码久久久久久 | 天天综合网天天综合色 | 偷拍区另类综合在线 | 97国产大学生情侣白嫩酒店 | 丁香婷婷综合色啪 | 婷婷色在线播放 | 日韩一区二区三区免费视频 | 亚洲aⅴ免费在线观看 | 久久综合久久久久88 | 九九九九精品九九九九 | 国产中文在线视频 | 97超碰人人干| 日本久久成人中文字幕电影 | 国产视频观看 | 最新三级在线 | 五月婷婷综合在线 | 午夜av剧场| 久久久免费毛片 | avwww在线观看 | 亚洲欧洲视频 | 国产精选视频 | 婷婷99| 综合激情网 | 麻豆成人精品视频 | 色吧久久 | 欧美一级免费黄色片 | 欧美日本高清视频 | 成年人免费在线播放 | 美女黄频在线观看 | 精品一区二三区 | 久久这里有 | 香蕉视频在线网站 | 人人澡人摸人人添学生av | 一区二区三区在线观看免费视频 | 精品影院一区二区久久久 | www.天天射.com | 在线高清一区 | 一本一本久久aa综合精品 | 免费不卡中文字幕视频 | 国语麻豆| 国产中年夫妇高潮精品视频 | 久久久久免费精品国产小说色大师 | 国产成人亚洲在线观看 | 91精品国产九九九久久久亚洲 | 久久爱www. | 五月婷婷中文 | 久久成人免费视频 | 中文字幕第 | 综合色影院 | 黄色大片av| 特级西西444www大胆高清无视频 | 免费av看片 | 精品福利av | 激情导航 | 国产99久久久国产精品免费二区 | www.久热| 国产成人一二三 | 国产黄色精品在线观看 | 丁香婷婷在线 | 天天干夜夜干 | 在线你懂 | 婷婷中文字幕 | 99久热在线精品视频成人一区 | 午夜精品电影 | 91福利试看 | 三级黄色欧美 | 福利久久久| 日韩欧美视频免费看 | 女人久久久久 | 久久中文视频 | 国产黑丝一区二区 | 久草在线 | 最新国产精品亚洲 | 丁香av| 亚洲成人动漫在线观看 | 精品99在线 | 99精品美女| 99激情网| 91视频在线免费看 | 亚洲精选99| 国产成人久久久久 | 亚洲国产欧美在线看片xxoo | 五月婷婷激情六月 | 一区二区不卡视频在线观看 | 国产精品热 | 成人毛片在线视频 | 福利片视频区 | 日韩在线视频播放 | 五月婷婷丁香网 | av成人免费| 日韩动态视频 | av线上免费看 | 国产97视频 | 国产精品一区一区三区 | 日韩系列 | 黄色软件视频大全免费下载 | 亚洲不卡av一区二区三区 | 亚洲精品在线二区 | av电影在线免费观看 | 欧美综合在线观看 | 在线观看日本韩国电影 | 欧美亚洲国产日韩 | 日韩激情一二三区 | 成人免费视频播放 | 久久久久国产一区二区三区四区 | 亚洲乱码一区 | 99中文字幕视频 | 欧美作爱视频 | 日韩欧美高清一区二区 | 国产丝袜美腿在线 | 精品久久久一区二区 | 色九九影院 | av高清一区二区三区 | 亚洲一区二区三区四区精品 | 深爱婷婷 | 在线观看日韩 | 天天操天天色天天 | 亚州天堂| 国产精品不卡一区 | 中文字幕在线视频国产 | 成人福利在线观看 | 久草在线 | 亚洲免费永久精品国产 | 免费视频色 | 在线看v片 | 日韩视频免费 | 天天色天天骑天天射 | 久久爱影视i | 欧美乱淫视频 | 亚洲国产av精品毛片鲁大师 | 亚洲国产午夜精品 | 九色自拍视频 | 日本在线精品视频 | av在线小说| 在线亚洲日本 | 国产日本在线 | 国产精品麻豆三级一区视频 | 国产精品久久久久四虎 | 精品伊人久久久 | 奇米导航 | 久久这里只有精品视频99 | 成人欧美在线 | 国产精品丝袜久久久久久久不卡 | 97热久久免费频精品99 | 久久久久黄 | 日韩视| 精品免费久久 | 五月婷婷在线综合 | 欧美福利久久 |