⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpclientengine.cpp

📁 symbian uiq 例子代码,功能包括文件断点续传、编辑通讯录、后台短信回复等
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        User::LeaveIfError(file.Open(fs, iFileName, EFileRead | EFileStream));
        HBufC8 *aFileBuffer = HBufC8::NewL(iFileSize);
		TPtr8 ptr = aFileBuffer->Des();
		TInt temp = (iCatche == 0) ? 204800 : iCatche * 102400;
		TInt catche = iFileSize > temp ? temp : iFileSize;
		file.Read(iPos, ptr, catche);
        file.Close();
        fs.Close();
		if (!iPostData)
		{
			iPostData = HBufC8::NewL(aFileBuffer->Length());
		}
		else
		{
			iPostData = iPostData->ReAllocL(iPostData->Length() + aFileBuffer->Length());
		}        
        iPostData->Des().Append(*aFileBuffer);
        delete aFileBuffer;
    }
	TBuf8<256> iUri;
	iUri.Copy(KServerUrl);
	if (aPostContent)
	{
		iUri.Append(url);
	}
	else
	{
		iUri.Append(aText);		
	}
	const TDesC* temp = &aText;
	delete temp;
	temp = NULL;
	delete aPostContent;
	aPostContent = NULL;
    iUriParser.Parse(iUri);

	//TBuf8<20> aProxy8(_L8("10.0.0.172:80"));
	//RStringF iPrxAddr = iSession.StringPool().OpenFStringL(aProxy8);
	//CleanupClosePushL(iPrxAddr);
	//THTTPHdrVal iPrxUsage(iSession.StringPool().StringF(HTTP::EUseProxy,RHTTPSession::GetTable()));
	//iSession.ConnectionInfo().SetPropertyL(iSession.StringPool().StringF(HTTP::EProxyUsage,RHTTPSession::GetTable()), iPrxUsage);
	//iSession.ConnectionInfo().SetPropertyL(iSession.StringPool().StringF(HTTP::EProxyAddress,RHTTPSession::GetTable()), iPrxAddr);
	//CleanupStack::PopAndDestroy();


    iTransaction = iSession.OpenTransactionL(iUriParser,
                                             *this,
                                             iSession.StringPool().StringF(HTTP::EPOST, RHTTPSession::GetTable()));
    RHTTPHeaders headers = iTransaction.Request().GetHeaderCollection();
    AddHeaderL(headers, HTTP::EUserAgent, KUserAgent);
    AddHeaderL(headers, HTTP::EAccept, KAccept);
	AddHeaderL(headers, HTTP::EContentType, KPostContentType);
    MHTTPDataSupplier *dataSupplier = this;
    iTransaction.Request().SetBody(*dataSupplier);
    iTransaction.SubmitL();
}

/**
 *	上传文件
 **/
void CHTTPClientEngine::PostUploadRequestL(const TDesC &aText, const TDesC *aFullPath, const TDesC *aPostContent, TInt aFsize, TInt aPos, TInt aCatche)
{
    iFileName.Copy(*aFullPath);
    iFileSize = aFsize;	
	iPos = aPos;
	iCatche = aCatche;
    ////log
	TBuf<256> temp;
	temp.Append(_L("post url : "));
	temp.Append(aText);
	RLog::Log(temp);
	TBuf<256> ss;
	ss.Append(_L("post data : "));
	if (aPostContent)
	{
		ss.Append(*aPostContent);
	}	
	RLog::Log(ss);

	PostRequestL(aText, aPostContent, EUp);
}

/**
 *	下载
 **/
void CHTTPClientEngine::PostDownloadRequestL(const TDesC &aText, const TDesC &aFname)
{
    iFileName.Copy(aFname);
    //PostRequestL(aText, EDown);
}

/**
 * 解析一个URI
 * @param aUri The URI to be parsed
 */
void CHTTPClientEngine::ParseUriL(const TDesC &aUri)
{
    // Convert the URI to an 8-bit descriptor
    // then set iUriParser to point at it
    if (iUri)
    {
        delete iUri;
        iUri = NULL;
    }
    iUri = HBufC8::NewL(aUri.Length());
    iUri->Des().Copy(aUri);
    User::LeaveIfError(iUriParser.Parse(*iUri));
}


/**
 * Add a header to a header set
 *
 * @param aHeaders The header set to be modified
 * @param aHeaderField The name of the header to be added
 * @param aHeaderValue The value for the header to be added
 */
void CHTTPClientEngine::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();
}


/**
 * Cancel any outstanding transaction
 */
void CHTTPClientEngine::Cancel()
{
    iTransaction.Cancel();
}

/**
 *	
 **/
TBool CHTTPClientEngine::GetNextDataPart(TPtrC8 &aDataPart)
{
    if (iPostData)
    {
        aDataPart.Set(iPostData->Des());
    }
    return ETrue;
}

/**
 *	
 **/
void CHTTPClientEngine::ReleaseData()
{
    if (iPostData)
    {
        delete iPostData;
        iPostData = NULL;
    }
}

/**
 *	
 **/
TInt CHTTPClientEngine::Reset()
{
    return KErrNone;
}

/**
 *	
 **/
TInt CHTTPClientEngine::OverallDataSize()
{
    if (iPostData)
    {
        return iPostData->Length();
    }
    else
    {
        return KErrNotFound ;
    }
}

/**
 * 用户启动时登录
 **/
void CHTTPClientEngine::LunachRegister(TInt aUid)
{
	_LIT(KALOGIN,"login?%d@%d@%S@10000@4");//aid,uid,imei
	TBuf<64> login;
	_LIT(BLANK,"");
	login.Format(KALOGIN, 0, 0, &BLANK);
	HBufC* loginUrl = HBufC::NewL(256);
	TPtr des = loginUrl->Des();
	des.Append(KServerUrl);
	des.Append(login);
	//转换为tbuf
	TBuf<256> url;
	url.Append(des);
	//删除hbuf
	delete loginUrl;
	loginUrl = NULL;
	//新内容
	TBuf<256> uri8;
	url.LowerCase();
	if(url.Find(KHttpPrefix) == KErrNotFound
		&& url.Find(KHttpsPrefix) == KErrNotFound)
	{
		// If the uri does not contain http or https, 
		// use the default, "http://"
		uri8.Append(KHttpPrefix);
		uri8.Append(url);
	} else 
	{
		uri8.Copy(url);
	}
	// Start transaction
	GetRequestL(uri8);
}

TBool CHTTPClientEngine::GetCredentialsL( const TUriC8& aURI, RString aRealm, RStringF aAuthenticationType, RString& aUsername, RString& aPassword )
{
	// aURI, aReal and aAuthenticationType are informational only. We only need 
	// to set aUsername and aPassword and return ETrue, if aUsername and 
	// aPassword are provided by user.

	// Informational only
	TBuf<128> authType;
	TBuf<128> uri;
	TBuf<256> authText;
	authType.Copy(aAuthenticationType.DesC());
	uri.Copy(aURI.UriDes());
	_LIT(KAuthRequired, "%S requires %S authentication.");
	authText.Format(KAuthRequired, &uri, &authType);
	_LIT(KAuthNote, "Authentication required.");
	//CEikonEnv::Static()->InfoWinL(KAuthNote, authText);

	// Query user name and password
	TBuf<256> userName;
	TBuf<256> password;
// 	CAknMultiLineDataQueryDialog* dlg = 
// 		CAknMultiLineDataQueryDialog::NewL(userName, password);
// 
// 	if (!dlg->ExecuteLD(R_DIALOG_USER_PASSWORD_QUERY))
// 	{
// 		return EFalse; // No credentials given; must return EFalse
// 	}
	// Set aUsername and aPassword
	TBuf8<256> temp;
	temp.Copy(userName);
	TRAPD(err, aUsername = aRealm.Pool().OpenStringL(temp));
	if (!err) 
	{
		temp.Copy(password);
		TRAP(err, aPassword = aRealm.Pool().OpenStringL(temp));
		if (!err) return ETrue;
	}

	// Return ETrue if user has given credentials (username and password), 
	// otherwise EFlase
	return EFalse;
}

/*
 *	续传数据
 */
void CHTTPClientEngine::ContinueUpload(TDesC* aUrl)
{	
	HBufC* loginUrl = HBufC::NewL(256);
	TPtr des = loginUrl->Des();
	des.Append(KServerUrl);
	des.Append(*aUrl);
	delete aUrl;
	aUrl = NULL;
	//转换为tbuf
	TBuf<256> url;
	url.Append(des);
	//删除hbuf
	delete loginUrl;
	loginUrl = NULL;
	//新内容
	TBuf<256> uri8;
	url.LowerCase();
	if(url.Find(KHttpPrefix) == KErrNotFound
		&& url.Find(KHttpsPrefix) == KErrNotFound)
	{
		// If the uri does not contain http or https, 
		// use the default, "http://"
		uri8.Append(KHttpPrefix);
		uri8.Append(url);
	} else 
	{
		uri8.Copy(url);
	}
	// Start transaction
	GetRequestL(uri8);
}

/*
 *	检查更新
 */
void CHTTPClientEngine::CheckUpdate()
{
	_LIT(KAUPDATE,"update?10000@4");	
	HBufC* loginUrl = HBufC::NewL(256);
	TPtr des = loginUrl->Des();
	des.Append(KServerUrl);
	des.Append(KAUPDATE);
	//转换为tbuf
	TBuf<256> url;
	url.Append(des);
	//删除hbuf
	delete loginUrl;
	loginUrl = NULL;
	//新内容
	TBuf<256> uri8;
	url.LowerCase();
	if(url.Find(KHttpPrefix) == KErrNotFound
		&& url.Find(KHttpsPrefix) == KErrNotFound)
	{
		// If the uri does not contain http or https, 
		// use the default, "http://"
		uri8.Append(KHttpPrefix);
		uri8.Append(url);
	} else 
	{
		uri8.Copy(url);
	}
	// Start transaction
	GetRequestL(uri8);
}

TInt CHTTPClientEngine::MHFSessionRunError( TInt aError, const THTTPSessionEvent& aEvent )
{
	RLog::Log(_L("wrong"));
	return aError;
}

void CHTTPClientEngine::MHFSessionRunL( const THTTPSessionEvent& aEvent )
{
	RLog::Log(_L("session = ok"));
}
//end file

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -