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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? share.cpp

?? 小型的局域網(wǎng)msg,免安裝
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
static char *share_id = 
	"@(#)Copyright (C) H.Shirouzu 2002   share.cpp	Ver2.00";
/* ========================================================================
	Project  Name			: IP Messenger for Win32
	Module Name				: File Share
	Create					: 2002-04-14(Sun)
	Update					: 2002-11-03(Sun)
	Copyright				: H.Shirouzu
	Reference				: 
	======================================================================== */

#include "tlib.h"
#include "resource.h"
#include "ipmsg.h"
#include "msgstr.h"

#define BIG_ALLOC 5

/*
	岞奐僼傽僀儖娗棟
*/
ShareMng::ShareMng(Cfg *_cfg)
{
	top = (ShareInfo *)&_top;	// 斣暫
	top->prior = top->next = top;
	cfg = _cfg;
	statDlg = NULL;
}

ShareInfo *ShareMng::CreateShare(int packetNo)
{
	if (Search(packetNo) != NULL)
		return	FALSE;

	ShareInfo *info = new ShareInfo(packetNo);
	info->LinkList(top);

	return	info;
}

BOOL ShareMng::AddFileShare(ShareInfo *info, char *fname)
{
	for (int cnt=0; cnt < info->fileCnt; cnt++) //如果傳送的文件已存在
		if (strcmp(fname, info->fileInfo[cnt]->Fname()) == 0)
			return	FALSE;

	FileInfo	*fileInfo = new FileInfo;
	if (SetFileInfo(fname, fileInfo) == FALSE) //賦值給結(jié)構(gòu)體
		return	FALSE;

	if ((info->fileCnt % BIG_ALLOC) == 0) //如果INFO超過(guò)最大值,則動(dòng)態(tài)分配一個(gè)結(jié)構(gòu)體
		info->fileInfo = (FileInfo **)realloc(info->fileInfo, (info->fileCnt + BIG_ALLOC) * sizeof(FileInfo *));
	info->fileInfo[info->fileCnt] = fileInfo;
	info->fileCnt++; //列表加上1

	return	TRUE;
}

BOOL ShareMng::DelFileShare(ShareInfo *info, int fileNo)
{
	if (fileNo >= info->fileCnt)
		return	FALSE;
	memmove(info->fileInfo + fileNo, info->fileInfo + fileNo +1, (--info->fileCnt - fileNo) * sizeof(FileInfo *));

	statDlg->Refresh();

	return	TRUE;
}

BOOL ShareMng::SetFileInfo(char *fname, FileInfo *info)
{
	WIN32_FIND_DATA	fdat;

	if (GetFileInfomation(fname, &fdat) != TRUE)
		return	FALSE;

	UINT	attr = (fdat.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? IPMSG_FILE_DIR : IPMSG_FILE_REGULAR;
	attr |= (fdat.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? IPMSG_FILE_RONLYOPT : 0;
	attr |= (fdat.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) ? IPMSG_FILE_SYSTEMOPT : 0;
	info->SetAttr(attr);
	info->SetFname(fname);
	if (GET_MODE(info->Attr()) == IPMSG_FILE_DIR)
	{
		info->SetSize(0);
		strncpyz(cfg->lastOpenDir, fname, MAX_PATH);
	}
	else {
		info->SetSize((_int64)fdat.nFileSizeHigh << 32 | fdat.nFileSizeLow);
		PathToDir(fname, cfg->lastOpenDir);
	}
	info->SetMtime(FileTime2UnixTime(&fdat.ftLastWriteTime));

	return	TRUE;
}

BOOL ShareMng::AddHostShare(ShareInfo *info, SendEntry *entry, int entryNum)
{
	info->host = new Host *[info->hostCnt = entryNum];
	info->transStat = new char [info->hostCnt * info->fileCnt];
	memset(info->transStat, TRANS_INIT, info->hostCnt * info->fileCnt);

	for (int cnt=0; cnt < entryNum; cnt++)
	{
		info->host[cnt] = (Host *)cfg->fileHosts.GetHostByNameAddr(&entry[cnt].Host()->hostSub);
		if (info->host[cnt] == NULL)
		{
			info->host[cnt] = new Host;
			info->host[cnt]->hostSub = entry[cnt].Host()->hostSub;
			strncpyz(info->host[cnt]->nickName, entry[cnt].Host()->nickName, MAX_NAMEBUF);
			cfg->fileHosts.AddHost(info->host[cnt]);
		}
		else info->host[cnt]->RefCnt(1);
	}
	SYSTEMTIME	st;
	::GetSystemTime(&st);
	::SystemTimeToFileTime(&st, &info->attachTime);

	statDlg->Refresh();

	return	TRUE;
}

int ShareMng::GetFileInfoNo(ShareInfo *info, FileInfo *fileInfo)
{
	for (int target=0; info->fileCnt; target++)
		if (info->fileInfo[target] == fileInfo)
			return	target;
	return	-1;
}

BOOL ShareMng::EndHostShare(int packetNo, HostSub *hostSub, FileInfo *fileInfo, BOOL done)
{
	ShareInfo *info = Search(packetNo);

	if (info == NULL)
		return	FALSE;

	for (int cnt=0; cnt < info->hostCnt; cnt++)
	{
		if (IsSameHostEx(&info->host[cnt]->hostSub, hostSub))
		{
			if (fileInfo)
			{
				info->transStat[info->fileCnt * cnt + GetFileInfoNo(info, fileInfo)] = done ? TRANS_DONE : TRANS_INIT;
				if (done == FALSE)
					return	statDlg->Refresh(), TRUE;
				for (int cnt2=0; cnt2 < info->fileCnt; cnt2++)
					if (info->transStat[info->fileCnt * cnt + cnt2] != TRANS_DONE)
						return	statDlg->Refresh(), TRUE;
			}
			if (info->host[cnt]->RefCnt(-1) == 0)
			{
				cfg->fileHosts.DelHost(info->host[cnt]);
				delete info->host[cnt];
			}
			memmove(info->host + cnt, info->host + cnt + 1, (--info->hostCnt - cnt) * sizeof(Host *));
			memmove(info->transStat + info->fileCnt * cnt, info->transStat + info->fileCnt * (cnt + 1), (info->hostCnt - cnt) * info->fileCnt);
			if (info->hostCnt == 0)
				DestroyShare(info);
			return	statDlg->Refresh(), TRUE;
		}
	}
	return	FALSE;
}

void ShareMng::DestroyShare(ShareInfo *info)
{
	info->next->prior = info->prior;
	info->prior->next = info->next;

	while (info->hostCnt-- > 0)
	{
		if (info->host[info->hostCnt]->RefCnt(-1) == 0)
		{
			cfg->fileHosts.DelHost(info->host[info->hostCnt]);
			delete info->host[info->hostCnt];
		}
	}
	delete [] info->host;
	delete [] info->transStat;

	while (info->fileCnt-- > 0)
		delete info->fileInfo[info->fileCnt];
	free(info->fileInfo);
	statDlg->Refresh();
}

ShareInfo *ShareMng::Search(int packetNo)
{
	for (ShareInfo *info=Top(); info; info=Next(info))
		if (info->packetNo == packetNo)
			return	info;
	return	NULL;
}

BOOL ShareMng::GetShareCntInfo(ShareCntInfo *cntInfo, ShareInfo *shareInfo)
{

	memset(cntInfo, 0, sizeof(ShareCntInfo));

	for (ShareInfo *info = shareInfo ? shareInfo : Top(); info; info=Next(info))
	{
		if (info->hostCnt)
		{
			cntInfo->packetCnt++;
			cntInfo->hostCnt += info->hostCnt;
			for (int cnt=info->fileCnt * info->hostCnt -1; cnt >= 0; cnt--)
			{
				cntInfo->fileCnt++;
				switch (info->transStat[cnt]) {
				case TRANS_INIT: break;
				case TRANS_BUSY: cntInfo->transferCnt++;	break;
				case TRANS_DONE: cntInfo->doneCnt++;		break;
				}
			}
			for (cnt=0; cnt < info->fileCnt; cnt++)
			{
				if (GET_MODE(info->fileInfo[cnt]->Attr()) == IPMSG_FILE_DIR)
					cntInfo->dirCnt++;
				cntInfo->totalSize += info->fileInfo[cnt]->Size();
			}
		}
		if (shareInfo)
			return	TRUE;
	}
	return	TRUE;
}


BOOL ShareMng::GetAcceptableFileInfo(ConnectInfo *info, char *buf, AcceptFileInfo *fileInfo)
{
	// 杮摉偼偙傫側(cè)偲偙傠偱僨僐乕僪偣偢丄msgmng 偵傗傜偣傞傋偒偩偑...
	char		*tok, *p;
	int			targetID;
	ShareInfo	*shareInfo;
	HostSub		hostSub = { "", "", info->addr, info->port };

	if ((tok = separate_token(buf, ':', &p)) == NULL || atoi(tok) != IPMSG_VERSION)
		return	FALSE;

	if ((tok = separate_token(NULL, ':', &p)) == NULL)	// packet no
		return	FALSE;

	if ((tok = separate_token(NULL, ':', &p)) == NULL)
		return	FALSE;
	strncpyz(hostSub.userName, tok, MAX_NAMEBUF);

	if ((tok = separate_token(NULL, ':', &p)) == NULL)
		return	FALSE;
	strncpyz(hostSub.hostName, tok, MAX_NAMEBUF);

	if ((tok = separate_token(NULL, ':', &p)) == NULL)	// command
		return	FALSE;
	fileInfo->command = atoi(tok);

	if ((tok = separate_token(NULL, ':', &p)) == NULL)
		return	FALSE;
	fileInfo->packetNo = strtol(tok, 0, 16);

	if ((tok = separate_token(NULL, ':', &p)) == NULL)
		return	FALSE;
	targetID = strtol(tok, 0, 16);

	if (GET_MODE(fileInfo->command) == IPMSG_GETFILEDATA)
	{
		if ((tok = separate_token(NULL, ':', &p)) == NULL)
			return	FALSE;
		fileInfo->offset = hex2ll(tok);
	}
	else if (GET_MODE(fileInfo->command) == IPMSG_GETDIRFILES)
		fileInfo->offset = 0;
	else return	FALSE;

	if ((shareInfo = Search(fileInfo->packetNo)) == NULL)
		return	FALSE;

	int	host_cnt, file_cnt;

	for (host_cnt=0; host_cnt < shareInfo->hostCnt; host_cnt++)
	{
		if (IsSameHostEx(&shareInfo->host[host_cnt]->hostSub, &hostSub))
		{
			fileInfo->host = shareInfo->host[host_cnt];
			break;
		}
	}
	if (host_cnt == shareInfo->hostCnt)
		return	FALSE;

	for (file_cnt=0; file_cnt < shareInfo->fileCnt; file_cnt++)
	{
		if (shareInfo->fileInfo[file_cnt]->Id() == targetID)
		{
			fileInfo->fileInfo = shareInfo->fileInfo[file_cnt];
			if (shareInfo->transStat[shareInfo->fileCnt * host_cnt + file_cnt] != TRANS_INIT)
				return	FALSE;	// download 嵪傒乮or 嵟拞乯
			if (GET_MODE(fileInfo->command) != IPMSG_GETDIRFILES && GET_MODE(fileInfo->fileInfo->Attr()) == IPMSG_FILE_DIR)		// dir 偵懳偟偰 IPMSG_GETDIRFILES 埲奜偼擣傔側(cè)偄
				return	FALSE;
			fileInfo->attachTime = shareInfo->attachTime;
			shareInfo->transStat[shareInfo->fileCnt * host_cnt + file_cnt] = TRANS_BUSY;
			statDlg->Refresh();
			return	TRUE;
		}
	}
	return	FALSE;
}

/* ShareDlg */
TShareDlg::TShareDlg(ShareMng *_shareMng, ShareInfo *_shareInfo, Cfg *_cfg, TWin *_parent) : TDlg(FILE_DIALOG, _parent), shareListView(this)
{
	shareMng = _shareMng;
	shareInfo = _shareInfo;
	cfg = _cfg;
}

TShareDlg::~TShareDlg()
{
	SendDlgItemMessage(FILE_LIST, LVM_DELETEALLITEMS, 0, 0);
}

BOOL TShareDlg::EvCreate(LPARAM lParam)
{
	SendDlgItemMessage(FILE_LIST, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, parent->SendDlgItemMessage(HOST_LIST, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0) & ~LVS_EX_HEADERDRAGDROP);

	LV_COLUMN	lvC;
	memset(&lvC, 0, sizeof(lvC));
	lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

	char	*title[] = { FILENAME_MSGSTR, SIZE_MSGSTR, LOCATION_MSGSTR, NULL };
	int	size[] = { 120, 70, 180 };
	int	fmt[] = { LVCFMT_LEFT, LVCFMT_RIGHT, LVCFMT_LEFT, LVCFMT_LEFT };
	for (lvC.iSubItem = 0; title[lvC.iSubItem]; lvC.iSubItem++)
	{
		lvC.pszText = title[lvC.iSubItem];
		lvC.fmt = fmt[lvC.iSubItem];
		lvC.cx = size[lvC.iSubItem];
		SendDlgItemMessage(FILE_LIST, LVM_INSERTCOLUMN, lvC.iSubItem, (LPARAM)&lvC);
	}

	for (int cnt=0; cnt < shareInfo->fileCnt; cnt++)
		AddList(cnt);

 	shareListView.CreateByWnd(GetDlgItem(FILE_LIST));

	if (rect.left == CW_USEDEFAULT)
	{
		GetWindowRect(&rect);
		int xsize = rect.right - rect.left, ysize = rect.bottom - rect.top;
		int	cx = ::GetSystemMetrics(SM_CXFULLSCREEN), cy = ::GetSystemMetrics(SM_CYFULLSCREEN);
		int	x = (cx - xsize)/2;
		int y = (cy - ysize)/2;

		MoveWindow((x < 0) ? 0 : x % (cx - xsize), (y < 0) ? 0 : y % (cy - ysize), xsize, ysize, FALSE);
	}
	else
		MoveWindow(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, FALSE);

	Show();
	::SetFocus(shareListView.hWnd);
	return	TRUE;
}

BOOL TShareDlg::AddList(int cnt)
{
	LV_ITEM	lvi;

	memset(&lvi, 0, sizeof(lvi));
	lvi.mask = LVIF_TEXT|LVIF_PARAM;
	lvi.iItem = cnt;
	lvi.pszText = LPSTR_TEXTCALLBACK;
	lvi.lParam = 0;
	return	SendDlgItemMessage(FILE_LIST, LVM_INSERTITEM, 0, (LPARAM)&lvi);
}

BOOL TShareDlg::DelList(int cnt)
{
	SendDlgItemMessage(FILE_LIST, LVM_DELETEITEM, cnt, 0);
	shareMng->DelFileShare(shareInfo, cnt);
	return	TRUE;
}

BOOL TShareDlg::EvNotify(UINT ctlID, NMHDR *pNmHdr)
{
	if (pNmHdr->code == LVN_GETDISPINFO)
	{
		LV_DISPINFO	*dispInfo = (LV_DISPINFO *)pNmHdr;
		const char	*fname = shareInfo->fileInfo[dispInfo->item.iItem]->Fname();

		dispInfo->item.pszText = lvBuf;
		switch (dispInfo->item.iSubItem) {
		case 0: ForcePathToFname(fname, lvBuf);
				break;
		case 1: if (GET_MODE(shareInfo->fileInfo[dispInfo->item.iItem]->Attr()) == IPMSG_FILE_DIR)
					strcpy(lvBuf, "(DIR)");
				else
					MakeSizeString(lvBuf, shareInfo->fileInfo[dispInfo->item.iItem]->Size(), MSS_SPACE);
				break;
		case 2: PathToDir(fname, lvBuf);
				break;
		default: return	FALSE;
		}
		return	TRUE;
	}

	return	FALSE;
}

BOOL TShareDlg::EvDropFiles(HDROP hDrop)
{
	int	lastFileCnt = shareInfo->fileCnt;
	parent->EvDropFiles(hDrop);
	while (lastFileCnt < shareInfo->fileCnt)
		AddList(lastFileCnt++);
	return	TRUE;
}

BOOL TShareDlg::EvCommand(WORD wNotifyCode, WORD wID, LPARAM hWndCtl)
{
	switch (wID)
	{
	case IDOK:		EndDialog(TRUE); break;
	case IDCANCEL:	EndDialog(FALSE); break;

	case FILE_BUTTON:
		{
			int	cnt = shareInfo->fileCnt;
			if (FileAddDlg(this, shareMng, shareInfo, cfg))
				for (cnt; cnt < shareInfo->fileCnt; cnt++)
					AddList(cnt);
		}
		break;

	case FOLDER_BUTTON:
		if (BrowseDirDlg(this, FOLDERATTACH_MSGSTR, cfg->lastOpenDir, cfg->lastOpenDir))
		{
			if (shareMng->AddFileShare(shareInfo, cfg->lastOpenDir))
			{
				AddList(shareInfo->fileCnt -1);
				cfg->WriteRegistry(CFG_GENERAL);
			}
		}
		break;

	case DEL_BUTTON:
		{
			for (int cnt=shareInfo->fileCnt-1; cnt >= 0; cnt--)
			{
				if ((SendDlgItemMessage(FILE_LIST, LVM_GETITEMSTATE, cnt, LVIS_SELECTED) & LVIS_SELECTED) == 0)
					continue;
				DelList(cnt);
			}
		}
		break;

	default: break;
	}
	return	TRUE;
}

BOOL TShareDlg::FileAddDlg(TDlg *dlg, ShareMng *shareMng, ShareInfo *shareInfo, Cfg *cfg)
{
	char	buf[MAX_BUF] = "", path[MAX_BUF];

	if (OpenFileDlg(dlg, OpenFileDlg::MULTI_OPEN).Exec(buf, ADDFILE_MSGSTR, OPENFILEALL_MSGSTR, cfg->lastOpenDir) != TRUE)
		return	FALSE;

	cfg->WriteRegistry(CFG_GENERAL);

	int		dirlen = strlen(cfg->lastOpenDir);
	if (buf[dirlen])
	{	
		return	shareMng->AddFileShare(shareInfo, buf);
	}

	for (char *fname=buf+dirlen+1; *fname; fname += strlen(fname) +1)
	{
		if (MakePath(path, buf, fname) >= MAX_PATH)
			continue;
	
		shareMng->AddFileShare(shareInfo, path);
	}
	return	TRUE;
}

/* TShareStatDlg */
TShareStatDlg::TShareStatDlg(ShareMng *_shareMng, Cfg *_cfg, TWin *_parent) : TDlg(SHARE_DIALOG, _parent), shareListView(this)
{ 

	shareMng = _shareMng;
	cfg = _cfg;
	shareMng->RegistShareStatDlg(this);
}

TShareStatDlg::~TShareStatDlg()
{
	SendDlgItemMessage(SHARE_LIST, LVM_DELETEALLITEMS, 0, 0);
}

BOOL TShareStatDlg::EvCreate(LPARAM lParam)
{
	SendDlgItemMessage(SHARE_LIST, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, SendDlgItemMessage(SHARE_LIST, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0) | LVS_EX_FULLROWSELECT | (cfg->GlidLineCheck ? LVS_EX_GRIDLINES : 0));

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美v日韩v国产v| 国产精品视频免费| 成人av午夜电影| 秋霞午夜鲁丝一区二区老狼| 国产丝袜欧美中文另类| 欧美人与z0zoxxxx视频| av成人老司机| 国产精品99久久久久久久vr | 欧美国产综合一区二区| 欧美精品三级日韩久久| 色综合一区二区| 国产精品自产自拍| 卡一卡二国产精品| 日韩高清一级片| 亚洲动漫第一页| 亚洲欧美电影一区二区| 国产精品亲子乱子伦xxxx裸| 亚洲精品一线二线三线无人区| 91国偷自产一区二区三区成为亚洲经典 | 91啪亚洲精品| 国产精品996| 国产一区二区三区在线看麻豆| 婷婷丁香久久五月婷婷| 亚洲一区二区在线播放相泽| 亚洲天堂久久久久久久| 欧美国产一区视频在线观看| 久久综合999| 亚洲精品一线二线三线 | 伊人夜夜躁av伊人久久| 国产精品五月天| 国产欧美日产一区| ●精品国产综合乱码久久久久| 久久嫩草精品久久久久| 精品剧情在线观看| 在线成人免费观看| 精品午夜一区二区三区在线观看| 国产精品天干天干在观线| 国产日韩欧美a| 久久精品免视看| 日本亚洲免费观看| 日韩高清不卡一区二区| 蜜桃视频一区二区三区| 麻豆久久久久久| 韩国精品主播一区二区在线观看 | 北条麻妃一区二区三区| 国产成人在线视频网站| 久久99精品国产91久久来源| 国产在线看一区| 韩国欧美国产一区| 国产成人无遮挡在线视频| 国产91综合一区在线观看| 成人av资源站| 在线观看亚洲精品视频| 538在线一区二区精品国产| 日韩亚洲欧美一区二区三区| 精品国产1区2区3区| 国产三级一区二区三区| 综合婷婷亚洲小说| 亚洲午夜久久久久久久久电影网| 五月天国产精品| 国产一区二区免费视频| 91免费在线视频观看| 欧美日韩国产精选| www亚洲一区| 亚洲天堂成人在线观看| 婷婷中文字幕综合| 日韩精品中文字幕在线不卡尤物| 精品盗摄一区二区三区| 18成人在线观看| 天堂成人国产精品一区| 国产一区 二区| 色婷婷亚洲精品| 欧美大片在线观看一区| 国产精品毛片久久久久久| 亚洲制服丝袜一区| 极品美女销魂一区二区三区免费| 不卡的看片网站| 69av一区二区三区| 中文字幕欧美三区| 天天综合色天天| 成人免费黄色大片| 777xxx欧美| √…a在线天堂一区| 美腿丝袜亚洲色图| 91小宝寻花一区二区三区| 日韩欧美一区在线观看| 亚洲丝袜制服诱惑| 老司机精品视频在线| 色综合久久天天| 精品嫩草影院久久| 亚洲成人免费视| 成人短视频下载| 日韩美女主播在线视频一区二区三区| 亚洲欧美偷拍三级| 国产大陆精品国产| 欧美一区二区免费视频| 亚洲蜜臀av乱码久久精品蜜桃| 久久精品国产精品青草| 中文字幕制服丝袜一区二区三区| 日韩国产在线一| 99v久久综合狠狠综合久久| 精品久久久久久综合日本欧美| 亚洲永久精品大片| 成人精品电影在线观看| 精品美女被调教视频大全网站| 亚洲综合视频在线观看| 不卡视频一二三| 久久精品男人天堂av| 久久机这里只有精品| 欧美日韩国产经典色站一区二区三区| 中文字幕一区二| 国产精品1024| 欧美xxx久久| 麻豆高清免费国产一区| 欧美日韩久久久| 一区二区三区在线观看网站| eeuss鲁一区二区三区| 国产午夜精品一区二区| 激情都市一区二区| 欧美一区二区啪啪| 亚洲成人免费视| 欧美午夜电影网| 亚洲一区在线观看免费| 91成人网在线| 亚洲精品水蜜桃| 色婷婷综合视频在线观看| 亚洲色图制服丝袜| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产精品福利av| 不卡一区在线观看| 自拍偷拍亚洲综合| 91麻豆成人久久精品二区三区| 中文字幕av一区二区三区免费看| 国产老女人精品毛片久久| 久久久久久久久久久久电影 | 97精品久久久午夜一区二区三区 | 日本亚洲天堂网| 欧美精选一区二区| 日本在线不卡一区| 欧美一区二区三区影视| 免费看欧美美女黄的网站| 日韩欧美中文字幕公布| 极品美女销魂一区二区三区| 久久久久久一二三区| 国产精品影视在线观看| 中文av一区二区| 91色|porny| 亚洲一区二区三区精品在线| 欧美日韩国产美| 精油按摩中文字幕久久| 精品国产乱码久久久久久蜜臀 | 色就色 综合激情| 一区二区三区精品视频在线| 亚洲mv大片欧洲mv大片精品| 色欧美片视频在线观看在线视频| 日韩女优电影在线观看| 午夜一区二区三区视频| 日韩欧美专区在线| 国产成人亚洲精品青草天美| 国产高清久久久| 亚洲天堂成人在线观看| 欧美日韩大陆在线| 精彩视频一区二区| 国产精品久久夜| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 亚洲丶国产丶欧美一区二区三区| 欧美成人三级在线| 成人不卡免费av| 五月天亚洲精品| 国产精品免费人成网站| 欧美网站一区二区| 国产精品香蕉一区二区三区| 亚洲欧美激情插| 精品久久五月天| 91麻豆成人久久精品二区三区| 日韩福利电影在线观看| 亚洲国产成人私人影院tom | 欧美疯狂做受xxxx富婆| 国产一区二区美女| 亚洲成人精品影院| 国产校园另类小说区| 欧美三级中文字幕| 国产成人免费视频网站| 风间由美性色一区二区三区| 2022国产精品视频| 久久影视一区二区| 欧美午夜寂寞影院| 豆国产96在线|亚洲| 亚洲成人先锋电影| 国产精品久久久久久久久久久免费看 | 亚洲国产经典视频| 欧美一区二区视频观看视频| 丁香网亚洲国际| 蜜臀av性久久久久蜜臀aⅴ流畅 | 免费成人在线影院| 一区二区三区精品在线| 国产精品理论在线观看| www成人在线观看| 91精品麻豆日日躁夜夜躁| 一本大道久久a久久精二百|