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

OpenHarmony輕量系統(tǒng)開發(fā)移植MQTT

原創(chuàng)
系統(tǒng) OpenHarmony
MQTT 是當(dāng)前最主流的物聯(lián)網(wǎng)通信協(xié)議,需要物聯(lián)網(wǎng)云平臺,例如華為云、阿里云、移動OneNET都支持mqtt。

??想了解更多內(nèi)容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

??https://harmonyos.51cto.com??

摘要:本文簡單介紹如何移植MQTT

適合群體:適用于潤和Hi3861開發(fā)板

文中所有代碼倉庫:https://gitee.com/qidiyun/hihope-3861-smart-home-kit

11.1 MQTT介紹

MQTT 是當(dāng)前最主流的物聯(lián)網(wǎng)通信協(xié)議,需要物聯(lián)網(wǎng)云平臺,例如華為云、阿里云、移動OneNET都支持mqtt。而Hi3861則是一款專為IoT應(yīng)用場景打造的芯片。本節(jié)主要講如何在鴻蒙系統(tǒng)中通過移植第3方軟件包 paho mqtt去實現(xiàn)MQTT協(xié)議功能,最后會給出測試驗證。為后續(xù)的物聯(lián)網(wǎng)項目打好基礎(chǔ)。

友情預(yù)告,本節(jié)內(nèi)容較多,源碼也貼出來了,大家最好先看一遍,然后再操作一次。

已經(jīng)移植好的MQTT源碼:

https://gitee.com/qidiyun/harmony_mqtt

11.2 MQTT移植

如果不想要自己移植的,可以跳過本節(jié)

MQTT 全稱為 Message Queuing Telemetry Transport(消息隊列遙測傳輸)是一種基于發(fā)布/訂閱范式的二進(jìn)制“輕量級”消息協(xié)議,由IB公司發(fā)布。針對于網(wǎng)絡(luò)受限和嵌入式設(shè)備而設(shè)計的一種數(shù)據(jù)傳輸協(xié)議。MQTT最大優(yōu)點(diǎn)在于,可以以極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實時可靠的消息服務(wù)。作為一種低開銷、低帶寬占用的即時通訊協(xié)議,使其在物聯(lián)網(wǎng)、小型設(shè)備、移動應(yīng)用等方面有較廣泛的應(yīng)用。MQTT模型如圖所示。

更多MQTT協(xié)議的介紹見這篇文章: MQTT 協(xié)議開發(fā)入門

1. 下載paho mqtt軟件包,添加到鴻蒙代碼中

paho mqtt-c 是基于C語言實現(xiàn)的MQTT客戶端,非常適合用在嵌入式設(shè)備上。首先下載源碼:

https://github.com/eclipse/paho.mqtt.embedded-c

下載之后解壓,會得到這么一個文件夾:

如何在鴻蒙系統(tǒng)中移植 Paho-MQTT 實現(xiàn)MQTT協(xié)議-鴻蒙HarmonyOS技術(shù)社區(qū)

我們在鴻蒙系統(tǒng)源碼的 third_party 文件夾下創(chuàng)建一個 pahomqtt 文件夾,然后把解壓后的所有文件都拷貝到 pahomqtt 文件夾下

下一步,我們在pahomqtt 文件夾下面新建BUILD.gn文件,用來構(gòu)建編譯。其內(nèi)容如下:

# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("http://build/lite/config/component/lite_component.gni")
import("http://build/lite/ndk/ndk.gni")

config("pahomqtt_config") {
include_dirs = [
"MQTTPacket/src",
"MQTTClient-C/src",
"MQTTClient-C/src/liteOS",
"http://kernel/liteos_m/components/cmsis/2.0",
]
}
pahomqtt_sources = [
"MQTTClient-C/src/liteOS/MQTTLiteOS.c",
"MQTTClient-C/src/MQTTClient.c",

"MQTTPacket/src/MQTTConnectClient.c",
"MQTTPacket/src/MQTTConnectServer.c",
"MQTTPacket/src/MQTTDeserializePublish.c",
"MQTTPacket/src/MQTTFormat.c",
"MQTTPacket/src/MQTTPacket.c",
"MQTTPacket/src/MQTTSerializePublish.c",
"MQTTPacket/src/MQTTSubscribeClient.c",
"MQTTPacket/src/MQTTSubscribeServer.c",
"MQTTPacket/src/MQTTUnsubscribeClient.c",
"MQTTPacket/src/MQTTUnsubscribeServer.c",
]

lite_library("pahomqtt_static") {
target_type = "static_library"
sources = pahomqtt_sources
public_configs = [ ":pahomqtt_config" ]
}

lite_library("pahomqtt_shared") {
target_type = "shared_library"
sources = pahomqtt_sources
public_configs = [ ":pahomqtt_config" ]
}

ndk_lib("pahomqtt_ndk") {
if (board_name != "hi3861v100") {
lib_extension = ".so"
deps = [
":pahomqtt_shared"
]
} else {
deps = [
":pahomqtt_static"
]
}
head_files = [
"http://third_party/pahomqtt"
]
}

2. 移植

我們使用到的是MQTTClient-C的代碼,該代碼支持多線程。

(1)創(chuàng)建LiteOS文件夾

MQTT已經(jīng)提供了Linux和freertos的移植,這里我們參考,新建文件夾:

third_party\pahomqtt\MQTTClient-C\src\liteOS

里面存放兩個文件:

MQTTLiteOS.c 和 MQTTLiteOS.h

內(nèi)容如下:

#include "MQTTLiteOS.h"

//用來創(chuàng)建線程
int ThreadStart(Thread* thread, void (*fn)(void*), void* arg)
{
int rc = 0;
thread = thread;

osThreadAttr_t attr;

attr.name = "MQTTTask";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = 2048;
attr.priority = osThreadGetPriority(osThreadGetId());

rc = (int)osThreadNew((osThreadFunc_t)fn, arg, &attr);

return rc;
}
//定時器初始化
void TimerInit(Timer* timer)
{
timer->end_time = (struct timeval){0, 0};
}

char TimerIsExpired(Timer* timer)
{
struct timeval now, res;
gettimeofday(&now, NULL);
timersub(&timer->end_time, &now, &res);
return res.tv_sec < 0 || (res.tv_sec == 0 && res.tv_usec <= 0);
}
void TimerCountdownMS(Timer* timer, unsigned int timeout)
{
struct timeval now;
gettimeofday(&now, NULL);
struct timeval interval = {timeout / 1000, (timeout % 1000) * 1000};
timeradd(&now, &interval, &timer->end_time);
}
void TimerCountdown(Timer* timer, unsigned int timeout)
{
struct timeval now;
gettimeofday(&now, NULL);
struct timeval interval = {timeout, 0};
timeradd(&now, &interval, &timer->end_time);
}


int TimerLeftMS(Timer* timer)
{
struct timeval now, res;
gettimeofday(&now, NULL);
timersub(&timer->end_time, &now, &res);
//printf("left %d ms\n", (res.tv_sec < 0) ? 0 : res.tv_sec * 1000 + res.tv_usec / 1000);
return (res.tv_sec < 0) ? 0 : res.tv_sec * 1000 + res.tv_usec / 1000;
}
void MutexInit(Mutex* mutex)
{
mutex->sem = osSemaphoreNew(1, 1, NULL);
}

int MutexLock(Mutex* mutex)
{
return osSemaphoreAcquire(mutex->sem, LOS_WAIT_FOREVER);
}

int MutexUnlock(Mutex* mutex)
{
return osSemaphoreRelease(mutex->sem);
}

//接受數(shù)據(jù)
int ohos_read(Network* n, unsigned char* buffer, int len, int timeout_ms)
{
struct timeval interval = {timeout_ms / 1000, (timeout_ms % 1000) * 1000};
if (interval.tv_sec < 0 || (interval.tv_sec == 0 && interval.tv_usec <= 0))
{
interval.tv_sec = 0;
interval.tv_usec = 100;
}

setsockopt(n->my_socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&interval, sizeof(struct timeval));

int bytes = 0;
while (bytes < len)
{
int rc = recv(n->my_socket, &buffer[bytes], (size_t)(len - bytes), 0);
if (rc == -1)
{
if (errno != EAGAIN && errno != EWOULDBLOCK)
bytes = -1;
break;
}
else if (rc == 0)
{
bytes = 0;
break;
}
else
bytes += rc;
}
return bytes;
}

//寫數(shù)據(jù)
int ohos_write(Network* n, unsigned char* buffer, int len, int timeout_ms)
{
struct timeval tv;

tv.tv_sec = 0; /* 30 Secs Timeout */
tv.tv_usec = timeout_ms * 1000; // Not init'ing this can cause strange errors

setsockopt(n->my_socket, SOL_SOCKET, SO_SNDTIMEO, (char *)&tv,sizeof(struct timeval));
int rc = send(n->my_socket, buffer, len, 0);
return rc;
}

//網(wǎng)絡(luò)初始化
void NetworkInit(Network* n)
{
n->my_socket = 0;
n->mqttread = ohos_read;
n->mqttwrite = ohos_write;
}

//網(wǎng)絡(luò)連接
int NetworkConnect(Network* n, char* addr, int port)
{
int type = SOCK_STREAM;
struct sockaddr_in address;
int rc = -1;
sa_family_t family = AF_INET;
struct addrinfo *result = NULL;
struct addrinfo hints = {0, AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP, 0, NULL, NULL, NULL};

if ((rc = getaddrinfo(addr, NULL, &hints, &result)) == 0)
{
struct addrinfo* res = result;

/* prefer ip4 addresses */
while (res)
{
if (res->ai_family == AF_INET)
{
result = res;
break;
}
res = res->ai_next;
}

if (result->ai_family == AF_INET)
{
address.sin_port = htons(port);
address.sin_family = family = AF_INET;
address.sin_addr = ((struct sockaddr_in*)(result->ai_addr))->sin_addr;
}
else
rc = -1;

freeaddrinfo(result);
}

if (rc == 0)
{
n->my_socket = socket(family, type, 0);
if (n->my_socket != -1)
rc = connect(n->my_socket, (struct sockaddr*)&address, sizeof(address));
else
rc = -1;
}

return rc;
}
void NetworkDisconnect(Network* n)
{
close(n->my_socket);
}

至此我們移植基本結(jié)束

11.3 測試代碼

測試代碼比較好寫。主要是3個文件,內(nèi)容我都貼出來了:

(1)BUILD.gn文件內(nèi)容:

iteos_m/components/cmsis/2.0",
"http://base/iot_hardware/interfaces/kits/wifiiot_lite",
"http://vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include",
"http://foundation/communication/interfaces/kits/wifi_lite/wifiservice",
"http://third_party/pahomqtt/MQTTPacket/src",
"http://third_party/pahomqtt/MQTTClient-C/src",
"http://third_party/pahomqtt/MQTTClient-C/src/liteOS",
]
#表示需要a_myparty 軟件包
deps = [
"http://third_party/pahomqtt:pahomqtt_static",
]
}

(2)mqtt_entry.c文件

主要是進(jìn)行熱點(diǎn)連接,因為我們要使用MQTT需要用到網(wǎng)絡(luò)。熱點(diǎn)連接的代碼之前在第9章已經(jīng)講說,這里就不完全貼了,代碼倉庫也有,主要的代碼部分:

void wifi_sta_task(void *arg)
{
arg = arg;

//連接熱點(diǎn)
hi_wifi_start_sta();

while(wifi_ok_flg == 0)
{
usleep(30000);
}


usleep(2000000);

//開始進(jìn)入MQTT測試
mqtt_test();
}

(3)mqtt_test.c 文件則是編寫了一個簡單的MQTT測試代碼

其中測試用的mqtt服務(wù)器是我自己的服務(wù)器:5.196.95.208

大家也可以改成自己的。

#include 
#include
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "hi_wifi_api.h"
#include "lwip/ip_addr.h"
#include "lwip/netifapi.h"
#include "lwip/sockets.h"
#include "MQTTClient.h"
static MQTTClient mq_client;
unsigned char *onenet_mqtt_buf;
unsigned char *onenet_mqtt_readbuf;
int buf_size;
Network n;
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
//消息回調(diào)函數(shù)
void mqtt_callback(MessageData *msg_data)
{
size_t res_len = 0;
uint8_t *response_buf = NULL;
char topicname[45] = { "$crsp/" };
LOS_ASSERT(msg_data);
printf("topic %.*s receive a message\r\n",
msg_data->topicName->lenstring.len,
msg_data->topicName->lenstring.data);
printf("message is %.*s\r\n", msg_data->message->payloadlen,
msg_data->message->payload);
}
int mqtt_connect(void)
{
int rc = 0;
NetworkInit(&n);
NetworkConnect(&n, "5.196.95.208", 1883);
buf_size = 2048;
onenet_mqtt_buf = (unsigned char *) malloc(buf_size);
onenet_mqtt_readbuf = (unsigned char *) malloc(buf_size);
if (!(onenet_mqtt_buf && onenet_mqtt_readbuf))
{
printf("No memory for MQTT client buffer!");
return -2;
}
MQTTClientInit(&mq_client, &n, 1000, onenet_mqtt_buf, buf_size,
onenet_mqtt_readbuf, buf_size);
MQTTStartTask(&mq_client);
data.keepAliveInterval = 30;
data.cleansession = 1;
data.clientID.cstring = "ohos_hi3861";
data.username.cstring = "123456";
data.password.cstring = "222222";
data.keepAliveInterval = 10;
data.cleansession = 1;
mq_client.defaultMessageHandler = mqtt_callback;
//連接服務(wù)器
rc = MQTTConnect(&mq_client, &data);
//訂閱消息,并設(shè)置回調(diào)函數(shù)
MQTTSubscribe(&mq_client, "ohossub", 0, mqtt_callback);
while(1)
{
MQTTMessage message;
message.qos = QOS1;
message.retained = 0;
message.payload = (void *)"openharmony";
message.payloadlen = strlen("openharmony");
//發(fā)送消息
if (MQTTPublish(&mq_client, "ohospub", &message) < 0)
{
return -1;
}
}
return 0;
}
void mqtt_test(void)
{
mqtt_connect();
}

到這里就完成了代碼部分,可以開始編譯了。

11.4 實驗

這里我們需要先下載一個 Windows電腦端的 MQTT客戶端,這樣我們就可以用電腦訂閱開發(fā)板的MQTT主題信息了。

電腦版的mqtt客戶端下載鏈接: https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.ui.app/1.1.1/

我們選擇這一個:

弄完后打開軟件,按圖操作:

此時我們?nèi)ゲ榭?我們電腦端的MQTT客戶端軟件,可以看到右邊已經(jīng)有接收MQTT信息了,主題未 ohospub,消息內(nèi)容為 openharmony,說明實驗成功。

電腦發(fā)送主題為ohossub,內(nèi)容為123456,查看串口打印,可以看到也收到了數(shù)據(jù)

??想了解更多內(nèi)容,請訪問:??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

??https://harmonyos.51cto.com??

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2022-01-21 21:22:24

OpenHarmon操作系統(tǒng)鴻蒙

2022-04-15 14:31:02

鴻蒙操作系統(tǒng)

2023-04-03 15:39:31

2022-02-10 15:07:10

云平臺OpenHarmon系統(tǒng)開發(fā)

2022-02-08 15:21:59

Hi3861開發(fā)鴻蒙

2023-03-24 14:39:17

鴻蒙系統(tǒng)開發(fā)

2022-01-24 18:35:56

OpenHarmon鴻蒙操作系統(tǒng)

2022-01-24 18:43:20

OpenHarmon操作系統(tǒng)鴻蒙

2022-02-09 19:31:41

Hi3861OpenHarmon鴻蒙

2022-02-09 19:25:49

Hi3861WiFi操作鴻蒙

2022-06-09 14:40:14

系統(tǒng)移植鴻蒙

2022-04-15 11:46:09

輕量系統(tǒng)解耦鴻蒙操作系統(tǒng)

2024-01-05 15:32:47

鴻蒙SNTP智慧時鐘

2023-07-28 15:32:26

鴻蒙操作系統(tǒng)

2023-06-13 14:55:04

2023-08-07 15:13:09

設(shè)備開發(fā)鴻蒙

2022-08-19 10:54:47

操作系統(tǒng)鴻蒙

2023-04-24 15:11:51

系統(tǒng)開發(fā)鴻蒙

2020-11-18 11:36:35

鴻蒙系統(tǒng)

2020-12-07 12:47:22

MQTT鴻蒙hi3861
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

99久久777色| 亚洲一区电影在线观看| 毛片在线免费视频| 日韩大陆av| 久久综合999| 97久久精品人人澡人人爽缅北| 一区二区精品在线观看| 久久久久久国产精品免费播放| 精品123区| 99re在线精品| 国产精品久久久av| 成人乱码一区二区三区av| 直接在线观看的三级网址| 怕怕欧美视频免费大全| 亚洲一区欧美一区| 亚洲aⅴ日韩av电影在线观看 | 成人免费毛片东京热| 厕沟全景美女厕沟精品| 成人免费看黄yyy456| xx视频.9999.com| 日日噜噜夜夜狠狠| 国产女主播在线写真| 国产日韩欧美三级| 亚洲美女av网站| 美女福利视频在线| 欧美扣逼视频| 久久精品一本| 亚洲男人的天堂在线播放| www.久久av.com| 欧美成人三区| 国内精品伊人久久久久av影院| 丝袜美腿精品国产二区| 婷婷免费在线观看| 日本在线免费播放| 国产在线精品免费| 久国内精品在线| wwwxx日本| 成年女人在线看片| 91蜜桃免费观看视频| 2019中文字幕免费视频| 无码熟妇人妻av| 久久99久久99精品免观看软件| 久久久久99精品国产片| 国产精品高潮在线| 99精品视频99| 国产精品羞羞答答在线观看| 欧美天堂亚洲电影院在线播放| 亚洲mv在线看| 国产sm主人调教女m视频| 欧美涩涩视频| 日韩精品有码在线观看| 亚欧在线免费观看| a毛片在线播放| 成人ar影院免费观看视频| 2025国产精品视频| 国产极品在线播放| 神马影视一区二区| 亚洲精品二三区| 国产精品一区二区羞羞答答| 成人欧美magnet| 欧美色另类天堂2015| 五月婷婷一区| 国产二区视频在线观看| 国产亚洲一区二区三区| 91精品在线影院| 日韩男人的天堂| 狠狠爱www人成狠狠爱综合网| 亚洲精品按摩视频| 少妇激情一区二区三区视频| 91p九色成人| 亚洲国产视频直播| 日本中文字幕在线视频观看| 狠狠狠综合7777久夜色撩人| 激情综合色播五月| 成人欧美一区二区三区在线 | 一区二区三区成人| 久久99精品久久久久久秒播放器 | 在线视频国内自拍亚洲视频| 中文字幕久精品免| 午夜影院免费体验区| 麻豆91精品视频| 国产+人+亚洲| 国产一区在线观看免费| 久久精品亚洲成在人线av网址| 在线视频综合导航| 成年网站在线播放| 欧美影院在线| 欧美性大战久久| 奇米视频7777| jizz国产精品| 欧美一区二区三区电影| 激情婷婷综合网| tube8在线hd| 综合久久给合久久狠狠狠97色| 国内精品久久久久久久果冻传媒| 夜夜骚av一区二区三区| 久久精品五月| 国产欧美日韩视频| 国产精品免费无遮挡无码永久视频| 激情久久婷婷| 欧美精品制服第一页| 亚洲人与黑人屁股眼交| 国产一区清纯| 国产成人a亚洲精品| 好吊操这里只有精品| 鲁大师成人一区二区三区| 国产精品亚洲精品| 亚洲精品无码久久久久| 久久久亚洲人| 日本老师69xxx| 影音先锋亚洲天堂| 日韩不卡在线观看日韩不卡视频| 欧美尤物巨大精品爽| 中文字幕视频一区二区| 日本系列欧美系列| 国产精品69av| 亚洲av无码乱码国产精品久久 | 亚洲精品免费电影| 一本色道婷婷久久欧美| 98色花堂精品视频在线观看| 欧美偷拍一区二区| 在线免费播放av| 精品日产乱码久久久久久仙踪林| 国产一区二区精品丝袜| 国产高潮呻吟久久| 国产亚洲精品美女久久久久久久久久| 精品国偷自产在线视频99| 一本一本久久a久久| 99视频一区| 4444欧美成人kkkk| 国产99对白在线播放| 中文字幕乱码一区二区免费| 在线观看亚洲视频啊啊啊啊| 激情黄产视频在线免费观看| 欧美一个色资源| 男人女人拔萝卜视频| 成人爽a毛片免费啪啪红桃视频| 一区二区三区视频观看| 欧美性生交大片| 欧美亚洲一区二区三区| 国产精品亚洲精品| 免费在线超碰| 精品日韩中文字幕| 免费涩涩18网站入口| 精品亚洲免a| 久久91亚洲人成电影网站| 国产又爽又黄免费软件| 国产99一区视频免费| 久久av一区二区三区漫画| 主播国产精品| 日韩一区二区免费视频| 精品国产视频一区二区三区| 亚洲高清不卡| 99国产超薄肉色丝袜交足的后果 | 久久精品国产在热久久| 神马欧美一区二区| av在线不卡精品| 一二美女精品欧洲| 国产成人a v| 欧美激情综合五月色丁香小说| 一区二区成人国产精品| 中文字幕日本一区二区| 中文字幕少妇一区二区三区| 激情五月少妇a| 性久久久久久| 欧美xxxx黑人又粗又长密月| 暖暖日本在线观看| 9191成人精品久久| 国产综合内射日韩久| 亚洲视频免费| 国产精品免费一区二区三区| 成人免费高清在线播放| 亚洲一区影音先锋| 亚洲av午夜精品一区二区三区| 亚洲人成网77777色在线播放| 久久国产精品久久精品| 中国女人一级一次看片| 国产偷国产偷亚洲高清人白洁| 国产v亚洲v天堂无码久久久| 一区二区在线视频观看| 中文字幕日韩欧美在线| 亚洲字幕av一区二区三区四区| 18欧美乱大交hd1984| 91成人在线观看喷潮蘑菇| 国产婷婷精品| 亚洲欧洲另类精品久久综合| 免费成人直播| 色哟哟亚洲精品一区二区| 99国产成人精品| 国产精品网站在线观看| 青青草原播放器| 日韩在线不卡| 国产99久久精品一区二区永久免费| 激情福利在线| 欧美一级理论性理论a| 五月婷婷激情网| 国产精品三级av在线播放| 国产淫片av片久久久久久| 久久精品国产亚洲夜色av网站| 日本一区二区在线免费播放| 一区二区三区视频网站| 精品sm在线观看| 久草免费新视频| 久久久精品黄色| 中国老熟女重囗味hdxx| 久久精品91| 精品无码av无码免费专区| 99国内精品久久久久| 日韩在线精品一区| 黄色三级网站在线观看| 亚洲综合视频在线| 色无极影院亚洲| 国产精品乡下勾搭老头1| 二级片在线观看| 四虎视频在线精品免费网址| 国内久久久精品| 免费a级人成a大片在线观看| 日韩国产精品一区| 天天爽夜夜爽夜夜爽精品| 中文字幕中文乱码欧美一区二区| 日韩欧美亚洲另类| 国产美女诱惑一区二区| 国产高潮呻吟久久久| 禁断一区二区三区在线| 国产在线精品一区二区中文 | 91精品黄色| 成人看av片| 中文字幕av一区中文字幕天堂| 亚洲 精品 综合 精品 自拍| 欧美一级在线观看| 中文字幕a级片| 色婷婷av一区二区三区软件| 摸摸摸bbb毛毛毛片| 青青草原综合久久大伊人精品优势| www婷婷av久久久影片| 欧美电影《轻佻寡妇》| 日本午夜精品一区二区| 3d动漫一区二区三区在线观看| 欧美一区深夜视频| 国产精品一区二区日韩| 欧美激情xxxx性bbbb| 亚州视频一区二区三区| 欧美mv日韩mv国产网站app| 国产成人无码精品| 亚洲自拍偷拍欧美| 欧美日韩偷拍视频| 亚洲嫩草精品久久| 中文字幕免费在线播放| 国产成人av资源| 制服下的诱惑暮生| 国产精品自产自拍| xxx中文字幕| 国产精品一区在线| xxxx视频在线观看| 福利电影一区二区| 国产精品果冻传媒| 成人h精品动漫一区二区三区| 亚洲欧洲日韩综合| 懂色av噜噜一区二区三区av| 动漫av在线免费观看| 成人久久18免费网站麻豆 | 中文字幕无线码一区| 欧美亚洲一区二区三区四区| 中文字幕观看在线| 欧美日韩www| 日本三级午夜理伦三级三| 国产三级三级三级精品8ⅰ区| 日韩精品无码一区二区三区久久久| 久久亚洲一级片| 欧美巨胸大乳hitomi| 成人午夜视频网站| 亚洲天堂2024| 久久精品国产精品亚洲红杏 | 国产+成+人+亚洲欧洲自线| 国产精品成人免费一区久久羞羞| 成人免费高清在线| 魔女鞋交玉足榨精调教| 亚洲国产高清在线观看视频| 精品亚洲乱码一区二区| 亚洲制服丝袜av| 一本一道无码中文字幕精品热| 国产婷婷色一区二区三区在线| 精品无码在线观看| 亚洲人成网站在线| 91精品人妻一区二区| 国产午夜精品理论片a级大结局 | 成人毛片免费看| 精品久久久三级| 视频亚洲一区二区| 国产精品亚洲综合| 精品久久影视| 欧美一级二级三级| 久久精品国产亚洲夜色av网站| 免费在线看黄色片| 亚洲女同一区| 在线国产精品网| 精品动漫av| 色诱视频在线观看| 国v精品久久久网| 成人无码av片在线观看| 一区二区三区在线视频观看58| 综合激情网五月| 精品久久久久久亚洲国产300| 免费毛片在线播放免费| 欧美视频裸体精品| 国产伦精品一区二区三区视频痴汉| 亚洲成人av片| 国模私拍视频在线| 怡红院精品视频| 免费在线看污片| 欧美肥老妇视频| 秋霞国产精品| 九九九九精品| 最新国产精品久久久| 麻豆md0077饥渴少妇| 91亚洲国产成人久久精品| 国产深夜男女无套内射| 在线综合视频| 欧美性受xxxx黒人xyx性爽| 激情综合色综合久久| 蜜桃无码一区二区三区| 亚洲成人www| 毛片基地在线观看| 日韩欧美亚洲国产精品字幕久久久 | 欧美理论电影大全| 免费一级特黄特色毛片久久看| 精品午夜久久福利影院| a天堂中文字幕| 欧美日韩国产色| 亚洲精品一区二区三区区别| 精品国偷自产在线视频99| 99热播精品免费| 欧美一区二区三区电影在线观看 | 92看片淫黄大片一级| 成人av资源站| 久久综合久久鬼| 日韩一区和二区| 高潮毛片在线观看| 91精品视频网站| 欧美freesextv| 在线观看日本一区二区| 国产精品网站在线| 成人毛片一区二区三区| 亚洲欧美日韩一区二区在线| 自拍一区在线观看| 国产精品吹潮在线观看| 无码少妇一区二区三区| 翔田千里亚洲一二三区| 美女精品网站| www.久久av| 一本色道久久加勒比精品 | 一区二区三区免费在线观看视频| 久久综合精品国产一区二区三区| 国产精品美女毛片真酒店| 精品精品国产高清a毛片牛牛| 中日韩高清电影网| 国产精品xxx在线观看www| 亚洲人成网亚洲欧洲无码| 无罩大乳的熟妇正在播放| 美腿丝袜亚洲一区| 农村末发育av片一区二区| 一区二区三区自拍| 亚洲美女综合网| 国内精品国产三级国产在线专| 国产欧美啪啪| 亚洲午夜精品久久久久久浪潮| 老**午夜毛片一区二区三区 | 亚洲欧洲精品一区二区精品久久久| 色婷婷久久综合中文久久蜜桃av| 永久免费精品影视网站| 欧美黄色网络| 精品久久久久久亚洲| 99riav国产精品| 91精彩刺激对白露脸偷拍| 欧美视频三区在线播放| 国产精品久久久久久久免费| 日韩视频在线一区| 日本久久伊人| 国产亚洲黄色片| 久久久综合九色合综国产精品| www.五月婷婷.com| 亚洲资源在线| 欧美另类一区| 国产精品麻豆久久| 久久国产亚洲精品无码| 久久久久久久久岛国免费| 国模私拍一区二区| 久久亚洲电影天堂| 99欧美精品| 成年人视频大全| 麻豆国产欧美一区二区三区| 日韩影院一区二区| 欧美日韩在线观看一区二区| 国产传媒在线播放| 国产一区福利视频| 日韩国产成人精品| 五月天丁香激情| 亚洲欧美激情一区| 网站一区二区| 麻豆传传媒久久久爱|