Use IPC helpers for httpc

This commit is contained in:
Lectem 2015-09-09 15:26:56 -04:00
parent 44d9f0e940
commit 8975e848d7

View File

@ -3,6 +3,7 @@
#include <3ds/svc.h> #include <3ds/svc.h>
#include <3ds/srv.h> #include <3ds/srv.h>
#include <3ds/services/httpc.h> #include <3ds/services/httpc.h>
#include <3ds/ipc.h>
Handle __httpc_servhandle = 0; Handle __httpc_servhandle = 0;
@ -146,10 +147,10 @@ Result HTTPC_Initialize(Handle handle)
{ {
u32* cmdbuf=getThreadCommandBuffer(); u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x10044; //request header code cmdbuf[0]=IPC_MakeHeader(0x1,1,4); // 0x10044
cmdbuf[1]=0x1000; //unk cmdbuf[1]=0x1000; //unk
cmdbuf[2]=0x20;//processID header, following word is set to processID by the arm11kernel. cmdbuf[2]=IPC_Desc_CurProcessHandle();
cmdbuf[4]=0; cmdbuf[4]=IPC_Desc_SharedHandles(1);
cmdbuf[5]=0;//Some sort of handle. cmdbuf[5]=0;//Some sort of handle.
Result ret=0; Result ret=0;
@ -163,10 +164,10 @@ Result HTTPC_CreateContext(Handle handle, char* url, Handle* contextHandle)
u32* cmdbuf=getThreadCommandBuffer(); u32* cmdbuf=getThreadCommandBuffer();
u32 l=strlen(url)+1; u32 l=strlen(url)+1;
cmdbuf[0]=0x20082; //request header code cmdbuf[0]=IPC_MakeHeader(0x2,2,2); // 0x20082
cmdbuf[1]=l; cmdbuf[1]=l;
cmdbuf[2]=0x01; //unk cmdbuf[2]=0x01; //unk
cmdbuf[3]=(l<<4)|0xA; cmdbuf[3]=IPC_Desc_Buffer(l,IPC_BUFFER_R);
cmdbuf[4]=(u32)url; cmdbuf[4]=(u32)url;
Result ret=0; Result ret=0;
@ -181,9 +182,9 @@ Result HTTPC_InitializeConnectionSession(Handle handle, Handle contextHandle)
{ {
u32* cmdbuf=getThreadCommandBuffer(); u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x80042; //request header code cmdbuf[0]=IPC_MakeHeader(0x8,1,2); // 0x80042
cmdbuf[1]=contextHandle; cmdbuf[1]=contextHandle;
cmdbuf[2]=0x20; //unk, constant afaict cmdbuf[2]=IPC_Desc_CurProcessHandle();
Result ret=0; Result ret=0;
if((ret=svcSendSyncRequest(handle)))return ret; if((ret=svcSendSyncRequest(handle)))return ret;
@ -195,7 +196,7 @@ Result HTTPC_SetProxyDefault(Handle handle, Handle contextHandle)
{ {
u32* cmdbuf=getThreadCommandBuffer(); u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0xe0040; //request header code cmdbuf[0]=IPC_MakeHeader(0xE,1,0); // 0xE0040
cmdbuf[1]=contextHandle; cmdbuf[1]=contextHandle;
Result ret=0; Result ret=0;
@ -208,7 +209,7 @@ Result HTTPC_CloseContext(Handle handle, Handle contextHandle)
{ {
u32* cmdbuf=getThreadCommandBuffer(); u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x30040; //request header code cmdbuf[0]=IPC_MakeHeader(0x3,1,0); // 0x30040
cmdbuf[1]=contextHandle; cmdbuf[1]=contextHandle;
Result ret=0; Result ret=0;
@ -224,13 +225,13 @@ Result HTTPC_AddRequestHeaderField(Handle handle, Handle contextHandle, char* na
int name_len=strlen(name)+1; int name_len=strlen(name)+1;
int value_len=strlen(value)+1; int value_len=strlen(value)+1;
cmdbuf[0]=0x1100c4; //request header code cmdbuf[0]=IPC_MakeHeader(0x11,3,4); // 0x1100C4
cmdbuf[1]=contextHandle; cmdbuf[1]=contextHandle;
cmdbuf[2]=name_len; cmdbuf[2]=name_len;
cmdbuf[3]=value_len; cmdbuf[3]=value_len;
cmdbuf[4]=(name_len<<14)|0xC02; cmdbuf[4]=IPC_Desc_StaticBuffer(name_len,3);
cmdbuf[5]=(u32)name; cmdbuf[5]=(u32)name;
cmdbuf[6]=(value_len<<4)|0xA; cmdbuf[6]=IPC_Desc_Buffer(value_len,IPC_BUFFER_R);
cmdbuf[7]=(u32)value; cmdbuf[7]=(u32)value;
Result ret=0; Result ret=0;
@ -243,7 +244,7 @@ Result HTTPC_BeginRequest(Handle handle, Handle contextHandle)
{ {
u32* cmdbuf=getThreadCommandBuffer(); u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x90040; //request header code cmdbuf[0]=IPC_MakeHeader(0x9,1,0); // 0x90040
cmdbuf[1]=contextHandle; cmdbuf[1]=contextHandle;
Result ret=0; Result ret=0;
@ -256,10 +257,10 @@ Result HTTPC_ReceiveData(Handle handle, Handle contextHandle, u8* buffer, u32 si
{ {
u32* cmdbuf=getThreadCommandBuffer(); u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0xB0082; //request header code cmdbuf[0]=IPC_MakeHeader(0xB,2,2); // 0xB0082
cmdbuf[1]=contextHandle; cmdbuf[1]=contextHandle;
cmdbuf[2]=size; cmdbuf[2]=size;
cmdbuf[3]=(size<<4)|12; cmdbuf[3]=IPC_Desc_Buffer(size,IPC_BUFFER_W);
cmdbuf[4]=(u32)buffer; cmdbuf[4]=(u32)buffer;
Result ret=0; Result ret=0;
@ -272,7 +273,7 @@ Result HTTPC_GetRequestState(Handle handle, Handle contextHandle, httpcReqStatus
{ {
u32* cmdbuf=getThreadCommandBuffer(); u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x50040; //request header code cmdbuf[0]=IPC_MakeHeader(0x5,1,0); // 0x50040
cmdbuf[1]=contextHandle; cmdbuf[1]=contextHandle;
Result ret=0; Result ret=0;
@ -287,7 +288,7 @@ Result HTTPC_GetDownloadSizeState(Handle handle, Handle contextHandle, u32* down
{ {
u32* cmdbuf=getThreadCommandBuffer(); u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x60040; //request header code cmdbuf[0]=IPC_MakeHeader(0x6,1,0); // 0x60040
cmdbuf[1]=contextHandle; cmdbuf[1]=contextHandle;
Result ret=0; Result ret=0;
@ -324,7 +325,7 @@ Result HTTPC_GetResponseStatusCode(Handle handle, Handle contextHandle, u32* out
{ {
u32* cmdbuf=getThreadCommandBuffer(); u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x220040; //request header code cmdbuf[0]=IPC_MakeHeader(0x22,1,0); // 0x220040
cmdbuf[1]=contextHandle; cmdbuf[1]=contextHandle;
Result ret=0; Result ret=0;