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

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

?? icqdirect2.pas

?? 本程序是轉(zhuǎn)載的
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
unit ICQDirect2;
{************************************************
    For updates checkout: http://www.cobans.net
      (C) Alex Demchenko(alex@ritlabs.com)
          Gene Reeves(notgiven2k@lycos.com)
*************************************************}

{ Created on 01-2003}

{$HINTS OFF}

interface
//****************************************************************************//
// TicqDCM - Direct Connection Manager                                        //
//           Supplies interface to ICQClient for managing DCs.                //
//                                                                            //
// TicqBaseDC - Base class for direct connection                              //
//            Handles all common tasks in a DC                                //
//                                                                            //
// TicqDCxxxx - Direct Connection Handler classes                             //
//   TicqDCNormal   - Main DC class used for Msg, File Req, Chat Req, etc.    //
//   TicqDCRecvFile - DC class used to receive files.                         //
//   TicqDCSendFile - DC class used to send files                             //
//   TicqDCChat     - DC class used for chat sessions.                        //
//                                                                            //
//****************************************************************************//
// To Add New DC Type:                                                        //
//                                                                            //
//   1. Create new subclass of TicqBaseDC.                                    //
//   2. Implement Start, Stop and HandlePacket routines in new subclass.      //
//   3. Add interface routines to TicqDCM for needed functionality.           //
//                                                                            //
//****************************************************************************//


// {ToDo}
// Need to add proxy support back into DC's
//     must be done in ICQSock.pas.
// Need to finish TicqDCChat class


Uses
  Classes, Sysutils, ICQWorks, ICQSock, WinSock, Windows;

Type
  PicqDirectUser = ^TicqDirectUser;
  TicqDirectUser = record
    UIN, Cookie,
    ExtIP, IntIP: LongWord;
    Port:Word;
    IsConnected:Boolean;
    LastActivity: LongWord; // Last tickcount of activity
    DCMain,
    DCRecvFile,
    DCSendFile,
    DCChat:Integer
  End;
  TDirectUser = TicqDirectUser;
  TicqBaseDC = class;
  TicqDCnormal = Class;


  //TicqEventType = (ET_NORMAL, ET_FILE_RECV, ET_FILE_SEND, ET_CHAT);

  TicqDCEvent = Procedure(Sender: TicqBaseDC) of Object;
  TOnHandle = procedure(Sender: TObject; UIN: LongWord; Pak: PRawPkt; Len: LongWord) of object;
  TOnParseDirectPkt = procedure(Sender: TObject; Buffer: Pointer; BufLen: LongWord; Incoming: Boolean; UIN:Cardinal) of object;

  //Direct Connection Manager
  TicqDCM = Class(TObject)
    Private
      fSrv:TSrvSocket;
      fTmpDC:TicqDCNormal;
      fPort:Word;
      fProxyType: TProxyType;
      fProxyHost: String;
      fProxyPort: Word;
      fProxyAuth: Boolean;
      fProxyPass: String;
      fUserID: String;
      fResolve: Boolean;
      fOnError: TOnError;
      fOnPktDump: TOnParseDirectPkt;
      fOnHandle:TOnHandle;
      fOnFTInit: TOnFTInit;
      fOnFTStart: TOnFTStart;
      fOnFTFileData: TOnFTFileData;
      fOnSendFileStart:TOnSendFileStart;
      fOnSendFileData:TOnSendFileData;
      fOnSendFileFinish:TOnSendFileFinish;
      fpUser:PicqDirectUser;
      fDestroying:Boolean;
      fTmrIdle:TThreadTimer;

      procedure InternalOnErrorProc(Sender: TObject; ErrorType: TErrorType; ErrorMsg: String); virtual;
      procedure InternalOnPktDump(Sender: TObject; Buffer: Pointer; BufLen: LongWord; Incoming: Boolean; UIN: Cardinal);
      procedure InternalOnHandle(Sender: TObject; UIN: LongWord; Pak: PRawPkt; Len: LongWord);
      procedure OnIdleTimeOut(Sender: TObject);
      procedure OnSrvSockConnect(Sender: TObject; Socket: TMySocket);
    Public
      MyUIN:LongWord;
      fDCL:TList;   // List of DC's
      fUL:TList;    // List of User DC Info.
      constructor Create(aMyUIN: LongWord);
      destructor Destroy; override;

      Function ExtIP:LongWord;
      Function IntIP:LongWord;

      procedure AddUser(aUIN, aCookie, aIPExt, aIPInt: LongWord; aPort: Word);
      Function GetUserIndex(aUIN:LongWord; Var Idx:integer):Boolean;
      Procedure HandleDCEvent(Sender: TicqBaseDC);
      Function SendData(aUIN:LongWord; pPkt: PRawPkt):Boolean;
      function SendDataFile(aUIN: LongWord; Pak: PRawPkt): Boolean;
      Procedure DeleteUser(aUIN: LongWord);
      Procedure DeleteDC(Var aIndex:Integer);
      function AddFileUser(aUIN: LongWord; var aPort: Word; FTReqRec:Pointer = nil): Boolean;
      Procedure SetFileRecord(aUIN: LongWord; aFileRec:TSendFileRec);
      Function AddSendFileUser(aUIN:LongWord; Var aPort, aSeq:Word):Boolean;
      function StopFileReceiving(aUIN: LongWord): Boolean;
      Procedure StopFileSending(aUIN: LongWOrd);
      procedure EstabilishConnection(aUIN: LongWord);
      function ConnectionEstabilished(aUIN: LongWord): Boolean;

      property BindPort: Word read FPort;
      property ProxyType: TProxyType read FProxyType write FProxyType;
      property ProxyHost: String read FProxyHost write FProxyHost;
      property ProxyPort: Word read FProxyPort write FProxyPort;
      property ProxyUserID: String read FUserID write FUserID;
      property ProxyAuth: Boolean read FProxyAuth write FProxyAuth;
      property ProxyPass: String read FProxyPass write FProxyPass;
      property UseProxyResolve: Boolean read FResolve write FResolve default False;
      Property pUser:PicqDirectUser read fpUser;

      property OnPktDump: TOnParseDirectPkt read FOnPktDump write FOnPktDump;
      property OnHandle: TOnHandle read FOnHandle write FOnHandle;
      property OnError: TOnError read FOnError write FOnError;

      property OnFTInit: TOnFTInit read FOnFTInit write FOnFTInit;
      property OnFTStart: TOnFTStart read FOnFTStart write FOnFTStart;
      property OnFTFileData: TOnFTFileData read FOnFTFileData write FOnFTFileData;
      Property OnSendFileStart:TonSendFileStart read FOnSendFileStart write FOnSendFileStart;
      Property OnSendFileData:TOnSendFileData read fOnSendFileData write fOnSendFileData;
      Property OnSendFileFinish:TOnSendFileFinish read fOnSendFileFinish write fOnSendFileFinish;
  End;
  TDirectControl = Class(TicqDCM);
  TDirectClient = TDirectControl;
  //Base Direct Connection Type
  TicqBaseDC = Class(TObject)
    Protected
      fManager:TicqDCM;
      fOnDCEvent:TicqDCEvent;
      fRemUIN:LongWord;
      FPort:Word;
      fIncoming:Boolean;
      FProxyType: TProxyType;
      FProxyHost: String;
      FProxyPort: Word;
      FProxyAuth: Boolean;
      FProxyPass: String;
      FUserID: String;
      FResolve: Boolean;
      FOnError: TOnError;
      FOnPktDump: TOnParseDirectPkt;
      fOnHandle: TOnHandle;
      fpUser: PicqDirectUser;
      CSck:TMySocket;
      SSck:TSrvSocket;
      fDPkt:TRawPkt;
      fPktLen:Integer;
      fPktSize:Integer;

      procedure SetCSck(aSock:TMySocket);
      procedure OnSockError(Sender: TObject);
      procedure OnSockConnectError(Sender: TObject);
      procedure OnConnect(Sender: TObject);
      procedure OnReceive(Sender: TObject; Socket: TSocket; Buffer: Pointer; BufLen: LongWord);
      procedure OnIntPktDump(Sender: TObject; Buffer: Pointer; BufLen: LongWord; Incoming: Boolean; UIN: Cardinal);
      procedure OnIntError(Sender: TObject; ErrorType: TErrorType; ErrorMsg: String); virtual;
    Public
      EventType:Integer;
      MyUIN:LongWord;

      constructor Create(aMyUIN: LongWord);
      destructor Destroy; override;

      Function Start:Boolean;Virtual;abstract;  //Used to start connection.
      Procedure Stop;Virtual;abstract;          //Used to stop connection.
      Function SendData(Pkt: PRawPkt):Boolean;Virtual; // Used to Send Data through Connection.
      Function HandlePacket(pPkt: PRawPkt; PktLen:Integer):Boolean;Virtual;

      Property Client:TMySocket Read CSck write SetCSck;

      Property RemoteUIN:LongWord read fRemUIN write fRemUIN;
      property BindPort: Word read FPort;
      property ProxyType: TProxyType read FProxyType write FProxyType;
      property ProxyHost: String read FProxyHost write FProxyHost;
      property ProxyPort: Word read FProxyPort write FProxyPort;
      property ProxyUserID: String read FUserID write FUserID;
      property ProxyAuth: Boolean read FProxyAuth write FProxyAuth;
      property ProxyPass: String read FProxyPass write FProxyPass;
      property UseProxyResolve: Boolean read FResolve write FResolve default False;

      Property OnDCEvent:TicqDCEvent read fOnDCEvent write fOnDCEvent;
      property OnPktDump: TOnParseDirectPkt read FOnPktDump write FOnPktDump;
      property OnHandle: TOnHandle read fOnHandle write fOnHandle;
      property OnError: TOnError read FOnError write FOnError;
  End;

  // DC for Main DC
  TicqDCNormal = Class(TicqBaseDC)
    Private

    Public
      Constructor Create(aMyUIN: LongWord; aClient: TMySocket; Incoming:Boolean);

      Function Start:Boolean;override;
      Procedure Stop;override;
      Function HandlePacket(pPkt: PRawPkt; PktLen:Integer):Boolean; Override;
  End;

  // DC for Recv File
  TicqDCRecvFile = Class(TicqBaseDC)
    private
      fSrvConnected:Boolean;
      Procedure OnRFSrvSockConnect(Sender: TObject; Socket: TMySocket);
    Public
      PDataPacket:PRawPkt;
      DataPacketLen:LongWord;
      IsLastPacket:Boolean;
      TotalBytes:LongWord;
      NickName:String;
      FTStartRec:TFTStartRec;
      FTRequestRec:TFTRequestRec;
      FTPos:LongWord;

      Constructor Create(MyUIN, aUIN: LongWord; aPort:Dword);

      Function Start:Boolean;override;
      Procedure Stop;override;
      Function HandlePacket(pPkt: PRawPkt; PktLen:Integer):Boolean; Override;
  End;

  // DC for Send File
  TicqDCSendFile = Class(TicqBaseDC)
    Private
      tmrSend:TThreadTimer;
      fPeerReady:Boolean;
      fRemPort:DWord;
      fSeq:Word;
      fPkt:TRawPkt;
      fConnectionFinished: Boolean;
      fTransfering:Boolean;
      fAborted:Boolean;

      procedure OnSFConnect(Sender: TObject);
      procedure OnSFDisconnect(Sender: TObject);
      procedure OnSendTimer(Sender: TObject);
      Procedure OnDataSent(Sender: TObject);
    Public
      PDataPacket:PRawPkt;
      DataPacketLen:LongWord;
      IsLastPacket:Boolean;
      SendFileRecord:TSendFileRec;

      Constructor Create(MyUIN, aUIN: LongWord; aFileRec:TSendFileRec);
      Destructor Destroy;override;

      Function Start:Boolean;override;
      Procedure Stop;override;
      Function HandlePacket(pPkt: PRawPkt; PktLen:Integer):Boolean; Override;

      Property Aborted:Boolean read fAborted;
  End;

  // DC for chat
  TicqDCChat = Class(TicqBaseDC)
    Private
    Public
  End;

Const
  // PEER Commands
  PEER_INIT        = $FF;
  PEER_INIT2       = $03;
  PEER_MSG         = $02;
  PEER_FILE_INIT   = $00;
  PEER_FILE_INITACK= $01;
  PEER_FILE_DATA   = $06;
  //Event Types
  DCEVENT_OnFTInit        = $0002;
  DCEVENT_OnFTStart       = $0004;
  DCEVENT_OnFTFileData    = $0008;
  DCEVENT_OnSendFileStart = $0020;
  DCEVENT_OnSendFileData  = $0040;
  DCEVENT_OnSendFileFinish= $0080;
  // Idle Timeout
  MAXTICKS_TIMEOUT = 18*60*60*5; { 5 min in ticks = 18 ticks per sec, 60 sec per min, 5 min}

ResourceString
  RS_ERROR_BUFFEROVERRUN          = 'Buffer Overrun Error';
  RS_ERROR_NO_DC_WRONGVER         = 'Can not estabilish direct connection due to client using an unsupported protocol version.';
  RS_ERROR_NO_DC_SECURITY         = 'Can not estabilish direct connection due to security issues.';
  RS_ERROR_NO_DC_UNSUPPORTEDPROXY = 'Can not estabilish direct connection due to client using an unsupported proxy type.';
  RS_ERROR_NO_DC_PACKETERROR      = 'Can not estabilish direct connection due to Packet Error.';

implementation

Procedure GiveUpCpuTime;
var
  Msg: TMsg;
begin
  While PeekMessage(Msg, 0, 0, 0, PM_REMOVE) Do
      begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
      end;
End;

procedure FreeAndNil(var Obj);
var
  P: TObject;
begin
  P := TObject(Obj);
  TObject(Obj) := nil;
  P.Free;
end;

Function IPToStr(aIP:LongWord):String;
Var
  HV:String;
Begin
  HV := IntToHex(aIP, 8);
  Result := '';
  Result := IntToStr(HexToInt(Copy(HV, 7, 2))) + '.';
  Result := Result + IntToStr(HexToInt(Copy(HV, 5, 2)))+ '.';
  Result := Result + IntToStr(HexToInt(Copy(HV, 3, 2))) + '.';
  Result := Result + IntToStr(HexToInt(Copy(HV, 1, 2)));
End;

//****************************************************************************//
{ TicqDCM }
constructor TicqDCM.Create(aMyUIN: LongWord);
Begin
  inherited Create;
  fDestroying := False;
  fUL   := TList.Create;
  fDCL  := TList.Create;
  MyUIN := aMyUin;
  fPort := FindBindPort;
  GetMem(fpUser, SizeOf(TicqDirectUser));
  With fpUser^ Do Begin
    UIN := MyUIN;
    Port := fPort;
    ExtIP := LongWord(GetLocalIP);
    IntIP := LongWord(GetLocalIP);
    LastActivity := GetTickCount;
    DCMain := -1;
    DCRecvFile := -1;
    DCSendFile := -1;
    DCChat     := -1;
  End;
  fSrv  := TSrvSocket.Create;
  fOnError := Nil;
  fOnPktDump := Nil;
  fOnHandle := Nil;

  // idle timeout timer (fires once a sec and checks for nonactivity for MAXTICKS_TIMEOUT)
  fTmrIdle := TThreadTimer.Create;
  fTmrIdle.Interval := 1000;
  fTmrIdle.OnTimer := OnIdleTimeOut;
  fTmrIdle.Enabled := True;

  fSrv.OnClientConnected := OnSrvSockConnect;

  fSrv.StartServer(fPort);
End;

destructor TicqDCM.Destroy;
Begin
  fTmrIdle.Enabled := False;
  fTmrIdle.OnTimer := nil;
  fTmrIdle.Free;

  If fDestroying then Exit;
  fDestroying := True;
  fSrv.OnClientConnected := nil;
  fSrv.StopServer;
  fSrv.Free;
  While fUL.Count > 0 do
    DeleteUser(PicqDirectUser(fUL.items[0])^.UIN);
  fUL.Free;
  fDCL.Free;
  FreeMemory(fpUser);
End;

Procedure TicqDCM.OnIdleTimeOut(Sender: TObject);
Var
  i:integer;
  aTC:LongWord;
Begin

  If fUL.Count = 0 then Exit;
  aTC := GetTickCount - MAXTICKS_TIMEOUT;

  For i := 0 to fUL.Count -1 Do
    With PicqDirectUser(fUL[i])^ Do
      If LastActivity < aTC then Begin
        if DCMain <> -1 then
          DeleteDC(DCMain);
    End;
End;

Function TicqDCM.ExtIP:LongWord;
Begin
  Result := fpUser^.ExtIP;
End;

Function TicqDCM.IntIP:LongWord;
Begin
  Result := fpUser^.IntIP;
End;

procedure TicqDCM.OnSrvSockConnect(Sender: TObject; Socket: TMySocket);
Begin
  // Using Temp DC until recv PEER_INIT with user info.
  fTmpDC := TicqDCNormal.Create(0,Socket, True);
  GetMem(fTmpDC.fpUser, SizeOf(TicqDirectUser));
  fTmpDC.MyUIN := MyUin;
  fTmpDC.fManager := Self;
  fTmpDC.fRemUIN := 0;
  With fTmpDC.fpUser^ Do Begin
    UIN        := 0;
    DCMain     := -1;
    DCRecvFile := -1;
    DCSendFile := -1;
    DCChat     := -1;
  End;

  // Proxy Settings
  fTmpDC.FProxyType := ProxyType;
  fTmpDC.FProxyHost := ProxyHost;
  fTmpDC.FProxyPort := ProxyPort;
  fTmpDC.FProxyAuth := ProxyAuth;
  fTmpDC.FProxyPass := ProxyPass;
  fTmpDC.FUserID    := FUserID;
  fTmpDC.FResolve   := FResolve;
  fTmpDC.UseProxyResolve := UseProxyResolve;
  // Events
  fTmpDC.FOnError   := InternalOnErrorProc;
  fTmpDC.FOnPktDump := InternalOnPktDump;
  fTmpDC.fOnHandle  := InternalOnHandle;
  fTmpDC.fOnDCEvent := HandleDCEvent;
  fpUser^.DCMain := fDCL.Add(fTmpDC);  // Add Connection to List
End;

procedure TicqDCM.InternalOnErrorProc(Sender: TObject; ErrorType: TErrorType; ErrorMsg: String);
Begin
  If Assigned(fOnError) then
    fOnError(Sender, ErrorType, ErrorMsg);
End;

procedure TicqDCM.InternalOnPktDump(Sender: TObject; Buffer: Pointer; BufLen: LongWord; Incoming: Boolean; UIN: Cardinal);
Begin
  If assigned(fOnPktDump) then
    fOnPktDump(Sender, Buffer, BufLen, Incoming, UIN);
End;

procedure TicqDCM.InternalOnHandle(Sender: TObject; UIN: LongWord; Pak: PRawPkt; Len: LongWord);
Begin
  If Assigned(fOnHandle) then
    fOnHandle(Sender, UIN, Pak, Len);
End;

Procedure TicqDCM.HandleDCEvent(Sender: TicqBaseDC);
Var
  dcRF:TicqDCRecvFile;
  dcSF:TicqDCSendFile;
Begin

  // Handle Event From one of the DC's
  Case Sender.EventType Of

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本国产一区二区| 夜夜嗨av一区二区三区网页| 色哟哟在线观看一区二区三区| 国产精品18久久久久久久网站| 奇米色一区二区| 日韩成人免费看| 久久精品99国产精品日本| 美女视频黄 久久| 久久精品国产在热久久| 久久精品国产久精国产| 老鸭窝一区二区久久精品| 老司机精品视频导航| 精品一区二区在线视频| 国产二区国产一区在线观看| 国产成人欧美日韩在线电影| 成人免费高清在线| 色天使久久综合网天天| 欧美偷拍一区二区| 在线综合+亚洲+欧美中文字幕| 欧美精品777| 欧美成人a∨高清免费观看| 精品处破学生在线二十三| 久久婷婷一区二区三区| 国产精品丝袜一区| 亚洲欧美另类久久久精品2019| 亚洲一区二区三区四区在线| 亚洲成av人综合在线观看| 日本aⅴ精品一区二区三区 | 国产成人精品亚洲日本在线桃色| 国产精品一区专区| 9人人澡人人爽人人精品| 日本久久精品电影| 91麻豆精品久久久久蜜臀| 欧美大尺度电影在线| 国产午夜精品一区二区三区嫩草 | 在线观看日韩国产| 欧美一区二区在线播放| 久久久午夜精品理论片中文字幕| 日本一区二区三级电影在线观看| 国产精品黄色在线观看| 亚洲电影一区二区| 精品一区二区三区在线播放| 粉嫩欧美一区二区三区高清影视| 91免费版pro下载短视频| 91精品国产免费| 亚洲国产成人午夜在线一区| 亚洲一卡二卡三卡四卡| 激情国产一区二区| 波多野结衣一区二区三区 | 日韩欧美色综合| 国产欧美日本一区视频| 亚洲在线免费播放| 国产在线播精品第三| 一本色道久久综合亚洲精品按摩| 日韩亚洲电影在线| 国产精品福利一区| 日本在线不卡视频| 风间由美中文字幕在线看视频国产欧美| 97久久精品人人做人人爽50路 | 亚洲欧美在线aaa| 视频一区二区中文字幕| 丁香婷婷综合激情五月色| 欧美日韩午夜在线视频| 久久亚洲精精品中文字幕早川悠里| 亚洲欧美日韩一区| 国产精品正在播放| 欧美精品乱码久久久久久按摩| 国产欧美一区二区精品仙草咪| 亚洲第一主播视频| av不卡一区二区三区| 精品久久久三级丝袜| 亚洲图片自拍偷拍| a级精品国产片在线观看| 日韩欧美第一区| 亚洲国产精品精华液网站| 高清国产一区二区三区| 91精品福利在线一区二区三区| 亚洲视频免费在线| 国产自产v一区二区三区c| 欧美久久一二区| 亚洲精品成人在线| 国产91丝袜在线播放0| 日韩亚洲欧美一区二区三区| 亚洲一级在线观看| 91麻豆免费看片| 中文字幕乱码亚洲精品一区 | 欧美色视频一区| 国产精品免费久久久久| 麻豆专区一区二区三区四区五区| 在线观看不卡视频| 亚洲视频在线观看一区| 成人听书哪个软件好| 精品日韩一区二区三区免费视频| 婷婷综合另类小说色区| 欧洲av一区二区嗯嗯嗯啊| 中文字幕一区二区三区四区不卡 | 色哟哟日韩精品| 亚洲同性同志一二三专区| 粉嫩av亚洲一区二区图片| 久久久精品黄色| 国产成人av一区二区| 久久久av毛片精品| 国产成人av一区二区三区在线观看| 久久一区二区三区四区| 国产乱国产乱300精品| 精品国产髙清在线看国产毛片| 日本中文一区二区三区| 欧美一区二区三区系列电影| 午夜免费久久看| 欧美肥妇bbw| 日韩国产欧美在线观看| 日韩一区二区三区四区| 免费成人结看片| 日韩三级视频在线观看| 激情综合网最新| 久久精品亚洲麻豆av一区二区| 国产最新精品免费| 国产精品毛片大码女人| 99视频在线精品| 亚洲最大的成人av| 欧美巨大另类极品videosbest | 亚洲免费三区一区二区| 色悠悠久久综合| 天天色综合天天| 欧美一区二区三区播放老司机| 久久激情五月激情| 久久精品视频在线看| 成人黄色电影在线| 伊人一区二区三区| 欧美老女人在线| 激情国产一区二区| 日韩码欧中文字| 欧美久久一区二区| 国产精品白丝jk白祙喷水网站| 国产清纯白嫩初高生在线观看91| 成人丝袜18视频在线观看| 亚洲在线视频免费观看| 51久久夜色精品国产麻豆| 国产一区二区在线观看视频| 欧美国产乱子伦| 欧美日韩中文国产| 久久国产精品99久久人人澡| 国产欧美日韩精品一区| 欧美亚洲国产bt| 韩国成人精品a∨在线观看| 国产精品久久久久久亚洲毛片 | 欧美一区二区日韩一区二区| 国产精品自在在线| 亚洲欧美欧美一区二区三区| 日韩一区二区三区免费看| 丁香五精品蜜臀久久久久99网站| 亚洲综合一二区| 久久嫩草精品久久久精品一| 9l国产精品久久久久麻豆| 免费人成精品欧美精品| 国产精品色哟哟网站| 91精品国产综合久久久久久久| 国产精品一区专区| 婷婷综合在线观看| 亚洲三级在线看| 精品成a人在线观看| 色呦呦网站一区| 国产精品一品视频| 亚洲国产婷婷综合在线精品| 欧美精品一区视频| 欧美日韩在线播放| 福利一区二区在线| 奇米精品一区二区三区在线观看 | 成人一二三区视频| 日韩国产高清影视| 18欧美亚洲精品| 精品国产一区二区三区四区四| 日本电影欧美片| 国产成人午夜99999| 男女性色大片免费观看一区二区| 国产精品久99| 国产亚洲自拍一区| 欧美一级夜夜爽| 日本丶国产丶欧美色综合| 国产成人av福利| 久久国产福利国产秒拍| 亚洲伊人色欲综合网| 亚洲国产精品成人综合| 日韩一区二区视频| 欧美日韩国产123区| 在线视频国产一区| 成人免费视频一区| 国产在线日韩欧美| 日韩成人午夜精品| 性做久久久久久免费观看欧美| 亚洲蜜桃精久久久久久久| 国产女同互慰高潮91漫画| 精品日韩av一区二区| 日韩欧美视频一区| 8x8x8国产精品| 欧美日本国产视频| 欧美三级在线视频| 日本国产一区二区| 在线一区二区视频| 色婷婷久久99综合精品jk白丝 |