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

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

?? c_shm.cpp

?? 一個基于HP機器的共享內存的實現, 很使用,大型系統,資料管理非常有用,只要將資料用sql語句配置好,裝載共享內存即可,是一個已經在用的大型系統的共享內存程序,非常有價值.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/***********************************************************************
 * Module:  c_shm.cpp
 * Author:  Administrator
 * Modified: 2005年9月15日 9:18:09
 * Purpose: Implementation of the class c_shm
 * Comment: 共享內存基本類. 一個共享內存由多個內存塊組成。獲得共享內存時, 就可以獲得多個共享內存塊對象。 通過, 這么多個塊對象對塊中的數據進行操作。
 ***********************************************************************/

#include "c_shm_mem.h"
#include "c_shm.h"

////////////////////////////////////////////////////////////////////////
// Name:	c_shm::c_shm()
// Purpose:	構造函數
// Return:     
// Comment:	初始化c_info_info對象
////////////////////////////////////////////////////////////////////////
c_shm::c_shm()
{
	para.loadPara();
	p_share_info = new c_share_info();
	share_area_id = 0;
	//取得共享內存內需要加載的所有內存塊信息,放入到vector中。
	loadShmInfo();
	v_share_area_name.clear();
}

////////////////////////////////////////////////////////////////////////
// Name:	c_shm::c_shm(int t_share_area_id)
// Purpose:	構造函數
// Parameters:
//	- t_share_area_id: 共享內存區ID
// Return:     
// Comment:	初始化c_info_info對象
////////////////////////////////////////////////////////////////////////
c_shm::c_shm( int t_share_area_id )
{
	para.loadPara();
	p_share_info = new c_share_info();
	share_area_id = t_share_area_id;
	//取得共享內存內需要加載的所有內存塊信息,放入到vector中。
	loadShmInfo();
	v_share_area_name.clear();
}

////////////////////////////////////////////////////////////////////////
// Name:	c_shm::c_shm(const char* t_share_area_name)
// Purpose:	構造函數
// Parameters:
//	- t_share_area_name: 共享內存區名字
// Return:     
// Comment:	初始化c_info_info對象
////////////////////////////////////////////////////////////////////////
c_shm::c_shm( const char* t_share_area_name )
{
	para.loadPara();
	p_share_info = new c_share_info();
	if ( strcmp(t_share_area_name,"")== 0 )
		share_area_id = 0;
	else
	{
		share_area_id = p_share_info->getShareID(t_share_area_name);
		if( share_area_id == -1 )
			exit(1);
	}
	//取得共享內存內需要加載的所有內存塊信息,放入到vector中。
	loadShmInfo();
	
}

////////////////////////////////////////////////////////////////////////
// Name:	c_shm::~c_shm()
// Purpose:	析構函數
// Return:     
// Comment:	刪除c_shm_mem對象與c_share_info對象
////////////////////////////////////////////////////////////////////////
c_shm::~c_shm()
{
	for( int i = 0; i < v_shm_mem.size() ; i ++ )
	{
		if( v_shm_mem[i]->p_share_mem_info->application_kind == '0' )
		{
			delete v_shm_mem[i];
		}
		else if( v_shm_mem[i]->p_share_mem_info->application_kind == '1' )
		{
			c_shm_merge* p_temp = (c_shm_merge*)(v_shm_mem[i]);
			delete p_temp;
		}
		else
		{
			delete v_shm_mem[i];
		}
	}
	delete p_share_info;
}

////////////////////////////////////////////////////////////////////////
// Name:	c_shm::createshm()
// Purpose:	創建共享內存
// Return:  int 成功:0 失敗:其它
// Comment:	計算共享內存區的大小,并創建。把各共享內存塊的信息寫入內存區中,并劃好大小。
////////////////////////////////////////////////////////////////////////
int c_shm::createshm(void)
{	
	// TODO : implement
	int oflag = SHM_R|SHM_W|IPC_CREAT;


	//取得共享內存的大小
	size_t shmSize = getMemSize();
	
	//創建共享內存
	key_t shm_key;
	shm_key = ftok( para.getChar( "shm", "path_name"), share_area_id );

	shmId = shmget( shm_key, shmSize, oflag);
	theLog<<"共享內存Key:"<<shm_key<<",總大小"<shmSize<endi;
	
	c_shm_merge* p_shm_merge;

	if( shmId == -1)
	{
		cout<<"創建共享內存錯誤"<<endl;
		/*cout<<"創建共享內存錯誤"<<errno<<endl;
		if( errno == EINVAL )
			cout<<"EINVAL"<<endl;
		else if( errno == EACCES )
			cout<<"EACCES"<<endl;
		else if( errno == ENOENT )
			cout<<"ENOENT"<<endl;
		else if( errno == ENOMEM )
			cout<<"ENOMEM"<<endl;
		else if( errno == ENOSPC )
			cout<<"ENOSPC"<<endl;
		else if( errno == EEXIST )
			cout<<"標識已存在"<<endl;
		*/
		exit(1);	//ENOENT         
	}

	//往共享內存內放共享內存塊的信息,并用head指針vector確定位置
	shm_area_head = (char*)shmat( shmId, NULL, 0 );
	int i, j;
	int point = 0;
	c_mutex p_mutex;
	int block_count;
	
	c_shm_mem_load_data* p_shm_mem_load;
	c_shm_merge* p_shm_mem_merge;
	c_shm_mem* p_shm_mem;
	
	//確定每個結構體的大小,不足16位的加夠16位
	int size_share_mem_info = sizeof(SHARE_MEM_INFO);
	int add_size_share_mem_info;
	if( size_share_mem_info % 16 == 0 )
	{
		add_size_share_mem_info = size_share_mem_info;
	}
	else
	{
		add_size_share_mem_info = ( size_share_mem_info / 16 + 1 ) * 16 ;
	}
	int size_stshareinfo = sizeof( STSHAREINFO );
	int add_size_stshareinfo;
	if( size_stshareinfo % 16 == 0 )
	{
		add_size_stshareinfo = size_stshareinfo;
	}
	else
	{
		add_size_stshareinfo = ( size_stshareinfo / 16 + 1 ) * 16 ;
	}
	for( i = 0; i < v_share_mem_info.size(); i++)
	{
		switch(v_share_mem_info[i].application_kind)
		{
		case '0':
			p_shm_mem_load = new c_shm_mem_load_data();
			p_shm_mem_load->p_share_mem_info = (SHARE_MEM_INFO*)&(shm_area_head[ point ]);
			memcpy( p_shm_mem_load->p_share_mem_info, &(v_share_mem_info[i]), size_share_mem_info );

			v_shm_head.push_back ( p_shm_mem_load->p_share_mem_info );
			point += add_size_share_mem_info;
	
			//設置頭信息
			p_shm_mem_load->p_stShareInfo = (STSHAREINFO*)&((( char * )shm_area_head)[ point ]);		
			point += add_size_stshareinfo;

			p_shm_mem_load->p_field_info = (MEM_FIELD*)&(shm_area_head[ point ]);
			point += 4000;

			p_shm_mem_load->p_stShareInfo->mem_area_no = v_share_mem_info[i].mem_area_no;
			p_shm_mem_load->p_stShareInfo->real_record_count = 0;
			p_shm_mem_load->p_stShareInfo->append_record_count = 0;

			p_shm_mem_load->head_point = (char*)&(shm_area_head[ point ]); 

			//設置可用標志
			p_shm_mem_load->p_stShareInfo->valid_flag = 1;

			//加鎖			
			p_mutex._mutex = &(p_shm_mem_load->p_stShareInfo->append_lock);
			p_mutex.init();
			//;
			block_count = p_shm_mem_load->p_share_mem_info->mem_size / p_shm_mem_load->p_share_mem_info->block_size + 1 ;
			if( block_count > UPDATE_LOCK_COUNT )
				block_count = UPDATE_LOCK_COUNT;

			for( j = 0 ; j < block_count ; j ++ )
			{
				p_mutex._mutex = &(p_shm_mem_load->p_stShareInfo->update_lock[j]);
				p_mutex.init();
			}
			p_shm_mem_load->p_stShareInfo->block_count = block_count;
			p_shm_mem_load->p_share_mem_info->block_size = p_shm_mem_load->p_share_mem_info->mem_size/block_count+1;
			p_mutex._mutex = &(p_shm_mem_load->p_stShareInfo->record_count_lock);
			p_mutex.init();
			p_mutex._mutex = &(p_shm_mem_load->p_stShareInfo->append_key_lock);
			p_mutex.init();

			//////2005-11-23
			p_shm_mem_load->p_stShareInfo->addition_pos = 0;
			p_shm_mem_load->addition_point = &(p_shm_mem_load->head_point[p_shm_mem_load->p_share_mem_info->mem_size-p_shm_mem_load->p_share_mem_info->addition_size]);
			p_mutex._mutex = &(p_shm_mem_load->p_stShareInfo->addition_lock);
			p_mutex.init();

			delete p_shm_mem_load;
			break;
		case '1':
			p_shm_mem_merge = new c_shm_merge();
			p_shm_mem_merge->p_share_mem_info = (SHARE_MEM_INFO*)&(shm_area_head[ point ]);
			memcpy( p_shm_mem_merge->p_share_mem_info, &(v_share_mem_info[i]), sizeof(SHARE_MEM_INFO) );

			v_shm_head.push_back ( p_shm_mem_merge->p_share_mem_info );
			point += add_size_share_mem_info;
			
			//設置頭信息
			p_shm_mem_merge->p_stShareInfo = (STSHAREINFO*)&((( char * )shm_area_head)[ point ]);		
			point += add_size_stshareinfo;

			p_shm_mem_merge->p_field_info = (MEM_FIELD*)&(shm_area_head[ point ]);
			point += 4000;

			p_shm_mem_merge->p_stShareInfo->mem_area_no = v_share_mem_info[i].mem_area_no;
			p_shm_mem_merge->p_stShareInfo->real_record_count = 0;
			p_shm_mem_merge->p_stShareInfo->append_record_count = 0;

			p_shm_mem_merge->head_point = (char*)&(shm_area_head[ point ]); 

			//設置可用標志
			p_shm_mem_merge->p_stShareInfo->valid_flag = 1;

			//加鎖
			p_mutex._mutex = &(p_shm_mem_merge->p_stShareInfo->append_lock);
			p_mutex.init();
			//;
			block_count = p_shm_mem_merge->p_share_mem_info->mem_size / p_shm_mem_merge->p_share_mem_info->block_size + 1 ;
			if( block_count > UPDATE_LOCK_COUNT )
				block_count = UPDATE_LOCK_COUNT;

			for( j = 0 ; j < MAX_ITEM_COUNT ; j ++ )
			{
				p_mutex._mutex = &(p_shm_mem_merge->p_stShareInfo->update_lock[j]);
				p_mutex.init();
			}
			p_shm_mem_merge->p_stShareInfo->block_count = block_count;
			p_shm_mem_merge->p_share_mem_info->block_size = p_shm_mem_merge->p_share_mem_info->mem_size/block_count+1;
			p_mutex._mutex = &(p_shm_mem_merge->p_stShareInfo->record_count_lock);
			p_mutex.init();
			p_mutex._mutex = &(p_shm_mem_merge->p_stShareInfo->append_key_lock);
			p_mutex.init();

			p_shm_mem_merge->createItemShm();
			//調整塊大小
			p_shm_mem_merge->p_share_mem_info->block_size = (p_shm_mem_merge->p_share_mem_info->mem_size - SHM_ITEM_SIZE*MAX_ITEM_COUNT)/block_count+1;

			strcpy(p_shm_mem_merge->backup_dir , para.getChar( "shm", "ShmBackupDir"));
			p_shm_mem_merge->max_backup_num = para.getInt( "shm", "MaxBackupNum" );
			delete p_shm_mem_merge;
			break;
		default:
			p_shm_mem = new c_shm_mem();
			p_shm_mem->p_share_mem_info = (SHARE_MEM_INFO*)&(shm_area_head[ point ]);
			memcpy( p_shm_mem->p_share_mem_info, &(v_share_mem_info[i]), sizeof(SHARE_MEM_INFO) );

			v_shm_head.push_back ( p_shm_mem->p_share_mem_info );
			point += add_size_share_mem_info;
			
			//設置頭信息
			p_shm_mem->p_stShareInfo = (STSHAREINFO*)&((( char * )shm_area_head)[ point ]);		
			point += add_size_stshareinfo;

			p_shm_mem->p_field_info = (MEM_FIELD*)&(shm_area_head[ point ]);
			point += 4000;

			p_shm_mem->p_stShareInfo->mem_area_no = v_share_mem_info[i].mem_area_no;
			p_shm_mem->p_stShareInfo->real_record_count = 0;
			p_shm_mem->p_stShareInfo->append_record_count = 0;

			p_shm_mem->head_point = (char*)&(shm_area_head[ point ]); 

			//設置可用標志
			p_shm_mem->p_stShareInfo->valid_flag = 1;

			//加鎖
			p_mutex._mutex = &(p_shm_mem->p_stShareInfo->append_lock);
			p_mutex.init();
			//;
			block_count = p_shm_mem->p_share_mem_info->mem_size / p_shm_mem->p_share_mem_info->block_size + 1 ;
			if( block_count > UPDATE_LOCK_COUNT )
				block_count = UPDATE_LOCK_COUNT;

			for( j = 0 ; j < block_count ; j ++ )
			{
				p_mutex._mutex = &(p_shm_mem->p_stShareInfo->update_lock[j]);
				p_mutex.init();
			}
			p_shm_mem->p_stShareInfo->block_count = block_count;
			p_shm_mem->p_share_mem_info->block_size = p_shm_mem->p_share_mem_info->mem_size/block_count+1;
			p_mutex._mutex = &(p_shm_mem->p_stShareInfo->record_count_lock);
			p_mutex.init();
			p_mutex._mutex = &(p_shm_mem->p_stShareInfo->append_key_lock);
			p_mutex.init();

			break;
		}
		if( v_share_mem_info[i].mem_size % 16 == 0 )
		{
			point += v_share_mem_info[i].mem_size;
		}
		else
		{
			point += (v_share_mem_info[i].mem_size / 16 + 1 ) * 16;
		}
	}

	shmctl( shmId, IPC_STAT, &shmBuf);	

	return 0;
}

////////////////////////////////////////////////////////////////////////
// Name:	c_shm::getshm()
// Purpose:	取得共享內存區,并加載各共享內存塊的信息到c_shm_mem的vector中。
// Return:  int
////////////////////////////////////////////////////////////////////////
int c_shm::getshm(void)
{
   // TODO : implement
	int oflag = SHM_R|SHM_W;

	//取得共享內存的大小
	size_t shmSize = getMemSize();
	
	//獲取共享內存
	key_t shm_key;
	shm_key = ftok( para.getChar( "shm", "path_name"), share_area_id );

	shmId = shmget( shm_key, shmSize, oflag);

	//獲取失敗
	if( shmId == -1)
	{
		theLog<<"獲取共享內存"<<shm_key<<"|"<<share_area_id<<"|"<<para.getChar( "shm", "path_name")<<"失敗"<<ende;
		exit(1);
	}
	
	shm_area_head = (char*)shmat(shmId, NULL, 0);
	
	//從共享內存中讀取配置信息,并生成c_shm_mem的vector
	//SHARE_MEM_INFO* t_share_mem_info = (SHARE_MEM_INFO*)&(shm_area_head[0]);
	//cout<<"read mem size:"<<t_share_mem_info->mem_size<<endl;
	//v_shm_mem.clear();

	char* p = para.getChar( "shm", "stor_path_na" );
	char* pp = para.getChar( "shm", "ShmBackupDir") ;
	int dfe = para.getInt( "shm", "MaxBackupNum" );

	int point = 0;
	int i = 0;
	int add_count = 0;
	SHARE_MEM_INFO* t_share_mem_info;// = (SHARE_MEM_INFO*)&shm_area_head[point];
	
	int size_mem_field = sizeof( MEM_FIELD );
	c_mutex p_mutex;

	//確定每個結構體的大小,不足16位的加夠16位
	int size_share_mem_info = sizeof(SHARE_MEM_INFO);
	int add_size_share_mem_info;
	if( size_share_mem_info % 16 == 0 )
	{
		add_size_share_mem_info = size_share_mem_info;
	}
	else
	{
		add_size_share_mem_info = ( size_share_mem_info / 16 + 1 ) * 16 ;
	}
	int size_stshareinfo = sizeof( STSHAREINFO );
	int add_size_stshareinfo;
	if( size_stshareinfo % 16 == 0 )
	{
		add_size_stshareinfo = size_stshareinfo;
	}
	else
	{
		add_size_stshareinfo = ( size_stshareinfo / 16 + 1 ) * 16 ;
	}
	
	while( ((point+add_count*4*16) < shmSize) && ( (t_share_mem_info = (SHARE_MEM_INFO*)&(shm_area_head[point])) != NULL) )
	{
		add_count ++;
		point += add_size_share_mem_info;
	
		STSHAREINFO* t_stshareinfo = (STSHAREINFO*)&(shm_area_head[ point ]);
		point += add_size_stshareinfo;

		MEM_FIELD* memField = (MEM_FIELD*)&(shm_area_head[ point ]);
		point += 4000;
	
		//test
		
		//vector <c_shm_mem *> v_shm_mem1;
		c_shm_mem_load_data* t_shm_load_data;
		c_shm_mem* t_shm_mem;
		c_shm_merge* t_shm_merge;
		switch( t_share_mem_info->application_kind )
		{
		case '0':
			//資料類,修改時,先刪除原有記錄,再添加一條新記錄
			t_shm_load_data = new c_shm_mem_load_data();
			t_shm_load_data->p_share_mem_info = t_share_mem_info;
			t_shm_load_data->p_stShareInfo = t_stshareinfo;
			t_shm_load_data->p_field_info = memField;
			t_shm_load_data->head_point = &shm_area_head[ point];;

			//生成鎖
			t_shm_load_data->append_mutex._mutex = &(t_stshareinfo->append_lock);
			t_shm_load_data->record_count_mutex._mutex = &(t_shm_load_data->p_stShareInfo->record_count_lock);
			t_shm_load_data->v_update_mutex.clear();
			for( i = 0 ; i < t_shm_load_data->p_stShareInfo->block_count ; i ++ )
			{
				c_mutex t_mutex;
				t_mutex._mutex = &(t_shm_load_data->p_stShareInfo->update_lock[i]);
				t_shm_load_data->v_update_mutex.push_back( t_mutex );
			}			
			t_shm_load_data->append_key_mutex._mutex = &(t_shm_load_data->p_stShareInfo->append_key_lock);

			//拷貝路徑
			strcpy( t_shm_load_data->file_path, p );

			////////////////2005-11-23

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产老女人精品毛片久久| 欧美精品高清视频| 欧美日韩一二区| 欧美大片一区二区| 一区二区三区国产精华| 狠狠色狠狠色综合系列| 精品视频一区三区九区| 国产精品久久毛片a| 开心九九激情九九欧美日韩精美视频电影 | 日韩亚洲欧美综合| 亚洲欧美日韩一区二区 | 国产一区三区三区| 欧美日韩国产综合视频在线观看| 久久精品日韩一区二区三区| 成人黄色在线看| 久久影院电视剧免费观看| 亚洲成人一区在线| 色天天综合色天天久久| 国产日韩欧美a| 国产综合久久久久久鬼色 | 亚洲欧美在线另类| 国产精品99久久久久久似苏梦涵| 欧美一区二区视频网站| 亚洲成人在线网站| 欧美日韩你懂得| 亚洲一区二区av在线| 色老头久久综合| 自拍av一区二区三区| 波多野结衣91| 中文字幕亚洲一区二区av在线| 国产精品自拍在线| 久久久久免费观看| 国产精品一区二区91| 久久亚洲一级片| 日韩欧美123| 精品一区二区三区免费播放| 欧美一区二区啪啪| 麻豆中文一区二区| 精品久久一区二区三区| 精品一区二区三区影院在线午夜| 日韩视频一区在线观看| 久久99最新地址| 久久综合久久综合久久综合| 国产精品亚洲一区二区三区在线| 久久精品人人做| 成人午夜伦理影院| 亚洲欧美偷拍三级| 欧美剧在线免费观看网站| 日韩av不卡一区二区| 日韩精品一区二区三区视频| 国内欧美视频一区二区 | 国产成人精品免费一区二区| 国产欧美日韩久久| 91免费视频网址| 亚洲v中文字幕| 精品久久人人做人人爰| 成人免费va视频| 亚洲影视在线播放| 欧美mv和日韩mv国产网站| 成人免费毛片片v| 亚洲一区二区中文在线| 欧美一区二区三区免费| 国产精品中文有码| 亚洲精品成人精品456| 欧美一区二区视频网站| 成人黄色片在线观看| 亚洲一区二区三区影院| 欧美电视剧在线看免费| 99久久精品情趣| 美脚の诱脚舐め脚责91| 亚洲欧美日韩小说| 久久综合九色综合久久久精品综合| 成人免费av在线| 日韩国产欧美视频| 亚洲欧洲av一区二区三区久久| 欧美日本不卡视频| 国产69精品久久久久毛片 | 在线精品视频小说1| 免费观看一级特黄欧美大片| 国产精品国产精品国产专区不蜜| 欧美在线视频全部完| 国产成人午夜电影网| 亚洲aaa精品| 最新高清无码专区| 26uuu成人网一区二区三区| 在线观看不卡一区| 丁香婷婷综合五月| 久久精品av麻豆的观看方式| 亚洲精品国产a| 国产精品嫩草99a| 精品免费国产一区二区三区四区| 91麻豆免费看片| 国产成人激情av| 加勒比av一区二区| 天天色天天操综合| 亚洲精品日韩综合观看成人91| 久久综合丝袜日本网| 欧美日韩国产免费一区二区| 91在线视频免费91| 国产91对白在线观看九色| 久久精品国产99久久6| 亚洲sss视频在线视频| 最新欧美精品一区二区三区| 中文字幕不卡在线观看| 久久先锋影音av| 欧美电视剧在线观看完整版| 67194成人在线观看| 欧美日韩国产免费| 91福利在线看| 欧美中文字幕久久| 欧美亚日韩国产aⅴ精品中极品| thepron国产精品| 成人av电影免费观看| 波多野结衣一区二区三区| 国产精品一区二区无线| 国产一区二区三区免费| 国产麻豆精品一区二区| 国产一区二区三区综合| 欧美在线影院一区二区| 91在线观看视频| 色哟哟在线观看一区二区三区| 99久久99久久久精品齐齐| 亚洲一二三四在线观看| 国产精品视频观看| 中文字幕一区二区三区精华液| 国产精品美女www爽爽爽| 中文字幕在线不卡国产视频| 亚洲伦在线观看| 亚洲午夜激情av| 日本欧美大码aⅴ在线播放| 日本欧美在线看| 日本美女一区二区三区视频| 久久99精品国产麻豆不卡| 国产一区二区三区四区五区美女| 国产成a人亚洲精品| av电影天堂一区二区在线| 91国偷自产一区二区使用方法| 欧美中文字幕一区二区三区亚洲| 欧美精品电影在线播放| 欧美一区二区在线免费观看| 久久久国产精品麻豆| 18涩涩午夜精品.www| 日韩精品免费专区| 激情综合网天天干| 菠萝蜜视频在线观看一区| 欧美日韩一卡二卡| 久久亚洲一区二区三区四区| 亚洲天堂福利av| 免费av网站大全久久| 成人在线视频一区| 欧美肥妇bbw| 欧美激情艳妇裸体舞| 亚洲午夜精品网| 国产电影精品久久禁18| 色婷婷国产精品| 精品国产伦一区二区三区免费| 国产精品国产三级国产有无不卡 | 五月婷婷综合在线| 精品综合久久久久久8888| 99精品国产一区二区三区不卡| 制服丝袜中文字幕一区| 国产偷国产偷精品高清尤物 | 99久久国产综合精品色伊| 欧美人牲a欧美精品| 国产精品区一区二区三区 | 亚洲啪啪综合av一区二区三区| 天堂蜜桃91精品| av一本久道久久综合久久鬼色| 制服丝袜成人动漫| 亚洲激情男女视频| 国产电影一区在线| 日韩欧美电影一区| 天天综合天天做天天综合| av中文一区二区三区| 欧美tickling挠脚心丨vk| 亚洲福利视频一区二区| av不卡免费电影| 久久久久久久久99精品| 日日夜夜一区二区| 日本精品免费观看高清观看| 欧美高清在线视频| 国产精品99久久久久久宅男| 欧美一区二区在线视频| 亚洲成人资源在线| 欧美三日本三级三级在线播放| 中文一区在线播放| 国产一区在线观看麻豆| 欧美r级在线观看| 首页亚洲欧美制服丝腿| 欧美日韩在线电影| 亚洲中国最大av网站| 91免费精品国自产拍在线不卡| 中文字幕精品—区二区四季| 国产精品一区二区不卡| 久久九九影视网| 国产成人一区二区精品非洲| 国产日韩欧美精品一区| 国产自产高清不卡| 国产亚洲一区二区三区| 国产精品一二三区|