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

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

?? mainwin.cpp

?? IPmessage局域網信息
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
{
	switch (uMsg)
	{
	case WM_SENDDLG_OPEN:
		SendDlgOpen((HWND)wParam, (MsgBuf *)lParam);
		return	TRUE;

	case WM_SENDDLG_EXIT:
		SendDlgExit((TSendDlg *)lParam);
		return	TRUE;

	case WM_SENDDLG_HIDE:
		SendDlgHide((TSendDlg *)lParam);
		return	TRUE;

	case WM_RECVDLG_OPEN:
		PopupCheck();
		return	TRUE;

	case WM_RECVDLG_EXIT:
		RecvDlgExit((TRecvDlg *)lParam);
		return	TRUE;

	case WM_IPMSG_NOTIFY:	// TaskTray
		PostMessage((UINT)lParam, 0, 0);
		return	TRUE;

	case WM_HIDE_CHILDWIN:
		ActiveChildWindow(activeToggle = !activeToggle);
		return	TRUE;

	case WM_UDPEVENT:
		UdpEvent(lParam);
		return	TRUE;

	case WM_TCPEVENT:
		TcpEvent(wParam, lParam);
		return	TRUE;

	case WM_REFRESH_HOST:
		RefreshHost((BOOL)wParam);
		return	TRUE;

	case WM_MSGDLG_EXIT:
		MsgDlgExit((TMsgDlg *)lParam);
		return	TRUE;

	case WM_DELMISCDLG:
		EvCommand(0, MENU_DELMISCDLG, 0);
		return	TRUE;

	case WM_IPMSG_INITICON:
		InitIcon();
		SetIcon(cfg->AbsenceCheck == FALSE ? hMainIcon : hRevIcon);
		return	TRUE;

	default:
		if (uMsg == TaskBarCreateMsg)
		{
			TaskBar(NIM_ADD, hMainIcon, IPMSG_MSGSTR);
			return	TRUE;
		}
	}
	return	FALSE;
}

/*
	嶲壛 Message Packet憲弌
*/
void TMainWin::EntryHost(void)
{
	time_t	now_time = Time();

	if (entryStartTime + (time_t)cfg->ListGetMSec / 1000 > now_time)
		return;
	entryStartTime = now_time;

	if (cfg->ListGet == TRUE)
	{
		if (::SetTimer(hWnd, IPMSG_LISTGET_TIMER, cfg->ListGetMSec, NULL))
			entryTimerStatus = IPMSG_LISTGET_TIMER;
		BroadcastEntry(IPMSG_BR_ISGETLIST2);
	}
	else
		BroadcastEntry(IPMSG_BR_ENTRY);
}

/*
	扙弌 Message Packet憲弌
*/
void TMainWin::ExitHost(void)
{
	BroadcastEntry(IPMSG_BR_EXIT);
	Sleep(100);
	BroadcastEntry(IPMSG_BR_EXIT);
}

/*
	廳暋 Packet挷嵏乮娙堈...傕偟偔偼庤敳偒偲傕尵偆(^^;乯
*/				
BOOL TMainWin::IsLastPacket(MsgBuf *msg)
{
	for (int cnt=0; cnt < MAX_PACKETLOG; cnt++)
	{
		if (packetLog[cnt].addr == msg->hostSub.addr && packetLog[cnt].port == msg->hostSub.portNo && packetLog[cnt].no == msg->packetNo && msg->packetNo != IPMSG_DEFAULT_PORT)
		return	TRUE;
	}
	return	FALSE;
}

/*
	UDP Packet 庴怣張棟
*/
BOOL TMainWin::UdpEvent(LPARAM lParam)
{
	MsgBuf	msg;

	if (WSAGETSELECTERROR(lParam) || msgMng->Recv(&msg) != TRUE)
		return	FALSE;

	if (cfg->PriorityReject)
	{
		Host *host = cfg->priorityHosts.GetHostByName(&msg.hostSub);
		if (host && (host->priority < 0 || cfg->PriorityReject >= 2 && host->priority == 0) && IsSameHost(&msg.hostSub, msgMng->GetLocalHost()) == FALSE)
		{
			ULONG	cmd = GET_MODE(msg.command);
			if (cmd != IPMSG_BR_EXIT && cmd != IPMSG_NOOPERATION)
				BroadcastEntrySub(&msg.hostSub, IPMSG_BR_EXIT);
			if (GET_MODE(msg.command) != IPMSG_ANSENTRY)
				return	FALSE;
		}
	}

	switch (GET_MODE(msg.command))
	{
	case IPMSG_BR_ENTRY:
		MsgBrEntry(&msg);
		return	TRUE;

	case IPMSG_BR_EXIT:
		MsgBrExit(&msg);
		return	TRUE;

	case IPMSG_ANSENTRY:
		MsgAnsEntry(&msg);
		return	TRUE;

	case IPMSG_BR_ABSENCE:
		MsgBrAbsence(&msg);
		return	TRUE;

	case IPMSG_SENDMSG:
		MsgSendMsg(&msg);
		break;

	case IPMSG_RECVMSG:
		MsgRecvMsg(&msg);
		break;

	case IPMSG_READMSG:
	case IPMSG_ANSREADMSG:
		MsgReadMsg(&msg);
		break;

	case IPMSG_BR_ISGETLIST2:
		MsgBrIsGetList(&msg);
		return	TRUE;

	case IPMSG_OKGETLIST:
		MsgOkGetList(&msg);
		return	TRUE;

	case IPMSG_GETLIST:
		MsgGetList(&msg);
		return	TRUE;

	case IPMSG_ANSLIST:
		MsgAnsList(&msg);
		return	TRUE;

	case IPMSG_GETINFO:
		MsgGetInfo(&msg);
		break;

	case IPMSG_SENDINFO:
		MsgSendInfo(&msg);
		break;

	case IPMSG_GETPUBKEY:
		MsgGetPubKey(&msg);
		break;

	case IPMSG_ANSPUBKEY:
		MsgAnsPubKey(&msg);
		break;

	case IPMSG_GETABSENCEINFO:
		MsgGetAbsenceInfo(&msg);
		break;

	case IPMSG_SENDABSENCEINFO:
		MsgSendAbsenceInfo(&msg);
		break;

	case IPMSG_RELEASEFILES:
		MsgReleaseFiles(&msg);
		break;
	}

	packetLog[packetLogCnt].no = msg.packetNo;
	packetLog[packetLogCnt].addr = msg.hostSub.addr;
	packetLog[packetLogCnt].port = msg.hostSub.portNo;
	packetLogCnt = (packetLogCnt + 1) % MAX_PACKETLOG;

	return	TRUE;
}

/*
	TCP Packet 庴怣張棟
*/
inline SendFileObj *TMainWin::FindSendFileObj(int sd)
{
	for (SendFileObj *obj = (SendFileObj *)sendFileList.TopObj(); obj; obj = (SendFileObj *)sendFileList.NextObj(obj))
		if (obj->conInfo->sd == sd)
			return	obj;
	return	NULL;
}

BOOL TMainWin::TcpEvent(int sd, LPARAM lParam)
{
	if (WSAGETSELECTERROR(lParam))
		return	FALSE;

	switch (LOWORD(lParam)) {
	case FD_ACCEPT:
		{
			ConnectInfo	tmpInfo, *info;
			if (msgMng->Accept(hWnd, &tmpInfo))
			{
				if (CheckConnectInfo(&tmpInfo))
				{
					info = new ConnectInfo(tmpInfo);
					connectList.AddObj(info);
				}
				else ::closesocket(tmpInfo.sd);
			}
		}
		break;

	case FD_READ:
		StartSendFile(sd);
		break;

	case FD_CLOSE:
		{
			SendFileObj *obj;
			if ((obj = FindSendFileObj(sd)) != NULL)
				EndSendFile(obj);
			else
				::closesocket(sd);
		}
		break;
	}
	return	TRUE;
}

BOOL TMainWin::CheckConnectInfo(ConnectInfo *conInfo)
{
	for (ShareInfo *info=shareMng->Top(); info; info=shareMng->Next(info))
	{
		for (int cnt=0; cnt < info->hostCnt; cnt++)
			if (info->host[cnt]->hostSub.addr == conInfo->addr/* && info->host[cnt]->hostSub.portNo == conInfo->port*/)
				return	conInfo->port = info->host[cnt]->hostSub.portNo, TRUE;
	}
	return	FALSE;
}

/*
	僼傽僀儖憲庴怣奐巒張棟
*/
BOOL TMainWin::StartSendFile(int sd)
{
	ConnectInfo 	*conInfo;
	AcceptFileInfo	fileInfo;

	for (conInfo=(ConnectInfo *)connectList.TopObj(); conInfo && conInfo->sd != sd; conInfo=(ConnectInfo *)connectList.NextObj(conInfo))
		;
	if (conInfo == NULL)
		return	::closesocket(sd), FALSE;
	else {
		msgMng->ConnectDone(hWnd, conInfo);	// 旕摨婜儊僢僙乕僕偺梷惂

// 偡偱偵 read 梫媮偑偒偰偄傞偺偱丄屌傑傞帠偼柍偄...偼偢
// 堦搙偺 recv 偱撉傔側偄応崌丄僄儔乕偵偟偰偟傑偆乮庤敳偒乯
		char	buf[MAX_PATH];
		int		size;
		if ((size = ::recv(conInfo->sd, buf, sizeof(buf) -1, 0)) > 0)
			buf[size] = 0;
		if (size <= 0 || shareMng->GetAcceptableFileInfo(conInfo, buf, &fileInfo) == FALSE)
		{
			connectList.DelObj(conInfo);
			::closesocket(conInfo->sd);
			delete conInfo;
			return	FALSE;
		}
	}

	SendFileObj	*obj = new SendFileObj;
	memset(obj, 0, sizeof(SendFileObj));
	obj->conInfo = conInfo;
	obj->hFile = INVALID_HANDLE_VALUE;
	obj->fileInfo = fileInfo.fileInfo;
	obj->offset = fileInfo.offset;
	obj->packetNo = fileInfo.packetNo;
	obj->host = fileInfo.host;
	obj->command = GET_MODE(fileInfo.command);
	obj->conInfo->startTick = obj->conInfo->lastTick = ::GetTickCount();
	obj->attachTime = fileInfo.attachTime;
	connectList.DelObj(conInfo);
	sendFileList.AddObj(obj);

	if (GetFileInfomation(obj->fileInfo->Fname(), &obj->fdata) == FALSE)
		return	EndSendFile(obj), FALSE;

	obj->isDir = (obj->fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? TRUE : FALSE;
	obj->status = obj->isDir || obj->command == IPMSG_GETDIRFILES ? FS_DIRFILESTART : FS_TRANSFILE;

	if (*obj->fdata.cFileName == 0)
		ForcePathToFname(obj->fileInfo->Fname(), obj->fdata.cFileName);

	BOOL	ret;
	if (obj->isDir)
	{
		ret = obj->command == IPMSG_GETDIRFILES ? TRUE : FALSE;
		obj->hDir = (HANDLE *)malloc((MAX_PATH/2) * sizeof(HANDLE));
	}
	else {
		if ((cfg->fileTransOpt & FT_STRICTDATE) && *(_int64 *)&obj->fdata.ftLastWriteTime > *(_int64 *)&obj->attachTime)
			ret = FALSE, obj->status = FS_COMPLETE;		// 嫟桳忣曬偐傜徚嫀
		else
			ret = OpenSendFile(obj->fileInfo->Fname(), obj);
	}
	if (ret == FALSE)
		return	EndSendFile(obj), FALSE;

	DWORD	id;	// 巊傢偢乮95宯偱 error 偵側傞偺傪杊偖偩偗乯
	obj->hThread = ~0;	// 旝柇側椞堟傪旔偗傞
	// thread 撪偱偼 MT 懳墳偑昁梫側 crt 偼巊傢偢
	if ((obj->hThread = ::CreateThread(NULL, 0, SendFileThread, obj, 0, &id)) == NULL)
		return	EndSendFile(obj), FALSE;

	return	TRUE;
}

BOOL TMainWin::OpenSendFile(const char *fname, SendFileObj *obj)
{
	DWORD	lowSize, highSize, viewSize;

	if ((obj->hFile = ::CreateFile(fname, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)) != INVALID_HANDLE_VALUE)
	{
		lowSize = ::GetFileSize(obj->hFile, &highSize);
		if ((obj->fileSize = (_int64)highSize << 32 | lowSize) == 0)
			return	TRUE;
		obj->hMap = ::CreateFileMapping(obj->hFile, 0, PAGE_READONLY, highSize, lowSize, 0);
		viewSize = (int)(obj->fileSize > cfg->ViewMax ? cfg->ViewMax : obj->fileSize);
		highSize = (int)(obj->offset >> 32);
		lowSize = (int)((obj->offset / cfg->ViewMax) * cfg->ViewMax);
		obj->mapAddr = (char *)::MapViewOfFile(obj->hMap, FILE_MAP_READ, highSize, lowSize, viewSize);
		if (obj->mapAddr && IsBadReadPtr(obj->mapAddr, 1) == TRUE)
		{
			CloseSendFile(obj);
			return	FALSE;
		}
	}
	return	obj->mapAddr ? TRUE : FALSE;
}

BOOL TMainWin::CloseSendFile(SendFileObj *obj)
{
	if (obj == NULL)
		return	FALSE;

	::UnmapViewOfFile(obj->mapAddr);obj->mapAddr= NULL;
	::CloseHandle(obj->hMap);		obj->hMap	= NULL;
	::CloseHandle(obj->hFile);		obj->hFile	= INVALID_HANDLE_VALUE;
	obj->offset = 0;

	return	TRUE;
}

DWORD WINAPI TMainWin::SendFileThread(void *_sendFileObj)
{
	SendFileObj	*obj = (SendFileObj *)_sendFileObj;
	fd_set		fds;
	fd_set		*rfds = NULL, *wfds = &fds;
	timeval		tv;
	int			sock_ret;
	BOOL		ret = FALSE, completeWait = FALSE;
	BOOL		(TMainWin::*SendFileFunc)(SendFileObj *obj) =
				obj->command == IPMSG_GETDIRFILES ? TMainWin::SendDirFile : TMainWin::SendFile;

	FD_ZERO(&fds);
	FD_SET(obj->conInfo->sd, &fds);

	for (int waitCnt=0; waitCnt < 180 && obj->hThread != NULL; waitCnt++)
	{
		tv.tv_sec = 1, tv.tv_usec = 0;

		if ((sock_ret = ::select(obj->conInfo->sd + 1, rfds, wfds, NULL, &tv)) > 0)
		{
			waitCnt = 0;

			if (completeWait)
			{	// dummy read 偵傛傝丄憡庤懁偺 socket 僋儘乕僘偵傛傞 EOF 傪専弌
				if (::recv(obj->conInfo->sd, (char *)&ret, sizeof(ret), 0) >= 0)
					ret = TRUE;
				break;
			}
			else if ((mainWin->*SendFileFunc)(obj) != TRUE)
				break;
			else if (obj->status == FS_COMPLETE)
			{
				completeWait = TRUE, rfds = &fds, wfds = NULL;
				// 夁嫀兝7埲慜偺屳姺惈偺偨傔
				if (obj->fileSize == 0) { ret = TRUE; break; }
			}
		}
		else if (sock_ret == 0) {
			FD_ZERO(&fds);
			FD_SET(obj->conInfo->sd, &fds);
		}
		else if (sock_ret == SOCKET_ERROR) {
			break;
		}
	}

	if (obj->isDir)
	{
		mainWin->CloseSendFile(obj);
		while (--obj->dirCnt >= 0)
			::FindClose(obj->hDir[obj->dirCnt]);
	}

	obj->status = ret ? FS_COMPLETE : FS_ERROR;
	mainWin->PostMessage(WM_TCPEVENT, obj->conInfo->sd, FD_CLOSE);
	::ExitThread(0);
	return	0;
}

int MakeDirHeader(SendFileObj *obj, BOOL find)
{
	int				len;
	WIN32_FIND_DATA	*dat = &obj->fdata;
	DWORD			attr = dat->dwFileAttributes, ipmsg_attr;

	ipmsg_attr = (find == FALSE ? IPMSG_FILE_RETPARENT : (attr & FILE_ATTRIBUTE_DIRECTORY)
			? IPMSG_FILE_DIR : IPMSG_FILE_REGULAR) |
		(attr & FILE_ATTRIBUTE_READONLY ? IPMSG_FILE_RONLYOPT : 0) |
		(attr & FILE_ATTRIBUTE_HIDDEN ? IPMSG_FILE_HIDDENOPT : 0) |
		(attr & FILE_ATTRIBUTE_SYSTEM ? IPMSG_FILE_SYSTEMOPT : 0);

	if (find)
		len = wsprintf(obj->header, "0000:%s:%x%08x:%x:%x=%x:%x=%x:", dat->cFileName,
				dat->nFileSizeHigh, dat->nFileSizeLow, ipmsg_attr,
				IPMSG_FILE_MTIME, FileTime2UnixTime(&dat->ftLastWriteTime),
				IPMSG_FILE_CREATETIME, FileTime2UnixTime(&dat->ftCreationTime));
	else if (*(_int64 *)&dat->ftLastWriteTime)
		len = wsprintf(obj->header, "0000:.:0:%x:%x=%x:%x=%x:", ipmsg_attr,
				IPMSG_FILE_MTIME, FileTime2UnixTime(&dat->ftLastWriteTime),
				IPMSG_FILE_CREATETIME, FileTime2UnixTime(&dat->ftCreationTime));
	else
		len = wsprintf(obj->header, "0000:.:0:%x:", ipmsg_attr);

	obj->header[wsprintf(obj->header, "%04x", len)] = ':';

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级片网址| 国产视频一区不卡| 欧美成人aa大片| 成人福利视频在线看| 蜜臀av性久久久久av蜜臀妖精| 一区二区三区不卡视频| 视频一区视频二区在线观看| 亚洲成av人片一区二区| 日韩av电影免费观看高清完整版在线观看| 夜夜嗨av一区二区三区中文字幕| 亚洲特级片在线| 无码av免费一区二区三区试看| 欧美视频在线观看一区二区| 视频一区二区三区入口| 欧美一级日韩一级| 国产成人自拍网| 中文字幕日韩一区二区| 在线观看免费亚洲| 麻豆免费精品视频| 亚洲欧美综合在线精品| 欧美亚洲高清一区| 国产综合久久久久久久久久久久| 国产精品免费视频一区| 欧美午夜精品一区二区三区| 精品一区二区三区视频| 亚洲丝袜美腿综合| 欧美一级视频精品观看| 99这里只有久久精品视频| 丝袜国产日韩另类美女| 国产视频一区二区在线观看| 欧洲国产伦久久久久久久| 黑人精品欧美一区二区蜜桃| 中文天堂在线一区| 欧美电影在线免费观看| 国产原创一区二区| 亚洲国产乱码最新视频| 日本一区二区三区国色天香| 欧美三级中文字| 国产91高潮流白浆在线麻豆| 偷窥国产亚洲免费视频| 中文字幕亚洲欧美在线不卡| 欧美一区二区三区不卡| 91麻豆国产在线观看| 国产曰批免费观看久久久| 樱桃视频在线观看一区| 久久精品欧美日韩| 日韩一二在线观看| 欧美日韩中文字幕一区| 成人免费va视频| 狠狠色狠狠色综合日日91app| 一区二区欧美精品| 中文字幕精品在线不卡| 欧美成人女星排名| 欧美人狂配大交3d怪物一区 | 亚洲午夜免费电影| 久久精品在线免费观看| 精品久久久久久最新网址| 欧美视频精品在线| 97久久超碰国产精品| 国产成人精品一区二| 九九九精品视频| 热久久国产精品| 日本va欧美va精品发布| 亚洲成人久久影院| 亚洲另类一区二区| 亚洲人吸女人奶水| 国产精品美女一区二区| 国产亚洲成aⅴ人片在线观看| www精品美女久久久tv| 欧美一区二区美女| 欧美一区二区啪啪| 日韩欧美亚洲一区二区| 4438x亚洲最大成人网| 欧美日韩中文一区| 欧美夫妻性生活| 欧美精品久久久久久久久老牛影院| 91黄色激情网站| 欧美午夜精品电影| 欧美精选午夜久久久乱码6080| 欧美丝袜丝交足nylons| 在线观看免费视频综合| 欧美日韩免费一区二区三区视频| 欧美色图在线观看| 精品视频999| 欧美一级片在线| 欧美成人猛片aaaaaaa| 久久美女高清视频| 国产精品久久久久精k8 | 成人午夜激情影院| 91在线视频免费观看| 日本韩国一区二区三区| 欧美性猛交一区二区三区精品| 欧美色图激情小说| 欧美成人vr18sexvr| 久久婷婷国产综合精品青草| 久久精品综合网| 亚洲欧美激情插| 亚洲线精品一区二区三区 | 精品久久久久久久久久久院品网| 久久众筹精品私拍模特| 国产精品欧美久久久久无广告| 一区二区三区加勒比av| 日韩和欧美一区二区三区| 韩国毛片一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 一本久道久久综合中文字幕 | 狠狠色综合日日| 99热国产精品| 欧美一区二区三区视频在线观看| 久久看人人爽人人| 亚洲一区二区免费视频| 国产一区二区三区免费播放| jvid福利写真一区二区三区| 精品视频一区二区不卡| 国产午夜精品久久久久久免费视 | caoporm超碰国产精品| 欧美日本国产视频| 国产无遮挡一区二区三区毛片日本| 一区二区三区日韩精品视频| 蜜臀av一级做a爰片久久| va亚洲va日韩不卡在线观看| 91精品蜜臀在线一区尤物| 国产精品久久夜| 日本视频在线一区| 日本韩国欧美在线| 久久久久国产免费免费 | 欧美成人精品高清在线播放| 亚洲少妇中出一区| 国产一区二区主播在线| 在线一区二区观看| 久久久久久亚洲综合| 亚洲成人综合视频| 91免费版pro下载短视频| 久久综合久久综合久久| 亚洲成人综合在线| 91片在线免费观看| 国产农村妇女毛片精品久久麻豆| 天天综合日日夜夜精品| 色欲综合视频天天天| 久久午夜免费电影| 捆绑变态av一区二区三区| 欧美系列日韩一区| 一区二区三区在线视频免费| 国产精品亚洲一区二区三区妖精| 精品视频免费看| 一区二区三区电影在线播| 国产成人亚洲综合a∨婷婷| 日韩美女天天操| 视频精品一区二区| 欧美性猛片aaaaaaa做受| 亚洲欧美日韩中文播放| 成人一区在线观看| 久久久久久一二三区| 韩国女主播一区| 精品国产91洋老外米糕| 日韩主播视频在线| 欧美日韩国产成人在线免费| 一区二区三区日韩欧美| 在线观看日韩精品| 亚洲综合清纯丝袜自拍| 91麻豆成人久久精品二区三区| 国产女主播视频一区二区| 国产成人免费视频网站| 久久精品一区二区三区av| 国精产品一区一区三区mba桃花 | 成人av中文字幕| 国产精品久久久久久亚洲伦| 岛国精品在线播放| 亚洲视频在线观看三级| 色诱视频网站一区| 亚洲成在人线免费| 欧美精品九九99久久| 五月天亚洲精品| 欧美第一区第二区| 国产高清精品久久久久| 国产精品嫩草影院av蜜臀| 波多野结衣的一区二区三区| 亚洲色图在线看| 91高清视频免费看| 午夜电影网一区| 精品少妇一区二区三区在线视频| 国产真实乱子伦精品视频| 久久久91精品国产一区二区三区| 成人激情小说乱人伦| 亚洲三级久久久| 欧美久久一二区| 国产尤物一区二区| 国产精品另类一区| 欧美视频一区在线观看| 午夜精品久久久| 久久综合狠狠综合久久激情 | 在线综合视频播放| 激情五月激情综合网| 国产精品你懂的在线| 欧美伊人久久大香线蕉综合69| 免费一级欧美片在线观看| 中文字幕乱码一区二区免费| 欧美午夜精品一区二区三区| 精品一区二区三区在线视频| 中文字幕亚洲一区二区av在线|