亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sdp.c

?? Bluezan implementation of the Bluetooth&#8482 wireless standards specifications for Linux. The code
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* * *  BlueZ - Bluetooth protocol stack for Linux * *  Copyright (C) 2001-2002  Nokia Corporation *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com> *  Copyright (C) 2002-2005  Marcel Holtmann <marcel@holtmann.org> *  Copyright (C) 2002-2003  Stephen Crane <steve.crane@rococosoft.com> * * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License version 2 as *  published by the Free Software Foundation; * *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. *  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY *  CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES  *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN  *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF  *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * *  ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,  *  COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS  *  SOFTWARE IS DISCLAIMED. * * *  $Id: sdp.c,v 1.21 2005/05/08 17:18:21 holtmann Exp $ */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <stdio.h>#include <errno.h>#include <unistd.h>#include <stdlib.h>#include <malloc.h>#include <syslog.h>#include <sys/un.h>#include <sys/socket.h>#include <sys/time.h>#include <sys/types.h>#include <bluetooth/bluetooth.h>#include <bluetooth/hci.h>#include <bluetooth/hci_lib.h>#include <bluetooth/l2cap.h>#include <bluetooth/sdp.h>#include <bluetooth/sdp_lib.h>#include <netinet/in.h>#define SDPINF(fmt, arg...) syslog(LOG_INFO, fmt "\n", ## arg)#define SDPERR(fmt, arg...) syslog(LOG_ERR, "%s: " fmt "\n", __func__ , ## arg)#ifdef SDP_DEBUG#define SDPDBG(fmt, arg...) syslog(LOG_DEBUG, "%s: " fmt "\n", __func__ , ## arg)#else#define SDPDBG(fmt...)#endif#if __BYTE_ORDER == __BIG_ENDIAN#define ntoh64(x) (x)static inline void ntoh128(uint128_t *src, uint128_t *dst){	int i;	for (i = 0; i < 16; i++)		dst->data[i] = src->data[i];}#elsestatic inline uint64_t ntoh64(uint64_t n){	uint64_t h;	uint64_t tmp = ntohl(n & 0x00000000ffffffff);	h = ntohl(n >> 32);	h |= tmp << 32;	return h;}static inline void ntoh128(uint128_t *src, uint128_t *dst){	int i;	for (i = 0; i < 16; i++)		dst->data[15 - i] = src->data[i];}#endif#define hton64(x)     ntoh64(x)#define hton128(x, y) ntoh128(x, y)#define BASE_UUID "00000000-0000-1000-8000-00805F9B34FB"static uint128_t *bluetooth_base_uuid = NULL;#define SDP_BASIC_ATTR_PDUFORM_SIZE 32#define SDP_SEQ_PDUFORM_SIZE 128#define SDP_UUID_SEQ_SIZE 256#define SDP_MAX_ATTR_LEN 65535/* Message structure. */struct tupla {	int index;	char *str;};static struct tupla Protocol[] = {	{ SDP_UUID,		"SDP"		},	{ UDP_UUID,		"UDP"		},	{ RFCOMM_UUID,		"RFCOMM"	},	{ TCP_UUID,		"TCP"		},	{ TCS_BIN_UUID,		"TCS-BIN"	},	{ TCS_AT_UUID,		"TCS-AT"	},	{ OBEX_UUID,		"OBEX"		},	{ IP_UUID,		"IP"		},	{ FTP_UUID,		"FTP"		},	{ HTTP_UUID,		"HTTP"		},	{ WSP_UUID,		"WSP"		},	{ BNEP_UUID,		"BNEP"		},	{ UPNP_UUID,		"UPNP"		},	{ HIDP_UUID,		"HIDP"		},	{ HCRP_CTRL_UUID,	"HCRP-Ctrl"	},	{ HCRP_DATA_UUID,	"HCRP-Data"	},	{ HCRP_NOTE_UUID,	"HCRP-Notify"	},	{ AVCTP_UUID,		"AVCTP"		},	{ AVDTP_UUID,		"AVDTP"		},	{ CMTP_UUID,		"CMTP"		},	{ UDI_UUID,		"UDI"		},	{ L2CAP_UUID,		"L2CAP"		},	{ 0 }};static struct tupla ServiceClass[] = {	{ SDP_SERVER_SVCLASS_ID,		"SDP Server"			},	{ BROWSE_GRP_DESC_SVCLASS_ID,		"Browse Group Descriptor"	},	{ PUBLIC_BROWSE_GROUP,			"Public Browse Group"		},	{ SERIAL_PORT_SVCLASS_ID,		"Serial Port"			},	{ LAN_ACCESS_SVCLASS_ID,		"LAN Access Using PPP"		},	{ DIALUP_NET_SVCLASS_ID,		"Dialup Networking"		},	{ IRMC_SYNC_SVCLASS_ID,			"IrMC Sync"			},	{ OBEX_OBJPUSH_SVCLASS_ID,		"OBEX Object Push"		},	{ OBEX_FILETRANS_SVCLASS_ID,		"OBEX File Transfer"		},	{ IRMC_SYNC_CMD_SVCLASS_ID,		"IrMC Sync Command"		},	{ HEADSET_SVCLASS_ID,			"Headset"			},	{ CORDLESS_TELEPHONY_SVCLASS_ID,	"Cordless Telephony"		},	{ AUDIO_SOURCE_SVCLASS_ID,		"Audio Source"			},	{ AUDIO_SINK_SVCLASS_ID,		"Audio Sink"			},	{ AV_REMOTE_TARGET_SVCLASS_ID,		"AV Remote Target"		},	{ ADVANCED_AUDIO_SVCLASS_ID,		"Advanced Audio"		},	{ AV_REMOTE_SVCLASS_ID,			"AV Remote"			},	{ VIDEO_CONF_SVCLASS_ID,		"Video Conferencing"		},	{ INTERCOM_SVCLASS_ID,			"Intercom"			},	{ FAX_SVCLASS_ID,			"Fax"				},	{ HEADSET_AGW_SVCLASS_ID,		"Headset Audio Gateway"		},	{ WAP_SVCLASS_ID,			"WAP"				},	{ WAP_CLIENT_SVCLASS_ID,		"WAP Client"			},	{ PANU_SVCLASS_ID,			"PAN User"			},	{ NAP_SVCLASS_ID,			"Network Access Point"		},	{ GN_SVCLASS_ID,			"PAN Group Network"		},	{ DIRECT_PRINTING_SVCLASS_ID,		"Direct Printing"		},	{ REFERENCE_PRINTING_SVCLASS_ID,	"Reference Printing"		},	{ IMAGING_SVCLASS_ID,			"Imaging"			},	{ IMAGING_RESPONDER_SVCLASS_ID,		"Imaging Responder"		},	{ IMAGING_ARCHIVE_SVCLASS_ID,		"Imaging Automatic Archive"	},	{ IMAGING_REFOBJS_SVCLASS_ID,		"Imaging Referenced Objects"	},	{ HANDSFREE_SVCLASS_ID,			"Handsfree"			},	{ HANDSFREE_AGW_SVCLASS_ID,		"Handfree Audio Gateway"	},	{ DIRECT_PRT_REFOBJS_SVCLASS_ID,	"Direct Printing Ref. Objects"	},	{ REFLECTED_UI_SVCLASS_ID,		"Reflected UI"			},	{ BASIC_PRINTING_SVCLASS_ID,		"Basic Printing"		},	{ PRINTING_STATUS_SVCLASS_ID,		"Printing Status"		},	{ HID_SVCLASS_ID,			"Human Interface Device"	},	{ HCR_SVCLASS_ID,			"Hardcopy Cable Replacement"	},	{ HCR_PRINT_SVCLASS_ID,			"HCR Print"			},	{ HCR_SCAN_SVCLASS_ID,			"HCR Scan"			},	{ CIP_SVCLASS_ID,			"Common ISDN Access"		},	{ VIDEO_CONF_GW_SVCLASS_ID,		"Video Conferencing Gateway"	},	{ UDI_MT_SVCLASS_ID,			"UDI MT"			},	{ UDI_TA_SVCLASS_ID,			"UDI TA"			},	{ AV_SVCLASS_ID,			"Audio/Video"			},	{ SAP_SVCLASS_ID,			"SIM Access"			},	{ PNP_INFO_SVCLASS_ID,			"PnP Information"		},	{ GENERIC_NETWORKING_SVCLASS_ID,	"Generic Networking"		},	{ GENERIC_FILETRANS_SVCLASS_ID,		"Generic File Transfer"		},	{ GENERIC_AUDIO_SVCLASS_ID,		"Generic Audio"			},	{ GENERIC_TELEPHONY_SVCLASS_ID,		"Generic Telephony"		},	{ UPNP_SVCLASS_ID,			"UPnP"				},	{ UPNP_IP_SVCLASS_ID,			"UPnP IP"			},	{ UPNP_PAN_SVCLASS_ID,			"UPnP PAN"			},	{ UPNP_LAP_SVCLASS_ID,			"UPnP LAP"			},	{ UPNP_L2CAP_SVCLASS_ID,		"UPnP L2CAP"			},	{ VIDEO_SOURCE_SVCLASS_ID,		"Video Source"			},	{ VIDEO_SINK_SVCLASS_ID,		"Video Sink"			},	{ 0 }};#define Profile ServiceClassstatic char *string_lookup(struct tupla *pt0, int index){	struct tupla *pt;	for (pt = pt0; pt->index; pt++)		if (pt->index == index)			return pt->str;	return "";}/* * Prints into a string the Protocol UUID * coping a maximum of n characters. */static int uuid2str(struct tupla *message, const uuid_t *uuid, char *str, size_t n) {	char *str2;	if (!uuid) {		snprintf(str, n, "NULL");		return -2;	}	switch (uuid->type) {	case SDP_UUID16:		str2 = string_lookup(message, uuid->value.uuid16);		snprintf(str, n, str2);		break;	case SDP_UUID32:		str2 = string_lookup(message, uuid->value.uuid32);		snprintf(str, n, str2);		break;	case SDP_UUID128:		snprintf(str, n, "Error: This is UUID-128");		return -4;	default:		snprintf(str, n, "Type of UUID (%x) unknown.", uuid->type);		return -1;	}	return 0;}int sdp_proto_uuid2strn(const uuid_t *uuid, char *str, size_t n){	return uuid2str(Protocol, uuid, str, n);}int sdp_svclass_uuid2strn(const uuid_t *uuid, char *str, size_t n){	return uuid2str(ServiceClass, uuid, str, n);}int sdp_profile_uuid2strn(const uuid_t *uuid, char *str, size_t n){	return uuid2str(Profile, uuid, str, n);}/* * convert the UUID to string, copying a maximum of n characters. */int sdp_uuid2strn(const uuid_t *uuid, char *str, size_t n){	if (!uuid) {		snprintf(str, n, "NULL");		return -2;	}	switch (uuid->type) {	case SDP_UUID16:		snprintf(str, n, "%.4x", uuid->value.uuid16);		break;	case SDP_UUID32:		snprintf(str, n, "%.8x", uuid->value.uuid32);		break;	case SDP_UUID128:{		unsigned int   data0;		unsigned short data1;		unsigned short data2;		unsigned short data3;		unsigned int   data4;		unsigned short data5;		memcpy(&data0, &uuid->value.uuid128.data[0], 4);		memcpy(&data1, &uuid->value.uuid128.data[4], 2);		memcpy(&data2, &uuid->value.uuid128.data[6], 2);		memcpy(&data3, &uuid->value.uuid128.data[8], 2);		memcpy(&data4, &uuid->value.uuid128.data[10], 4);		memcpy(&data5, &uuid->value.uuid128.data[14], 2);		snprintf(str, n, "%.8x-%.4x-%.4x-%.4x-%.8x%.4x", 				ntohl(data0), ntohs(data1), 				ntohs(data2), ntohs(data3), 				ntohl(data4), ntohs(data5));		}		break;	default:		snprintf(str, n, "Type of UUID (%x) unknown.", uuid->type);		return -1;	// Enum type of UUID not set	}	return 0;}#ifdef SDP_DEBUG/* * Function prints the UUID in hex as per defined syntax - * * 4bytes-2bytes-2bytes-2bytes-6bytes * * There is some ugly code, including hardcoding, but * that is just the way it is converting 16 and 32 bit * UUIDs to 128 bit as defined in the SDP doc */void sdp_uuid_print(const uuid_t *uuid){	if (uuid == NULL) {		SDPERR("Null passed to print UUID\n");		return;	}	if (uuid->type == SDP_UUID16) {		SDPDBG("  uint16_t : 0x%.4x\n", uuid->value.uuid16);	} else if (uuid->type == SDP_UUID32) {		SDPDBG("  uint32_t : 0x%.8x\n", uuid->value.uuid32);	} else if (uuid->type == SDP_UUID128) {		unsigned int data0;		unsigned short data1;		unsigned short data2;		unsigned short data3;		unsigned int data4;		unsigned short data5;		memcpy(&data0, &uuid->value.uuid128.data[0], 4);		memcpy(&data1, &uuid->value.uuid128.data[4], 2);		memcpy(&data2, &uuid->value.uuid128.data[6], 2);		memcpy(&data3, &uuid->value.uuid128.data[8], 2);		memcpy(&data4, &uuid->value.uuid128.data[10], 4);		memcpy(&data5, &uuid->value.uuid128.data[14], 2);		SDPDBG("  uint128_t : 0x%.8x-", ntohl(data0));		SDPDBG("%.4x-", ntohs(data1));		SDPDBG("%.4x-", ntohs(data2));		SDPDBG("%.4x-", ntohs(data3));		SDPDBG("%.8x", ntohl(data4));		SDPDBG("%.4x\n", ntohs(data5));	} else		SDPERR("Enum type of UUID not set\n");}#endifsdp_data_t *sdp_data_alloc(uint8_t dtd, const void *value){	sdp_data_t *seq;	int len = 0;	sdp_data_t *d = (sdp_data_t *) malloc(sizeof(sdp_data_t));	if (!d)		return NULL;	memset(d, 0, sizeof(sdp_data_t));	d->dtd = dtd;	d->unitSize = sizeof(uint8_t);	switch (dtd) {	case SDP_DATA_NIL:		break;	case SDP_UINT8:		d->val.uint8 = *(uint8_t *) value;		d->unitSize += sizeof(uint8_t);		break;	case SDP_INT8:	case SDP_BOOL:		d->val.int8 = *(int8_t *) value;		d->unitSize += sizeof(int8_t);		break;	case SDP_UINT16:		d->val.uint16 = bt_get_unaligned((uint16_t *) value);		d->unitSize += sizeof(uint16_t);		break;	case SDP_INT16:		d->val.int16 = bt_get_unaligned((int16_t *) value);		d->unitSize += sizeof(int16_t);		break;	case SDP_UINT32:		d->val.uint32 = bt_get_unaligned((uint32_t *) value);		d->unitSize += sizeof(uint32_t);		break;	case SDP_INT32:		d->val.int32 = bt_get_unaligned((int32_t *) value);		d->unitSize += sizeof(int32_t);		break;	case SDP_INT64:		d->val.int64 = bt_get_unaligned((int64_t *) value);		d->unitSize += sizeof(int64_t);		break;	case SDP_UINT64:		d->val.uint64 = bt_get_unaligned((uint64_t *) value);		d->unitSize += sizeof(uint64_t);		break;	case SDP_UINT128:		memcpy(&d->val.uint128.data, value, sizeof(uint128_t));		d->unitSize += sizeof(uint128_t);		break;	case SDP_INT128:		memcpy(&d->val.int128.data, value, sizeof(uint128_t));		d->unitSize += sizeof(uint128_t);		break;	case SDP_UUID16:		sdp_uuid16_create(&d->val.uuid, bt_get_unaligned((uint16_t *) value));		d->unitSize += sizeof(uint16_t);		break;	case SDP_UUID32:		sdp_uuid32_create(&d->val.uuid, bt_get_unaligned((uint32_t *) value));		d->unitSize += sizeof(uint32_t);		break;	case SDP_UUID128:		sdp_uuid128_create(&d->val.uuid, value);		d->unitSize += sizeof(uint128_t);		break;	case SDP_URL_STR8:	case SDP_TEXT_STR8:	case SDP_URL_STR16:	case SDP_TEXT_STR16:		if (!value)			goto out_error;		len = strlen(value);		d->unitSize += len;		if (len <= USHRT_MAX) {			d->val.str = (char *) malloc(len + 1);			if (!d->val.str)				goto out_error;			strcpy(d->val.str, value);			if (len <= UCHAR_MAX) {				d->unitSize += sizeof(uint8_t);				if (dtd != SDP_URL_STR8 && dtd != SDP_TEXT_STR8) {					if (dtd == SDP_URL_STR16)						dtd = SDP_URL_STR8;					else						dtd = SDP_TEXT_STR8;				}			} else {				d->unitSize += sizeof(uint16_t);				if (dtd == SDP_TEXT_STR8)					dtd = SDP_TEXT_STR16;				else					dtd = SDP_URL_STR16;			}		} else {			SDPERR("Strings of size > USHRT_MAX not supported\n");			goto out_error;		}		break;	case SDP_URL_STR32:	case SDP_TEXT_STR32:		SDPERR("Strings of size > USHRT_MAX not supported\n");		break;	case SDP_ALT8:	case SDP_ALT16:	case SDP_ALT32:	case SDP_SEQ8:	case SDP_SEQ16:	case SDP_SEQ32:		if (dtd == SDP_ALT8 || dtd == SDP_SEQ8)			d->unitSize += sizeof(uint8_t);		else if (dtd == SDP_ALT16 || dtd == SDP_SEQ16)			d->unitSize += sizeof(uint16_t);		else if (dtd == SDP_ALT32 || dtd == SDP_SEQ32)			d->unitSize += sizeof(uint32_t);		seq = (sdp_data_t *)value;		d->val.dataseq = seq;		for (; seq; seq = seq->next)			d->unitSize += seq->unitSize;		break;	default:		goto out_error;	}	return d;out_error:	free(d);	return NULL;}sdp_data_t *sdp_seq_append(sdp_data_t *seq, sdp_data_t *d){	if (seq) {		sdp_data_t *p;		for (p = seq; p->next; p = p->next);		p->next = d;	} else		seq = d;	d->next = NULL;	return seq;}sdp_data_t *sdp_seq_alloc(void **dtds, void **values, int len){	sdp_data_t *curr = NULL, *seq = NULL;	int i;	for (i = 0; i < len; i++) {		sdp_data_t *data;		uint8_t dtd = *(uint8_t *)dtds[i];		if (dtd >= SDP_SEQ8 && dtd <= SDP_ALT32)			data = (sdp_data_t *)values[i];		else			data = sdp_data_alloc(dtd, values[i]);		if (!data)			return NULL;		if (curr)			curr->next = data;		else			seq = data;		curr = data;	}	return sdp_data_alloc(SDP_SEQ8, seq);}int sdp_attr_add(sdp_record_t *rec, uint16_t attr, sdp_data_t *d){	sdp_data_t *p = sdp_data_get(rec, attr);	if (p)		return -1;	d->attrId = attr;	rec->attrlist = sdp_list_insert_sorted(rec->attrlist, d, sdp_attrid_comp_func);	return 0;}void sdp_attr_remove(sdp_record_t *rec, uint16_t attr){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区免费| 欧美日韩国产精品自在自线| 91在线视频播放| 欧美一区二区三区免费大片| 国产精品久久久久一区二区三区 | 久久国产视频网| k8久久久一区二区三区| 日韩午夜激情视频| 亚洲一级电影视频| 91麻豆国产精品久久| 国产色产综合色产在线视频| 免费成人结看片| 欧美日韩一区不卡| 一区二区三区免费| 不卡的电影网站| 国产女同互慰高潮91漫画| 久久精品久久综合| 欧美一区午夜精品| 五月天中文字幕一区二区| 91丨九色丨尤物| 日韩一区欧美小说| 成人激情免费网站| 中文字幕精品—区二区四季| 国产成人在线视频网站| 精品国产乱码久久久久久浪潮| 视频一区中文字幕国产| 欧美视频你懂的| 亚洲一区二区在线观看视频| 在线国产电影不卡| 亚洲激情图片小说视频| 色诱视频网站一区| 亚洲综合在线五月| 欧美亚日韩国产aⅴ精品中极品| 亚洲欧美aⅴ...| 欧洲精品视频在线观看| 亚洲成人免费在线| 91 com成人网| 精品亚洲免费视频| 久久这里只精品最新地址| 国产一区二区三区蝌蚪| 中文字幕av一区二区三区免费看| 国产一区二区在线免费观看| 国产午夜精品福利| 白白色亚洲国产精品| 日韩久久一区二区| 在线视频欧美精品| 日韩电影在线免费| 欧美不卡在线视频| 成人精品一区二区三区中文字幕| 1024亚洲合集| 欧美三级在线播放| 韩国女主播成人在线| 国产精品三级视频| 欧美视频一区二区在线观看| 免费观看91视频大全| 国产欧美1区2区3区| 91看片淫黄大片一级在线观看| 亚洲国产婷婷综合在线精品| 日韩午夜中文字幕| 成人性生交大片免费| 一二三区精品视频| 日韩欧美色综合| 97精品久久久午夜一区二区三区| 亚洲国产色一区| 久久色成人在线| 欧洲精品一区二区三区在线观看| 日本麻豆一区二区三区视频| 中文欧美字幕免费| 欧美精品自拍偷拍动漫精品| 欧美曰成人黄网| 美女爽到高潮91| 亚洲欧洲精品一区二区精品久久久| 欧美三级日韩三级| 国产成人8x视频一区二区| 亚洲大片在线观看| 国产精品乱人伦一区二区| 在线综合亚洲欧美在线视频| 不卡的电影网站| 久久99久久精品欧美| 亚洲一区中文日韩| 日本一区二区三区在线观看| 这里是久久伊人| 在线一区二区视频| 粉嫩绯色av一区二区在线观看| 亚洲一二三区在线观看| 欧美国产精品久久| 欧美成人一区二区| 欧美日韩免费电影| 91在线视频网址| 成人免费毛片高清视频| 久久精品国产精品亚洲综合| 亚洲小说春色综合另类电影| 欧美国产日韩一二三区| 精品国产一区a| 911精品国产一区二区在线| 97久久超碰国产精品| 成人h动漫精品一区二区| 黄网站免费久久| 麻豆91精品91久久久的内涵| 亚洲国产成人va在线观看天堂| 亚洲欧洲日韩av| 国产女人水真多18毛片18精品视频| 欧美高清hd18日本| 欧美伊人精品成人久久综合97| 成人动漫一区二区| 成人看片黄a免费看在线| 国产乱码精品一区二区三 | 欧美三级三级三级爽爽爽| 99re热视频这里只精品| 成人动漫视频在线| 成人av网站在线观看| 成人免费毛片a| 成人激情文学综合网| 成人精品国产免费网站| 成人网页在线观看| 91美女在线视频| 一本色道久久综合狠狠躁的推荐| 99精品视频中文字幕| 99精品一区二区| 欧美三级午夜理伦三级中视频| 欧洲av在线精品| 欧美人与z0zoxxxx视频| 91麻豆精品国产自产在线观看一区| 欧美美女一区二区| 91精品欧美福利在线观看| 日韩欧美国产系列| 久久久一区二区| 日韩美女视频一区二区 | 欧美xingq一区二区| 精品国产91洋老外米糕| 久久精品水蜜桃av综合天堂| 欧美国产一区二区在线观看| 亚洲人一二三区| 无码av中文一区二区三区桃花岛| 美腿丝袜亚洲三区| 国产剧情一区二区三区| 99久久精品国产麻豆演员表| 在线观看欧美日本| 欧美大片一区二区三区| 日本一区二区三区高清不卡| 亚洲人成影院在线观看| 视频一区中文字幕| 国产成人av影院| 色婷婷av一区二区三区大白胸| 欧美男女性生活在线直播观看| 精品国产免费视频| 中文字幕一区二区三区不卡在线| 亚洲一区二区三区视频在线播放| 秋霞成人午夜伦在线观看| 成人三级在线视频| 欧美综合一区二区| 久久在线免费观看| 亚洲一区二区不卡免费| 国产综合色视频| 欧美性色欧美a在线播放| 欧美电影精品一区二区| 亚洲免费看黄网站| 日本一不卡视频| 91免费看`日韩一区二区| 日韩美女一区二区三区四区| 亚洲人成亚洲人成在线观看图片| 奇米色一区二区| 91久久精品网| 国产欧美va欧美不卡在线| 日韩成人dvd| 色天天综合久久久久综合片| 久久亚洲精华国产精华液| 一区二区在线观看av| 精品一区二区日韩| 欧美日韩国产综合一区二区| 国产精品视频免费| 狠狠色丁香婷综合久久| 欧美日韩一区二区三区免费看| 中文一区二区在线观看| 久久国产精品色婷婷| 欧美久久久久久蜜桃| 亚洲日本欧美天堂| 丰满少妇在线播放bd日韩电影| 91精品国产91久久久久久一区二区 | 成人av电影在线| 久久新电视剧免费观看| 免费观看久久久4p| 欧美日韩高清不卡| 悠悠色在线精品| www.av精品| 国产精品福利一区| 国产麻豆一精品一av一免费 | 在线一区二区视频| 亚洲日本在线观看| 99视频在线观看一区三区| 久久久精品国产免大香伊| 精品系列免费在线观看| 欧美一级电影网站| 日本sm残虐另类| 337p亚洲精品色噜噜狠狠| 午夜久久久影院| 亚洲欧洲日产国码二区| av电影一区二区| 亚洲欧美综合网| 一本到高清视频免费精品|