Symbian(RSocket DownLoad)模拟HTTP下载
2010-10-20 07:59:57 来源:WEB开发网if (!GetRespField(recv_buf, tmp_field, tmp_end, tmp_str))
return EFalse;
status = Str2Int(tmp_str.Left(3));
//取长度
file_length = 0;
tmp_field.Copy(_L8("Content-Length: "));
tmp_end.Copy(KHttpHdrDiv) ;
if (!GetRespField(recv_buf, tmp_field, tmp_end, tmp_str))
return EFalse;
file_length = Str2Int(tmp_str);
//取总长度
tmp_field.Copy(_L8("Content-Range: "));
tmp_end.Copy(KHttpHdrDiv) ;
if (GetRespField(recv_buf, tmp_field, tmp_end, tmp_str))
{//取到
int pos = tmp_str.LocateReverse('/');
if(pos >= 0)
{
int length = tmp_str.Length() - pos - 1;
file_length = Str2Int(tmp_str.Right(length));
}
}
if (status == 302||status == 301)
{
//跳转地址
tmp_field.Copy(_L8("Location: "));
tmp_end.Copy(KHttpHdrDiv) ;
if (!GetRespField(recv_buf, tmp_field, tmp_end, tmp_str))
return EFalse;
if (LocationUrl)
{
delete LocationUrl;
LocationUrl = NULL;
}
LocationUrl = CompleteUrl(tmp_str);
}
// set the jump length
jump_len = 0;
find_pos = recv_buf.Find(KHttpHdrEnd) ;
if (find_pos != KErrNotFound)
{
tmp_str.Copy(KHttpHdrEnd) ;
jump_len = find_pos + tmp_str.Length() ;
}
return ETrue;
}
//整个框架的核心已经介绍完了.
以上代码适合SYMBIAN 2nd,3rd,5th三个平台通用.
更多精彩
赞助商链接