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

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

?? transporttcpip.cpp

?? .net 方面的開發說明資料。
?? CPP
字號:
// ========================================================
// TCP/IP Transport (connecting) implementation
//
// Design and Implementation by Floris van den Berg
// ========================================================

#pragma warning (disable : 4275)
#pragma warning (disable : 4786)

#include <winsock2.h>
#include <windows.h>
#include <process.h>

#include "Agent.h"
#include "OpenNet.h"
#include "EventDispatcher.h"
#include "TransportTCPIP.h"
#include "Utilities.h"

// --------------------------------------------------------

const int BUFFER_SIZE = 4096;

// --------------------------------------------------------

class CTransportTCPIP : public ITransport {
	friend void CALLBACK RecvCompletion(DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags);
	friend void CALLBACK SendCompletion(DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags);

public :
	CTransportTCPIP();
	virtual ~CTransportTCPIP();

public :
	virtual bool DLL_CALLCONV Open(PROPERTYGROUP_HANDLE group);
	virtual void DLL_CALLCONV PassHandleIndirect(long handle);
	virtual void DLL_CALLCONV Close();
	virtual void DLL_CALLCONV Connect(const char *host, int port);
	virtual void DLL_CALLCONV Disconnect();
	virtual bool DLL_CALLCONV SupportsSending();
	virtual void* DLL_CALLCONV GetReferenceData(int id);
	virtual bool DLL_CALLCONV GetOption(int option, void *value, int *size);
	virtual bool DLL_CALLCONV SetOption(int option, void *value);
	virtual bool DLL_CALLCONV CanBeBalanced();
	virtual void DLL_CALLCONV PollProgress();
	virtual void DLL_CALLCONV IncActionCount();
	
private :
	bool GetOptionA(int option, void *value, int *size);
	bool GetOptionB(int option, void *value, int *size);
	void PollProgressSend();
	void PollProgressRecv(WSANETWORKEVENTS &ne);
	void PollProgressConnect(WSANETWORKEVENTS &ne);
	void PollProgressClose(WSANETWORKEVENTS &ne);
	void PostErrorEvent(DWORD error);
	void PostSentPercentageEvent(DWORD percentage);
	void DestroySocket();

private :
	int m_ref_count;
	boost::mutex m_cs;
	Action *m_action;
	bool m_connected;
	SOCKET m_socket;
	OVERLAPPED m_read_overlapped;
	OVERLAPPED m_send_overlapped;
	HANDLE m_wait_event;
	WSABUF m_recv_buffer;
	WSABUF m_send_buffer;
	bool m_send_pending;
	sockaddr_in m_sockaddr_in;
	DWORD m_bytes_sent;
	DWORD m_percentage_sent;
	LONG m_action_count;
};

// --------------------------------------------------------

static void CALLBACK
RecvCompletion(DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags) {
	CTransportTCPIP *object = (CTransportTCPIP *)lpOverlapped->hEvent;

	if (object) {
		if ((cbTransferred > 0) && (object->m_recv_buffer.buf)) {
			EpDispatchSystemEvent(object, SYSTEM_DATA_IN, object->m_recv_buffer.buf, cbTransferred);
		}
	}
}

static void CALLBACK
SendCompletion(DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags) {
}

// --------------------------------------------------------

CTransportTCPIP::CTransportTCPIP() :
m_cs(),
m_action(NULL),
m_connected(false),
m_socket(NULL),
m_read_overlapped(),
m_send_overlapped(),
m_wait_event(),
m_recv_buffer(),
m_send_buffer(),
m_send_pending(false),
m_sockaddr_in(),
m_bytes_sent(0),
m_percentage_sent(0),
m_action_count(0) {
	memset(&m_send_buffer, 0, sizeof(WSABUF));
	memset(&m_recv_buffer, 0, sizeof(WSABUF));
	memset(&m_read_overlapped, 0, sizeof(OVERLAPPED));
	memset(&m_send_overlapped, 0, sizeof(OVERLAPPED));

	m_read_overlapped.hEvent = this;
	m_send_overlapped.hEvent = this;

	memset(&m_recv_buffer, 0, sizeof(WSABUF));
	m_recv_buffer.len = BUFFER_SIZE;
	m_recv_buffer.buf = new char[BUFFER_SIZE];

	m_wait_event = WSACreateEvent();
}

CTransportTCPIP::~CTransportTCPIP() {
	WSACloseEvent(m_wait_event);
	delete [] m_recv_buffer.buf;
}

// --------------------------------------------------------
// Open/Close/Connect/Disconnect a Plug
// --------------------------------------------------------

bool DLL_CALLCONV
CTransportTCPIP::Open(PROPERTYGROUP_HANDLE group) {
	return (m_wait_event != WSA_INVALID_EVENT);
}

void DLL_CALLCONV
CTransportTCPIP::PassHandleIndirect(long handle) {
	boost::mutex::scoped_lock scoped_lock(m_cs);

	m_socket = (SOCKET)handle;

	WSAEventSelect(m_socket, m_wait_event, FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE);

	EpDispatchSystemEvent(this, SYSTEM_CONNECTED, NULL, 0);
}

void DLL_CALLCONV
CTransportTCPIP::Close() {
	// be gone with thou socket!

	DestroySocket();

	// delete pending recv data

	if (m_recv_buffer.buf)
		delete [] m_recv_buffer.buf;

	memset(&m_send_buffer, 0, sizeof(WSABUF));
	memset(&m_recv_buffer, 0, sizeof(WSABUF));
}

void DLL_CALLCONV
CTransportTCPIP::Connect(const char *host, int port) {
	EpEvent pm_event;
	pm_event.reference_id = 0;
	pm_event.protocol = CLSID_SYSTEM_PROTOCOL;
	pm_event.msg = 0;
	pm_event.size = 0;
	pm_event.data = 0;

	if (!m_connected) {
		// if there is already a socket open, close it first

		DestroySocket();

		// create a socket and try to connect it

		if ((m_socket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_IP, NULL, NULL, WSA_FLAG_OVERLAPPED)) != INVALID_SOCKET) {
			if (WSAEventSelect(m_socket, m_wait_event, FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE) == 0) {
				WSABUF callee_data;
				memset(&callee_data, 0, sizeof(WSABUF));

				memset(&m_sockaddr_in, 0, sizeof(sockaddr_in));
				m_sockaddr_in.sin_family = PF_INET;
				m_sockaddr_in.sin_port = htons(port);
				m_sockaddr_in.sin_addr.s_addr = TCPIPResolveHost(host);

				if (WSAConnect(m_socket, (sockaddr *)&m_sockaddr_in, sizeof(sockaddr_in), NULL, &callee_data, NULL, NULL) == SOCKET_ERROR) {
					DWORD error_code = WSAGetLastError();

					if (error_code != WSAEWOULDBLOCK) {
						PostErrorEvent(error_code);
					} else {
						return;
					}
				} else {
					m_connected = true;
					return;
				}
			}

			// and close the socket again

			DestroySocket();
		}
	}
}

void DLL_CALLCONV
CTransportTCPIP::Disconnect() {
	if ((m_socket) && (m_connected)) {
		boost::mutex::scoped_lock scoped_lock(m_cs);

		// close the socket

		DestroySocket();

		// we are now disconnected

		m_connected = false;

		// send disconnect event

        EpDispatchSystemEvent(this, SYSTEM_DISCONNECTED, 0, NULL);
	}
}

bool DLL_CALLCONV
CTransportTCPIP::SupportsSending() {
	return true;
}

void * DLL_CALLCONV
CTransportTCPIP::GetReferenceData(int id) {
	return NULL;
}

bool DLL_CALLCONV
CTransportTCPIP::GetOption(int option, void *value, int *size) {	 
	boost::mutex::scoped_lock scoped_lock(m_cs);

	if ((value == 0) && (size != 0))
		return GetOptionA(option, value, size);
	else
		return GetOptionB(option, value, size);
}

bool DLL_CALLCONV
CTransportTCPIP::SetOption(int option, void *value) {
	return false;
}

bool DLL_CALLCONV
CTransportTCPIP::CanBeBalanced() {
	return true;
}

void
CTransportTCPIP::PollProgressSend() {
	if (m_action) {
		if (!m_send_pending) {
			m_bytes_sent = 0;
			m_percentage_sent = 0;
			DWORD bytes_sent = 0;

			memset(&m_send_buffer, 0, sizeof(WSABUF));
			m_send_buffer.len = m_action->send_size;
			m_send_buffer.buf = (char *)m_action->send_data;

			if (WSASend(m_socket, &m_send_buffer, 1, &bytes_sent, 0, &m_send_overlapped, SendCompletion) == SOCKET_ERROR) {
				DWORD error_code = WSAGetLastError();

				if (error_code != WSA_IO_PENDING) {
					switch(error_code) {
						case WSAENETDOWN :
							EpDispatchSystemEvent(this, SYSTEM_TCPIP_SUBSYSTEM_FAILED);
							break;

						case WSAENETRESET :
							EpDispatchSystemEvent(this, SYSTEM_TCPIP_NET_RESET);
							break;

						case WSAENOBUFS :
							EpDispatchSystemEvent(this, SYSTEM_TCPIP_NO_BUFFERSPACE);
							break;

						case WSAENOTCONN :
							EpDispatchSystemEvent(this, SYSTEM_TCPIP_NOT_CONNECTED);
							break;

						case WSAECONNRESET :
							EpDispatchSystemEvent(this, SYSTEM_TCPIP_CONNECTION_RESET);
							break;

						case WSAECONNABORTED :
							EpDispatchSystemEvent(this, SYSTEM_TCPIP_CONNECTION_ABORTED);
							break;

						case WSA_OPERATION_ABORTED :
							EpDispatchSystemEvent(this, SYSTEM_TCPIP_OPERATION_ABORTED);
							break;

						default :
							EpDispatchSystemEvent(this, SYSTEM_TCPIP_UNIMPLEMENTED, &error_code, sizeof(DWORD));
							break;
					};

					// post a generic SYSTEM_IO_ERROR after the specific TCP error

					PostErrorEvent(error_code);

					// tell the agent the sending failed

					EpPacketSent(this, false);

					// send a disconnect event

					if (m_connected)
						EpDispatchSystemEvent(this, SYSTEM_DISCONNECTED);

					// abort! abort! abort!

					DestroySocket();
				} else {
					m_send_pending = true;
				}
			} else {
				DWORD transferred = 0;
				DWORD flags = 0;

				if (WSAGetOverlappedResult(m_socket, &m_send_overlapped, &transferred, FALSE, &flags)) {
					if (transferred > 0) {
						// update the size

						m_bytes_sent += transferred;

						// send an event for the number of bytes we sent							
						// send an event for the percentage we sent

						EpDispatchSystemEvent(this, SYSTEM_SENT_PROGRESS_BYTES, &m_bytes_sent, 4);
						PostSentPercentageEvent(100 * m_bytes_sent / m_action->send_size);

						// finished sending. if so, sent an event and get ready
						// to send the next action

						if (m_bytes_sent == m_action->send_size) {
							m_action = NULL;
							m_send_pending = false;

							EpPacketSent(this, true);
						}
					}
				}
			}
		}
	}
}

void
CTransportTCPIP::PollProgressRecv(WSANETWORKEVENTS &ne) {
	if ((ne.lNetworkEvents & FD_READ) == FD_READ) {
		if (ne.iErrorCode[FD_READ_BIT] != 0) {
			switch(ne.iErrorCode[FD_READ_BIT]) {
				case WSAENETDOWN :
					EpDispatchSystemEvent(this, SYSTEM_TCPIP_SUBSYSTEM_FAILED);
					break;

				default :
					EpDispatchSystemEvent(this, SYSTEM_TCPIP_UNIMPLEMENTED, &ne.iErrorCode[FD_READ_BIT], 4);
					break;
			};

			// post a generic SYSTEM_IO_ERROR after the specific TCP error

			PostErrorEvent(WSAGetLastError());

			// disconnect since we can't do anything anymore on an error socket

			DestroySocket();
		} else {
			DWORD flags = 0;
			u_long read = 0;

			WSARecv(m_socket, &m_recv_buffer, 1, &read, &flags, &m_read_overlapped, RecvCompletion);
		}
	}
}

void
CTransportTCPIP::PollProgressConnect(WSANETWORKEVENTS &ne) {
	if ((ne.lNetworkEvents & FD_CONNECT) == FD_CONNECT) {
		if (ne.iErrorCode[FD_CONNECT_BIT] != 0) {
			switch(ne.iErrorCode[FD_CONNECT_BIT]) {
				case WSAEADDRNOTAVAIL :
					EpDispatchSystemEvent(this, SYSTEM_TCPIP_ADDRESS_UNAVAILABLE);
					break;

				case WSAEAFNOSUPPORT :
					EpDispatchSystemEvent(this, SYSTEM_TCPIP_NO_SUPPORT);
					break;

				case WSAECONNREFUSED :
					EpDispatchSystemEvent(this, SYSTEM_TCPIP_CONNECTION_REFUSED);
					break;

				case WSAENETUNREACH :
					EpDispatchSystemEvent(this, SYSTEM_TCPIP_NET_UNREACHABLE);
					break;

				case WSAENOBUFS :
					EpDispatchSystemEvent(this, SYSTEM_TCPIP_NO_BUFFERSPACE);
					break;

				case WSAETIMEDOUT :
					EpDispatchSystemEvent(this, SYSTEM_TCPIP_CONNECTION_TIMEOUT);
					break;

				default :
					EpDispatchSystemEvent(this, SYSTEM_TCPIP_UNIMPLEMENTED, &ne.iErrorCode[FD_CONNECT_BIT], 4);
					break;
			};

			// post a generic SYSTEM_IO_ERROR after the specific TCP error

			PostErrorEvent(WSAGetLastError());

			// abort! abort! abort!

			DestroySocket();
		} else {
			EpDispatchSystemEvent(this, SYSTEM_CONNECTED, NULL, 0);
			m_connected = true;
		}
	}
}

void
CTransportTCPIP::PollProgressClose(WSANETWORKEVENTS &ne) {
	if ((ne.lNetworkEvents & FD_CLOSE) == FD_CLOSE) {
		if (ne.iErrorCode[FD_CLOSE_BIT] != 0) {
			switch (ne.iErrorCode[FD_CLOSE_BIT]) {
				case WSAECONNRESET :
					EpDispatchSystemEvent(this, SYSTEM_TCPIP_CONNECTION_RESET);
					break;

				case WSAECONNABORTED :
					EpDispatchSystemEvent(this, SYSTEM_TCPIP_CONNECTION_ABORTED);
					break;

				default :
					EpDispatchSystemEvent(this, SYSTEM_TCPIP_UNIMPLEMENTED, &ne.iErrorCode[FD_CLOSE_BIT], 4);
					break;
			}
		}


		DestroySocket();
	}
}

void
CTransportTCPIP::PostErrorEvent(DWORD error) {
	if (error != ERROR_SUCCESS)
		EpDispatchSystemEvent(this, SYSTEM_IO_ERROR, &error, 4);
}

void
CTransportTCPIP::PostSentPercentageEvent(DWORD percentage) {
	if (percentage != m_percentage_sent)
		EpDispatchSystemEvent(this, SYSTEM_SENT_PROGRESS_PERCENTAGE, &percentage, 4);
}

void
CTransportTCPIP::DestroySocket() {
	if (m_socket) {
		// cancel all pending actions

		if (m_action) {
			m_action = NULL;
			m_send_pending = false;
			m_action_count = 0;
			EpPacketSent(this, false);
		}

		// destroy the socket

		unsigned long bio = 0;
		WSAEventSelect(m_socket, m_wait_event, 0);
		ioctlsocket(m_socket, FIONBIO, &bio);
		shutdown(m_socket, SD_SEND);
		closesocket(m_socket);
		m_socket = NULL;
		m_connected = false;
	}
}

void DLL_CALLCONV
CTransportTCPIP::PollProgress() {
	if (m_socket) {
		boost::mutex::scoped_lock scoped_lock(m_cs);

		// check for a new action to send, if we aren't sending anything

		if ((m_action == NULL) && (!m_send_pending) && (m_action_count > 0)) {
			--m_action_count;
			m_action = EpGetNextAction(this);
		}

		// try to send

		PollProgressSend();

		// then check for received status messages or errors

		WSANETWORKEVENTS ne;
		memset(&ne, 0, sizeof(ne));	

		if (WSAEnumNetworkEvents(m_socket, m_wait_event, &ne) == 0) {
			PollProgressRecv(ne);
			PollProgressConnect(ne);
			PollProgressClose(ne);
		}
	} else if (m_action) {
		m_action = NULL;
		m_send_pending = false;

		EpPacketSent(this, false);

		if (!m_connected)
			EpDispatchSystemEvent(this, SYSTEM_TCPIP_NOT_CONNECTED, 0, NULL);
	}
}

// --------------------------------------------------------
// Own class methods
// --------------------------------------------------------

bool
CTransportTCPIP::GetOptionA(int option, void *value, int *size) {	 
	switch(option) {
		case TCP_LOCALHOST :
			*size = TCPIPGetLocalHost(m_socket).length() + 1;;
			break;

		case TCP_PEERNAME :
			return false;
	};

	return false;
}

bool
CTransportTCPIP::GetOptionB(int option, void *value, int *size) {	 
	switch(option) {
		case TCP_LOCALHOST :	
			strcpy((char *)value, TCPIPGetLocalHost(m_socket).c_str());
			return true;

		case TCP_PEERNAME :
			return false;
	}

	return false;
}

void DLL_CALLCONV
CTransportTCPIP::IncActionCount() {
	boost::mutex::scoped_lock scoped_lock(m_cs);
	++m_action_count;
}

// --------------------------------------------------------
// Instantation function
// --------------------------------------------------------

HRESULT DLL_CALLCONV
TCPIPCreate(void **iif) {
	CTransportTCPIP *object = new CTransportTCPIP;

	if (object) {
		*iif = object;
		return S_OK;
	}

	return E_FAIL;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品免费精品国产| 日本免费在线视频不卡一不卡二| 亚洲精品欧美激情| 天天综合天天做天天综合| 久久99久久99| 国产成人免费av在线| 欧美偷拍一区二区| 久久综合给合久久狠狠狠97色69| 欧美国产日韩亚洲一区| 亚洲图片有声小说| 国产一区二区影院| 在线免费观看日韩欧美| 精品国产91乱码一区二区三区| 国产精品成人免费| 免费欧美高清视频| 成人av免费网站| 欧美一区二区久久| 亚洲欧美综合另类在线卡通| 日韩高清不卡一区二区三区| 成人黄色免费短视频| 91麻豆精品国产91久久久使用方法| 久久久久久久久久久久电影| 亚洲一二三四久久| 国产大陆a不卡| 欧美日韩精品一区视频| 日本一区二区三区在线不卡| 婷婷成人激情在线网| www.欧美精品一二区| 日韩一区二区三区免费观看| 亚洲日本电影在线| 激情欧美一区二区| 精品视频在线看| 中文字幕一区二区三区四区| 美国十次了思思久久精品导航| 成人动漫视频在线| 精品福利在线导航| 亚洲国产毛片aaaaa无费看| 成人精品在线视频观看| 欧美疯狂做受xxxx富婆| 日韩美女精品在线| 国产精品888| 欧美一区二区女人| 亚洲成人精品一区| 91在线porny国产在线看| 亚洲精品一区二区三区精华液 | 国产乱色国产精品免费视频| 欧美精品在欧美一区二区少妇| 国产精品嫩草久久久久| 国产在线精品国自产拍免费| 欧美久久久影院| 亚洲一区二区3| 91国产视频在线观看| 亚洲国产成人在线| 伊人性伊人情综合网| 成人黄页毛片网站| 中文字幕第一区| 国模无码大尺度一区二区三区| 7777精品伊人久久久大香线蕉完整版| 亚洲色欲色欲www| 95精品视频在线| 国产精品视频观看| 丁香五精品蜜臀久久久久99网站| www一区二区| 国内精品伊人久久久久av影院| 91精品国产入口在线| 亚洲成a人v欧美综合天堂| 91久久一区二区| 一区二区三区在线观看欧美| 99综合电影在线视频| 中文字幕一区二区日韩精品绯色| 成人视屏免费看| 国产日韩欧美a| 成人黄页毛片网站| 亚洲视频在线观看一区| 91在线免费播放| 亚洲美女视频在线观看| 91豆麻精品91久久久久久| 洋洋av久久久久久久一区| 欧美在线视频不卡| 午夜精品久久久久久久| 制服丝袜一区二区三区| 老汉av免费一区二区三区| 精品久久久久一区| 国产成人一区在线| 中文字幕日韩欧美一区二区三区| 99re视频精品| 亚洲丰满少妇videoshd| 欧美日韩成人在线一区| 中文字幕巨乱亚洲| 久久国产精品色婷婷| 久久众筹精品私拍模特| 国产精品综合久久| 久久久精品综合| 国产精品自在欧美一区| 亚洲图片欧美激情| 91丨porny丨国产| 亚洲猫色日本管| 91国产福利在线| 亚洲va韩国va欧美va| 欧美区在线观看| 日韩vs国产vs欧美| 日韩亚洲欧美成人一区| 精品一二三四在线| 精品成a人在线观看| 亚洲18影院在线观看| 欧美一区2区视频在线观看| 久久激五月天综合精品| 久久网这里都是精品| 国内精品视频一区二区三区八戒 | 免费成人小视频| 久久综合久色欧美综合狠狠| 国产乱码精品1区2区3区| 国产精品久久久久9999吃药| 欧美日韩视频在线观看一区二区三区 | 国产人成一区二区三区影院| 激情成人综合网| 久久久一区二区三区捆绑**| 国产成人高清视频| 一级日本不卡的影视| 欧美高清hd18日本| 国产精品18久久久久久久久久久久| 一区二区在线免费观看| 欧美一二三四区在线| 国产精品白丝jk白祙喷水网站| 中文字幕av在线一区二区三区| 欧美视频在线播放| 九色|91porny| 中文字幕一区二区三中文字幕| 欧美午夜电影在线播放| 久久99久久久欧美国产| 亚洲综合色网站| 欧美成人女星排名| av一区二区三区四区| 天天亚洲美女在线视频| 精品国产1区2区3区| 成人一区二区三区中文字幕| 天堂在线亚洲视频| 久久精品一区八戒影视| 欧美日韩在线三级| 国产一区二区三区精品欧美日韩一区二区三区 | 午夜激情久久久| 国产欧美日韩不卡免费| 99久久国产综合精品麻豆| 另类的小说在线视频另类成人小视频在线| 国产日韩欧美不卡| 91.xcao| 成人免费黄色大片| 性做久久久久久免费观看| 久久久天堂av| 欧美日韩一区成人| 粉嫩aⅴ一区二区三区四区五区| 亚洲一区成人在线| 中文天堂在线一区| 91麻豆精品国产91久久久更新时间| 成人免费电影视频| 青青草91视频| 亚洲成年人影院| 国产精品毛片a∨一区二区三区| 91精品国产综合久久精品麻豆 | 欧美日韩成人一区二区| 成人黄色a**站在线观看| 免费成人结看片| 亚洲综合视频在线观看| 国产精品美女久久久久aⅴ国产馆| 制服丝袜激情欧洲亚洲| 成人性生交大片免费| 国产美女一区二区三区| 日韩有码一区二区三区| 亚洲精品综合在线| 国产午夜一区二区三区| 欧美日韩久久一区| 精品视频一区二区三区免费| 色综合久久久久久久久久久| 国产高清精品网站| 精品一区二区三区在线视频| 亚洲国产精品久久人人爱| 一区二区三区在线观看欧美| 中文字幕乱码日本亚洲一区二区| 欧美成人激情免费网| 欧美日本视频在线| 欧美亚洲综合在线| 夫妻av一区二区| 成人国产精品免费观看视频| 国产综合色精品一区二区三区| 奇米影视在线99精品| 亚洲成av人片一区二区梦乃| 亚洲精品综合在线| 亚洲成人午夜影院| 亚洲一本大道在线| 一区二区三区四区av| 亚洲欧美日韩久久精品| 久久久噜噜噜久噜久久综合| 久久综合99re88久久爱| 亚洲精品在线免费观看视频| 91精品国产综合久久久蜜臀粉嫩| 欧洲av一区二区嗯嗯嗯啊| 欧美这里有精品| 欧美色综合久久| 欧美日韩日日骚| 色噜噜狠狠一区二区三区果冻|