예제 #1
0
Result inline downloadPageToSDCard(httpcContext* context, const short* filename, u32 size)
{
    Result ret = 0;
    u32 pos = 0, sz = 0;

    IFile_Open(FILE_LOC, filename, FILE_W);
    *((int *)FILE_LOC + 1) = 0;
    svcSleepThread(0x400000LL);

    while(pos < size)
    {
        sz = size - pos;

        sz = sz > BUF_LEN ? BUF_LEN : sz;

        ret = httpcReceiveData(context, BUF_LOC, sz);

        if(ret == HTTPC_RESULTCODE_DOWNLOADPENDING)
        {
            ret = httpcGetDownloadSizeState(context, &pos, 0);
            if(ret)
                return ret;
            goto filewrite;
        }
        else if(ret)
            return ret;
        else
        {
            pos += sz;
filewrite:  IFile_Write(FILE_LOC, WRITTEN_LOC, BUF_LOC, sz);
            svcSleepThread(0x400000LL);
        }

    }

    return 0;
}
예제 #2
0
Result httpcDownloadData(httpcContext *context, u8* buffer, u32 size, u32 *downloadedsize)
{
	Result ret=0;
	u32 contentsize=0;
	u32 pos=0, sz=0;

	if(downloadedsize)*downloadedsize = 0;

	ret=httpcGetDownloadSizeState(context, NULL, &contentsize);
	if(ret!=0)return ret;

	while(pos < size)
	{
		sz = size - pos;

		ret=httpcReceiveData(context, &buffer[pos], sz);

		if(ret==HTTPC_RESULTCODE_DOWNLOADPENDING)
		{
			ret=httpcGetDownloadSizeState(context, &pos, NULL);
			if(ret!=0)return ret;
		}
		else if(ret!=0)
		{
			return ret;
		}
		else
		{
			pos+= sz;
		}

		if(downloadedsize)*downloadedsize = pos;
	}

	return 0;
}