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

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

?? modem.c

?? wince3.0的源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
// ****************************************************************************
//
//  Module:     Unimdm
//  File:       modem.c
//
//  Copyright (c) 1992-2000 Microsoft Corporation.  All rights reserved.
//
//  Revision History
//
//  Description: Intermediate modem SPI layer
//
// ****************************************************************************

#include "windows.h"
#include "types.h"
#include "memory.h"
#include "tspi.h"
#include "linklist.h"
#include "tspip.h"
#include "tapicomn.h"
#include "mcx.h"
#include "dial.h"

static const WCHAR szAnswer[] =   TEXT("Answer");   // Registry value name under Settings
static const CHAR szDefaultAnswerCmd[] = "ATA\r\n";
static const WCHAR szMonitor[] =   TEXT("Monitor"); // Registry value name under Settings
static const CHAR szDefaultMonitorCmd[] = "ATS0=0\r\n";
static const WCHAR szMdmLogBase[] =   TEXT("mdmlog");
static const WCHAR szMdmLogExt[] =   TEXT(".txt");
extern const WCHAR szSettings[];

extern DWORD SetWatchdog(PTLINEDEV pLineDev,DWORD dwTimeout);

// Unimodem thread priority
extern DWORD g_dwUnimodemThreadPriority;
extern HANDLE g_hCoreDLL;

#ifdef DEBUG
LPWSTR
GetPendingName(
    DWORD dwPendingType
    )
{
    LPWSTR lpszType;
    
    switch (dwPendingType) {
    case PENDING_LINEACCEPT:        lpszType = TEXT("LINEACCEPT");          break;
    case PENDING_LINEANSWER:        lpszType = TEXT("LINEANSWER");          break;
    case PENDING_LINEDEVSPECIFIC:   lpszType = TEXT("LINEDEVSPECIFIC");     break;
    case PENDING_LINEDIAL:          lpszType = TEXT("LINEDIAL");            break;
    case PENDING_LINEDROP:          lpszType = TEXT("LINEDROP");            break;
    case PENDING_LINEMAKECALL:      lpszType = TEXT("LINEMAKECALL");        break;
    case PENDING_LISTEN:            lpszType = TEXT("LISTEN");              break;
    case PENDING_EXIT:              lpszType = TEXT("EXIT");                break;
    case INVALID_PENDINGOP:         lpszType = TEXT("INVALIDOP");           break;
    default:                        lpszType = TEXT("UNKNOWN!!!");          break;
    }
    
    return lpszType;
}
#endif

//
// Function to open the modem command log file for the specified line device
//
void
OpenModemLog(
    PTLINEDEV pLineDev
    )
{
    WCHAR FileName[16];
    LPWSTR lpwsz;
    HANDLE hFile;

    DEBUGMSG(ZONE_FUNC, (TEXT("UNIMODEM:+OpenModemLog\n")));

    if (pLineDev->hMdmLog != (HANDLE)INVALID_DEVICE) {
        CloseHandle(pLineDev->hMdmLog);
    }

    //
    // Format modem log file name "mdmlog<dwDeviceID>.txt"
    //
    wcscpy(FileName, szMdmLogBase);
    lpwsz = FileName + wcslen(FileName);
    wsprintf(lpwsz, TEXT("%d"), pLineDev->dwDeviceID);
    wcscat(FileName, szMdmLogExt);

    hFile = CreateFile(FileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL);
    if (hFile == INVALID_HANDLE_VALUE) {
        DEBUGMSG(ZONE_CALLS|ZONE_FUNC|ZONE_ERROR,
            (TEXT("UNIMODEM:OpenModemLog CreateFile(%s) failed %d\n"), FileName, GetLastError()));
        pLineDev->hMdmLog = (HANDLE)INVALID_DEVICE;
    } else {
        DEBUGMSG(ZONE_CALLS|ZONE_FUNC, (TEXT("UNIMODEM:OpenModemLog CreateFile(%s) succeeded\n"), FileName));
        pLineDev->hMdmLog = hFile;
    }

    DEBUGMSG(ZONE_FUNC, (TEXT("UNIMODEM:-OpenModemLog\n")));
} // OpenModemLog


//
// Function to write modem commands to the line device's command history file.
// 
void
WriteModemLog(
    PTLINEDEV pLineDev,
    UCHAR * szCommand,
    DWORD   dwOp
    )
{
    CHAR Buf[MAXSTRINGLENGTH];
    LPSTR  lpsz;
    DWORD  dwLen;
    DWORD  dwIO;

    DEBUGMSG(ZONE_FUNC, (TEXT("UNIMODEM:+WriteModemLog %a\n"), szCommand));

    switch (dwOp) {
    case MDMLOG_COMMAND_OK:
        lpsz = "Modem Command:   ";
        break;
    case MDMLOG_COMMAND_FAIL:
        lpsz = "Failed Command:  ";
        break;
    case MDMLOG_RESPONSE:
        lpsz = "Modem Response:  ";
        break;

    default:
        lpsz = "                 ";
        break;
    }

    Buf[MAXSTRINGLENGTH-2] = 0;
    strcpy(Buf, lpsz);
    dwLen = strlen(Buf);
    strncat(Buf, szCommand, MAXSTRINGLENGTH - dwLen - 2);
    dwLen += strlen(szCommand);
    if (dwLen > (MAXSTRINGLENGTH - 2)) {
        dwLen = MAXSTRINGLENGTH - 2;
    }
    Buf[dwLen] = '\n';
    dwLen++;
    Buf[dwLen] = '\0';

    DEBUGMSG(ZONE_CALLS|ZONE_FUNC, (TEXT("UNIMODEM:WriteModemLog(%a) %d bytes\n"), Buf, dwLen));
    if (!WriteFile(pLineDev->hMdmLog, (PUCHAR)Buf, dwLen, &dwIO, NULL)) {
        DEBUGMSG(ZONE_CALLS|ZONE_FUNC, (TEXT("UNIMODEM:WriteModemLog WriteFile() failed %d\n"), GetLastError()));
    }
    DEBUGMSG(ZONE_FUNC, (TEXT("UNIMODEM:-WriteModemLog\n")));
}   // WriteModemLog


void
SetDCBfromDevMiniCfg(
    DCB * pDCB,
    PDEVMINICFG lpDevMiniCfg
    )
{
    pDCB->BaudRate = lpDevMiniCfg->dwBaudRate;
    pDCB->ByteSize = lpDevMiniCfg->ByteSize;
    pDCB->StopBits = lpDevMiniCfg->StopBits;
    pDCB->fParity = (NOPARITY == lpDevMiniCfg->Parity) ? FALSE : TRUE;
    pDCB->Parity   = lpDevMiniCfg->Parity;
    pDCB->fDsrSensitivity = FALSE;
    pDCB->fDtrControl     = DTR_CONTROL_ENABLE;
    
    if( MDM_FLOWCONTROL_HARD & lpDevMiniCfg->dwModemOptions ) {
        // Enable RTS/CTS Flow Control
        pDCB->fRtsControl = RTS_CONTROL_HANDSHAKE;
        pDCB->fOutxCtsFlow = 1;
        pDCB->fOutX = 0;
        pDCB->fInX = 0;
    } else if( MDM_FLOWCONTROL_SOFT & lpDevMiniCfg->dwModemOptions ) {
        // Enable XON/XOFF Flow Control
        pDCB->fRtsControl = RTS_CONTROL_ENABLE;
        pDCB->fOutxCtsFlow = 0;
        pDCB->fOutX = 1;
        pDCB->fInX  = 1;  
    } else {
        pDCB->fRtsControl = RTS_CONTROL_ENABLE;
        pDCB->fOutxCtsFlow = 0;
        pDCB->fOutX = 0;
        pDCB->fInX  = 0;
    }
}   // SetDCBfromDevMiniCfg


void
SetDialerTimeouts(
    HANDLE hComDev
    )
{
    COMMTIMEOUTS commTimeouts;

    GetCommTimeouts (hComDev, &commTimeouts);
    commTimeouts.ReadIntervalTimeout = 50;
    commTimeouts.ReadTotalTimeoutMultiplier = 0;
    commTimeouts.ReadTotalTimeoutConstant = 50;
    commTimeouts.WriteTotalTimeoutMultiplier = 5;
    commTimeouts.WriteTotalTimeoutConstant = 500;
    SetCommTimeouts (hComDev, &commTimeouts);
}   // SetDialerTimeouts

DWORD
OpenModem (
    LPCWSTR      lpszPortName,
    LPDWORD      lpR3handle,
    LPDWORD      lpR0handle,
    PDEVMINICFG  lpDevMiniCfg )
{
    HANDLE hComDev;
    HANDLE hComDev0;
    WCHAR  szDeviceName[16];

    DEBUGMSG(ZONE_FUNC|ZONE_CALLS, (TEXT("UNIMODEM:+OpenModem('%s')\r\n"), lpszPortName));

        // Compose the device name from the portname
    wcscpy(szDeviceName, lpszPortName);
    
     // Open the device
     //
    if ((hComDev = CreateFile(szDeviceName, GENERIC_READ | GENERIC_WRITE, 0,
                              NULL, OPEN_EXISTING, 0, 0))
        == INVALID_HANDLE_VALUE) {
        goto om_fail;
    }
    if ((hComDev0 = CreateFile(szDeviceName, 0, 0,
                              NULL, OPEN_EXISTING, 0, 0))
        != INVALID_HANDLE_VALUE) {
        DCB          commDCB;

        DEBUGMSG(ZONE_MISC|ZONE_CALLS,
                 (TEXT("UNIMODEM:OpenModem - createfile OK, handle x%X\n"),
                  hComDev));
        
        // ********************************************************
        // Set the device configuration based on DEVMINICFG
        //
        GetCommState( hComDev, &commDCB );
        SetDCBfromDevMiniCfg(&commDCB, lpDevMiniCfg);

        DEBUGMSG(ZONE_FUNCTION|ZONE_CALLS,
                 (TEXT("UNIMODEM:OpenModem Setting port configuration :\n")));
        DEBUGMSG(ZONE_FUNCTION|ZONE_CALLS,
                 (TEXT("UNIMODEM:OpenModem Baud %d, Byte Size %d, Stop bits %d, Parity %d\n"),
                  commDCB.BaudRate, commDCB.ByteSize, commDCB.StopBits, commDCB.Parity));
        DEBUGMSG(ZONE_FUNCTION|ZONE_CALLS,
                 (TEXT("UNIMODEM:OpenModem RTS Control %d, CTS Out Flow %d, XON/XOFF out/in %d/%d\n"),
                  commDCB.fRtsControl, commDCB.fOutxCtsFlow, commDCB.fOutX, commDCB.fInX));
        SetCommState( hComDev, &commDCB );
        
        // Adjust the read/write timeouts as required by dialer thread
        SetDialerTimeouts(hComDev);
        
        *lpR3handle = (DWORD)hComDev;
        *lpR0handle = (DWORD)hComDev0;
        
        DEBUGMSG(ZONE_FUNCTION, (TEXT("UNIMODEM:-OpenModem\n")));
        return ERROR_SUCCESS;
    } else {
        CloseHandle(hComDev);
    }

om_fail:
    DEBUGMSG(ZONE_FUNCTION,
             (TEXT("UNIMODEM:-OpenModem : Unable to open %s, hComdev x%X\n"),
              szDeviceName, hComDev));

    return ERROR_OPEN_FAILED;
}

// ****************************************************************************
// lineOpen()
//
// Function: Emulate the TAPI lineOpen call.
//
// ****************************************************************************

LONG
DevlineOpen (
    PTLINEDEV pLineDev
    )
{
    DWORD idMdm;
    DWORD idMdm0;
    DWORD dwRet;

    DEBUGMSG(ZONE_FUNC, (TEXT("UNIMODEM:+DevlineOpen\r\n")));
    EnterCriticalSection(&pLineDev->OpenCS);
    
    // The line must be closed
    if (pLineDev->hDevice != (HANDLE)INVALID_DEVICE) {
        DEBUGMSG(ZONE_ERROR, (TEXT("UNIMODEM:DevlineOpen - device already open\r\n")));
        dwRet = LINEERR_ALLOCATED;
        goto exit_Point;
    }
    
    if (0 == pLineDev->wDeviceAvail) {
        DEBUGMSG(ZONE_ERROR, (TEXT("UNIMODEM:DevlineOpen - device has been removed\r\n")));
        dwRet = LINEERR_NODEVICE;
        goto exit_Point;
    }

     // Open the modem port
    DEBUGMSG(ZONE_MISC, (TEXT("UNIMODEM:DevlineOpen - calling openmodem\r\n")));
    dwRet = OpenModem(pLineDev->szDeviceName,
                      &idMdm, &idMdm0,
                      &pLineDev->DevMiniCfg);
    if (dwRet == SUCCESS) {                                             
        // we successfully opened the modem

        // Convert modem handle to ring 0 handle
        pLineDev->hDevice       = (HANDLE)idMdm;
        pLineDev->hDevice_r0    = (HANDLE)idMdm0;
        pLineDev->DevState      = DEVST_DISCONNECTED;

        OpenModemLog(pLineDev);

    } else {
        dwRet = LINEERR_RESOURCEUNAVAIL;
    };

exit_Point:
    LeaveCriticalSection(&pLineDev->OpenCS);
    DEBUGMSG(ZONE_FUNC, (TEXT("UNIMODEM:-DevlineOpen x%X\r\n"), dwRet));
    return dwRet;
}

//****************************************************************************
// lineClose()
//
// Function: Emulate the TAPI lineClose call.
//
// NOTE : The fDoDrop flag is used to indicate that we should
//        make sure the line gets dropped before we close it.
//
//****************************************************************************

LONG
DevlineClose (
    PTLINEDEV pLineDev,
    BOOL fDoDrop
    )
{
    DWORD dwPrevCallState;
    HTAPICALL hPrevCall;
    DWORD dwPrevProcPerms;

    DEBUGMSG(ZONE_FUNC|ZONE_CALLS,
             (TEXT("UNIMODEM:+DevlineClose, handle x%X, callstate x%X\r\n"),
              pLineDev->hDevice, pLineDev->dwCallState));

    // Grab a critical section to ensure the app doesn't call in and
    // cause a line close while we are in the middle of doing a close
    // ourselves.
    EnterCriticalSection(&pLineDev->OpenCS);

    dwPrevCallState = pLineDev->dwCallState;
    hPrevCall = pLineDev->htCall;

    if( (HANDLE)INVALID_DEVICE != pLineDev->hDevice )
    {
        try
        {
            //
            // We (device.exe PSL) were the current process when the device
            // was opened, so we need to be the owner for DevlineDrop and
            // the CloseHandle() to work as expected.
            //
            dwPrevProcPerms = SetProcPermissions(-1);
            SetHandleOwner((HANDLE) pLineDev->hDevice, GetCurrentProcess());
            SetProcPermissions(dwPrevProcPerms);
            // If a call is in progress, terminate it
            if (fDoDrop && LINECALLSTATE_CONNECTED == pLineDev->dwCallState) {
                DEBUGMSG(ZONE_CALLS, (L"UNIMODEM:DevlineClose - Callstate x%X, dropping call\r\n",
                    pLineDev->dwCallState));
                DevlineDrop(pLineDev);   
            }
    
            CloseHandle( pLineDev->hDevice );
            CloseHandle( pLineDev->hDevice_r0);
            CloseHandle( pLineDev->hMdmLog);
            NullifyLineDevice(pLineDev, FALSE);    // Reinit the line device
        }
        except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
                EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
            // Oops, we must have hit a bad handle.  Fall thru & release the CS.
        }
    }
    
    pLineDev->dwPendingID = INVALID_PENDINGID;
    LeaveCriticalSection(&pLineDev->OpenCS);

    if (dwPrevCallState != LINECALLSTATE_IDLE) {
        pLineDev->htCall = hPrevCall;
        NewCallState(pLineDev, LINECALLSTATE_IDLE, 0L);
        pLineDev->htCall = NULL;
    }

    DEBUGMSG(ZONE_FUNC|ZONE_CALLS, (TEXT("UNIMODEM:-DevlineClose\r\n")));
    return SUCCESS;
}


//
// Function to signal any threads stuck in WaitCommEvent
//
LONG
ToggleCommMask(
    PTLINEDEV pLineDev
    )
{
    LONG rc = 0;

    if ((HANDLE)INVALID_DEVICE != pLineDev->hDevice) {
        try {
            if (!SetCommMask( pLineDev->hDevice, 0)) {
                DEBUGMSG(ZONE_ERROR, (TEXT("UNIMODEM:ToggleCommMask SetCommMask(0) failed %d\n"), GetLastError()));
                rc = LINEERR_OPERATIONFAILED;
            }
            if (!SetCommMask( pLineDev->hDevice_r0, 0)) {
                DEBUGMSG(ZONE_ERROR, (TEXT("UNIMODEM:ToggleCommMask SetCommMask(r0,0) failed %d\n"), GetLastError()));
                rc = LINEERR_OPERATIONFAILED;
            }
            if (!SetCommMask( pLineDev->hDevice, EV_DEFAULT)) {
                DEBUGMSG(ZONE_ERROR, (TEXT("UNIMODEM:ToggleCommMask SetCommMask() failed %d\n"), GetLastError()));
                rc = LINEERR_OPERATIONFAILED;
            }
            if (!SetCommMask( pLineDev->hDevice_r0, EV_RLSD)) {
                DEBUGMSG(ZONE_ERROR, (TEXT("UNIMODEM:ToggleCommMask SetCommMask(r0) failed %d\n"), GetLastError()));
                rc = LINEERR_OPERATIONFAILED;
            }
        } except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
                EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
            // Exception means bad handle, so we can't do anything to cancel call
            rc = LINEERR_OPERATIONFAILED;
        }
    }
    return rc;
}   // ToggleCommMask



typedef LRESULT (WINAPI * PFN_SENDMESSAGE)(HWND,UINT,WPARAM,LPARAM);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区日韩一区| 久久66热re国产| 亚洲在线一区二区三区| 亚洲6080在线| 国产成人综合视频| 欧美性生活影院| ww久久中文字幕| 一区二区三区视频在线看| 日韩国产在线一| 97国产一区二区| 精品日韩欧美在线| 亚洲自拍另类综合| 国产盗摄女厕一区二区三区| 欧美性一区二区| 国产精品久久久久久福利一牛影视| 一区二区三区av电影| 国产精品小仙女| 精品久久久久久久久久久久包黑料 | 欧美一级黄色片| 一区二区三区精品在线| 成熟亚洲日本毛茸茸凸凹| 欧美日韩国产天堂| 午夜精品一区二区三区免费视频| 97久久精品人人做人人爽| 亚洲人被黑人高潮完整版| 日本一区二区成人在线| 在线观看网站黄不卡| 日韩精品一区二区在线| 五月天网站亚洲| 18欧美亚洲精品| 国产视频一区在线观看| 91精品一区二区三区在线观看| 一区二区三区美女视频| 成人在线综合网| 亚洲精品一区二区三区影院| 日韩欧美美女一区二区三区| 国产精品入口麻豆九色| 国产麻豆9l精品三级站| 色猫猫国产区一区二在线视频| 中文字幕高清一区| 高清不卡一二三区| 国产精品二三区| 91香蕉视频黄| 国产午夜精品在线观看| 日韩不卡手机在线v区| 51午夜精品国产| 捆绑调教一区二区三区| 亚洲综合在线第一页| 欧美日韩午夜影院| 成人深夜视频在线观看| 亚洲综合免费观看高清完整版 | 亚洲欧美另类在线| 久久人人爽人人爽| 宅男噜噜噜66一区二区66| 国产成人综合亚洲网站| 久久国产人妖系列| 老色鬼精品视频在线观看播放| 亚洲一级二级三级在线免费观看| 中文av字幕一区| 国产欧美一区二区精品秋霞影院| 日韩视频中午一区| 91精品福利视频| 欧美日本一道本| 欧美日本国产视频| 日韩免费观看2025年上映的电影| 91精品国产一区二区| 国产精品乱人伦中文| 成人看片黄a免费看在线| 日韩免费视频一区二区| 久久这里只有精品6| 午夜视频在线观看一区| 91蝌蚪porny| 国产精品久久毛片av大全日韩| 久久精品男人的天堂| 国产精品不卡一区| 亚洲激情一二三区| 日本欧美一区二区在线观看| 精品在线你懂的| 色诱视频网站一区| 在线观看一区日韩| 日韩午夜在线影院| 亚洲精品乱码久久久久久黑人| 一区二区三区欧美| 蜜桃视频一区二区三区在线观看| 亚洲色图都市小说| 日韩一区二区免费视频| 九九国产精品视频| 国产98色在线|日韩| 成人手机在线视频| 日韩一区二区精品| 日韩激情在线观看| 国产成人av福利| 色就色 综合激情| 国产精品视频免费| 成人综合在线网站| 国产精品入口麻豆九色| 精品一区二区三区免费观看| 欧美日韩一区二区三区在线| 亚洲视频在线观看三级| 色成人在线视频| 亚洲成年人影院| 91麻豆精品国产91| 国产原创一区二区| 欧美一级欧美三级在线观看| 久久91精品久久久久久秒播| 久久久久亚洲综合| 97国产一区二区| 午夜成人免费视频| 日韩一级黄色大片| 国产精品性做久久久久久| 中文字幕日本乱码精品影院| 色综合欧美在线视频区| 美腿丝袜在线亚洲一区| 久久免费午夜影院| 欧美三级三级三级爽爽爽| 久久精品av麻豆的观看方式| 亚洲色图清纯唯美| 精品国产制服丝袜高跟| 欧日韩精品视频| 91首页免费视频| 成人性色生活片| 高清不卡在线观看av| 国产一区二区三区香蕉| 狠狠久久亚洲欧美| 免费观看成人av| 国产剧情av麻豆香蕉精品| 精品国产露脸精彩对白| 色偷偷久久人人79超碰人人澡| 午夜av电影一区| 亚洲自拍欧美精品| 国产日产欧美一区二区三区| 欧美丰满嫩嫩电影| 欧美优质美女网站| 91亚洲国产成人精品一区二三| 亚洲va韩国va欧美va精品| 亚洲素人一区二区| 国产精品色一区二区三区| 久久综合av免费| 日韩欧美国产成人一区二区| 欧美三级韩国三级日本三斤| 91在线精品秘密一区二区| 国产盗摄一区二区| 播五月开心婷婷综合| 成人精品免费看| 99麻豆久久久国产精品免费优播| 国产成人在线视频网站| 不卡av在线免费观看| 一本大道久久a久久综合婷婷| av成人动漫在线观看| 91香蕉视频黄| 欧美视频一区二区在线观看| 欧美性xxxxx极品少妇| 欧美日免费三级在线| 日韩三级视频在线观看| 欧美mv和日韩mv的网站| 国产精品嫩草99a| 一级日本不卡的影视| 日韩二区三区四区| 成人丝袜视频网| 欧美电影影音先锋| 国产日韩v精品一区二区| 一区二区三区中文字幕| 美日韩一区二区| av男人天堂一区| 欧美一级生活片| 亚洲自拍偷拍综合| 国产精品亚洲а∨天堂免在线| 在线观看免费成人| 亚洲欧洲韩国日本视频| 国产精品亚洲第一| 日韩欧美一级二级三级久久久| 国产精品不卡一区二区三区| 激情五月激情综合网| 欧美日韩精品系列| 亚洲狠狠丁香婷婷综合久久久| 激情综合网av| 日韩精品中文字幕在线一区| 亚洲网友自拍偷拍| 日本伦理一区二区| 亚洲婷婷在线视频| 在线观看精品一区| 依依成人精品视频| 欧美午夜在线一二页| 一区二区三区丝袜| 成人久久视频在线观看| 最新国产成人在线观看| 色综合天天综合色综合av | 石原莉奈在线亚洲二区| 一本大道av一区二区在线播放| 综合久久久久久| 91国偷自产一区二区开放时间 | 国产精品伦一区| 91精品国产综合久久久久久 | 欧美高清一级片在线观看| 色婷婷久久久综合中文字幕| 亚洲福中文字幕伊人影院| 精品国产乱码91久久久久久网站| 国产成人自拍高清视频在线免费播放| 欧美激情中文不卡| 91精品国产麻豆|