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

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

?? socket.c

?? 最新版FreeRTOS, 包擴(kuò)多種開發(fā)平臺(tái)的移植
?? C
?? 第 1 頁 / 共 4 頁
字號:
*
* Description : Called by the send() function for TCP transmission.
*    It first calculates the free transmit buffer size
*    and compares it with the size of the data to be transmitted to determine the transmission size.
*    After calculating the data size, it copies data from TX_WR_PTR.
*    It waits if there is a previous send command in process.
*    When the send command is cleared, it updates the TX_WR_PTR up to the size to be transmitted
     and performs the send command.
* Arguments   : s   - channel number
*               buf - Pointer pointing data to send
*               len - data size to send
* Returns     : Succeeded: sent data size, Failed: -1
* Note        : Internal Function
****************************************************************************************************
*/
int send_in(SOCKET s, u_char far * buf, u_int len)
{
u_char k;
u_int size;
union un_l2cval wr_ptr, ack_ptr;
unsigned int offset;

S_START:
disable();            // CT: Shadow register access should not conflict with ISR.
k = READ_VALUE(SHADOW_TXWR_PTR(s));
WINDOW_RESTORE_BASE;  // Needed whenever we touch a shadow ptr; different window.
delay0(2);
wr_ptr.cVal[3] = READ_VALUE(TX_WR_PTR(s));
wr_ptr.cVal[2] = READ_VALUE(TX_WR_PTR(s) + SA_OFFSET(1));
wr_ptr.cVal[1] = READ_VALUE(TX_WR_PTR(s) + SA_OFFSET(2));
wr_ptr.cVal[0] = READ_VALUE(TX_WR_PTR(s) + SA_OFFSET(3));

k = READ_VALUE(SHADOW_TXACK_PTR(s));
WINDOW_RESTORE_BASE;  // Needed whenever we touch a shadow ptr; different window.
delay0(2);
ack_ptr.cVal[3] = READ_VALUE(TX_ACK_PTR(s));
ack_ptr.cVal[2] = READ_VALUE(TX_ACK_PTR(s) + SA_OFFSET(1));
ack_ptr.cVal[1] = READ_VALUE(TX_ACK_PTR(s) + SA_OFFSET(2));
ack_ptr.cVal[0] = READ_VALUE(TX_ACK_PTR(s) + SA_OFFSET(3));
enable();

// Suppress compiler errors that k is not used
k = k;

//  Calculate send free buffer size
if (wr_ptr.lVal >= ack_ptr.lVal)
  size = (u_int)(SSIZE[s] - (wr_ptr.lVal - ack_ptr.lVal));
else
  size = (u_int)(SSIZE[s] - (0 - ack_ptr.lVal + wr_ptr.lVal));

// Recalulate after some delay because of error in pointer calculation
if (size > SSIZE[s])
  {
  if (select(s, SEL_CONTROL) != SOCK_ESTABLISHED)
    return -1;
  delay_ms(1);
	 goto S_START;
  }

// Wait when previous sending has not finished yet and there's no free buffer
if (size == 0)
  {
  if (select(s, SEL_CONTROL) != SOCK_ESTABLISHED)
    return -1;

  delay_ms(1);
  goto S_START;
  }
else if (size < len)
  {
  len = size;
  }

//  Calculate pointer to data copy
offset = (UINT)(wr_ptr.lVal & SMASK[s]);

// copy data
write_data(s, buf, offset, len);

while (READ_VALUE(COMMAND(s)) & CSEND)
  {
  // Confirm previous send command
  if (select(s, SEL_CONTROL) != SOCK_ESTABLISHED)
    return -1;
  }

//  update tx_wr_ptr
wr_ptr.lVal = wr_ptr.lVal + len;
WRITE_VALUE(TX_WR_PTR(s), wr_ptr.cVal[3]);
WRITE_VALUE(TX_WR_PTR(s) + SA_OFFSET(1), wr_ptr.cVal[2]);
WRITE_VALUE(TX_WR_PTR(s) + SA_OFFSET(2), wr_ptr.cVal[1]);
WRITE_VALUE(TX_WR_PTR(s) + SA_OFFSET(3), wr_ptr.cVal[0]);

delay0(1);

// SEND
WRITE_VALUE(COMMAND(s), CSEND);

return(len);
}

/*
****************************************************************************************************
*              TCP data receiving function.
*
* Description : This function is to clear out any received TCP data.
* Arguments   : s   - channel number
* Returns     : None
* Note        : API Fcuntion
****************************************************************************************************
*/
void recv_clear(SOCKET s)
{
u_char k;
u_int size;
union un_l2cval wr_ptr, rd_ptr;

disable();
k = READ_VALUE(SHADOW_RXWR_PTR(s));
WINDOW_RESTORE_BASE;  // Needed whenever we touch a shadow ptr; different window.
delay0(2);
wr_ptr.cVal[3] = READ_VALUE(RX_WR_PTR(s));
wr_ptr.cVal[2] = READ_VALUE(RX_WR_PTR(s) + SA_OFFSET(1));
wr_ptr.cVal[1] = READ_VALUE(RX_WR_PTR(s) + SA_OFFSET(2));
wr_ptr.cVal[0] = READ_VALUE(RX_WR_PTR(s) + SA_OFFSET(3));

k = READ_VALUE(SHADOW_RXRD_PTR(s));
WINDOW_RESTORE_BASE;  // Needed whenever we touch a shadow ptr; different window.
delay0(2);
rd_ptr.cVal[3] = READ_VALUE(RX_RD_PTR(s));
rd_ptr.cVal[2] = READ_VALUE(RX_RD_PTR(s) + SA_OFFSET(1));
rd_ptr.cVal[1] = READ_VALUE(RX_RD_PTR(s) + SA_OFFSET(2));
rd_ptr.cVal[0] = READ_VALUE(RX_RD_PTR(s) + SA_OFFSET(3));
enable();

// Suppress compiler errors that k is not used
k = k;

//  calculate received data size
if (wr_ptr.lVal >= rd_ptr.lVal)
  size = (u_int)(wr_ptr.lVal - rd_ptr.lVal);
else
  size = (u_int)(0 - rd_ptr.lVal + wr_ptr.lVal);

// Update rx_rd_ptr
rd_ptr.lVal += size;
WRITE_VALUE(RX_RD_PTR(s), rd_ptr.cVal[3]);
WRITE_VALUE(RX_RD_PTR(s) + SA_OFFSET(1), rd_ptr.cVal[2]);
WRITE_VALUE(RX_RD_PTR(s) + SA_OFFSET(2), rd_ptr.cVal[1]);
WRITE_VALUE(RX_RD_PTR(s) + SA_OFFSET(3), rd_ptr.cVal[0]);

// RECV
 WRITE_VALUE(COMMAND(s), CRECV);
}

/*
****************************************************************************************************
*              TCP data receiving function.
*
* Description : This function is for receiving TCP data.
*     The recv() function is an application I/F function. It will read up to len chars if there are
      enough characters in the buffer, otherwise will onl read the number of characters availiable
* Arguments   : s   - channel number
*               buf - Pointer where the data to be received is copied
*               len - Size of the data to be received
* Returns     : Succeeded: received data size, Failed: -1
* Note        : API Fcuntion
****************************************************************************************************
*/
int recv(SOCKET s, u_char far * buf, u_int len)
{
u_char k;
u_int size;
union un_l2cval wr_ptr, rd_ptr;
unsigned int offset;

// If out length is 0, then we do not need to do anything
if (len <= 0)
  return (0);

disable();
k = READ_VALUE(SHADOW_RXWR_PTR(s));
WINDOW_RESTORE_BASE;  // Needed whenever we touch a shadow ptr; different window.
delay0(2);
wr_ptr.cVal[3] = READ_VALUE(RX_WR_PTR(s));
wr_ptr.cVal[2] = READ_VALUE(RX_WR_PTR(s) + SA_OFFSET(1));
wr_ptr.cVal[1] = READ_VALUE(RX_WR_PTR(s) + SA_OFFSET(2));
wr_ptr.cVal[0] = READ_VALUE(RX_WR_PTR(s) + SA_OFFSET(3));

k = READ_VALUE(SHADOW_RXRD_PTR(s));
WINDOW_RESTORE_BASE;  // Needed whenever we touch a shadow ptr; different window.
delay0(2);
rd_ptr.cVal[3] = READ_VALUE(RX_RD_PTR(s));
rd_ptr.cVal[2] = READ_VALUE(RX_RD_PTR(s) + SA_OFFSET(1));
rd_ptr.cVal[1] = READ_VALUE(RX_RD_PTR(s) + SA_OFFSET(2));
rd_ptr.cVal[0] = READ_VALUE(RX_RD_PTR(s) + SA_OFFSET(3));
enable();

// Suppress compiler errors that k is not used
k = k;

//  calculate IIM7010A received data size
if (wr_ptr.lVal == rd_ptr.lVal)
  return(0);
else if (wr_ptr.lVal >= rd_ptr.lVal)
  size = (u_int)(wr_ptr.lVal - rd_ptr.lVal);
else
  size = (u_int)(0 - rd_ptr.lVal + wr_ptr.lVal);

// Make sure we do not try to read more characters than what is availiable in the IIM7010 buffer
if (size < len)
  len = size;

// Calculate pointer to be copied received data
offset = ((UINT)(rd_ptr.lVal & RMASK[s]));

// Copy received data
size = read_data(s, offset, buf, len);

// Update rx_rd_ptr
rd_ptr.lVal += size;
WRITE_VALUE(RX_RD_PTR(s), rd_ptr.cVal[3]);
WRITE_VALUE(RX_RD_PTR(s) + SA_OFFSET(1), rd_ptr.cVal[2]);
WRITE_VALUE(RX_RD_PTR(s) + SA_OFFSET(2), rd_ptr.cVal[1]);
WRITE_VALUE(RX_RD_PTR(s) + SA_OFFSET(3), rd_ptr.cVal[0]);

// RECV
 WRITE_VALUE(COMMAND(s), CRECV);
return(size);
}


/*
****************************************************************************************************
*               UDP data sending function.
*
* Description : Composed of the sendto()and sendto_in() functions.
*    The send() function is an application I/F function.
*    It continues to call the send_in() function to complete the sending of the data up to the
*    size of the data to be sent
*    when the application is called.Unlike TCP transmission, it designates the destination address
*    and the port.
* Arguments   : s    - channel port
*               buf  - Pointer pointing data to send
*               len  - data size to send
*               addr - destination IP address to send data
*               port - destination port number to send data
* Returns     : Sent data size
* Note        : API Function
****************************************************************************************************
*/
u_int sendto(SOCKET s, u_char far * buf, u_int len, u_char * addr, u_int port)
{
//char val;
u_int ptr, size;

// Wait until previous send commnad has completed.
while(READ_VALUE(COMMAND(s)) & CSEND)
  {
  if(select(s, SEL_CONTROL) == SOCK_CLOSED)
    return -1;	// Error.
  }

// Designate destination port number.
if (port != 0)
  {
  WRITE_VALUE(DST_PORT_PTR(s), (u_char)((port & 0xff00) >> 8));
  WRITE_VALUE(DST_PORT_PTR(s) + SA_OFFSET(1), (u_char)(port & 0x00ff));
  }

//  Designate destination IP address
WRITE_VALUE(DST_IP_PTR(s), addr[0]);
WRITE_VALUE(DST_IP_PTR(s) + SA_OFFSET(1), addr[1]);
WRITE_VALUE(DST_IP_PTR(s) + SA_OFFSET(2), addr[2]);
WRITE_VALUE(DST_IP_PTR(s) + SA_OFFSET(3), addr[3]);

if (len <= 0)
  return (0);
else
  {
  ptr = 0;
  do
    {
	 size = sendto_in(s, buf + ptr, len);
	 len = len - size;
	 ptr += size;
	 } while ( len > 0);
  }
return ptr;
}

/*
****************************************************************************************************
*            UDP data sending function.
*
* Description : An internal function that is the same as the send_in() function of the TCP.
* Arguments   : s   - Channel number
*               buf - Pointer indicating the data to send
*               len - data size to send
* Returns     : Sent data size
* Note        : Internal Function
****************************************************************************************************
*/
u_int sendto_in(SOCKET s, u_char far * buf, u_int len)
{
u_char k;
u_int size;
union un_l2cval wr_ptr, rd_ptr;
unsigned int offset;

S2_START:
disable();
k = READ_VALUE(SHADOW_TXWR_PTR(s));
WINDOW_RESTORE_BASE;  // Needed whenever we touch a shadow ptr; different window.
delay0(2);
wr_ptr.cVal[3] = READ_VALUE(TX_WR_PTR(s));
wr_ptr.cVal[2] = READ_VALUE(TX_WR_PTR(s) + SA_OFFSET(1));
wr_ptr.cVal[1] = READ_VALUE(TX_WR_PTR(s) + SA_OFFSET(2));
wr_ptr.cVal[0] = READ_VALUE(TX_WR_PTR(s) + SA_OFFSET(3));

k = READ_VALUE(SHADOW_TXRD_PTR(s));
WINDOW_RESTORE_BASE;  // Needed whenever we touch a shadow ptr; different window.
delay0(2);
rd_ptr.cVal[3] = READ_VALUE(TX_RD_PTR(s));
rd_ptr.cVal[2] = READ_VALUE(TX_RD_PTR(s) + SA_OFFSET(1));
rd_ptr.cVal[1] = READ_VALUE(TX_RD_PTR(s) + SA_OFFSET(2));
rd_ptr.cVal[0] = READ_VALUE(TX_RD_PTR(s) + SA_OFFSET(3));
enable();

// Suppress compiler errors that k is not used
k = k;

//  Calculate free buffer size to send
if (wr_ptr.lVal >= rd_ptr.lVal)
  size = (u_int)(SSIZE[s] - (wr_ptr.lVal - rd_ptr.lVal));
else
  size = (u_int)(SSIZE[s] - (0 - rd_ptr.lVal + wr_ptr.lVal));

//  Recalulate after some delay because of error in pointer caluation
if (size > SSIZE[s])
  {
  delay_ms(1);
  goto S2_START;
  }

// Wait when previous sending has not finished yet and there's no free buffer
if (size == 0)
  {
  delay_ms(1);
  goto S2_START;

  }
else if (size < len)
  {
  len = size;
  }

// Calculate pointer to copy data pointer
offset =(UINT)(wr_ptr.lVal & SMASK[s]);

// copy data
write_data(s, buf, offset, len);

// Confirm previous send command
while (READ_VALUE(COMMAND(s)) & CSEND)
  {
  if(select(s, SEL_CONTROL)==SOCK_CLOSED)
    return -1;                  // Error
  }

// update tx_wr_ptr
wr_ptr.lVal = wr_ptr.lVal + len;
WRITE_VALUE(TX_WR_PTR(s), wr_ptr.cVal[3]);
WRITE_VALUE(TX_WR_PTR(s) + SA_OFFSET(1), wr_ptr.cVal[2]);
WRITE_VALUE(TX_WR_PTR(s) + SA_OFFSET(2), wr_ptr.cVal[1]);
WRITE_VALUE(TX_WR_PTR(s) + SA_OFFSET(3), wr_ptr.cVal[0]);

delay0(1);

// SEND
WRITE_VALUE(COMMAND(s), CSEND);

return(len);
}

/*
****************************************************************************************************
*             UDP data receiving function.
*
* Description : Function for receiving UDP and IP layer RAW mode data, and handling the data header.
* Arguments   : s    - channel number
*               buf  - Pointer where the data to be received is copied
*               len  - Size of the data to be received
*               addr - Peer IP address for receiving
*               port - Peer port number for receiving
* Returns     : Received data size
* Note        : API Function
****************************************************************************************************
*/
u_int recvfrom(SOCKET s, u_char far *buf, u_int len, u_char *addr, u_int *port)
{
struct _UDPHeader									// When receiving UDP data, header added by W3100A
  {
  union
	 {
	 struct
		{
		u_int size;
		u_char addr[4];
		u_int port;
		} header;
	 u_char stream[8];
    } u;
  } UDPHeader;

u_int ret;
union un_l2cval wr_ptr, rd_ptr;
u_long size;
u_char k;
unsigned int offset;

if(select(s,SEL_CONTROL)==SOCK_CLOSED)
  return -1;

disable();
k = READ_VALUE(SHADOW_RXWR_PTR(s));
WINDOW_RESTORE_BASE;  // Needed whenever we touch a shadow ptr; different window.
delay0(2);
wr_ptr.cVal[3] = READ_VALUE(RX_WR_PTR(s));
wr_ptr.cVal[2] = READ_VALUE(RX_WR_PTR(s) + SA_OFFSET(1));
wr_ptr.cVal[1] = READ_VALUE(RX_WR_PTR(s) + SA_OFFSET(2));
wr_ptr.cVal[0] = READ_VALUE(RX_WR_PTR(s) + SA_OFFSET(3));

k = READ_VALUE(SHADOW_RXRD_PTR(s));
WINDOW_RESTORE_BASE;  // Needed whenever we touch a shadow ptr; different window.
delay0(2);
rd_ptr.cVal[3] = READ_VALUE(RX_RD_PTR(s));
rd_ptr.cVal[2] = READ_VALUE(RX_RD_PTR(s) + SA_OFFSET(1));
rd_ptr.cVal[1] = READ_VALUE(RX_RD_PTR(s) + SA_OFFSET(2));
rd_ptr.cVal[0] = READ_VALUE(RX_RD_PTR(s) + SA_OFFSET(3));
enable();

// Suppress compiler errors that k is not used
k = k;

// Calculate received data size
if (len <= 0)
  return (0);
else if (wr_ptr.lVal >= rd_ptr.lVal)
  size = wr_ptr.lVal - rd_ptr.lVal;
else
  size = 0 - rd_ptr.lVal + wr_ptr.lVal;

if (size == 0)
  return 0;

  // Calulate received data pointer
offset = ((UINT)(rd_ptr.lVal & RMASK[s]));

// When UDP data
if (( READ_VALUE(OPT_PROTOCOL(s)) & 0x07) == SOCK_DGRAM)
  {
  // Copy W3100A UDP header
  read_data(s, offset, UDPHeader.u.stream, 8);

  // Read UDP Packet size
  size = UDPHeader.u.stream[0];
  size = (size << 8) + UDPHeader.u.stream[1];

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人欧美一区二区三区黑人麻豆| 石原莉奈在线亚洲三区| 亚洲精品一区二区三区影院| 欧美理论电影在线| 欧美日韩一卡二卡三卡| 欧美日韩和欧美的一区二区| 欧美视频一区二区三区四区 | 日本成人在线一区| 午夜国产精品影院在线观看| 亚洲成人久久影院| 午夜精品一区二区三区电影天堂| 亚洲综合免费观看高清完整版 | 国产精品传媒视频| 国产精品沙发午睡系列990531| 欧美极品aⅴ影院| 国产精品欧美一区二区三区| 一区二区中文字幕在线| 亚洲乱码国产乱码精品精可以看| 《视频一区视频二区| 亚洲伦理在线免费看| 亚洲制服丝袜av| 午夜视频久久久久久| 日本欧美久久久久免费播放网| 美女视频网站久久| 国产精品一卡二卡| 成人网在线播放| 色综合久久综合网欧美综合网| 欧洲亚洲精品在线| 91精品国产美女浴室洗澡无遮挡| 日韩一区二区在线观看| 久久久久久久久久久久电影| 国产精品视频看| 亚洲一区二区av在线| 麻豆精品国产传媒mv男同| 国产精品一二三四区| 97精品国产97久久久久久久久久久久| 欧美性生活影院| 欧美videofree性高清杂交| 国产精品美女久久久久久久久久久 | 91麻豆精品国产自产在线观看一区 | 欧美一区二区福利在线| 久久久综合激的五月天| 亚洲女子a中天字幕| 日本不卡视频在线| 99久久婷婷国产| 日韩午夜在线播放| 亚洲日本在线a| 久久爱www久久做| 色综合天天综合色综合av| 欧美一级欧美三级| 国产精品家庭影院| 麻豆91精品视频| 色综合久久久久久久久久久| 日韩一级大片在线| 亚洲欧美一区二区三区孕妇| 男男gaygay亚洲| 色屁屁一区二区| 久久久久97国产精华液好用吗| 一区二区高清在线| 国产高清不卡一区| 欧美一区二区三区的| 亚洲精品国产无天堂网2021| 国产综合久久久久久鬼色| 欧美性色黄大片| 中文字幕精品一区二区精品绿巨人| 五月天欧美精品| 99视频精品在线| 亚洲精品一区二区三区在线观看| 亚洲综合色自拍一区| 国产成人日日夜夜| 日韩一区二区三区高清免费看看| 亚洲少妇最新在线视频| 国模套图日韩精品一区二区| 欧美日韩在线观看一区二区 | 亚洲一级不卡视频| 成人av在线网| 精品国产91久久久久久久妲己| 亚洲线精品一区二区三区| av不卡免费在线观看| 久久人人爽爽爽人久久久| 免费在线观看不卡| 欧美网站一区二区| 亚洲欧美另类久久久精品2019| 国产精一区二区三区| 欧美一区二区三区白人| 亚洲无线码一区二区三区| 91丨国产丨九色丨pron| 国产精品拍天天在线| 国产成人av电影在线播放| 日韩欧美一区在线| 日韩二区在线观看| 欧美精品一二三区| 一区二区三区毛片| 在线欧美日韩国产| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲一级二级在线| 91福利在线导航| 亚洲欧美偷拍卡通变态| a亚洲天堂av| 国产精品女主播av| 不卡av电影在线播放| 欧美激情综合在线| 白白色 亚洲乱淫| 综合自拍亚洲综合图不卡区| 成人深夜福利app| 国产精品久久久久久久久快鸭| 国产不卡视频一区| 国产精品素人一区二区| eeuss鲁片一区二区三区在线看| 中文字幕一区在线观看| 不卡一二三区首页| 亚洲欧美日韩精品久久久久| 91毛片在线观看| 一区二区三区在线视频免费 | 国产拍揄自揄精品视频麻豆| 国产成人一级电影| 国产精品欧美一级免费| 91一区一区三区| 亚洲成va人在线观看| 91超碰这里只有精品国产| 蜜桃久久久久久| 国产亚洲欧美一区在线观看| 成人久久18免费网站麻豆| 亚洲三级在线免费观看| 欧洲色大大久久| 蜜乳av一区二区三区| 久久婷婷国产综合精品青草| 成人午夜在线播放| 一区二区三区免费| 日韩欧美一二三区| 成人性生交大片免费| 亚洲综合丁香婷婷六月香| 91精品国产综合久久蜜臀 | 欧美精选一区二区| 国产麻豆精品视频| 亚洲欧美电影一区二区| 欧美日韩一二三| 国内外成人在线| 亚洲柠檬福利资源导航| 欧美理论片在线| 国产成人精品免费看| 亚洲与欧洲av电影| 日韩欧美激情四射| 99精品国产一区二区三区不卡| 一区二区成人在线观看| 91精品国产一区二区三区蜜臀| 国产成人亚洲综合a∨婷婷| 一区二区三区四区五区视频在线观看| 91精品国产综合久久小美女| 高清国产午夜精品久久久久久| 亚洲午夜精品在线| 国产午夜精品美女毛片视频| 色屁屁一区二区| 国产一二三精品| 夜夜亚洲天天久久| 国产亚洲欧洲一区高清在线观看| 欧美在线观看18| 国产成a人亚洲| 婷婷丁香激情综合| 亚洲欧洲av一区二区三区久久| 欧美一区二区啪啪| 91年精品国产| 国产一区二区三区在线观看精品 | 中文字幕第一区二区| 91麻豆精品国产91久久久久久久久| 丰满亚洲少妇av| 日韩av电影免费观看高清完整版 | 国产成人综合亚洲网站| 亚洲成年人影院| 中文字幕一区二区三中文字幕| 日韩欧美中文字幕公布| 日本精品裸体写真集在线观看| 国产乱子伦视频一区二区三区| 亚洲一区在线观看网站| 国产欧美一区二区三区鸳鸯浴| 欧美美女bb生活片| 99re这里只有精品首页| 国产乱人伦偷精品视频免下载| 日本成人在线网站| 一区二区三区加勒比av| 国产精品女主播在线观看| 精品国产伦一区二区三区观看方式| 欧美午夜电影网| 99久久精品99国产精品| 国产成人在线视频免费播放| 美女在线一区二区| 亚洲韩国一区二区三区| 亚洲欧美偷拍卡通变态| 中文字幕av在线一区二区三区| 精品国产精品一区二区夜夜嗨| 制服丝袜中文字幕一区| 精品视频1区2区| 91视视频在线观看入口直接观看www| 国产精品一二一区| 精品午夜久久福利影院| 美脚の诱脚舐め脚责91| 日本一不卡视频| 日韩电影在线观看一区| 天堂成人国产精品一区| 亚洲图片欧美一区|