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

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

?? smsprs.cpp

?? ril source code for Windows CE
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
                        rrmdDCS.dwMsgClass = RIL_DCSMSGCLASS_2;
                        break;

                    case 0x03:
                        rrmdDCS.dwMsgClass = RIL_DCSMSGCLASS_3;
                        break;

                    default:
                        goto Error;
                }
                rrmdDCS.dwParams |= RIL_PARAM_MDCS_MSGCLASS;
            }

            switch (bDCS & 0x0c)
            {
                case 0x00:
                    rrmdDCS.dwAlphabet = RIL_DCSALPHABET_DEFAULT;
                    break;

                case 0x04:
                    rrmdDCS.dwAlphabet = RIL_DCSALPHABET_8BIT;
                    break;

                case 0x08:
                    rrmdDCS.dwAlphabet = RIL_DCSALPHABET_UCS2;
                    break;

                default:
                    goto Error;
            }
            rrmdDCS.dwParams |= RIL_PARAM_MDCS_ALPHABET;
            break;

        case 0xc0:
            rrmdDCS.dwFlags |= RIL_DCSFLAG_DISCARD;
            rrmdDCS.dwParams |= RIL_PARAM_MDCS_FLAGS;
            __fallthrough;

        case 0xd0:
            rrmdDCS.dwAlphabet = RIL_DCSALPHABET_DEFAULT;
            rrmdDCS.dwParams |= RIL_PARAM_MDCS_ALPHABET;
            __fallthrough;

        case 0xe0:
            rrmdDCS.dwType = RIL_DCSTYPE_MSGWAIT;
            rrmdDCS.dwParams |= RIL_PARAM_MDCS_TYPE;

            if (!(rrmdDCS.dwParams & RIL_PARAM_MDCS_ALPHABET)) {
                rrmdDCS.dwAlphabet = RIL_DCSALPHABET_UCS2;
                rrmdDCS.dwParams |= RIL_PARAM_MDCS_ALPHABET;
            }

            if (bDCS & 0x08) {
                rrmdDCS.dwFlags |= RIL_DCSFLAG_INDICATIONACTIVE;
                rrmdDCS.dwParams |= RIL_PARAM_MDCS_FLAGS;
            }

            switch (bDCS & 0x03)
            {
                case 0x00:
                    rrmdDCS.dwIndication = RIL_DCSINDICATION_VOICEMAIL;
                    break;
                case 0x01:
                    rrmdDCS.dwIndication = RIL_DCSINDICATION_FAX;
                    break;
                case 0x02:
                    rrmdDCS.dwIndication = RIL_DCSINDICATION_EMAIL;
                    break;
                case 0x03:
                    rrmdDCS.dwIndication = RIL_DCSINDICATION_OTHER;
                    break;
                default:
                    goto Error;
            }
            rrmdDCS.dwParams |= RIL_PARAM_MDCS_INDICATION;
            break;

        case 0xf0:
            rrmdDCS.dwType = RIL_DCSTYPE_MSGCLASS;
            rrmdDCS.dwParams |= RIL_PARAM_MDCS_TYPE;

            if (bDCS & 0x04) {
                rrmdDCS.dwAlphabet = RIL_DCSALPHABET_8BIT;
            } else {
                rrmdDCS.dwAlphabet = RIL_DCSALPHABET_DEFAULT;
            }
            rrmdDCS.dwParams |= RIL_PARAM_MDCS_ALPHABET;

            switch (bDCS & 0x03)
            {
                case 0x00:
                    rrmdDCS.dwMsgClass = RIL_DCSMSGCLASS_0;
                    break;
                case 0x01:
                    rrmdDCS.dwMsgClass = RIL_DCSMSGCLASS_1;
                    break;
                case 0x02:
                    rrmdDCS.dwMsgClass = RIL_DCSMSGCLASS_2;
                    break;
                case 0x03:
                    rrmdDCS.dwMsgClass = RIL_DCSMSGCLASS_3;
                    break;
                default:
                    goto Error;
            }
            rrmdDCS.dwParams |= RIL_PARAM_MDCS_MSGCLASS;
            break;

        default:
            goto Error;
    }
    rcbParsed = 1;
    fRet = TRUE;

Error:
    return fRet;
}


//
// Set the Status value of a message
// see GSM 03.40 section 9.2.3.15
//
static BOOL ParseMsgStatus(const BYTE* const pbIn, DWORD& rdwStatus, UINT& rcbParsed)
{
    FUNCTION_TRACE(ParseMsgStatus);
    DEBUGCHK(NULL != pbIn);

    DWORD MsgStatus = (DWORD)*pbIn;
    DWORD Status;

    // Search the table for common status mappings
    for (Status = 1; Status < NUM_DLVSTATUS; Status++)
    {
        if (g_rgdwDlvStatus[Status] == MsgStatus)
        {
            break;
        }
    }

    // Did we find it in the table?
    if (Status<NUM_DLVSTATUS)
    {
        // Nothing to do
    }
    else if ((MsgStatus>=0x3) && (MsgStatus<=0xF))
    {
        Status = RIL_MSGDLVSTATUS_RESERVED_COMPLETED;
    }
    else if ((MsgStatus>=0x10) && (MsgStatus<=0x1F))
    {
        Status = RIL_MSGDLVSTATUS_SCSPECIFIC_COMPLETED;
    }
    else if ((MsgStatus>=0x26) && (MsgStatus<=0x2F))
    {
        Status = RIL_MSGDLVSTATUS_RESERVED_TRYING;
    }
    else if ((MsgStatus>=0x30) && (MsgStatus<=0x3F))
    {
        Status = RIL_MSGDLVSTATUS_SCSPECIFIC_TRYING;
    }
    else if ((MsgStatus>=0x4A) && (MsgStatus<=0x4F))
    {
        Status = RIL_MSGDLVSTATUS_RESERVED_ERROR;
    }
    else if ((MsgStatus>=0x50) && (MsgStatus<=0x5F))
    {
        Status = RIL_MSGDLVSTATUS_SCSPECIFIC_ERROR;
    }
    else if ((MsgStatus>=0x66) && (MsgStatus<=0x6F))
    {
        Status = RIL_MSGDLVSTATUS_RESERVED_TMPERROR;
    }
    else if ((MsgStatus>=0x70) && (MsgStatus<=0x7F))
    {
        Status = RIL_MSGDLVSTATUS_SCSPECIFIC_TMPERROR;
    }
    else
    {
        DEBUGMSG(ZONE_ERROR, (TEXT("RILDrv : E : ParseMsgStatus : Unrecognized message status 0x%x!?\r\n"),MsgStatus));
        rcbParsed=0;
        return FALSE;
    }

    rdwStatus = Status;
    rcbParsed = 1;
    return TRUE;
}


//
// Set the CommandType of an Incoming SMS Message
// see GSM 03.40 section 9.2.3.21
//
static BOOL ParseMsgCommandType(const BYTE* const pbIn, DWORD& rdwCommandType, UINT& rcbParsed)
{
    FUNCTION_TRACE(ParseMsgCommandType);
    DEBUGCHK(NULL != pbIn);

    UINT i;
    BOOL fRet = FALSE;

    rcbParsed = 0;

    for (i = 0; i < NUM_COMMANDTYPES; i++) {
        if (g_rgdwCommandTypes[i] == *pbIn) {
            rdwCommandType = i;
            fRet = TRUE;
            break;
        }
    }

    if (fRet) {
        rcbParsed = 1;
    }
    return fRet;
}


//
// Set Hdr data for an incoming message
//
static HRESULT ParseMsgHdr(const BYTE* const pbIn, const DWORD dwAlphabet, __out_bcount( cbOut ) BYTE* const pbOut, const size_t cbOut, DWORD& rcbHdrLength, UINT& rcbParsed)
{
    FUNCTION_TRACE(ParseMsgHdr);

    const BYTE* pbWalk = pbIn;
    HRESULT hr = S_OK;

    rcbHdrLength = 0;
    rcbParsed = 0;

    if ( !pbIn ) {
        hr = E_INVALIDARG;
        ASSERT( FALSE );
        goto error_label;
    }

    rcbHdrLength = *pbWalk;
    pbWalk++;
    rcbParsed = 1;

    if (rcbHdrLength) {
        if ( !pbOut || cbOut < min(rcbHdrLength, MAXLENGTH_HDR) ) {
            hr = E_INVALIDARG;
            ASSERT( FALSE );
            goto error_label;
        }
        memcpy(pbOut, pbWalk, min(rcbHdrLength, MAXLENGTH_HDR));
        rcbParsed += rcbHdrLength;
    }

    error_label:
    return hr;
}

//
//
//
void ShiftPackedBufferNBitsRight( __out_bcount( cBufferBytes ) BYTE *pbyBuffer, DWORD cBufferBytes, DWORD cShiftBits )
{
    BYTE *pbyCurrentByte = pbyBuffer;
    if (0 != cBufferBytes)
    {
        while (pbyCurrentByte < pbyBuffer + cBufferBytes - 1)
        {
            *pbyCurrentByte++ = ((*pbyCurrentByte >> cShiftBits) |
                                 (*(pbyCurrentByte + 1) << (8 - cShiftBits)));
        }
        *pbyCurrentByte = (*pbyCurrentByte >> cShiftBits);
    }
}

//
//
//
static BOOL ParseMsgHeaderAndBody(const BYTE* const pbIn, const BYTE* const pbEnd, const DWORD dwFlags, const RILMSGDCS& rmdDataCoding, DWORD& rdwParams,
                                  __out_bcount( cbHdr ) BYTE* const pbHdr, const size_t cbHdr, __out_bcount( cbMsg ) BYTE* const pbMsg, const size_t cbMsg,
                                  DWORD& rcbHdrLength, DWORD& rcchMsgLength, UINT& rcbParsed)
{
    FUNCTION_TRACE(ParseMsgHeaderAndBody);
    DEBUGCHK(NULL != pbIn);

    const BYTE* pbWalk = pbIn;
    UINT cchUserDataLength;
    DWORD dwAlphabet;
    UINT cbParsed;
    BOOL fRet = FALSE;
    DWORD dwBitsToShift = 0;

    rcbParsed = 0;

    if (rmdDataCoding.dwParams & RIL_PARAM_MDCS_ALPHABET) {
        dwAlphabet = rmdDataCoding.dwAlphabet;
    } else {
        // Default to 8-bit alphabet
        dwAlphabet = RIL_DCSALPHABET_8BIT;
    }

    // GSM 03.38 section 4 says that we don't need to parse the message body if fDiscard is set, but there's no sense losing data we've already got, so continue on regardless
    // fDiscard = (rmdDataCoding.dwParams & RIL_PARAM_MDCS_FLAGS) && (rmdDataCoding.dwFlags & RIL_DCSFLAG_DISCARD);

    // Figure out message length.  See GSM 03.40 section 9.2.3.24
    cchUserDataLength = *pbWalk++;

    // If there is less data in the buffer than is specified by the data length,
    // then abort now to avoid reading past the end of the buffer.
    if (RIL_DCSALPHABET_DEFAULT == dwAlphabet)
    {
        if (pbWalk + ((cchUserDataLength * 7 + 7) / 8) > pbEnd)
        {
            DEBUGMSG(ZONE_ERROR, (TEXT("RILDrv : E : ParseMsgHeaderAndBody : Data length is greater than remaining buffer length!\r\n")));
            goto Error;
        }
    }
    else
    {
        if (pbWalk + cchUserDataLength > pbEnd)
        {
            DEBUGMSG(ZONE_ERROR, (TEXT("RILDrv : E : ParseMsgHeaderAndBody : Data length is greater than remaining buffer length!\r\n")));
            goto Error;
        }
    }

    if (cchUserDataLength /* && !fDiscard */) {
        if (dwFlags & RIL_MSGFLAG_HEADER) {
            // Header present -- parse it
            if ( FAILED( ParseMsgHdr(pbWalk, dwAlphabet, pbHdr, cbHdr, rcbHdrLength, cbParsed) ) ) {
                goto Error;
            }

            rdwParams |= (RIL_PARAM_M_HDR | RIL_PARAM_M_HDRLENGTH);
            pbWalk += cbParsed;

        } else {
            // No header present
            cbParsed = 0;
        }
        if (RIL_DCSALPHABET_DEFAULT == dwAlphabet) {
            // for phase 0 compatibility the data will start on a septet boundry
            // We want to pass it back starting at an octet boundry so we may
            // have to shift a little.
            dwBitsToShift = 7-((cbParsed * 8) % 7);
            if (dwBitsToShift == 7) dwBitsToShift = 0;
            ASSERT(((cbParsed * 8 + dwBitsToShift) % 7) == 0);
            rcchMsgLength =  cchUserDataLength - ((cbParsed * 8 + dwBitsToShift) / 7);          
        } else if (RIL_DCSALPHABET_UCS2 == dwAlphabet) {
            DEBUGCHK(0 == (cchUserDataLength - cbParsed) % 2);
            rcchMsgLength = (cchUserDataLength - cbParsed) / 2;
        } else {
            rcchMsgLength = cchUserDataLength - cbParsed;
        }

        // Parse message data
        if (rcchMsgLength) {
            if (RIL_DCSALPHABET_DEFAULT == dwAlphabet) {
                cbParsed = (rcchMsgLength * 7 + 7 + dwBitsToShift) / 8;
            } else if (RIL_DCSALPHABET_UCS2 == dwAlphabet) {
                cbParsed = rcchMsgLength * 2;
            } else {
                cbParsed = rcchMsgLength;
            }

            UINT cbToCopy = min(cbParsed,MAXLENGTH_MSG);

            DEBUGCHK(pbEnd > pbWalk);
            DEBUGCHK(cbToCopy <= (UINT)(pbEnd - pbWalk));

            (void)memcpy(pbMsg, pbWalk, cbToCopy);
            // make sure any GSM characters start on the byte boundry, not on the septet boundry.
            if (dwBitsToShift) {
                ShiftPackedBufferNBitsRight(pbMsg, cbToCopy, dwBitsToShift);
            }
            pbWalk += cbToCopy;

            rdwParams |= (RIL_PARAM_M_MSG | RIL_PARAM_M_MSGLENGTH);
        }
    }
    fRet = TRUE;
Error:
    rcbParsed = pbWalk - pbIn;
    return fRet;
}

//
//
//
// GSM 3.40, Section 9.2.3.12.1
//
// TP-VP Value  Validity period value                       Range
// ----------------------------------                       
//  0   - 143   (TP-VP + 1) x 5 minutes                     5 mins - 720 mins (.5 day)
//  144 - 167   12 hours + ((TP-VP - 143) x 30 minutes)     750 mins - 1440 mins (1 day)
//  168 - 196   (TP-VP - 166) x 1 day                       2 days -  30 days (43200 mins)
//  197 - 255   (TP-VP - 192) x 1 week                      35 days - 441 days (635040 mins)
//
static BOOL ParseRelativeValidityPeriod(const BYTE* const pbIn, SYSTEMTIME& rstVP, UINT& rcbParsed)
{
    UINT uVP = (UINT)*pbIn;
    UINT uMinutes = 0;

    if (uVP <= 143)
    {
        uMinutes = (uVP + 1) * 5;
    }
    else if (uVP <= 167)
    {
        uMinutes = 12 * 60 + (uVP - 143) * 30;
    }
    else if (uVP <= 196)
    {
        uMinutes = (uVP - 166) * 24 * 60;
    }
    else
    {
        uMinutes = (uVP - 192) * 7 * 24 * 60;
    }

    rstVP.wDay = uMinutes / 1440;
    uMinutes = uMinutes % 1440;
    rstVP.wHour = uMinutes / 60;
    rstVP.wMinute = uMinutes % 60;

    rcbParsed = 1;
    return TRUE;
}

static BOOL ParseEnhancedValidityPeriod(const BYTE* const pbIn, SYSTEMTIME& rstVP, UINT& rcbParsed)
{
    const BYTE * pbWalk = pbIn;
    const BYTE * pbEnd = pbWalk + 7;

    // Read function from the first octet
    const BYTE bFunction = *pbWalk;

    // Advance past extended functionality indicators
    for ( ; (*pbWalk & 0x80) && (pbWalk < pbEnd); pbWalk++)
        ;

    switch (bFunction & 0x7)
    {
        case 0x0:
            // None
            break;

        case 0x1:
            // Same as relative
            if (pbWalk < pbEnd)
            {
                (void)ParseRelativeValidityPeriod(pbIn, rstVP, rcbParsed);
            }
            break;

        case 0x2:
            // In seconds
            if (pbWalk < pbEnd)
            {
                rstVP.wSecond = *pbWalk;
            }
            break;

        case 0x3:
            // Semi-octet representation of hours, minutes, and seconds
            if (pbWalk + 3 <= pbEnd)
            {
                // Parse hours
                rstVP.wHour = (*pbWalk & 0x0f) * 10 + ((*pbWalk & 0xf0) >> 4);
                pbWalk++;

                // Parse minutes
                rstVP.wMinute = (*pbWalk & 0x0f) * 10 + ((*pbWalk & 0xf0) >> 4);
                pbWalk++;

                // Parse seconds
                rstVP.wSecond = (*pbWalk & 0x0f) * 10 + ((*pbWalk & 0xf0) >> 4);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看日产精品| 欧美美女一区二区| 欧美艳星brazzers| 国产亚洲综合性久久久影院| 亚洲少妇30p| 久久精品国产精品亚洲红杏 | 欧美午夜精品久久久久久超碰| 日韩免费看的电影| 亚洲成人动漫一区| 色悠久久久久综合欧美99| 久久综合九色综合97婷婷女人| 亚洲一区影音先锋| 91在线视频免费观看| 精品国产百合女同互慰| 日韩精品91亚洲二区在线观看| 一本久久精品一区二区| 国产精品无人区| 国产一区 二区| 日韩欧美在线1卡| 青青青伊人色综合久久| 精品视频在线视频| 亚洲一区二区三区在线看| 99久久精品国产毛片| 国产三级精品三级| 国产91综合网| 中文字幕精品一区| 成人性生交大片免费看中文网站| ww亚洲ww在线观看国产| 裸体一区二区三区| 精品国产一区二区国模嫣然| 美国十次了思思久久精品导航| 91精品国产综合久久久久久久| 一区二区三区精品在线| 欧美影视一区在线| 日韩精品一级中文字幕精品视频免费观看| 在线视频综合导航| 婷婷成人激情在线网| 欧美一区欧美二区| 精品一二线国产| 久久久久久久精| av在线不卡观看免费观看| 亚洲桃色在线一区| 欧美在线视频你懂得| 午夜影院在线观看欧美| 欧美α欧美αv大片| 国产成人精品三级| 亚洲人成网站精品片在线观看| 91久久精品一区二区| 午夜视频久久久久久| 欧美一二三四区在线| 国产一区二区三区免费| 国产精品国产三级国产| 91久久精品一区二区三| 六月丁香婷婷色狠狠久久| 国产欧美一区二区在线| 色老综合老女人久久久| 美女一区二区视频| 国产精品久久久一本精品| 色又黄又爽网站www久久| 美女精品一区二区| 一色屋精品亚洲香蕉网站| 欧美伦理电影网| 国产美女一区二区| 亚洲韩国精品一区| 久久久精品国产免大香伊| 91色九色蝌蚪| 另类专区欧美蜜桃臀第一页| 国产精品二三区| 91精品国产品国语在线不卡| 国产91清纯白嫩初高中在线观看 | 久久一夜天堂av一区二区三区| 东方欧美亚洲色图在线| 亚洲国产精品一区二区www| 精品国产91亚洲一区二区三区婷婷| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美自拍偷拍一区| 国产一区二区三区美女| 亚洲一级片在线观看| 久久精子c满五个校花| 精品视频在线视频| 播五月开心婷婷综合| 美女一区二区视频| 亚洲国产精品一区二区久久恐怖片 | 日本伊人色综合网| 国产精品午夜久久| 3d动漫精品啪啪| 色天天综合色天天久久| 国产精品一区二区三区99| 爽好久久久欧美精品| 国产精品电影一区二区| 日韩视频一区二区三区在线播放| 99re这里都是精品| 国产在线国偷精品产拍免费yy| 亚洲一区二区三区免费视频| 国产精品网站在线播放| 精品国产乱码久久久久久久久| 日本韩国欧美在线| 成人av网站在线观看免费| 狠狠色丁香婷综合久久| 日韩不卡免费视频| 亚洲一二三区在线观看| 一区二区三区中文字幕在线观看| 中文字幕精品综合| 国产精品嫩草99a| 久久免费精品国产久精品久久久久| 欧美精品aⅴ在线视频| 欧美日产在线观看| 欧美日韩一区三区四区| 欧美日韩一区成人| 欧美人伦禁忌dvd放荡欲情| 欧美影院一区二区| 欧美久久久久久久久中文字幕| 91福利国产精品| 欧美日韩在线播放| 欧美精品视频www在线观看| 欧美婷婷六月丁香综合色| 欧美曰成人黄网| 欧美三级中文字幕在线观看| 欧美亚洲国产一区在线观看网站| 色噜噜偷拍精品综合在线| 在线一区二区三区四区| 欧美日韩美少妇| 欧美一区二区精品久久911| 欧美一区二区三区不卡| 欧美成人一区二区三区| 国产视频亚洲色图| 国产精品传媒入口麻豆| 亚洲精品水蜜桃| 日韩一区精品视频| 麻豆国产欧美日韩综合精品二区| 精品亚洲国内自在自线福利| 国产精品一区二区91| 成人国产视频在线观看 | 国产精品自拍毛片| 成人性生交大片免费看视频在线 | 不卡电影免费在线播放一区| 95精品视频在线| 在线电影院国产精品| 337p粉嫩大胆噜噜噜噜噜91av | 中文字幕成人av| 综合久久久久久| 日本美女一区二区三区视频| 国产一区二区精品久久| 色偷偷一区二区三区| 欧美人与性动xxxx| 久久婷婷国产综合精品青草| 亚洲欧洲精品一区二区精品久久久| 亚洲综合激情另类小说区| 久久99精品久久久久久国产越南 | 懂色av一区二区三区免费观看 | 日本成人在线网站| 国产69精品久久99不卡| 色欧美片视频在线观看在线视频| 91精品国模一区二区三区| 国产婷婷一区二区| 午夜精品福利一区二区蜜股av | 国产一区在线不卡| 色婷婷综合久久久久中文一区二区 | 中文文精品字幕一区二区| 亚洲高清免费在线| 成人一二三区视频| 91精品国产美女浴室洗澡无遮挡| 欧美国产精品中文字幕| 免费欧美在线视频| 972aa.com艺术欧美| 久久先锋资源网| 日韩制服丝袜av| 91福利在线导航| 国产精品美女久久久久久| 激情综合色综合久久| 欧美日韩视频在线第一区| 国产精品乱人伦| 国产美女久久久久| 日韩午夜在线观看视频| 亚洲成人在线网站| 91福利在线看| 亚洲色图色小说| 国产经典欧美精品| 日韩欧美一二区| 日韩vs国产vs欧美| 欧美在线观看禁18| 亚洲综合免费观看高清在线观看| 成人黄色小视频在线观看| 久久天堂av综合合色蜜桃网| 视频一区二区三区在线| 精品视频在线免费看| 亚洲欧美日本在线| 99久久精品情趣| 亚洲欧洲av色图| 91在线小视频| 亚洲欧洲一区二区三区| gogogo免费视频观看亚洲一| 中文字幕不卡的av| 丰满白嫩尤物一区二区| 国产精品三级在线观看| 成人天堂资源www在线| 中文字幕中文在线不卡住| 成人午夜碰碰视频| 亚洲特级片在线| 欧美系列亚洲系列|