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

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

?? testdrv.c

?? 這個程序是我們公司自己開發(fā)的modem卡的驅(qū)動程序
?? C
字號:
/*************************************************************************
*	File name		: testdrv.c
*	Subsystem	: modem卡驅(qū)動程序
*	Target env	: Linux
*	Author		: 謝紅偉
*	Last modified	: 2002/04/30
*	Description	: This file contains the functions for test modem driver
*	Copyright	: zjkj
*	Note			: 
**************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <asm/io.h>
#include <sys/perm.h>
#include <pthread.h>
#include <sys/wait.h>
#include <time.h>
#include <sys/timeb.h>
#include <newt.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "pubfunc.h"
#include "zjmdmfuc.h"
#include "testdrv.h"

/*********************** Goble Variable *****************************/
BOOL runing_sigfunc;	

/**********************************************
* 信號處理函數(shù)
**********************************************/
void HandleSignal(int sig_num)
{
	int i,j;
	char mdm_file[32];
	int fd_mdm;
	if(runing_sigfunc)
	{
		pthread_exit(NULL);
		return;
	}
	runing_sigfunc = TRUE;
	/*
	for (i=0; i<thread_count; i++)
	{
		pthread_cancel(thread_id[i]);
	}
	*/
	//close modem and chl
	Log(NULL,"Recv system signal %d. Exiting system...",sig_num);
	for (i=0; i<MDM_NUM; i++)
	{	
		if (mdmarg[i].mdm_no < 0) continue;
		for (j=0; j<CHL_NUM; j++)
		{
			if (mdmarg[i].chl_no[j]<0 || strlen(mdmarg[i].phone[j])<=0) continue;
			sprintf(mdm_file,"%s%d",ZJMDM_NAME,mdmarg[i].mdm_no);
			fd_mdm=open(mdm_file,O_RDWR|O_NONBLOCK);
			if (fd_mdm > 1)
			{
				ioctl(fd_mdm,IOCTL_CMD_DISCONN |(j<<4));
				usleep(100*1000);
				//關(guān)閉通道
				ioctl(fd_mdm,IOCTL_CMD_SHUTCH |(j<<4));
				//close modem file
				close(fd_mdm);
			}
		}
	}
	signal(sig_num, HandleSignal);
	raise(SIGKILL);
	//kill(-1,SIGKILL);
	//abort();
	//exit(0);
}

/******************************************************************
*打開modem文件
*******************************************************************/
int OpenMdm(U8 mdm_no)
{
	int fd;
	char mdmname[32];
	sprintf(mdmname,"%s%d",ZJMDM_NAME,mdm_no);
	fd = open(mdmname,O_RDWR|O_NONBLOCK);
//	fd = open(mdmname,O_RDWR);
	if(fd<0)
	{
		Log(NULL,"Fail : open file %s",mdmname);
		return -1;
	}
	return fd;
}

/******************************************************************
* DESC	: 產(chǎn)生測試數(shù)據(jù)塊
******************************************************************/
void GenerateTestDataBlock(char *out_buf,int bytes)
{
	int i,j,bytes_count = 0;
	for (j=0;bytes_count<bytes;j++)
	{
		for (i=0; i<0xff; i++)
		{
			out_buf[bytes_count++] = i;
			if (bytes_count>=bytes) break;
		}
	}
	return;
}

/**************************************
* 保存測試結(jié)果
**************************************/
 void SaveTestReult(t_testinfo *ptestinfo)
{
	char res_filename[16];
	char log_str[512];
	time_t spend_time;
	memset(res_str,0,sizeof(res_str));
	memset(res_filename,0,sizeof(res_filename));
	ptestinfo->end_time = time(NULL);
	spend_time = ptestinfo->end_time - ptestinfo->start_time;
	sprintf(res_filename,"res_%d_%d.txt",ptestinfo->mdm_no,ptestinfo->chl_no);
	sprintf(log_str,"\r\n\t****** Modem %d channel %d communicate result ******\r\n",ptestinfo->mdm_no,ptestinfo->chl_no);
	strcat(res_str,log_str);
	sprintf(log_str,"\tData block\t:\t%d\tblock\r\n",2*ptestinfo->block_no);
	strcat(res_str,log_str);
	sprintf(log_str,"\tBytes number\t:\t%d\tbytes\r\n",2*ptestinfo->block_no*BLOCK_SIZE);
	strcat(res_str,log_str);	
	sprintf(log_str,"\tWrong number\t:\t%d\tblock\r\n",ptestinfo->err_times);
	strcat(res_str,log_str);
	sprintf(log_str,"\tSpend time\t:\t%d\tseconds\r\n",spend_time);
	strcat(res_str,log_str);
	sprintf(log_str,"\tSuccess rate\t:\t%.2f\t%%\r\n",(1-(float)ptestinfo->err_times/(2*ptestinfo->block_no))*100);
	strcat(res_str,log_str);
	sprintf(log_str,"\tTransmit speed\t:\t%.2f\tbps\r\n",(float)2*ptestinfo->block_no*BLOCK_SIZE/spend_time);
	strcat(res_str,log_str);
	sprintf(log_str,"\t********************* END *********************\r\n");
	strcat(res_str,log_str);	
	WriteToFile(res_filename,res_str,strlen(res_str));
}

/***********************************************
* 發(fā)送數(shù)據(jù)包
**********************************************/
BOOL SendPacket(char *Write_buf,long size,t_TdkMdmChl *p_tdk)
{
	char wtc_buf[BLOCK_SIZE+LEADING_LEN+1];
#ifdef _DEBUG
	Log(p_tdk,"Sending %d bytes data",size);
#endif
	memset(wtc_buf,0xff,LEADING_LEN);
	memcpy(wtc_buf+LEADING_LEN,Write_buf,size);
	if(zj_write(p_tdk->fd,wtc_buf,size+LEADING_LEN,p_tdk->chl_no,
		MAX_SEND_TIMEOUT)!= size+LEADING_LEN)
	{
		Log(p_tdk,"Fail : send %d bytes data error!",size);
		return FALSE;
	}
	else
		return TRUE;
}

/*************************************************************
* 接收數(shù)據(jù)包函數(shù)
**************************************************************/
int RecvPacket(char *Read_buf,int size, int is_new_pkt,t_TdkMdmChl *p_tdk)
{
	int result,FindLeadingNum = 0;
	time_t wait_start,recv_start;
	unsigned char tmp_buf[1*KILO];
	int valid_bytes = 0;
	unsigned char findLeadingChar = FALSE;
	unsigned char isValidData = FALSE;
	int count,i = 0;
	time(&recv_start);
	time(&wait_start);
	memset(tmp_buf,0,sizeof(tmp_buf));
#ifdef _DEBUG
	Log(p_tdk,"Receiving %d bytes data...",size);
#endif
	while (valid_bytes < size)
	{
		count = zj_read(p_tdk->fd,tmp_buf,size - valid_bytes,p_tdk->chl_no);
		//Log(p_tdk,"Recv %d bytes. valid bytes = %d. size = %d bytes.",count,valid_bytes,size);
		if (count <= 0)
		{
			if (JudgeTimeOut(wait_start,MAX_WAIT_PACKET_TIME) == IS_TIMEOUT)
			{
				Log(p_tdk,"Fail : wait data time out!Recv leading char number %d",FindLeadingNum);
				return FALSE;
			}
			usleep(1000);
			continue;
		}
		i = 0;
		if (is_new_pkt == TRUE)
		{
			if (findLeadingChar == FALSE)
			{
				if (JudgeTimeOut(wait_start,MAX_WAIT_PACKET_TIME) == IS_TIMEOUT)
				{
					Log(p_tdk,"Fail : wait data time out!Recv leading char number %d",FindLeadingNum);
					return FALSE;
				}
				for (i = 0; i<count; i++)
				{
        				if (tmp_buf[i] == 0xff)
        				{
        					FindLeadingNum++;
        					if(FindLeadingNum>=LEADING_LEN/2)	//要保證至少收到一半的前導字符
        					{
        						findLeadingChar = TRUE;
        						break;
        					}
        				}
        				else
        				{
        					FindLeadingNum = 0;
        				}
        			}
        			if (i >= count) continue;
        		}        
        		if (isValidData == FALSE)
        		{
        			for (; i<count; i++)
        			{
        				if (tmp_buf[i] != 0xff)
        				{
        					isValidData = TRUE;
        					break;
        				}
        			}
        			if (i >= count) continue;
        		}
        	}
        	//執(zhí)行到此已經(jīng)能獲得有效數(shù)據(jù)
		memcpy(&Read_buf[valid_bytes], &tmp_buf[i], count - i);
		valid_bytes += (count - i);
		if (valid_bytes < size) msleep(1);
		else		break;
		if (JudgeTimeOut(recv_start,MAX_RECV_PACKET_TIME) == IS_TIMEOUT)
		{
			err_times++;
			Log(p_tdk,"Fail : received packet timeout!Recv leading char number %d",FindLeadingNum);
			if (err_times > MAX_ERROR_ALLOWED)
			{
				Log(p_tdk,"Fail : error times is more than max error times!");
				
			}
			return FALSE;
		}
	}
	#ifdef _DEBUG
	Log(p_tdk,"Received %d bytes valid data.",valid_bytes);
	#endif
	return valid_bytes;
}

/******************************************************
* 多次通信測試函數(shù)
******************************************************/
BOOL MultTest(t_TdkMdmChl *p_tdk, int in_test_times)
{
	char rdc_buf[BLOCK_SIZE];
	int count ,i,times;
	t_testinfo testinfo;
	memset(&testinfo,0,sizeof(testinfo));
	testinfo.mdm_no = p_tdk->mdm_no;
	testinfo.chl_no = p_tdk->chl_no;
	if (cs_type == SERVER)
	{
		for (times=0; times<in_test_times; times++)
		{
			Log(p_tdk,"*********Start %dth times test... *********",times+1);
			Log(p_tdk,"Listening...");
			for (i=0; i<READ_STATE_TIME; i++)
			{
				if (zj_GetCHState(p_tdk->fd,p_tdk->chl_no)!=CMD_CONN_SUCCESS)
					sleep(1);
				else break;
			}
			if (i>=READ_STATE_TIME)
			{
				zj_DisconnCH(p_tdk->fd,p_tdk->chl_no);
				Log(p_tdk,"Fail : read call state timeout!");
				continue;
			}
			Log(p_tdk,"Establish connect!");
			zj_CorrectSysTime(p_tdk->fd);
			testinfo.start_time = time(NULL);
			for (i=0; i<BLOCK_NUM; i++)
			{
				//pthread_mutex_lock(&mutex_r);
				testinfo.block_no = i+1;
				if ((count = RecvPacket(rdc_buf,BLOCK_SIZE,TRUE,p_tdk))==FALSE)
				{
					testinfo.err_times++;
					Log(p_tdk,"Sleep %d seconds",COMM_FAIL_WAIT_TIME);
					sleep(COMM_FAIL_WAIT_TIME);
					//pthread_mutex_unlock(&mutex_r);
					break;
				}
				//pthread_mutex_unlock(&mutex_r);
				if (CompBuf(p_tdk,rdc_buf,test_data_buf,count) == FALSE)
				{
					testinfo.err_times++;
					Log(p_tdk,"Fail : NO.%d block of %d bytes is wrong!!!",testinfo.block_no,BLOCK_SIZE);
				}
				else
				{
					Log(p_tdk,"NO.%d block of %d bytes is OK!",testinfo.block_no,BLOCK_SIZE);
				}
				if(zj_clean_read_buffer(p_tdk->fd,p_tdk->chl_no))
				{
					testinfo.err_times++;
					Log(p_tdk,"Sleep %d seconds",COMM_FAIL_WAIT_TIME);
					sleep(COMM_FAIL_WAIT_TIME);
					//pthread_mutex_unlock(&mutex_w);
					break;
				}
				//CleanReadBuf(p_tdk->fd,p_tdk->chl_no);
				//pthread_mutex_lock(&mutex_w);
				if ((count = SendPacket(test_data_buf, BLOCK_SIZE,p_tdk)) == FALSE)
				{
					testinfo.err_times++;
					Log(p_tdk,"Sleep %d seconds",COMM_FAIL_WAIT_TIME);
					sleep(COMM_FAIL_WAIT_TIME);
					//pthread_mutex_unlock(&mutex_w);
					break;
				}
				//pthread_mutex_unlock(&mutex_w);
				SaveTestReult(&testinfo);
			}
			Log(p_tdk, "Sleep %d seconds for wait client received all data",BLOCK_SIZE/80);
			sleep(BLOCK_SIZE/80);
			zj_ResetCH(p_tdk->fd,p_tdk->chl_no);
			sleep(1);
			zj_DisconnCH(p_tdk->fd,p_tdk->chl_no);
		}
	}
	else
	{
		for (times=0; times<in_test_times; times++)
		{
			Log(p_tdk,"*********Start %dth times test... *********",times+1);
			zj_CallOut(p_tdk->fd,p_tdk->chl_no,p_tdk->phone);
			for (i=0; i<READ_STATE_TIME; i++)
			{
				if (zj_GetCHState(p_tdk->fd,p_tdk->chl_no)!=CMD_CONN_SUCCESS)
					sleep(1);
				else break;
			}
			if (i>=READ_STATE_TIME)
			{
				zj_DisconnCH(p_tdk->fd,p_tdk->chl_no);
				Log(p_tdk,"Fail : read state timeout after call out!");
				Log(p_tdk,"Sleep %d seconds",COMM_FAIL_WAIT_TIME);
				sleep(COMM_FAIL_WAIT_TIME);
				continue;
			}
			Log(p_tdk,"Establish connect!");
			testinfo.start_time = time(NULL);
			for (i=0; i<BLOCK_NUM; i++)
			{
				testinfo.block_no = i+1;
				//pthread_mutex_lock(&mutex_w);
				if ((count = SendPacket(test_data_buf, BLOCK_SIZE,p_tdk)) == FALSE)
				{
					Log(p_tdk,"Sleep %d seconds",COMM_FAIL_WAIT_TIME);
					sleep(COMM_FAIL_WAIT_TIME);
					testinfo.err_times++;
					//pthread_mutex_lock(&mutex_w);
					break;
				}
				//pthread_mutex_unlock(&mutex_w);
				//pthread_mutex_lock(&mutex_r);
				sleep(1);
				if ((count = RecvPacket(rdc_buf,BLOCK_SIZE,TRUE,p_tdk))==FALSE)
				{
					Log(p_tdk,"Sleep %d seconds",COMM_FAIL_WAIT_TIME);
					sleep(COMM_FAIL_WAIT_TIME);
					testinfo.err_times++;
					//pthread_mutex_unlock(&mutex_r);
					break;
				}
				//pthread_mutex_unlock(&mutex_r);
				if (CompBuf(p_tdk,rdc_buf,test_data_buf,count) == FALSE)
				{
					testinfo.err_times++;
					Log(p_tdk,"Fail : NO.%d block of %d bytes is wrong!!!",testinfo.block_no,BLOCK_SIZE);
				}
				else
				{
					Log(p_tdk,"NO.%d block of %d bytes is OK!",testinfo.block_no,BLOCK_SIZE);
				}
				if(zj_clean_read_buffer(p_tdk->fd,p_tdk->chl_no))
				{
					testinfo.err_times++;
					Log(p_tdk,"Sleep %d seconds",COMM_FAIL_WAIT_TIME);
					sleep(COMM_FAIL_WAIT_TIME);
					//pthread_mutex_unlock(&mutex_w);
					break;
				}
				SaveTestReult(&testinfo);
			}
			zj_ResetCH(p_tdk->fd,p_tdk->chl_no);
			sleep(1);
			zj_DisconnCH(p_tdk->fd,p_tdk->chl_no);
			Log(p_tdk,"Test again after sleep %d seconds",COMM_OK_WAIT_TIME);
			sleep(COMM_OK_WAIT_TIME);
		}
	}
	Log(p_tdk,"%s",res_str);
	Log(p_tdk,"I should exit after sleep %d seconds...",COMM_OK_WAIT_TIME);
	sleep(COMM_OK_WAIT_TIME);
	return TRUE ;
}

/**********************************************
* 線程入口函數(shù)
**********************************************/
void *ThreadOptChl(void *ptr)
{
	t_TdkMdmChl *p_tdk;
	p_tdk=(t_TdkMdmChl*)ptr;
#ifdef _DEBUG
	Log(p_tdk,"Thread for channel %d-%d start.",p_tdk->mdm_no,p_tdk->chl_no);
#endif
	zj_OpenCH(p_tdk->fd,p_tdk->chl_no);
	if (MultTest(p_tdk,comm_times))
		Log(p_tdk,"Test successfully!");
	else
		Log(p_tdk,"Test fail!");
	zj_ShutCH(p_tdk->fd,p_tdk->chl_no);
	close(p_tdk->fd);
#ifdef _DEBUG
	Log(p_tdk,"Thread for channel %d-%d exit...",p_tdk->mdm_no,p_tdk->chl_no);
#endif
	return NULL;
}

/********** Main Function *****************/
int main()
{
	int i,j,count;
	int mdm_fd;
	int result,err;
	t_TdkMdmChl tdk[MDM_NUM][CHL_NUM];
	/* 初始化 */
	pthread_mutex_init(&mutex_r,NULL);
	pthread_mutex_init(&mutex_w,NULL);
	pthread_mutex_init(&mutex_c,NULL);
	system("rm *.log *.res core *.send *.recv -f");
	system("clear");
	thread_count = 0;
	count = 0;
	err_times = 0;
	runing_sigfunc = FALSE;
	specifytty(1);	//Set modem drive print console to 1
	/* 設(shè)置 */
	memset((char*)&mdmarg[0],-1,sizeof(t_MdmArg)*MDM_NUM);
	mdm_num = MultChlSetup(mdmarg,&comm_times,&cs_type);
	if(mdm_num <= 0) exit(0);
	/* 捕獲系統(tǒng)信號*/
	for (i=0; i<20; i++)
		signal(i, HandleSignal);
	/* ignore the hangup signal */
	signal(SIGHUP, SIG_IGN);
	signal(SIGCHLD, SIG_IGN);
	
	/*產(chǎn)生測試數(shù)據(jù)*/
	GenerateTestDataBlock(test_data_buf,BLOCK_SIZE);
	/* Create pthread of communicate */
	for (i=0; i<MDM_NUM; i++)
	{
		if(mdmarg[i].mdm_no<0) continue;
		mdm_fd = OpenMdm(i);
		if(mdm_fd<0) continue;
		for (j=0; j<CHL_NUM; j++)
		{
			if (mdmarg[i].chl_no[j]<0 || strlen(mdmarg[i].phone[j])<=0) continue;
			tdk[i][j].mdm_no = mdmarg[i].mdm_no;
			tdk[i][j].chl_no = mdmarg[i].chl_no[j];
			tdk[i][j].fd = mdm_fd;
			strcpy(tdk[i][j].phone,mdmarg[i].phone[j]);
			result = pthread_create(&thread_id[thread_count],NULL,ThreadOptChl,(void*)&tdk[i][j]);
			if(result!=0)
			{
				Log(&(tdk[i][j]),"Fail : create thread operated mdm.%d.chl.%d failed. ErrorNO : %d\r\n",
					tdk[i][j].mdm_no,tdk[i][j].chl_no,result);
			}
			else
				thread_count++;
		}
	}
	for (i=0; i<thread_count; i++)
	{
		pthread_join(thread_id[i],NULL);  //wait thread process exit
	}
	pthread_mutex_destroy(&mutex_r);
	pthread_mutex_destroy(&mutex_w);
	pthread_mutex_destroy(&mutex_c);
	exit(0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久9999吃药| 欧美中文字幕一二三区视频| 国产成人午夜视频| 日本成人中文字幕| 狠狠色狠狠色合久久伊人| 国产乱淫av一区二区三区| 成人午夜免费视频| 日本福利一区二区| 欧美一区二区不卡视频| 精品国产污污免费网站入口| 国产欧美一区二区三区鸳鸯浴| 中文字幕一区三区| 日韩精品一级中文字幕精品视频免费观看| 日本亚洲最大的色成网站www| 精品无人码麻豆乱码1区2区 | 亚洲va中文字幕| 免费亚洲电影在线| 粗大黑人巨茎大战欧美成人| 在线精品观看国产| 国产婷婷色一区二区三区| 性做久久久久久久免费看| 成人免费的视频| 日韩午夜在线影院| 亚洲一区二区三区爽爽爽爽爽| 国产精品原创巨作av| 欧美日韩国产不卡| 亚洲视频一二区| 国产精品一区二区黑丝| 欧美三级日韩三级| 国产精品国产成人国产三级 | 日韩一级片网站| 亚洲日本青草视频在线怡红院| 久久99精品一区二区三区三区| 色综合久久天天| 国产欧美日韩激情| 久久国产精品免费| 欧美日韩国产一级片| 中文字幕一区二区日韩精品绯色| 久久国产成人午夜av影院| 欧美日韩在线观看一区二区| 国产精品久久精品日日| 国产伦理精品不卡| 欧美一级理论性理论a| 亚洲国产精品一区二区久久恐怖片| 国产成人在线电影| 精品国产伦一区二区三区观看方式| 亚洲在线视频一区| 99久久免费视频.com| 国产欧美一区二区精品仙草咪| 蜜臀精品久久久久久蜜臀 | 亚洲电影在线播放| av激情综合网| 欧美国产精品劲爆| 国产精品1区二区.| 久久久久久久久99精品| 另类调教123区| 日韩欧美自拍偷拍| 奇米精品一区二区三区四区| 欧美嫩在线观看| 亚洲第一久久影院| 欧美日韩中字一区| 亚洲福利电影网| 欧美日韩在线播放一区| 亚洲国产精品久久艾草纯爱| 91国产免费观看| 亚洲嫩草精品久久| 日本道色综合久久| 亚洲乱码精品一二三四区日韩在线 | 色综合久久综合网97色综合 | 色呦呦国产精品| 一区二区三区资源| 欧美体内she精视频| 亚洲综合免费观看高清在线观看| 在线免费观看视频一区| 一区二区三区中文字幕| 欧洲一区二区三区免费视频| 一区二区三区欧美日| 欧美日韩在线播放三区| 视频一区二区国产| 日韩欧美国产一区二区三区 | 国产欧美一区视频| 成人深夜在线观看| 国产精品成人网| 色婷婷国产精品综合在线观看| 一区二区三区免费看视频| 欧美日韩国产电影| 久久aⅴ国产欧美74aaa| 久久久亚洲精品一区二区三区| 国产99久久久国产精品潘金网站| 国产精品伦理一区二区| 色www精品视频在线观看| 亚洲一区二区三区爽爽爽爽爽 | 久草在线在线精品观看| 国产亚洲综合在线| 99re8在线精品视频免费播放| 亚洲中国最大av网站| 欧美日韩成人高清| 精品系列免费在线观看| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美私模裸体表演在线观看| 日韩成人一级片| 精品国产免费久久| av毛片久久久久**hd| 天涯成人国产亚洲精品一区av| 精品久久久影院| 99久久久免费精品国产一区二区| 午夜久久久久久电影| 精品国产一二三| 色综合婷婷久久| 麻豆91精品视频| 国产精品国产精品国产专区不片 | 日本aⅴ亚洲精品中文乱码| 精品国产伦一区二区三区观看体验| 成人av在线网| 天天影视色香欲综合网老头| 国产日本一区二区| 精品视频色一区| 国产精品自拍在线| 午夜精彩视频在线观看不卡| 久久久亚洲精品石原莉奈| 色综合久久99| 久草中文综合在线| 一区二区三区不卡在线观看 | 激情另类小说区图片区视频区| 亚洲图片激情小说| 欧美大度的电影原声| 99久久99久久精品免费看蜜桃| 免费在线看一区| 中文字幕亚洲在| 精品对白一区国产伦| 一本色道亚洲精品aⅴ| 韩国视频一区二区| 亚洲成国产人片在线观看| 国产亚洲欧美激情| 欧美一区二区网站| 色哟哟国产精品免费观看| 精彩视频一区二区三区| 亚洲图片欧美视频| 亚洲欧洲日韩综合一区二区| 日韩精品一区二区三区视频 | 亚洲3atv精品一区二区三区| 国产亚洲福利社区一区| 欧美精品第一页| 色噜噜狠狠色综合中国| 国产91丝袜在线播放九色| 秋霞影院一区二区| 亚洲电影激情视频网站| 亚洲人快播电影网| 中文字幕不卡的av| 久久久久国产精品人| 制服丝袜一区二区三区| 色88888久久久久久影院野外| 粉嫩高潮美女一区二区三区| 蜜桃精品视频在线| 日韩黄色片在线观看| 曰韩精品一区二区| 亚洲欧美另类图片小说| 中文字幕免费观看一区| 26uuu亚洲综合色| 日韩免费高清av| 欧美一区二区免费视频| 欧美年轻男男videosbes| 欧美性色黄大片| 色猫猫国产区一区二在线视频| 不卡一区二区中文字幕| 国产成人高清在线| 国产成人亚洲精品青草天美| 国产一区免费电影| 精品一区二区三区久久| 美女网站视频久久| 美女一区二区三区在线观看| 热久久久久久久| 蜜臀久久99精品久久久久久9| 日韩 欧美一区二区三区| 午夜久久电影网| 日韩制服丝袜av| 免费视频一区二区| 麻豆成人在线观看| 激情五月播播久久久精品| 久久国产日韩欧美精品| 激情综合色综合久久| 精品亚洲欧美一区| 国产精品夜夜爽| 国产91精品一区二区麻豆网站| 国产成人午夜99999| 懂色av中文字幕一区二区三区| 成人av集中营| 91国产福利在线| 在线观看91精品国产麻豆| 在线成人免费观看| 日韩欧美成人激情| 国产日韩欧美精品一区| 国产精品日韩成人| 亚洲精品国产成人久久av盗摄| 亚洲国产精品精华液2区45| 日韩码欧中文字| 一区二区三区中文字幕精品精品| 亚洲h在线观看| 久久99久久99小草精品免视看| 国产不卡在线视频|