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

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

?? gnhttpdown.cpp

?? SYMIBNA 支持大型文件斷點續傳的引擎源代碼
?? CPP
字號:
/*
 ============================================================================
 Name        : GnHttpDown.cpp
 Author      : cheney.kan
 Version     : 1.0
 Copyright   : Your copyright notice
 Description : CGnHttpDown implementation
 ============================================================================
 */

#include <rhttpheaders.h>
#include <chttpformencoder.h>

#include <GnHttpDown.h>
#include <InternalGnHttpDown.h>
#include "GnHDRec.h"

_LIT8(KGnHDAcceptType, "*/*"); // any thing is ok

_LIT8(KGnHDBlank, ""); // no thing
_LIT8(KGnHDSpace, " "); // a Space

_LIT8(KGnUserAgent, "GnHttpDownloader 0.9");    // Name of this client app

_LIT8(KGnHDFromTo, "-");
_LIT8(KGnHDRangeTxt, "bytes=");





CGnHttpDown* CGnHttpDown::NewLC(MGnHTTPTransactionCallback & aNotifier)
    {
    CGnHttpDown* self = new (ELeave) CGnHttpDown();
    CleanupStack::PushL(self);
    self->ConstructL(aNotifier);
    return self;
    }

CGnHttpDown* CGnHttpDown::NewL(MGnHTTPTransactionCallback & aNotifier)
    {
    CGnHttpDown* self = CGnHttpDown::NewLC(aNotifier);
    CleanupStack::Pop(); // self;
    return self;
    }


void CGnHttpDown::SetFileUriL(const TDesC & aUri)
    {
    /*
    DeleteAndNull(iUri);
    iUri = HBufC8::NewL(aUri.Length());
    iUri->Des().Copy(aUri);
    User::LeaveIfError(iUriParser.Parse(*iUri));
    //*/
    __ASSERT_ALWAYS(iGnHDStatus != EDownlonding, 
        GnHttpDownPanic(EGnHttpDownBadStatus));
    
    iCurFileInfo->iUri.Copy(aUri);
    User::LeaveIfError(iUriParser.Parse(iCurFileInfo->iUri));

    iHasSepecUriInfo = ETrue;
    if(iHasSepecRecInfo)
        iGnHDStatus=EInitial;
    }

HBufC * CGnHttpDown::GetFileUriL() const
    {
    //__ASSERT_DEBUG(iUri != NULL, GnHttpDownPanic(EGnHttpDownNullPointer));
    HBufC * uri = HBufC::NewL(iCurFileInfo->iUri.Length());
    uri->Des().Copy(iCurFileInfo->iUri);
    return uri;
    }

void CGnHttpDown::RemoveUriInfoFromRecL(const TDesC & aUri)
{
    HBufC * internalUri = GetFileUriL();
    CleanupStack::PushL(internalUri);
    if(aUri == static_cast<const TDesC &>(internalUri->Des()) 
        && iGnHDStatus == CGnHttpDown::EDownlonding)
        {
        User::Leave(KErrInUse);
        }
    CleanupStack::PopAndDestroy(internalUri); internalUri = NULL;
    
    HBufC8 * internalUri8 = HBufC8::NewLC(aUri.Length());
    internalUri8->Des().Copy(aUri);
    iRecEngine->RemoveUriInfoFromRecL(*internalUri8);
    CleanupStack::PopAndDestroy(internalUri8); internalUri8 = NULL;
}

void CGnHttpDown::SetRecFileL(const TDesC & aRecFile)
{
    //__ASSERT_ALWAYS(!iIsRunning, GnHttpDownPanic(EGnHttpDownBadStatus));
    __ASSERT_ALWAYS(iGnHDStatus != EDownlonding, 
        GnHttpDownPanic(EGnHttpDownBadStatus));
    //iGnHDStatus=EInitial;
    TRAPD(err, iRecEngine->OpenRecFileL(aRecFile););
    if(err != KErrNone)
        iRecEngine->OpenOrCreateRecFileL(aRecFile);

    iHasSepecRecInfo = ETrue;
    if(iHasSepecUriInfo)
        iGnHDStatus=EInitial;
}

const TDesC & CGnHttpDown::GetRecFileName() const
{
    return iRecEngine->GetRecFileName();
}

void CGnHttpDown::Stop()
{
    Cancel();
}

void CGnHttpDown::DownloadL(
    CGnHttpDown::TDownType aReqType, 
    TInt32 aFromBytes, 
    TInt32 aToBytes, 
    TBool aisSupportResume)
{   
    //__ASSERT_ALWAYS(!iIsRunning, GnHttpDownPanic(EGnHttpDownBadStatus));
    __ASSERT_ALWAYS(iGnHDStatus == EInitial, 
        GnHttpDownPanic(EGnHttpDownBadStatus));
    
    //iIsRunning = ETrue;
    iIsSupportResume = aisSupportResume;

    // Create the transaction
    iTransaction = iSession.OpenTransactionL(iUriParser, *this,
        iSession.StringPool().StringF(aReqType, RHTTPSession::GetTable()));

    // Set transaction headers
    RHTTPHeaders headers = iTransaction.Request().GetHeaderCollection();
    AddHeaderL(headers, HTTP::EUserAgent, KGnUserAgent);
    AddHeaderL(headers, HTTP::EAccept, KGnHDAcceptType);

    iRange.Zero();
    iRange.Append(KGnHDRangeTxt); // "bytes="
    iRange.AppendNum(aFromBytes); // for example, iRange = "bytes=1023"
    iRange.Append(KGnHDFromTo); // then, iRange = "bytes=1023-"
    
    //if(aToBytes > aFromBytes)
    if(aToBytes >= 0)
        iRange.AppendNum(aToBytes); // then, iRange = "bytes=1023-2009", 
    //else iRange = "bytes=1023-"
        
    AddHeaderL(headers, HTTP::ERange, iRange);
    if(HTTP::EPOST == aReqType)
        {
        __ASSERT_DEBUG(iFormEncoder != NULL, GnHttpDownPanic(EGnHttpDownNullPointer));
        // Set the form encoder as the data supplier
        iTransaction.Request().SetBody(*iFormEncoder);
        }
    iCurFileInfo->iPoint = aFromBytes;
    iGnHDStatus=EDownlonding;
    // Submit the request
    iTransaction.SubmitL();
}

TInt CGnHttpDown::DownloadResumeL(CGnHttpDown::TDownType aReqType, 
        TInt32 aToBytes, TBool aisSupportResume)
{
    //__ASSERT_ALWAYS(!iIsRunning, GnHttpDownPanic(EGnHttpDownBadStatus));
    __ASSERT_ALWAYS(iGnHDStatus == EInitial, 
        GnHttpDownPanic(EGnHttpDownBadStatus));
    //iGnHDStatus=EDownlonding;
    
    TInt errCode = KErrNotFound;
    // search the uri in the record table
    TInt32 fromBytes = iRecEngine->GetPositionPreTimeL(iCurFileInfo->iUri);
    // if find, deliver the process to DownloadL
    if(fromBytes > 0)
        {
        errCode = KErrNone;
        //TUint32 fromBytes = 0;
    
        DownloadL(aReqType, fromBytes, aToBytes, aisSupportResume);
        }

    // else return KErrNotFound
    
    return errCode;
}

void CGnHttpDown::SetPostDataBodyL(const TDesC &aFieldName, const TDesC &aFieldValue)
{
    DeleteAndNull(iFormEncoder);
    iFormEncoder = CHTTPFormEncoder::NewL();
    HBufC8 * fieldName = HBufC8::NewLC(aFieldName.Length());
    fieldName->Des().Copy(aFieldName);
    HBufC8 * fieldValue = HBufC8::NewLC(aFieldValue.Length());
    fieldValue->Des().Copy(aFieldValue);
    iFormEncoder->AddFieldL(*fieldName, *fieldValue);

    CleanupStack::PopAndDestroy(fieldValue);
    CleanupStack::PopAndDestroy(fieldName);
}

void CGnHttpDown::Cancel()
{
    iTransaction.Cancel();
    if(EDownlonding == iGnHDStatus)
    {
        iGnHDStatus = EInitial;
    }
}

CGnHttpDown::GnHDStatus CGnHttpDown::CurrentStatus()
{
    return iGnHDStatus;
}

/*
void CGnHttpDown::CloseAndReset()
{
    Cancel();
}
//*/

CGnHttpDown::~CGnHttpDown()
    {
    DeleteAndNull(iResponseBuffer);
    //DeleteAndNull(iUri);
    DeleteAndNull(iFormEncoder);
    DeleteAndNull(iRecEngine);
    DeleteAndNull(iCurFileInfo);
    iSession.Close();
    }

CGnHttpDown::CGnHttpDown()
    {
    // No implementation required
    }




void CGnHttpDown::ConstructL(MGnHTTPTransactionCallback & aNotifier)
    {
    iUiNotifier = &aNotifier;
    
    iSession.OpenL();
    
    // Construct the form encoder
    iFormEncoder = CHTTPFormEncoder::NewL();
    iFormEncoder->AddFieldL(KGnHDSpace, KGnHDSpace); // the content is blank
    
    //DeleteAndNull(iUri);
    //iUri = HBufC8::NewL(1);
    iCurFileInfo = new (ELeave) CGnHDRecFmt;
    iRecEngine = CGnHDRec::NewL();
    iGnHDStatus = EUninitial;
    }

/*
void CGnHttpDown::ParseUriL(const TDesC& aUri)
{
    DeleteAndNull(iUri);
    iUri = HBufC8::NewL(aUri.Length());
    iUri->Des().Copy(aUri);
    User::LeaveIfError(iUriParser.Parse(*iUri));
}
//*/

void CGnHttpDown::AddHeaderL(
    RHTTPHeaders aHeaders, 
    TInt aHeaderField, 
    const TDesC8& aHeaderValue)
{
    RStringPool stringPool = iSession.StringPool();
    RStringF valStr = stringPool.OpenFStringL(aHeaderValue);
    THTTPHdrVal headerVal(valStr);
    aHeaders.SetFieldL(stringPool.StringF(aHeaderField, RHTTPSession::GetTable()), headerVal);
    valStr.Close();
}

void CGnHttpDown::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
{
    RDebug::Printf("aEvent.iStatus=%d", aEvent.iStatus);

    MHTTPDataSupplier* dataSupplier = NULL;
    TPtrC8 ptr;
    
    switch (aEvent.iStatus)
    {
        case THTTPEvent::EGotResponseHeaders:
        {
        }
            break;

        case THTTPEvent::EGotResponseBodyData:
        {   
            // Get text of response body
            dataSupplier = aTransaction.Response().Body();
            dataSupplier->GetNextDataPart(ptr);
                        
            if(iIsSupportResume)
            {
                iCurFileInfo->iPoint += ptr.Size();

                // update the recored file.
                if(iUiNotifier->ShouldUpdateTheResumeRecL(ptr, this))
                {
                    iRecEngine->UpdateRecPosL(*iCurFileInfo);
                }
            }
        }
            break;

        case THTTPEvent::EResponseComplete:
        {
            iCurFileInfo->iPoint = 0;
            
            iGnHDStatus = EInitial;
            // remove this record from the record file
            if(iIsSupportResume)
                iRecEngine->DeleteRecAndCloseL();
        }
            break;
    }

    if(dataSupplier != NULL)
        {
        iUiNotifier->MHFRunL(aTransaction, aEvent, ptr, this);
        dataSupplier->ReleaseData();
        }
    else
        {
        iUiNotifier->MHFRunL(aTransaction, aEvent, KGnHDBlank, this);
        }
}

TInt CGnHttpDown::MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
{
    return iUiNotifier->MHFRunError(aError, aTransaction, aEvent, this);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美高清视频www夜色资源网| 欧美精品一区二区三区在线播放| 欧美色图激情小说| 久久五月婷婷丁香社区| 日韩理论在线观看| 国内偷窥港台综合视频在线播放| 99久精品国产| 欧美精彩视频一区二区三区| 日韩综合小视频| 色婷婷激情综合| 日本一区二区三区四区| 久久国产欧美日韩精品| 欧美午夜精品理论片a级按摩| 国产精品精品国产色婷婷| 国产一区在线观看麻豆| 91精品国产乱码久久蜜臀| 一区二区三区四区在线| www.欧美.com| 中国色在线观看另类| 国产成人高清视频| 久久久久久久网| 国产中文一区二区三区| 欧美成人性福生活免费看| 亚洲成人你懂的| 欧美三级电影网站| 夜夜亚洲天天久久| 欧美日韩在线观看一区二区 | 国产精品国产三级国产aⅴ中文| 蓝色福利精品导航| 欧美一区二区三区婷婷月色| 午夜欧美在线一二页| 欧美日韩精品专区| 天堂精品中文字幕在线| 7777精品伊人久久久大香线蕉的| 亚洲一区二区三区自拍| 欧美亚洲综合色| 五月激情综合色| 欧美一区二区播放| 狠狠色狠狠色综合| 国产调教视频一区| 99久久婷婷国产| 一区二区三区四区激情| 欧美日韩亚洲高清一区二区| 亚洲风情在线资源站| 日韩午夜电影在线观看| 国产在线乱码一区二区三区| 国产三级三级三级精品8ⅰ区| 国产成人在线视频免费播放| 国产精品久久久久三级| 日本韩国一区二区三区视频| 亚洲永久免费av| 欧美久久久久久蜜桃| 捆绑变态av一区二区三区| 国产欧美日韩三级| 在线日韩一区二区| 蜜臀av国产精品久久久久| 欧美国产欧美综合| 欧美亚洲另类激情小说| 色偷偷88欧美精品久久久| 五月综合激情婷婷六月色窝| 精品国产乱码久久| 波多野结衣在线一区| 亚洲成人免费观看| 久久综合视频网| 在线影视一区二区三区| 九九视频精品免费| 自拍偷拍亚洲综合| 精品美女在线播放| 色婷婷久久久综合中文字幕| 狠狠色狠狠色综合系列| 一区二区视频在线看| 日韩精品一区二区三区蜜臀| 91视频观看视频| 国内精品第一页| 亚洲国产sm捆绑调教视频| 久久婷婷一区二区三区| 欧美三区在线视频| 成人免费毛片app| 麻豆久久久久久久| 亚洲一区二区三区四区在线观看 | 亚洲高清在线精品| 中文字幕精品在线不卡| 6080亚洲精品一区二区| 成人aa视频在线观看| 韩国在线一区二区| 亚洲国产美国国产综合一区二区| 国产人久久人人人人爽| 日韩一卡二卡三卡| 欧美在线高清视频| 91在线视频18| 国产白丝精品91爽爽久久| 裸体歌舞表演一区二区| 亚洲国产日韩a在线播放性色| 国产精品美女久久久久久2018| 欧美一级片在线看| 在线播放91灌醉迷j高跟美女| 91免费版在线看| 成人av在线网| 国产精品99久久久久久有的能看| 免费高清成人在线| 日日夜夜一区二区| 亚洲高清不卡在线观看| 一区2区3区在线看| 一区二区成人在线| 一区二区三区毛片| 亚洲一区在线视频观看| 亚洲色欲色欲www| 成人欧美一区二区三区在线播放| 国产精品青草综合久久久久99| 国产欧美一区视频| 国产午夜精品一区二区三区四区| 精品日韩一区二区三区免费视频| 欧美一区二区视频在线观看2020 | 欧美国产一区二区在线观看 | 亚洲国产你懂的| 亚洲成a人片综合在线| 亚洲国产乱码最新视频| 午夜视频在线观看一区二区三区| 午夜精品久久久久久久99水蜜桃| 亚洲午夜久久久久中文字幕久| 夜夜爽夜夜爽精品视频| 亚洲综合免费观看高清在线观看| 亚洲综合一区二区精品导航| 亚洲第一成人在线| 免费观看一级欧美片| 国产一区二区三区在线观看免费| 国产九九视频一区二区三区| 成人精品国产免费网站| 色综合网站在线| 欧美日韩精品欧美日韩精品一综合| 欧美色视频在线观看| 日韩午夜在线观看视频| 国产色一区二区| 悠悠色在线精品| 久久精品国产久精国产爱| 国产精品一区二区男女羞羞无遮挡| 成人av小说网| 在线观看成人免费视频| 91精品国产综合久久福利软件| 精品国内片67194| 亚洲品质自拍视频网站| 国产精品国产三级国产专播品爱网| 精品久久国产字幕高潮| 色综合视频一区二区三区高清| 欧美怡红院视频| 欧美成人aa大片| 国产精品视频一区二区三区不卡| 国产精品二区一区二区aⅴ污介绍| 日韩免费电影网站| 国产午夜三级一区二区三| 极品少妇xxxx偷拍精品少妇| 欧美疯狂做受xxxx富婆| 亚洲国产日韩综合久久精品| 色综合久久久网| 中文字幕佐山爱一区二区免费| 国产精一区二区三区| 久久久91精品国产一区二区精品| 奇米影视7777精品一区二区| 欧美剧情片在线观看| 亚洲国产日日夜夜| 欧美老肥妇做.爰bbww| 亚洲在线视频网站| 欧美色图一区二区三区| 亚洲一区二区三区在线播放| 91国偷自产一区二区开放时间| 亚洲欧洲精品一区二区精品久久久| 成人天堂资源www在线| 国产精品无码永久免费888| 国产美女娇喘av呻吟久久| 久久久久久久免费视频了| 国产东北露脸精品视频| 亚洲欧洲韩国日本视频| 不卡的电影网站| 亚洲日本青草视频在线怡红院 | 精品系列免费在线观看| 精品美女一区二区| 国产精品亚洲第一区在线暖暖韩国| 精品欧美黑人一区二区三区| 精品在线播放免费| 国产无一区二区| 91麻豆.com| 亚洲成人动漫av| 欧美岛国在线观看| 国产精品18久久久久久久久久久久| 国产午夜亚洲精品理论片色戒| 不卡电影免费在线播放一区| 一区二区国产盗摄色噜噜| 678五月天丁香亚洲综合网| 精品亚洲成av人在线观看| 国产精品精品国产色婷婷| 在线观看欧美精品| 久久99精品久久久久久| 久久久不卡影院| 色香色香欲天天天影视综合网| 午夜国产精品影院在线观看| 日韩欧美不卡在线观看视频| 成人一道本在线| 婷婷久久综合九色综合伊人色| www久久久久| 91成人在线免费观看|