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

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

?? update.c

?? 基于h323協議的軟phone
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "vxWorks.h"
#include "string.h" 
#include "stdio.h"
#include "sockLib.h" 
#include "inetLib.h"
#include "config.h"
#include "pgi_ifLib.h" 
#include "bepcommon.h"
#include "update.h"

#include "h/drv/mem/T830xFlash.h"  /**add by chen for update boot **/

#ifdef __cplusplus
extern "C" {
#endif

/*******************************************************
* 定義在DHCP.C
*******************************************************/
extern int readable_timeo(int, int);
/*******************************************************
* 寫Flash的函數 定義在drv/mem/FLASHUPD.C
*******************************************************/
extern UCHAR   gFlashType ;
extern STATUS Program_Boot_Flash_Mem ( unsigned short *pVersion, unsigned long Length );
extern STATUS Program_Version_Flash_Mem ( unsigned short *pVersion, unsigned short *pAddr, unsigned long Length );

/*******************************************************
* Part FTP_UPDATE
*******************************************************/
static int FtpUpdate();
static int FtpCommand(int sockfd, char * cmd, const char * param);
static int FtpRecvReply(int);
static int FtpRecvReply2(int);
static int FtpInitDataConn(unsigned int server_ip, unsigned short * ptr_port);
static int FtpLoginServer(int ctrl_fd, const char * user, const char * pass);
static int FtpOpenCtrlConn(unsigned int server_ip);
static int FtpPrepareTransfer(int ctrl_fd, unsigned short port);
static int FtpGetUpdate(int ctrl_fd, int data_fd, const char * filename);
static int FtpQuitServer(int ctrl_fd);

static unsigned char ftp_request[FTP_REQ_LENGTH];
static unsigned char ftp_reply[3];
static unsigned char ftp_fileblock[FTP_BLOCK_SIZE];

static char * ftp_user_cmd = "USER";
static char * ftp_pass_cmd = "PASS";
static char * ftp_type_cmd = "TYPE";
static char * ftp_port_cmd = "PORT";
static char * ftp_retr_cmd = "RETR";
static char * ftp_quit_cmd = "QUIT";

/*******************************************************
* Part TFTP_UPDATE
*******************************************************/
static int TftpUpdate();
static int TftpSendRRQ(int sockfd, char * filename);
static int TftpSendAck(int sockfd, unsigned short index);
static int TftpGetResponse(int sockfd, int * p_len);
static int TftpGetUpdate(int sockfd);

static char * tftp_filemode = "octet";
static struct sockaddr_in tftp_server_addr;
static unsigned short tftp_tid;
static unsigned short tftp_index;
static s_lastdata tftp_lastdata;
static s_tftp_data tftp_fileblock;

/*******************************************************
* Part UPDATE_COMMON
*******************************************************/
static s_updateblock * ConstructBlockNode(void);
void ClearUpdateBlock(s_updateblock * ptr_updatefile);
int UpdateFlashRom(s_updateblock * ptr_updatefile, int count, int fileT);

#ifdef __UPDATE_DEBUG__
static void CheckUpdateBlock(s_updateblock * ptr);
#endif

static int yes = 1;
static int addr_len = sizeof(struct sockaddr_in);

/*******************************************************
* 升級函數
*******************************************************/
int Update()
{
	if (phoneconfig.conf_ftp.mode == MODE_FTP)
	{
		return FtpUpdate();
	}
	else
	{
		return TftpUpdate();
	}
}

/*******************************************************
* Part FTP_UPDATE
*******************************************************/
static int FtpUpdate()
{
	int ctrl_fd, data_fd;
	unsigned short data_port;
	int result;

	#ifdef __UPDATE_DEBUG__
	printf("Begin FTP Update...\n");
	#endif
	
	if ((ctrl_fd = FtpOpenCtrlConn(phoneconfig.conf_ftp.server)) < 0)
	{
		fprintf(stderr, "can not connect to server\n");
		return UPDATE_CONN_ERROR;
	}
	if ((result = FtpLoginServer(ctrl_fd, 
		(strlen(phoneconfig.conf_ftp.usrid)==0?"anonymous":phoneconfig.conf_ftp.usrid), 
		phoneconfig.conf_ftp.pin)) 
		< 0)
	{
		close(ctrl_fd);
		fprintf(stderr, "login error\n");
		return result;
	}	
	if ((data_fd = FtpInitDataConn(phoneconfig.conf_ftp.server, &data_port)) < 0)
	{
		close(ctrl_fd);
		fprintf(stderr, "error open data connection\n");
		return data_fd;
	}
	if ((result = FtpPrepareTransfer(ctrl_fd, data_port)) < 0)
	{
		close(data_fd);
		close(ctrl_fd);
		fprintf(stderr, "error prepare for transfer\n");
		return result;
	}
	if ((result = FtpGetUpdate(ctrl_fd, data_fd, phoneconfig.conf_ftp.filename)) < 0)
	{
		close(data_fd);
		close(ctrl_fd);
		fprintf(stderr, "error get ftp update file\n");
		return result;
	}
	/*close(data_fd);
	FtpQuitServer(ctrl_fd);
	close(ctrl_fd);*/
	
	#ifdef __UPDATE_DEBUG__
	printf("FTP Update OK.\n");
	#endif
	
	return UPDATE_OK;
}

/**
* 打開控制連接
*/
static int FtpOpenCtrlConn(unsigned int server_ip)
{
	struct sockaddr_in server_addr;
	int ctrl_fd;
	struct timeval timeVal = {20, 0};
	
	#if 1
	printf("Begin FtpOpenCtrlConn\n");
	#endif
	if ((ctrl_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
	{
		perror("create control socket");
		return UPDATE_CONN_ERROR;
	}
	if (setsockopt(ctrl_fd, SOL_SOCKET, SO_REUSEADDR, (char *) &yes, sizeof(yes)) < 0)
	{
		close(ctrl_fd);
		perror("setsockopt ctrl socket");
		return UPDATE_CONN_ERROR;
	}
	memset(&server_addr, '\0', addr_len);
	server_addr.sin_family = AF_INET;
	server_addr.sin_len = addr_len;
	server_addr.sin_port = htons(FTP_CTRL_PORT);
	server_addr.sin_addr.s_addr = htonl(server_ip);

	printf("try connect\n");
	if (connectWithTimeout(ctrl_fd, (struct sockaddr *) &server_addr, addr_len, &timeVal) < 0)
	{
		close(ctrl_fd);
		perror("connect to ctrl");
		return UPDATE_CONN_ERROR;
	}
	/**
	* Reply should be "220"
	*/
	if (FtpRecvReply2(ctrl_fd) < 0 || ftp_reply[0] != '2')
	{
		close(ctrl_fd);
		fprintf(stderr, "error while open control connection\n");
		return UPDATE_CONN_ERROR;
	}
	else
	{
		#ifdef __UPDATE_DEBUG__
		printf("connected to server %u.%u.%u.%u\n", 
				(unsigned char) (server_ip >> 24),
				(unsigned char) (server_ip >> 16),
				(unsigned char) (server_ip >> 8),
				(unsigned char) (server_ip >> 0)
				);
		#endif
	}
	return ctrl_fd;
}

/**
* 登錄FTP服務器
*/
static int FtpLoginServer(int ctrl_fd, const char * user, const char * pass)
{
	#if 1
	printf("FtpLoginServer\n");
	#endif
	/**
	* Command USER
	*/
	if (FtpCommand(ctrl_fd, ftp_user_cmd, user) < 0)
	{
		fprintf(stderr, "USER command error\n");
		return UPDATE_CONN_ERROR;
	}
	/**
	* USER reply should be "331"
	*/
	if (FtpRecvReply(ctrl_fd) < 0 || ftp_reply[0] != '3')
	{
		if (ftp_reply[0] == '2')
		{
			#ifdef __UPDATE_DEBUG__
			printf("%.3s: user %s logging, needn't pass\n", ftp_reply, user);
			#endif
			return UPDATE_OK;
		}
		fprintf(stderr, "error recv USER\n");
		return UPDATE_CONN_ERROR;
	}
	else
	{
		#ifdef __UPDATE_DEBUG__
		printf("%.3s: user %s logging\n", ftp_reply, user);
		#endif
	}
	/**
	* Command PASS
	*/
	if (FtpCommand(ctrl_fd, ftp_pass_cmd, pass) < 0)
	{
		fprintf(stderr, "PASS command error\n");
		return UPDATE_CONN_ERROR;
	}
	/**
	* PASS reply should be "230"
	*/
	for (;;)
	{
		if (FtpRecvReply(ctrl_fd) < 0)
		{
			fprintf(stderr, "error recv PASS\n");
			return UPDATE_CONN_ERROR;
		}
		else if (ftp_reply[0] == '2')
		{
			#ifdef __UPDATE_DEBUG__
			printf("%.3s: user %s logged in\n", ftp_reply, user);
			#endif
			return UPDATE_OK;
		}
		else if (ftp_reply[0] == '3')
		{
			printf("%.3s: user %s\n", ftp_reply, user);
			continue;
		}
		else
		{
			fprintf(stderr, "PASS or USER error\n");
			return UPDATE_PASSWD_ERROR;
		}
	}
}

/**
* 打開數據連接
*/
static int FtpInitDataConn(unsigned int server_ip, unsigned short * ptr_port)
{
	struct sockaddr_in client_addr;
	int data_fd;
	int len = addr_len;
	
	int listen_fd;
	
	#if 1
	printf("FtpInitDataConn\n");
	#endif
	if ((data_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
	{
		perror("create data socket");
		return UPDATE_CONN_ERROR;
	}	
	if (setsockopt(data_fd, SOL_SOCKET, SO_REUSEADDR, (char *) &yes, sizeof(yes)) < 0)
	{
		close(data_fd);
		perror("setsockopt data socket");
		return UPDATE_CONN_ERROR;
	}
	
	memset(&client_addr, '\0', addr_len);
	client_addr.sin_family = AF_INET;
	client_addr.sin_len = addr_len;
	client_addr.sin_port = 0;
	client_addr.sin_addr.s_addr = htonl(INADDR_ANY);
	
	if (bind(data_fd, (struct sockaddr *) &client_addr, addr_len) < 0)
	{
	    perror("bind data socket");
		close(data_fd);
		return UPDATE_CONN_ERROR;
	}
	if ((listen_fd=listen(data_fd, 1)) < 0)
	{
		perror("listen on data socket");
		close(data_fd);
		return UPDATE_CONN_ERROR;
	}
	
	if (getsockname(data_fd, (struct sockaddr *) &client_addr, &len) < 0)
	{
		perror("getsockname");
		close(data_fd);
		return UPDATE_CONN_ERROR;
	}
	*ptr_port = ntohs(client_addr.sin_port);
	#ifdef __UPDATE_DEBUG__
	printf("client port %u\n", *ptr_port);
	#endif
	return data_fd;
}

static int FtpPrepareTransfer(int ctrl_fd, unsigned short port)
{
	unsigned char port_data[FTP_REQ_LENGTH];
	unsigned int i_ip;
	/**
	* Command TYPE
	*/
	if (FtpCommand(ctrl_fd, ftp_type_cmd, "I") < 0)
	{
		fprintf(stderr, "TYPE I command error\n");
		return UPDATE_CONN_ERROR;
	}
	/**
	* PASS reply should be "200"
	*/
	if (FtpRecvReply(ctrl_fd) < 0 || ftp_reply[0] != '2')
	{
		fprintf(stderr, "error recv TYPE I\n");
		return UPDATE_CONN_ERROR;
	}
	else
	{
		#ifdef __UPDATE_DEBUG__
		printf("%.3s: TYPE set to binary\n", ftp_reply);
		#endif
	}
	/**
	* Command PORT
	*/
	memset(port_data, 0, FTP_REQ_LENGTH);
	if (ifAddrGet(LOCAL_IF0, port_data) != IF_OK)
	{
		fprintf(stderr, "error get ip\n");
		return UPDATE_CONN_ERROR;
	}
	i_ip = ntohl(inet_addr(port_data));
	memset(port_data, 0, FTP_REQ_LENGTH);
	/**
	* 獲得自己的IP
	*/
	sprintf(port_data, "%u,%u,%u,%u,%u,%u", 
		(unsigned char) (i_ip >> 24), 
		(unsigned char) (i_ip >> 16),
		(unsigned char) (i_ip >> 8),
		(unsigned char) (i_ip),
		(unsigned char) (port >> 8),
		(unsigned char) port
		);
	if (FtpCommand(ctrl_fd, ftp_port_cmd, port_data) < 0)
	{
		fprintf(stderr, "PORT command error\n");
		return UPDATE_CONN_ERROR;
	}
	/**
	* PORT reply should be "200"
	*/
	if (FtpRecvReply(ctrl_fd) < 0 || ftp_reply[0] != '2')
	{
		fprintf(stderr, "error recv PORT\n");
		return UPDATE_CONN_ERROR;
	}
	else
	{
		#ifdef __UPDATE_DEBUG__
		printf("%.3s: PORT set to %u.%u.%u.%u.%u.%u\n", ftp_reply,
		(unsigned char) (i_ip >> 24), 
		(unsigned char) (i_ip >> 16),
		(unsigned char) (i_ip >> 8),
		(unsigned char) (i_ip),
		(unsigned char) (port >> 8),
		(unsigned char) port
		);
		#endif
	}
	return UPDATE_OK;
}
extern int iftelnet;
static int FtpGetUpdate(int ctrl_fd, int data_fd, const char * filename)
{
	int transfer_fd;
	int ret;
	fd_set fdset;
	int maxfd;
	int len = sizeof(struct sockaddr);
	struct sockaddr_in addr;
	s_updateblock update_block; 
	s_updateblock * ptr_block;
	int count, result;
	int fileType;
	struct timeval tv;
	unsigned int spareCount;/**add by chen**/
	/**
	* Command RETR
	*/
	if (FtpCommand(ctrl_fd, ftp_retr_cmd, filename) < 0)
	{
		fprintf(stderr, "RETR command error\n");
		return UPDATE_CONN_ERROR;
	}
	/**
	* RETR reply should be "150"
	*/
	if (FtpRecvReply(ctrl_fd) < 0)
	{
		fprintf(stderr, "error recv RETR\n");
		return UPDATE_CONN_ERROR;
	}
	else if (ftp_reply[0] != '1')
	{
	
		if((ftp_reply[0]=='4') && (ftp_reply[1] == '2') && (ftp_reply[2] == '5'))
		{
			fprintf(stderr, "server busy now\n");
			return UPDATE_BUSY;
		}
		else
		{
			fprintf(stderr, "RETR file error\n");
			return UPDATE_FILE_NOTEXIST;
		}
	}
	else
	{
		#ifdef __UPDATE_DEBUG__
		printf("%.3s: RETR success\n", ftp_reply);
		#endif
	}
	/**
	* accept server connect
	*/
	FD_ZERO(&fdset);
	tv.tv_sec = 10*60;
	tv.tv_usec = 0;
	FD_SET(data_fd,&fdset);
	ret=select(data_fd+1,&fdset,NULL,NULL,&tv);
	
	if(ret<=0)
	{
		perror("select error");
		return UPDATE_CONN_ERROR;
	}
	
	if ((transfer_fd = accept(data_fd, (struct sockaddr *) &addr, &len)) < 0)
	{
		perror("accept server");
		return UPDATE_CONN_ERROR;
	}
	#ifdef __UPDATE_DEBUG__
	printf("server port %u\n", ntohs(addr.sin_port));
	#endif
	
	count = 0;
	update_block.next = NULL;
	ptr_block = & update_block;
	fileType = 0;
	spareCount = 0;
	/**
	* get data
	*/
	while ((len = recv(transfer_fd, ftp_fileblock, FTP_BLOCK_SIZE, 0)) > 0) 
	{
		/*printf("###spareCount = %u###\n",spareCount);
		printf("###len = %d###\n",len);
		printf("###count = %d###\n",count);*/
		/*判斷文件頭是否有效*/
		if ( count == 0 )
		{
			if (len > 4)
			{
				if ( memcmp(ftp_fileblock, phoneconfig.bootFileHead, 4) == 0 )
					fileType = 1;
				if ( memcmp(ftp_fileblock, phoneconfig.appFileHead, 4) == 0 )
					fileType = 2;
			}
			if (fileType != 1 && fileType != 2)
			{
				printf("file type error!\n\n");
				return UPDATE_INVALID_FILE;
			}
		}
		if(iftelnet)
			taskDelay(1);
		if ((count + len) > COMPRESSED_IMAGE_SIZE /*||
			(ptr_block -> next = ConstructBlockNode()) == NULL*/)
		{
			fprintf(stderr, "file too long, can't malloc\n");
			/* 釋放內存 */
			ClearUpdateBlock(update_block.next);
			return UPDATE_NO_SPACE;;
		}
		if(spareCount == 0)
		{
			if((ptr_block -> next = ConstructBlockNode()) == NULL)
			{
				fprintf(stderr, "file too long, can't malloc\n");
				/* 釋放內存 */
				ClearUpdateBlock(update_block.next);
				return UPDATE_NO_SPACE;;
		      }
			ptr_block = ptr_block -> next;
			memcpy(ptr_block -> fileblock, ftp_fileblock, len);
			ptr_block -> length = len;
			count += len;
			spareCount = 1024 - len;
			
		}
		else 
		{
			if(len > spareCount)
			{
				memcpy((ptr_block -> fileblock)+ptr_block ->length, ftp_fileblock, spareCount);
				ptr_block -> length = 1024;
				count += spareCount;
				len -= spareCount;
				if((ptr_block -> next = ConstructBlockNode()) == NULL)
				{
					fprintf(stderr, "file too long, can't malloc\n");
					/* 釋放內存 */
					ClearUpdateBlock(update_block.next);
					return UPDATE_NO_SPACE;
		     		 }
				ptr_block = ptr_block -> next;
				memcpy(ptr_block -> fileblock, ftp_fileblock + spareCount, len);
				ptr_block -> length = len;
				count += len;
				spareCount = 1024 -len;
			}
			else
			{
				memcpy((ptr_block -> fileblock)+ptr_block ->length, ftp_fileblock, len);
				ptr_block -> length += len;
				count += len;
				spareCount -= len;
			}
		}
	}
	
	if (count == 0)
	{
		printf("file size is 0!!!\n\n");
		return UPDATE_INVALID_FILE;
	}
	/**

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久精品日日躁夜夜躁欧美| 91精品1区2区| 99免费精品在线观看| 国产一区二区精品久久91| 久久精品国产精品亚洲综合| 美女性感视频久久| 国产精品一级在线| 成人a区在线观看| 色嗨嗨av一区二区三区| 久久综合久久综合九色| 中文字幕免费观看一区| 国产精品视频免费看| 亚洲精品成a人| 日本大胆欧美人术艺术动态| 激情另类小说区图片区视频区| 国产成人在线影院| 91久久香蕉国产日韩欧美9色| 久久综合国产精品| 视频一区二区中文字幕| 国产麻豆精品在线观看| 欧美酷刑日本凌虐凌虐| 国产亚洲欧洲997久久综合| 亚洲欧洲制服丝袜| 久久国产欧美日韩精品| 欧美日本一区二区三区四区 | 色猫猫国产区一区二在线视频| 欧美xxx久久| 国产精品第五页| 日韩中文字幕91| 色哦色哦哦色天天综合| 欧美性xxxxxxxx| 日本在线不卡一区| 亚洲小少妇裸体bbw| 日韩欧美国产综合一区 | 国产东北露脸精品视频| 日韩一区二区在线观看| 国产精品成人免费在线| 国产98色在线|日韩| 欧美在线观看一二区| 欧美r级在线观看| 麻豆一区二区在线| 精品国产一区二区国模嫣然| 亚洲女女做受ⅹxx高潮| 色婷婷综合久色| 亚洲第一综合色| 99天天综合性| 亚洲一区二区视频| 欧美亚洲一区二区在线观看| 亚洲人妖av一区二区| 精品一区二区三区欧美| 欧美日韩久久久| 日韩av电影一区| 欧美精品一区二区三区很污很色的| 久久69国产一区二区蜜臀 | 欧美日韩久久久一区| 天堂成人国产精品一区| 欧美va日韩va| 成人av资源站| 亚洲一区二区三区四区的| 欧美一激情一区二区三区| 韩国精品一区二区| 亚洲男女一区二区三区| 欧美午夜精品电影| 久久精品国产色蜜蜜麻豆| 国产精品美女久久久久久久| 欧美性生交片4| 国内不卡的二区三区中文字幕 | 在线播放中文一区| 国产一区二区三区高清播放| 中文乱码免费一区二区| 欧美天堂亚洲电影院在线播放| 日本欧美久久久久免费播放网| 国产三级精品在线| 国产精品亚洲一区二区三区妖精| 1024成人网色www| 色综合亚洲欧洲| 亚洲欧美激情在线| 精品欧美久久久| 欧美少妇性性性| 成人黄色av网站在线| 日韩综合在线视频| 亚洲日本在线视频观看| 日韩视频在线你懂得| 白白色亚洲国产精品| 男人操女人的视频在线观看欧美| 日韩一区二区中文字幕| 91网站在线观看视频| 亚洲天堂久久久久久久| 精品久久久久一区| 欧美日韩精品系列| 99精品欧美一区二区蜜桃免费| 亚洲欧美区自拍先锋| 久久尤物电影视频在线观看| 欧美久久一二区| 色综合中文字幕| av午夜精品一区二区三区| 久久国产精品露脸对白| 日韩精品亚洲一区| 亚洲自拍偷拍av| 一区二区三区丝袜| 日韩欧美一区二区视频| 色成人在线视频| 91一区一区三区| 成人丝袜视频网| 婷婷综合在线观看| 欧美激情在线一区二区| 久久综合色之久久综合| 日韩欧美专区在线| 91精品国产福利| 成人动漫中文字幕| 国产精品99久久久久久似苏梦涵| 麻豆精品国产传媒mv男同| 午夜电影久久久| 午夜伦欧美伦电影理论片| 亚洲线精品一区二区三区八戒| 亚洲三级电影网站| 亚洲一区精品在线| 亚洲国产精品自拍| 亚洲va欧美va人人爽| 亚洲成人动漫精品| 日本亚洲免费观看| 男男视频亚洲欧美| 极品美女销魂一区二区三区| 久久99精品久久久久久| 激情五月播播久久久精品| 蜜臀av一区二区| 国产麻豆午夜三级精品| 大尺度一区二区| 色综合色综合色综合| 欧美午夜在线观看| 欧美一级日韩免费不卡| 精品国产自在久精品国产| 国产丝袜美腿一区二区三区| 国产精品青草久久| 亚洲一区在线观看网站| 日韩国产一二三区| 国产在线精品国自产拍免费| 大白屁股一区二区视频| 日本韩国一区二区三区视频| 欧美美女直播网站| 26uuu精品一区二区在线观看| 欧美高清一级片在线观看| 亚洲精品免费播放| 美女mm1313爽爽久久久蜜臀| 国产乱码精品一区二区三区五月婷 | 九色|91porny| 成人免费看黄yyy456| 欧美亚洲高清一区| 久久综合国产精品| 136国产福利精品导航| 日韩精品亚洲一区二区三区免费| 国产米奇在线777精品观看| gogogo免费视频观看亚洲一| 欧美日韩精品久久久| 久久久精品免费网站| 久久影音资源网| 一区二区久久久久久| 精品一区二区三区视频在线观看 | 国产精品毛片无遮挡高清| 一区二区三区.www| 黄网站免费久久| 色屁屁一区二区| 久久久一区二区三区捆绑**| 一区二区三区高清| 国产成人免费视| 51精品视频一区二区三区| 欧美日本视频在线| 国产精品免费丝袜| 欧美a一区二区| 欧美视频一区二区三区| 国产夜色精品一区二区av| 日韩高清在线电影| 91蜜桃免费观看视频| 久久伊人蜜桃av一区二区| 亚洲成人av一区| 91美女视频网站| 国产午夜精品久久| 久草这里只有精品视频| 欧美人狂配大交3d怪物一区| 18欧美乱大交hd1984| 国产成人一级电影| 欧美va亚洲va在线观看蝴蝶网| 亚洲国产欧美在线| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美精品精品一区| 夜夜夜精品看看| www.99精品| 国产偷国产偷亚洲高清人白洁| 人人狠狠综合久久亚洲| 欧美日韩综合在线免费观看| 日韩亚洲国产中文字幕欧美| 亚洲精品日韩综合观看成人91| 成人免费观看av| 国产精品网站一区| 国产成人精品免费| 欧美激情一区二区三区在线| 国产精品综合二区| 国产欧美日韩不卡免费| 国产乱人伦偷精品视频免下载| 精品少妇一区二区三区视频免付费|