diff --git a/libctru/include/3ds/services/httpc.h b/libctru/include/3ds/services/httpc.h index 6123b34..481c8c3 100644 --- a/libctru/include/3ds/services/httpc.h +++ b/libctru/include/3ds/services/httpc.h @@ -82,6 +82,15 @@ Result httpcAddRequestHeaderField(httpcContext *context, const char* name, const */ Result httpcAddPostDataAscii(httpcContext *context, const char* name, const char* value); +/** + * @brief Adds a POST form field with binary data to a HTTP context. + * @param context Context to use. + * @param name Name of the field. + * @param value The binary data to pass as a value. + * @param len Length of the binary data which has been passed. + */ +Result httpcAddPostDataBinary(httpcContext *context, const char* name, const u8* value, u32 len); + /** * @brief Adds a POST body to a HTTP context. * @param context Context to use. diff --git a/libctru/source/services/httpc.c b/libctru/source/services/httpc.c index 4b77dfa..afd6b64 100644 --- a/libctru/source/services/httpc.c +++ b/libctru/source/services/httpc.c @@ -303,6 +303,27 @@ Result httpcAddPostDataAscii(httpcContext *context, const char* name, const char return cmdbuf[1]; } +Result httpcAddPostDataBinary(httpcContext *context, const char* name, const u8* value, u32 len) +{ + u32* cmdbuf=getThreadCommandBuffer(); + + int name_len=strlen(name)+1; + + cmdbuf[0]=IPC_MakeHeader(0x13, 3, 4); // 0x1300C4 + cmdbuf[1]=context->httphandle; + cmdbuf[2]=name_len; + cmdbuf[3]=len; + cmdbuf[4]=IPC_Desc_StaticBuffer(name_len,3); + cmdbuf[5]=(u32)name; + cmdbuf[6]=IPC_Desc_Buffer(len,IPC_BUFFER_R); + cmdbuf[7]=(u32)value; + + Result ret=0; + if(R_FAILED(ret=svcSendSyncRequest(context->servhandle)))return ret; + + return cmdbuf[1]; +} + Result httpcAddPostDataRaw(httpcContext *context, const u32* data, u32 len) { u32* cmdbuf=getThreadCommandBuffer();