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

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

?? aviomgr.cpp

?? nettalk
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	BOOL bRet=FALSE;
	if(m_iStatus!=STA_FREE)
		goto RET;
	SetDst(ip,port);
	PACK_CMD pc;
	m_session=rand()&0xff;
	pc.flag=FLAG_CMD;
	pc.cmd=CMD_CALL;
	pc.type=0;
	pc.data_size_extra=0;
	pc.ext=VER_AVIO&0xff;//AVIO 的版本
	if(!SendCmd(&pc,sizeof(pc),m_dst,TRUE))
		goto RET;
	
	m_iStatus=STA_BUSY;
	bRet=TRUE;
	m_uDataSend=0;
	m_uDataRcv=0;
	
RET:
	return bRet;
}

/*------------------------------------------------------------------------------*/
//結束通話
BOOL CAVIOMgr::EndTalk()
{
	BOOL bRet=FALSE;
	if(m_iStatus==STA_FREE)
		goto RET;
	if(m_iStatus==STA_BUSY)
	{
		m_iStatus=STA_FREE;
	
		PACK_CMD pc;
		pc.flag=FLAG_CMD;
		
		pc.cmd=CMD_END;
		pc.data_size_extra=0;
		pc.type=0;
		SendCmd(&pc,sizeof(pc),m_dst,FALSE);
		ZeroMemory(&m_dst,sizeof(m_dst));
		DestroyVideoCodec();
		DestroyAudioCodec();
		DestroyAudioPlay();
		DestroyAudioRec();
		DestroyCap();
		
		
	}
	
	bRet=TRUE;
RET:
	return bRet;
}

/*------------------------------------------------------------------------------*/
//接受請求
BOOL CAVIOMgr::Accept()
{
	BOOL bRet=FALSE;
	if(m_iStatus!=STA_BUSY)
		goto RET;
	PACK_CMD pc;
	pc.flag=FLAG_CMD;
	pc.cmd=CMD_ACCEPT;
	
	pc.data_size_extra=0;
	pc.type=0;
	SendCmd(&pc,sizeof(pc),m_dst,TRUE);
		
	ZeroMemory(&m_ds,sizeof(m_ds));
	m_ds.bVideoOut=true;//always ok
	if(InitVideoCodec())//why this must ahead InitAudioCodec??i don't know why
		m_ds.bVideoCodec=true;
	if(InitAudioCodec())
		m_ds.bAudioCodec=true;
	if(InitAudioPlay())
		m_ds.bAudioOut=true;
	if(InitAudioRec())
		m_ds.bAudioIn=true;
	
	if(m_ds.bVideoCodec&&InitCap())
		m_ds.bVideoIn=true;
	
	if(!m_ds.bAudioCodec&&!m_ds.bVideoCodec)
	{
		DestroyCap();
		DestroyAudioRec();
		DestroyAudioPlay();
		DestroyAudioCodec();
		DestroyVideoCodec();
		
		m_iStatus=STA_FREE;
	}
	bRet=TRUE;
RET:
	return bRet;

}

/*------------------------------------------------------------------------------*/
//拒絕請求
BOOL CAVIOMgr::Refuse()
{
	BOOL bRet=FALSE;
	if(m_iStatus!=STA_BUSY)
		goto RET;
	PACK_CMD pc;
	pc.flag=FLAG_CMD;
	pc.cmd=CMD_REFUSE;
	
	pc.ext=R_USER;
	pc.data_size_extra=0;
	pc.type=0;
	m_iStatus=STA_FREE;

	SendCmd(&pc,sizeof(pc),m_dst,TRUE);	
	
	bRet=TRUE;
RET:
	return bRet;
}

/*------------------------------------------------------------------------------*/
//解釋發送來的命令
void CAVIOMgr::OnCommand(PACK_CMD *ppc, int len)
{
	switch(ppc->cmd)
	{
	case CMD_CALL:
		{
			if(ppc->type==0)
			{
				if(m_bEnable)
				{
					//如果是空閑的,就保存地址,設置狀態為工作狀態
					//并向主窗口發送呼叫通知
					if(m_iStatus==STA_FREE)
					{
						m_dst=m_sockaddr;
						m_iStatus=STA_BUSY;
						m_session=ppc->session;
						PostMessage(m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_CALL,VER_AVIO),(LPARAM)this);
						//返回請求確認
						PACK_CMD pc;
						pc.flag=FLAG_CMD;
						pc.data_size_extra=0;
						
						pc.cmd=CMD_CALL;
						pc.ext=VER_AVIO&0xff;// AVIO的版本
						pc.type=1;
						pc.id=ppc->id;
						pc.session=m_session;
						m_Socket.SendTo((char*)&pc,sizeof(pc),(sockaddr*)&m_sockaddr);
						
						
					}
					else
					if(m_iStatus==STA_BUSY&&m_session!=ppc->session)
					{					
						/*//有另一臺機請求通話,拒絕!
						
						PACK_CMD pc;
						pc.flag=FLAG_CMD;
						pc.cmd=CMD_REFUSE;
						pc.data_size_extra=0;
						pc.ext=R_BUSY;
						pc.type=0;
						pc.id=ppc->id;
						pc.session=ppc->session;
						m_Socket.SendTo((char*)&pc,sizeof(pc),(sockaddr*)&m_sockaddr);*/
					}
				}
			}
			//回應
			else
			{
				if(ppc->session==m_session)
				{
					KillTimer(m_MsgRcvWnd,ppc->id);
					m_CmdQueue.Remove(ppc->id);
					PostMessage(m_hwndMainWnd,IOM_NOTIFY,IOMN_CONNECTED,(LPARAM)this);
				}
			}
		}break;
	case CMD_END:
		{
			if(ppc->session==m_session)
			{
				if(ppc->type==0)
				{
					
					if(m_iStatus==STA_BUSY)
					{
						PostMessage(m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_END,E_USER),(LPARAM)this);
					}
					PACK_CMD pc;
					pc.flag=FLAG_CMD;
					pc.data_size_extra=0;
					pc.cmd=CMD_END;
					pc.type=1;
					pc.id=ppc->id;
					pc.session=m_session;
					m_Socket.SendTo((char*)&pc,sizeof(pc),(sockaddr*)&m_sockaddr);
					
				}
				else
				{
					KillTimer(m_MsgRcvWnd,ppc->id);
					m_CmdQueue.Remove(ppc->id);
				}
			}
			
		}
		break;
	case CMD_REFUSE:
		{
			if(ppc->session==m_session)
			{
				
				if(ppc->type==0)
				{
					
					if(m_iStatus==STA_BUSY)
					{
						m_iStatus=STA_FREE;
						PostMessage(m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_REFUSE,ppc->ext),(LPARAM)this);
					}
					PACK_CMD pc;
					pc.flag=FLAG_CMD;
					pc.data_size_extra=0;
					pc.cmd=CMD_REFUSE;
					pc.type=1;
					pc.id=ppc->id;
					pc.session=m_session;				
					m_Socket.SendTo((char*)&pc,sizeof(pc),(sockaddr*)&m_sockaddr);
					
					
				}
				else
				{
					KillTimer(m_MsgRcvWnd,ppc->id);
					m_CmdQueue.Remove(ppc->id);
				}
			}
		}
		break;
	case CMD_ACCEPT:
		{
			if(ppc->session==m_session)
			{
				if(ppc->type==0)
				{
					
					if(m_iStatus==STA_BUSY)
					{
						PostMessage(m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_ACCEPT,VER_AVIO),(LPARAM)this);
					}
					PACK_CMD pc;
					pc.flag=FLAG_CMD;
					pc.data_size_extra=0;
					pc.cmd=CMD_ACCEPT;
					pc.type=1;
					pc.id=ppc->id;
					pc.session=m_session;
					m_Socket.SendTo((char*)&pc,sizeof(pc),(sockaddr*)&m_sockaddr);
					
				}
				else
				{
					KillTimer(m_MsgRcvWnd,ppc->id);
					m_CmdQueue.Remove(ppc->id);
				}
			}
			
		}
		break;
	case CMD_TXT:
		{
			if(ppc->type==0)
			{
				//bug exist
				SendMessage(m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_TXT,0),(LPARAM)(((char*)ppc)+sizeof(PACK_CMD)));
				PACK_CMD pc;
				pc.flag=FLAG_CMD;
				pc.data_size_extra=0;
				pc.cmd=CMD_TXT;
				pc.type=1;
				pc.id=ppc->id;
				m_Socket.SendTo((char*)&pc,sizeof(pc),(sockaddr*)&m_sockaddr);
			}
			else
			{
				
				KillTimer(m_MsgRcvWnd,ppc->id);
				UINT len;char resend;sockaddr_in addr;
				char* p=m_CmdQueue.GetBuf(ppc->id,len,resend,addr);
				if(p)
				{
					SendMessage(m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_TXT,1),(LPARAM)(p+sizeof(PACK_CMD)));
				}
				m_CmdQueue.Remove(ppc->id);
			}
		}
		break;

	case CMD_DROPRATE:
		{
			//根據丟包率來調整視頻質量
			if(ppc->type==0&&ppc->session&&m_bEnableBandAdjust)
			{
				SetVideoQuality(100-ppc->ext);
				SendMessage(m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_VQSET,100-ppc->ext),(LPARAM)this);
			}
		}break;
		
	}

}

/*------------------------------------------------------------------------------*/
//以下是設置對外消息接口
//設置主窗口
void CAVIOMgr::SetMainWnd(HWND hwnd)
{
	m_hwndMainWnd=hwnd;
}

void CAVIOMgr::SetLocalVideoRcvWnd(HWND hwnd)
{
	m_hwndLocalVideoRcv=hwnd;
}

void CAVIOMgr::SetLocalAudioRcvWnd(HWND hwnd)
{
	m_hwndLocalAudioRcv=hwnd;
}

void CAVIOMgr::SetRemoteVideoRcvWnd(HWND hwnd)
{
	m_hwndRemoteVideoRcv=hwnd;
}

void CAVIOMgr::SetRemoteAudioRcvWnd(HWND hwnd)
{
	m_hwndRemoteAudioRcv=hwnd;
}

/*------------------------------------------------------------------------------*/
//得到當前狀態
int CAVIOMgr::GetStatus()
{
	return m_iStatus;
}

/*------------------------------------------------------------------------------*/
//調用以下函數要謹慎
//只有在收到相應消息時才能調用
/////////////////////////
///
char* CAVIOMgr::GetLocalVideo(UINT &len)
{
	len=m_CodecMgr.m_BmpU.bmiHeader.biSizeImage;
	return m_VideoLocal;
}

char* CAVIOMgr::GetLocalAudio(UINT &len)
{
	len=SIZE_AUDIO_FRAME;
	return m_AudioLocal;
}

char* CAVIOMgr::GetRemoteVideo(UINT &len)
{
	len=m_CodecMgr.m_BmpU.bmiHeader.biSizeImage;
	return m_VideoRemote;
}

char* CAVIOMgr::GetRemoteAudio(UINT &len)
{
	len=SIZE_AUDIO_FRAME;
	return m_AudioRemote;
}

/*------------------------------------------------------------------------------*/
//得到原始視頻格式
BITMAPINFO* CAVIOMgr::GetBitampInfo()
{
	return &m_CodecMgr.m_BmpU;
}

/*------------------------------------------------------------------------------*/
//得到數據發送量
UINT CAVIOMgr::GetDataSend()
{
	return m_uDataSend;
}
/*------------------------------------------------------------------------------*/
//得到數據接收量
UINT CAVIOMgr::GetDataRcv()
{
	return m_uDataRcv;
}
/*------------------------------------------------------------------------------*/
//設置是否傳輸視頻
void CAVIOMgr::VideoSend(BOOL b)
{
	m_bVideoSend=b;
	
}
/*------------------------------------------------------------------------------*/
//得到對方地址
sockaddr_in CAVIOMgr::GetRemoteAddr()
{
	return m_dst;
}
/*------------------------------------------------------------------------------*/
//設置視頻質量
void CAVIOMgr::SetVideoQuality(UINT q)
{
	m_CodecMgr.m_cv.lQ=q*100;
}
/*------------------------------------------------------------------------------*/
//預覽
BOOL CAVIOMgr::EnablePreview(BOOL b)
{
	if(m_iStatus==STA_FREE&&b)
	{
		return InitCap();			
	}
	else
	if(m_iStatus==STA_FREE&&!b)
	{
		DestroyCap();
		
	}
	return TRUE;
}

/*------------------------------------------------------------------------------*/
//當對方接收請求后,會受到Accept的消息,這時必須調用此函數,來打開各種設備
void CAVIOMgr::OnAccept()
{
	if(m_iStatus==STA_FREE) return;
	ZeroMemory(&m_ds,sizeof(m_ds));

	m_ds.bVideoOut=true;//always ok
	if(InitVideoCodec())
		m_ds.bVideoCodec=true;
	if(InitAudioCodec())
		m_ds.bAudioCodec=true;
	if(InitAudioPlay())
		m_ds.bAudioOut=true;
	if(InitAudioRec())
		m_ds.bAudioIn=true;
	
	if(m_ds.bVideoCodec&&InitCap())
		m_ds.bVideoIn=true;
	
	if(!m_ds.bAudioCodec&&!m_ds.bVideoCodec)
	{
		DestroyCap();
		DestroyAudioRec();
		DestroyAudioPlay();
		DestroyAudioCodec();
		DestroyVideoCodec();
		
		m_iStatus=STA_FREE;
	}


	
}

/*------------------------------------------------------------------------------*/
//得到幀數
UINT CAVIOMgr::GetFrameCount()
{
	return m_nFrameCount;
}

/*------------------------------------------------------------------------------*/
//發送命令(比較可靠)
BOOL CAVIOMgr::SendCmd(PACK_CMD *pCmd, UINT nLen,sockaddr_in &addr, BOOL bFlag)
{
	if(!pCmd) return FALSE;
	pCmd->id=m_idCmd++;
	pCmd->session=m_session;
	
	int l=m_Socket.SendTo((char*)pCmd,nLen,(sockaddr*)&addr);
	if(l>0)
	{
		if(bFlag)
		{
			m_CmdQueue.Add(pCmd->id,(char*)pCmd,nLen,addr);//把命令加入命令表
			SetTimer(m_MsgRcvWnd,pCmd->id,800,CmdTimeOutProc);
		}
		return TRUE;
	}
	else
		return FALSE;
}

/*------------------------------------------------------------------------------*/
//命令超時重發
void CALLBACK CAVIOMgr::CmdTimeOutProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
	if(pMgrInst)
	{
		UINT len;char resend;sockaddr_in addr;
		char* p=pMgrInst->m_CmdQueue.GetBuf(idEvent,len,resend,addr);//找出相應ID的命令(已經超時,需要重發)
		if(p)
		{
			if(resend<5)
				pMgrInst->m_Socket.SendTo(p,len,(sockaddr*)&addr);
			else//當重發次數超過4次時,宣布失敗
			{
				KillTimer(hwnd,idEvent);//
				
				if(pMgrInst)
				{
					PACK_CMD* pCmd=(PACK_CMD*)p;
					switch(pCmd->cmd)
					{
					case CMD_CALL:
						{
							PostMessage(pMgrInst->m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_REFUSE,R_TIMEOUT),(LPARAM)pMgrInst);
							pMgrInst->m_iStatus=STA_FREE;
							
						}
						break;
					case CMD_REFUSE:
						break;
					case CMD_ACCEPT:
						break;
					case CMD_END:
						break;
					case CMD_TXT:
						break;
					}
				}
				pMgrInst->m_CmdQueue.Remove(idEvent);//把命令從表中移除
			}
		}
		else
			KillTimer(hwnd,idEvent);
	}
}

/*------------------------------------------------------------------------------*/
//丟包率計算(包括幀頻率計算)
void CALLBACK CAVIOMgr::DropRateCounter(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
	//計算丟包率
	if(pMgrInst)
	{
		UINT delt;
		if(pMgrInst->m_nCurVid<pMgrInst->m_nLastVid)
			delt=pMgrInst->m_nCurVid+256-pMgrInst->m_nLastVid;
		else
			delt=pMgrInst->m_nCurVid-pMgrInst->m_nLastVid;
		if(delt>0)
			pMgrInst->m_nDropRate=100-(pMgrInst->m_nFrameCount-pMgrInst->m_nLastFrameCount)*100/delt;
		pMgrInst->m_nLastVid=pMgrInst->m_nCurVid;
		//發送丟包率
		PACK_CMD pc;
		pc.flag=FLAG_CMD;
		pc.cmd=CMD_DROPRATE;
		pc.session=pMgrInst->m_session;
		pc.type=0;
		pc.data_size_extra=0;
		pc.ext=pMgrInst->m_nDropRate;
		pMgrInst->m_Socket.SendTo((char*)&pc,sizeof(PACK_CMD),(SOCKADDR*)&pMgrInst->m_dst);		
		//計算幀頻率
		pMgrInst->m_nFps=(pMgrInst->m_nFrameCount-pMgrInst->m_nLastFrameCount);
		
		
		pMgrInst->m_nLastFrameCount=pMgrInst->m_nFrameCount;
	}

}

/*------------------------------------------------------------------------------*/
UINT CAVIOMgr::GetFps()
{
	return m_nFps;
}

/*------------------------------------------------------------------------------*/
//發送文本信息
BOOL CAVIOMgr::SendTxt(char *ip, unsigned short port, char *txt)
{
	BOOL bRet=FALSE;
	
	PACK_CMD *ppc=(PACK_CMD*)new char[sizeof(PACK_CMD)+strlen(txt)+1];
	strcpy(((char*)ppc)+sizeof(PACK_CMD),txt);
	ppc->flag=FLAG_CMD;
	ppc->cmd=CMD_TXT;
	ppc->type=0;
	ppc->data_size_extra=strlen(txt)+1;
	//將ip和port轉化
	sockaddr_in addr;
	addr.sin_family=AF_INET;
	addr.sin_addr.s_addr=CUDPSocket::Name2Inet(ip);
	addr.sin_port=htons(port);
	//
	if(!SendCmd(ppc,sizeof(PACK_CMD)+ppc->data_size_extra,addr,TRUE))
		goto RET;
	
	bRet=TRUE;
		
RET:
	return bRet;
}

/*------------------------------------------------------------------------------*/
//得到前一次發來數據的地址
sockaddr_in& CAVIOMgr::GetCurrentAddr()
{
	return m_sockaddr;
}

/*------------------------------------------------------------------------------*/
//
BOOL CAVIOMgr::Enable(BOOL bEnable)
{
	BOOL t=m_bEnable;
	m_bEnable=bEnable;
	return t;
}

/*------------------------------------------------------------------------------*/
//是否自動調整圖象質量
BOOL CAVIOMgr::EnableBandAdjust(BOOL bEnable)
{
	BOOL t=m_bEnableBandAdjust;
	m_bEnableBandAdjust=bEnable;
	return t;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区精密机械公司| 一区二区三区日韩| 91国偷自产一区二区三区观看| 天天综合色天天综合| 国产精品毛片高清在线完整版| 欧美在线短视频| 东方欧美亚洲色图在线| 日韩vs国产vs欧美| 一区二区三区四区高清精品免费观看| 日韩欧美一级二级三级| 日本乱码高清不卡字幕| 成人禁用看黄a在线| 免费一级片91| 亚洲在线视频免费观看| 国产精品成人免费在线| 久久色.com| 日韩精品中文字幕一区| 欧美色倩网站大全免费| 一本久道久久综合中文字幕| 国产91精品欧美| 国产在线观看免费一区| 人禽交欧美网站| 午夜国产不卡在线观看视频| 怡红院av一区二区三区| 亚洲欧洲色图综合| 国产精品女主播av| 国产亚洲欧美日韩俺去了| 日韩欧美高清在线| 欧美一区二区播放| 91 com成人网| 欧美精品亚洲二区| 欧美精品v国产精品v日韩精品 | 91麻豆国产香蕉久久精品| 激情文学综合网| 日韩精品福利网| 日韩va亚洲va欧美va久久| 婷婷综合久久一区二区三区| 亚洲综合色婷婷| 亚洲最大色网站| 亚洲素人一区二区| 亚洲免费成人av| 亚洲午夜视频在线观看| 亚洲国产成人va在线观看天堂 | 国产乱人伦偷精品视频免下载 | 亚洲免费色视频| 日韩美女啊v在线免费观看| 中文字幕久久午夜不卡| 久久久青草青青国产亚洲免观| 欧美一区二区久久| 精品欧美久久久| 久久久国产综合精品女国产盗摄| 久久精品欧美日韩精品| 国产日韩成人精品| 国产精品青草综合久久久久99| 国产精品国产三级国产三级人妇| 中文在线一区二区| 亚洲男人的天堂在线观看| 亚洲精品国久久99热| 一区二区三区国产精华| 午夜精品视频一区| 激情成人综合网| 粉嫩一区二区三区在线看| 成人国产亚洲欧美成人综合网| 色呦呦一区二区三区| 欧美日韩国产小视频| 欧美tickling挠脚心丨vk| 国产欧美日韩不卡免费| 亚洲欧美日韩国产一区二区三区| 一级中文字幕一区二区| 日韩黄色一级片| 国产精品白丝av| 91视频.com| 欧美一三区三区四区免费在线看 | 五月婷婷综合在线| 久草这里只有精品视频| 波多野结衣一区二区三区| 99国产精品久久久久| 欧美乱妇23p| 国产精品视频第一区| 亚洲国产精品一区二区久久恐怖片| 日本成人超碰在线观看| 成人黄色片在线观看| 6080亚洲精品一区二区| 欧美国产视频在线| 亚洲成人在线网站| 国产成人精品影院| 在线观看91av| 国产精品九色蝌蚪自拍| 日本在线不卡视频一二三区| 成人动漫精品一区二区| 欧美精品久久久久久久多人混战| 国产婷婷一区二区| 婷婷六月综合亚洲| 成人污视频在线观看| 日韩欧美在线影院| 亚洲美女偷拍久久| 国产一区二区不卡老阿姨| 欧美午夜精品久久久久久孕妇| 国产视频一区在线播放| 天使萌一区二区三区免费观看| 成人午夜精品在线| 2024国产精品视频| 亚洲sss视频在线视频| 99精品久久99久久久久| 久久久久综合网| 日韩精品欧美成人高清一区二区| 高清在线观看日韩| 精品国产不卡一区二区三区| 亚洲成av人在线观看| 99re亚洲国产精品| 国产精品网站导航| 韩国欧美国产1区| 91精品国产色综合久久| 一区二区三区高清在线| 成人一区二区在线观看| 久久婷婷国产综合精品青草| 青青草一区二区三区| 欧美性高清videossexo| 亚洲男人的天堂在线观看| 成人免费毛片app| 国产女人aaa级久久久级| 国产伦精品一区二区三区在线观看| 欧美高清视频不卡网| 亚洲一区二区三区四区在线免费观看 | 久久精品国产精品青草| 7777精品伊人久久久大香线蕉超级流畅| 中文字幕一区二区三区不卡在线| 国产一区二区在线视频| 欧美xxxxx牲另类人与| 男男gaygay亚洲| 欧美一级二级在线观看| 水蜜桃久久夜色精品一区的特点| 在线看不卡av| 亚洲男同性恋视频| 色综合天天天天做夜夜夜夜做| 国产精品区一区二区三| 成人福利视频网站| 国产精品久久夜| www.色精品| 亚洲日穴在线视频| 色噜噜狠狠成人网p站| 亚洲精品水蜜桃| 欧美综合视频在线观看| 亚洲一二三区视频在线观看| 欧美亚洲综合一区| 日韩中文字幕av电影| 91精品国产麻豆| 韩国一区二区三区| 久久精品亚洲国产奇米99| 国产麻豆视频一区二区| 国产日本一区二区| av一区二区不卡| 一区二区三区在线视频观看| 欧美午夜免费电影| 日韩高清一区二区| 2022国产精品视频| 99久久久久免费精品国产| 亚洲免费观看高清| 911精品产国品一二三产区| 精品无人码麻豆乱码1区2区| 国产性做久久久久久| www.亚洲人| 亚洲成人av电影| 精品少妇一区二区三区在线视频 | 欧美精品乱码久久久久久按摩| 三级精品在线观看| 久久久五月婷婷| 色综合久久天天综合网| 亚洲777理论| 久久嫩草精品久久久久| 成年人午夜久久久| 亚洲成人午夜影院| 久久蜜桃一区二区| 色综合久久久久综合体| 另类小说色综合网站| 中文字幕精品综合| 69久久夜色精品国产69蝌蚪网| 国内精品嫩模私拍在线| 亚洲免费高清视频在线| 日韩欧美国产不卡| 91蜜桃免费观看视频| 日本不卡视频在线观看| 国产精品午夜免费| 欧美一区二区三区系列电影| 成人黄色a**站在线观看| 婷婷开心激情综合| 国产精品全国免费观看高清 | 成人小视频免费观看| 亚洲风情在线资源站| 国产日韩欧美一区二区三区乱码| 在线看国产一区二区| 国产激情91久久精品导航| 亚洲五码中文字幕| 国产亚洲精品精华液| 777午夜精品视频在线播放| 99视频热这里只有精品免费| 蜜臀av一级做a爰片久久| 亚洲欧美日韩人成在线播放| www国产精品av| 欧美一区二区在线播放|