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

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

?? icqdirect2.pas

?? 本程序是轉載的
?? 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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频在线在亚洲| 亚洲一区中文在线| 欧美综合久久久| 国产综合久久久久影院| 亚洲另类在线视频| 久久精品一区二区三区不卡牛牛| 91在线视频观看| 国产乱子伦一区二区三区国色天香 | 日韩av中文字幕一区二区| 欧美国产日韩一二三区| 7777精品伊人久久久大香线蕉超级流畅 | 久久国产精品72免费观看| 一区二区三区四区国产精品| 国产精品午夜电影| 精品日韩一区二区三区| 欧美视频在线观看一区二区| 成人免费视频一区二区| 国模一区二区三区白浆| 日韩精品视频网站| 夜夜嗨av一区二区三区四季av| 国产女主播在线一区二区| 91精品国产综合久久久久久久久久| 99精品久久99久久久久| 国产福利91精品一区二区三区| 蜜桃视频免费观看一区| 午夜精品在线视频一区| 亚洲午夜久久久久中文字幕久| 中文字幕一区二区三区在线播放| 国产亚洲女人久久久久毛片| 日韩美女视频在线| 91精品国产色综合久久ai换脸| 欧美综合在线视频| 91官网在线观看| 99久精品国产| 91视频国产观看| 91麻豆6部合集magnet| 99精品在线免费| 成人国产视频在线观看| 国产成人精品网址| 国产99久久久国产精品潘金| 国产精品一区二区三区四区| 国产米奇在线777精品观看| 久久电影网站中文字幕| 久久草av在线| 国产成人在线视频播放| 国产福利不卡视频| 大桥未久av一区二区三区中文| 国产成人精品亚洲午夜麻豆| 不卡的av网站| 91麻豆文化传媒在线观看| 日本韩国精品在线| 欧美网站大全在线观看| 欧美一区二区三区四区五区| 日韩精品一区在线观看| 久久综合色8888| 中文字幕乱码亚洲精品一区| 国产精品二三区| 一区二区三区欧美日韩| 日韩精品电影一区亚洲| 久久精品国产**网站演员| 国产米奇在线777精品观看| 成人免费黄色大片| 欧美影视一区二区三区| 91精品国产一区二区三区香蕉| 日韩欧美国产精品一区| 国产午夜亚洲精品理论片色戒| 国产精品国产馆在线真实露脸 | 亚洲国产精品欧美一二99| 天天av天天翘天天综合网 | 欧美日韩在线直播| 日韩小视频在线观看专区| 国产日韩欧美不卡在线| 亚洲美腿欧美偷拍| 奇米888四色在线精品| 国产99久久久国产精品潘金网站| 欧美综合色免费| 亚洲精品在线免费播放| 日韩免费视频线观看| 日本一区二区三区久久久久久久久不 | 欧美网站一区二区| 另类的小说在线视频另类成人小视频在线| 亚洲国产精品二十页| 视频一区在线视频| 欧美极品另类videosde| 一区二区三区**美女毛片| 日韩福利电影在线| 波多野结衣在线一区| 在线免费观看日本一区| 欧美精品一区二区久久婷婷| 亚洲欧美日韩一区二区 | 欧美变态tickle挠乳网站| 欧美韩国日本不卡| 婷婷一区二区三区| 成人黄色av网站在线| 日韩欧美一区在线观看| 亚洲免费观看高清完整版在线观看 | 亚洲综合999| 国产精品影视在线| 91超碰这里只有精品国产| 中文字幕欧美激情一区| 日韩av不卡在线观看| 色综合久久综合网欧美综合网| 日韩精品资源二区在线| 亚洲精品亚洲人成人网在线播放| 国产一区二区在线视频| 欧美视频一区二区| 国产精品高潮呻吟久久| 精品一区二区在线视频| 欧美日韩国产小视频在线观看| 国产精品免费观看视频| 韩国精品主播一区二区在线观看| 欧美日韩一区二区三区免费看| 中文字幕一区二区三区不卡| 国产又粗又猛又爽又黄91精品| 91精品国产色综合久久| 亚洲国产精品嫩草影院| 日本韩国欧美在线| 亚洲欧洲另类国产综合| 丁香天五香天堂综合| 精品蜜桃在线看| 蜜桃av一区二区| 在线播放亚洲一区| 亚洲国产精品欧美一二99| 色av一区二区| 亚洲欧美一区二区久久| 成人av在线资源网| 中文字幕免费一区| 国产成人免费视频网站| www成人在线观看| 精品一区二区三区欧美| 欧美大片日本大片免费观看| 秋霞影院一区二区| 8v天堂国产在线一区二区| 欧美日韩dvd在线观看| 亚洲一区二区三区精品在线| 欧美性色欧美a在线播放| 日韩一区二区免费在线观看| 亚洲在线中文字幕| 欧美色网站导航| 婷婷成人综合网| 91精品国产91久久久久久一区二区| 五月天中文字幕一区二区| 欧美人xxxx| 久久成人18免费观看| 久久精品水蜜桃av综合天堂| 国产精品综合久久| 欧美高清在线一区二区| 成人午夜激情视频| 中文字幕日本乱码精品影院| 91欧美一区二区| 午夜天堂影视香蕉久久| 欧美一区二区三区白人| 国产综合久久久久久久久久久久| 久久久国产一区二区三区四区小说 | 国产精品三级久久久久三级| av在线不卡观看免费观看| 亚洲最新视频在线观看| 欧美日韩久久一区二区| 麻豆一区二区99久久久久| 欧美精品一区二区久久婷婷| 高清成人在线观看| 亚洲欧美另类久久久精品2019| 欧美在线高清视频| 蜜桃一区二区三区在线观看| 久久久久久99久久久精品网站| av午夜一区麻豆| 日韩激情视频网站| 国产视频一区不卡| 91久久精品一区二区三区| 日本中文字幕一区二区有限公司| 久久综合久色欧美综合狠狠| 99视频有精品| 日韩av中文在线观看| 日本一区二区不卡视频| 欧美中文字幕一区二区三区亚洲| 日产精品久久久久久久性色| 国产精品三级电影| 欧美日韩成人一区二区| 国产91在线看| 亚洲va中文字幕| 国产日韩在线不卡| 欧美日韩精品一区二区三区四区 | 日韩欧美一区电影| 成人高清免费观看| 日韩高清在线一区| 日韩一区在线看| 日韩欧美高清一区| 91传媒视频在线播放| 国产在线观看一区二区| 亚洲国产美国国产综合一区二区| 久久在线观看免费| 欧美探花视频资源| 成人理论电影网| 蜜臀久久99精品久久久久宅男 | 亚洲欧美怡红院| 精品国产91久久久久久久妲己| 色老综合老女人久久久| 国产一区二区三区免费| 日韩极品在线观看| 日韩久久一区二区|