📄 httpclientengine.cpp
字号:
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 + -