コード例 #1
0
ファイル: uds.c プロジェクト: Caboosium/ctrulib
static Result udsipc_DecryptBeaconData(udsNetworkStruct *network, u8 *tag0, u8 *tag1, udsNodeInfo *out)
{
	u32* cmdbuf=getThreadCommandBuffer();
	u32 tagsize = 0xfe;

	u32 saved_threadstorage[2];

	cmdbuf[0]=IPC_MakeHeader(0x1F,0,6); // 0x1F0006
	cmdbuf[1]=IPC_Desc_StaticBuffer(sizeof(udsNetworkStruct), 1);
	cmdbuf[2]=(u32)network;
	cmdbuf[3]=IPC_Desc_StaticBuffer(tagsize, 2);
	cmdbuf[4]=(u32)tag0;
	cmdbuf[5]=IPC_Desc_StaticBuffer(tagsize, 3);
	cmdbuf[6]=(u32)tag1;

	u32 * staticbufs = getThreadStaticBuffers();
	saved_threadstorage[0] = staticbufs[0];
	saved_threadstorage[1] = staticbufs[1];

	staticbufs[0] = IPC_Desc_StaticBuffer(0x280,0);
	staticbufs[1] = (u32)out;

	Result ret=0;
	ret=svcSendSyncRequest(__uds_servhandle);

	staticbufs[0] = saved_threadstorage[0];
	staticbufs[1] = saved_threadstorage[1];

	if(R_FAILED(ret))return ret;

	return cmdbuf[1];
}
コード例 #2
0
ファイル: apt.c プロジェクト: botanyaki/ctrulib
Result APT_AppletUtility(u32* out, u32 a, u32 size1, u8* buf1, u32 size2, u8* buf2)
{
	u32 saved_threadstorage[2];
	
	u32* cmdbuf=getThreadCommandBuffer();
	cmdbuf[0]=IPC_MakeHeader(0x4B,3,2); // 0x4B00C2
	cmdbuf[1]=a;
	cmdbuf[2]=size1;
	cmdbuf[3]=size2;
	cmdbuf[4]=IPC_Desc_StaticBuffer(size1,1);
	cmdbuf[5]=(u32)buf1;

	u32 *staticbufs = getThreadStaticBuffers();
	saved_threadstorage[0]=staticbufs[0];
	saved_threadstorage[1]=staticbufs[1];
	
	staticbufs[0]=IPC_Desc_StaticBuffer(size2,0);
	staticbufs[1]=(u32)buf2;
	
	Result ret=svcSendSyncRequest(aptuHandle);
	
	staticbufs[0]=saved_threadstorage[0];
	staticbufs[1]=saved_threadstorage[1];
	
	if(R_FAILED(ret))return ret;
	
	if(out)*out=cmdbuf[2];

	return cmdbuf[1];
}
コード例 #3
0
ファイル: ctr_system.c プロジェクト: DSkywalk/RetroArch
Result APT_ReceiveDeliverArg_(void* param, size_t param_size, void* hmac, size_t hmac_size, u64* source_pid, bool* received)
{
	u32 cmdbuf[16];
	cmdbuf[0]=IPC_MakeHeader(0x35,2,0);
	cmdbuf[1]=param_size;
	cmdbuf[2]=hmac_size;

	u32 saved_threadstorage[4];
	u32* staticbufs = getThreadStaticBuffers();
   saved_threadstorage[0]=staticbufs[0];
	saved_threadstorage[1]=staticbufs[1];
   saved_threadstorage[2]=staticbufs[2];
	saved_threadstorage[3]=staticbufs[3];
   staticbufs[0]=IPC_Desc_StaticBuffer(param_size, 0);
	staticbufs[1]=(u32)param;
   staticbufs[2]=IPC_Desc_StaticBuffer(hmac_size, 2);
	staticbufs[3]=(u32)hmac;

	Result ret = aptSendCommand(cmdbuf);
   staticbufs[0]=saved_threadstorage[0];
	staticbufs[1]=saved_threadstorage[1];
   staticbufs[2]=saved_threadstorage[2];
	staticbufs[3]=saved_threadstorage[3];

   if(R_FAILED(ret))
      return ret;

   if(source_pid)
      *source_pid = ((u64*)cmdbuf)[1];
   if(received)
      *received = ((bool*)cmdbuf)[16];

	return cmdbuf[1];
}
コード例 #4
0
ファイル: fsldr.c プロジェクト: Reisyukaku/loader
Result FSLDR_OpenFileDirectly(Handle* out, FS_Archive archive, FS_Path path, u32 openFlags, u32 attributes)
{
  u32 *cmdbuf = getThreadCommandBuffer();

  cmdbuf[0] = IPC_MakeHeader(0x803,8,4); // 0x8030204
  cmdbuf[1] = 0;
  cmdbuf[2] = archive.id;
  cmdbuf[3] = archive.lowPath.type;
  cmdbuf[4] = archive.lowPath.size;
  cmdbuf[5] = path.type;
  cmdbuf[6] = path.size;
  cmdbuf[7] = openFlags;
  cmdbuf[8] = attributes;
  cmdbuf[9] = IPC_Desc_StaticBuffer(archive.lowPath.size, 2);
  cmdbuf[10] = (u32) archive.lowPath.data;
  cmdbuf[11] = IPC_Desc_StaticBuffer(path.size, 0);
  cmdbuf[12] = (u32) path.data;

  Result ret = 0;
  if(R_FAILED(ret = svcSendSyncRequest(fsldrHandle))) return ret;

  if(out) *out = cmdbuf[3];

  return cmdbuf[1];
}
コード例 #5
0
ファイル: minisoc.c プロジェクト: TemplarsCreed/Luma3DS
int socPoll(struct pollfd *fds, nfds_t nfds, int timeout)
{
    int ret = 0;
    nfds_t i;
    u32 size = sizeof(struct pollfd)*nfds;
    u32 *cmdbuf = getThreadCommandBuffer();
    u32 saved_threadstorage[2];

    if(nfds == 0) {
        return -1;
    }

    for(i = 0; i < nfds; ++i) {
        fds[i].revents = 0;
    }

    cmdbuf[0] = IPC_MakeHeader(0x14,2,4); // 0x140084
    cmdbuf[1] = (u32)nfds;
    cmdbuf[2] = (u32)timeout;
    cmdbuf[3] = IPC_Desc_CurProcessHandle();
    cmdbuf[5] = IPC_Desc_StaticBuffer(size,10);
    cmdbuf[6] = (u32)fds;

    u32 * staticbufs = getThreadStaticBuffers();
    saved_threadstorage[0] = staticbufs[0];
    saved_threadstorage[1] = staticbufs[1];

    staticbufs[0] = IPC_Desc_StaticBuffer(size,0);
    staticbufs[1] = (u32)fds;

    ret = svcSendSyncRequest(SOCU_handle);

    staticbufs[0] = saved_threadstorage[0];
    staticbufs[1] = saved_threadstorage[1];

    if(ret != 0) {
        return ret;
    }

    ret = (int)cmdbuf[1];
    if(ret == 0)
        ret = _net_convert_error(cmdbuf[2]);

    if(ret < 0) {
        //errno = -ret;
        return -1;
    }

    return ret;
}
コード例 #6
0
ファイル: minisoc.c プロジェクト: TemplarsCreed/Luma3DS
int socSetsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen)
{
    int ret = 0;
    u32 *cmdbuf = getThreadCommandBuffer();

    cmdbuf[0] = IPC_MakeHeader(0x12,4,4); // 0x120104
    cmdbuf[1] = (u32)sockfd;
    cmdbuf[2] = (u32)level;
    cmdbuf[3] = (u32)optname;
    cmdbuf[4] = (u32)optlen;
    cmdbuf[5] = IPC_Desc_CurProcessHandle();
    cmdbuf[7] = IPC_Desc_StaticBuffer(optlen,9);
    cmdbuf[8] = (u32)optval;

    ret = svcSendSyncRequest(SOCU_handle);
    if(ret != 0) {
        return ret;
    }

    ret = (int)cmdbuf[1];
    if(ret == 0)
        ret = _net_convert_error(cmdbuf[2]);

    if(ret < 0) {
        //errno = -ret;
        return -1;
    }

    return ret;
}
コード例 #7
0
ファイル: apt.c プロジェクト: botanyaki/ctrulib
Result APT_DoAppJump(u32 NSbuf0Size, u32 NSbuf1Size, u8 *NSbuf0Ptr, u8 *NSbuf1Ptr)
{
	u32* cmdbuf=getThreadCommandBuffer();
	cmdbuf[0]=IPC_MakeHeader(0x32,2,4); // 0x320084
	cmdbuf[1]=NSbuf0Size;
	cmdbuf[2]=NSbuf1Size;
	cmdbuf[3]=IPC_Desc_StaticBuffer(NSbuf0Size,0);
	cmdbuf[4]=(u32)NSbuf0Ptr;
	cmdbuf[5]=IPC_Desc_StaticBuffer(NSbuf1Size,2);
	cmdbuf[6]=(u32)NSbuf1Ptr;
	
	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(aptuHandle)))return ret;

	return cmdbuf[1];
}
コード例 #8
0
ファイル: uds.c プロジェクト: Caboosium/ctrulib
static Result udsipc_BeginHostingNetwork(const udsNetworkStruct *network, const void *passphrase, size_t passphrase_size)
{
	u32* cmdbuf=getThreadCommandBuffer();

	cmdbuf[0]=IPC_MakeHeader(0x1D,1,4); // 0x1D0044
	cmdbuf[1]=passphrase_size;
	cmdbuf[2]=IPC_Desc_StaticBuffer(sizeof(udsNetworkStruct), 1);
	cmdbuf[3]=(u32)network;
	cmdbuf[4]=IPC_Desc_StaticBuffer(passphrase_size, 0);
	cmdbuf[5]=(u32)passphrase;

	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(__uds_servhandle)))return ret;

	return cmdbuf[1];
}
コード例 #9
0
ファイル: uds.c プロジェクト: Caboosium/ctrulib
Result udsGetApplicationData(void *buf, size_t size, size_t *actual_size)
{
	u32* cmdbuf=getThreadCommandBuffer();
	u32 saved_threadstorage[2];

	cmdbuf[0]=IPC_MakeHeader(0x11,1,0); // 0x110040
	cmdbuf[1]=size;

	u32 * staticbufs = getThreadStaticBuffers();
	saved_threadstorage[0] = staticbufs[0];
	saved_threadstorage[1] = staticbufs[1];

	staticbufs[0] = IPC_Desc_StaticBuffer(size,0);
	staticbufs[1] = (u32)buf;

	Result ret=0;
	ret=svcSendSyncRequest(__uds_servhandle);

	staticbufs[0] = saved_threadstorage[0];
	staticbufs[1] = saved_threadstorage[1];

	if(R_FAILED(ret))return ret;

	ret = cmdbuf[1];

	if(R_SUCCEEDED(ret))
	{
		if(actual_size)*actual_size = cmdbuf[2];
	}

	return ret;
}
コード例 #10
0
ファイル: uds.c プロジェクト: Caboosium/ctrulib
static Result udsipc_ConnectToNetwork(const udsNetworkStruct *network, const void *passphrase, size_t passphrase_size, udsConnectionType connection_type)
{
	u32* cmdbuf=getThreadCommandBuffer();

	cmdbuf[0]=IPC_MakeHeader(0x1E,2,4); // 0x1E0084
	cmdbuf[1]=connection_type;
	cmdbuf[2]=passphrase_size;
	cmdbuf[3]=IPC_Desc_StaticBuffer(sizeof(udsNetworkStruct), 1);
	cmdbuf[4]=(u32)network;
	cmdbuf[5]=IPC_Desc_StaticBuffer(passphrase_size, 0);
	cmdbuf[6]=(u32)passphrase;

	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(__uds_servhandle)))return ret;

	return cmdbuf[1];
}
コード例 #11
0
ファイル: gspgpu.c プロジェクト: Selver-gba/ctrulib
Result GSPGPU_WriteHWRegsWithMask(u32 regAddr, u32* data, u8 datasize, u32* maskdata, u8 masksize)
{
	if(datasize>0x80 || !data)return -1;

	u32* cmdbuf=getThreadCommandBuffer();
	cmdbuf[0]=IPC_MakeHeader(0x2,2,4); // 0x20084
	cmdbuf[1]=regAddr;
	cmdbuf[2]=datasize;
	cmdbuf[3]=IPC_Desc_StaticBuffer(datasize, 0);
	cmdbuf[4]=(u32)data;
	cmdbuf[5]=IPC_Desc_StaticBuffer(masksize, 1);
	cmdbuf[6]=(u32)maskdata;

	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(gspGpuHandle)))return ret;

	return cmdbuf[1];
}
コード例 #12
0
ファイル: soc_getsockname.c プロジェクト: Bownairo/ctrulib
int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
{
	int ret = 0;
	u32 *cmdbuf = getThreadCommandBuffer();
	u32 saved_threadstorage[2];
	u8 tmpaddr[0x1c];

	sockfd = soc_get_fd(sockfd);
	if(sockfd < 0)	{
		errno = -sockfd;
		return -1;
	}

	cmdbuf[0] = IPC_MakeHeader(0x17,2,2); // 0x170082
	cmdbuf[1] = (u32)sockfd;
	cmdbuf[2] = 0x1c;
	cmdbuf[3] = IPC_Desc_CurProcessHandle();

	u32 * staticbufs = getThreadStaticBuffers();
	saved_threadstorage[0] = staticbufs[0];
	saved_threadstorage[1] = staticbufs[1];

	staticbufs[0] = IPC_Desc_StaticBuffer(0x1c,0);
	staticbufs[1] = (u32)tmpaddr;

	ret = svcSendSyncRequest(SOCU_handle);

	staticbufs[0] = saved_threadstorage[0];
	staticbufs[1] = saved_threadstorage[1];

	if(ret != 0) {
		errno = SYNC_ERROR;
		return ret;
	}

	ret = (int)cmdbuf[1];
	if(ret == 0)
		ret = _net_convert_error(cmdbuf[2]);

	if(ret < 0) {
		errno = -ret;
		return -1;
	}

	if(*addrlen > tmpaddr[0])
		*addrlen = tmpaddr[0];
	memset(addr, 0, sizeof(struct sockaddr));
	addr->sa_family = tmpaddr[1];
	memcpy(addr->sa_data, &tmpaddr[2], *addrlen - 2);

	return ret;
}
コード例 #13
0
ファイル: minisoc.c プロジェクト: TemplarsCreed/Luma3DS
int socAccept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
{
    Result ret = 0;
    int tmp_addrlen = 0x1c;

    u32 *cmdbuf = getThreadCommandBuffer();
    u8 tmpaddr[0x1c];
    u32 saved_threadstorage[2];

    memset(tmpaddr, 0, 0x1c);

    cmdbuf[0] = IPC_MakeHeader(0x4,2,2); // 0x40082
    cmdbuf[1] = (u32)sockfd;
    cmdbuf[2] = (u32)tmp_addrlen;
    cmdbuf[3] = IPC_Desc_CurProcessHandle();

    u32 *staticbufs = getThreadStaticBuffers();
    saved_threadstorage[0] = staticbufs[0];
    saved_threadstorage[1] = staticbufs[1];

    staticbufs[0] = IPC_Desc_StaticBuffer(tmp_addrlen,0);
    staticbufs[1] = (u32)tmpaddr;

    ret = svcSendSyncRequest(SOCU_handle);

    staticbufs[0] = saved_threadstorage[0];
    staticbufs[1] = saved_threadstorage[1];

    if(ret != 0)
        return ret;

    ret = (int)cmdbuf[1];
    if(ret == 0)
        ret = _net_convert_error(cmdbuf[2]);

    if(ret < 0)
        //errno = -ret;

    if(ret >= 0 && addr != NULL)
    {
        addr->sa_family = tmpaddr[1];
        if(*addrlen > tmpaddr[0])
            *addrlen = tmpaddr[0];
        memcpy(addr->sa_data, &tmpaddr[2], *addrlen - 2);
    }

    if(ret < 0)
        return -1;

    return ret;
}
コード例 #14
0
ファイル: apt.c プロジェクト: botanyaki/ctrulib
Result APT_SendCaptureBufferInfo(u32 bufferSize, u32* buffer)
{
	u32* cmdbuf=getThreadCommandBuffer();

	cmdbuf[0] = IPC_MakeHeader(0x40,1,2); // 0x400042
	cmdbuf[1] = bufferSize;
	cmdbuf[2] = IPC_Desc_StaticBuffer(bufferSize,0);
	cmdbuf[3] = (u32)buffer;
	
	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(aptuHandle)))return ret;

	return cmdbuf[1];
}
コード例 #15
0
ファイル: uds.c プロジェクト: Caboosium/ctrulib
Result udsSetApplicationData(const void *buf, size_t size)
{
	u32* cmdbuf=getThreadCommandBuffer();

	cmdbuf[0]=IPC_MakeHeader(0x10,1,2); // 0x100042
	cmdbuf[1]=size;
	cmdbuf[2]=IPC_Desc_StaticBuffer(size, 4);
	cmdbuf[3]=(u32)buf;

	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(__uds_servhandle)))return ret;

	return cmdbuf[1];
}
コード例 #16
0
ファイル: soc_getsockopt.c プロジェクト: Caboosium/ctrulib
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen)
{
	int ret = 0;
	u32 *cmdbuf = getThreadCommandBuffer();
	u32 saved_threadstorage[2];

	sockfd = soc_get_fd(sockfd);
	if(sockfd < 0) {
		errno = -sockfd;
		return -1;
	}

	cmdbuf[0] = IPC_MakeHeader(0x11,4,2); // 0x110102
	cmdbuf[1] = (u32)sockfd;
	cmdbuf[2] = (u32)level;
	cmdbuf[3] = (u32)optname;
	cmdbuf[4] = (u32)*optlen;
	cmdbuf[5] = IPC_Desc_CurProcessHandle();

	u32 * staticbufs = getThreadStaticBuffers();
	saved_threadstorage[0] = staticbufs[0];
	saved_threadstorage[1] = staticbufs[1];

	staticbufs[0] = IPC_Desc_StaticBuffer(*optlen,0);
	staticbufs[1] = (u32)optval;

	ret = svcSendSyncRequest(SOCU_handle);

	staticbufs[0] = saved_threadstorage[0];
	staticbufs[1] = saved_threadstorage[1];

	if(ret != 0) {
		errno = SYNC_ERROR;
		return ret;
	}

	ret = (int)cmdbuf[1];
	if(ret == 0)
		ret = _net_convert_error(cmdbuf[2]);

	if(ret < 0) {
		errno = -ret;
		return -1;
	}

	*optlen = cmdbuf[3];

	return ret;
}
コード例 #17
0
ファイル: apt.c プロジェクト: botanyaki/ctrulib
Result APT_JumpToApplication(const u8 *param, size_t paramSize, Handle handle)
{
	u32* cmdbuf=getThreadCommandBuffer();
	cmdbuf[0]=IPC_MakeHeader(0x24,1,4); // 0x240044
	cmdbuf[1]=paramSize;
	cmdbuf[2]=IPC_Desc_SharedHandles(1);
	cmdbuf[3]=handle;
	cmdbuf[4]=IPC_Desc_StaticBuffer(paramSize,0);
	cmdbuf[5]= (u32) param;
	
	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(aptuHandle)))return ret;
	
	return cmdbuf[1];
}
コード例 #18
0
ファイル: minisoc.c プロジェクト: TemplarsCreed/Luma3DS
int socBind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
{
    Result ret = 0;
    socklen_t tmp_addrlen = 0;
    u32 *cmdbuf = getThreadCommandBuffer();
    u8 tmpaddr[0x1c];

    memset(tmpaddr, 0, 0x1c);

    if(addr->sa_family == AF_INET)
        tmp_addrlen = 8;
    else
        tmp_addrlen = 0x1c;

    if(addrlen < tmp_addrlen)
    {
        //errno = EINVAL;
        return -1;
    }

    tmpaddr[0] = tmp_addrlen;
    tmpaddr[1] = addr->sa_family;
    memcpy(&tmpaddr[2], &addr->sa_data, tmp_addrlen-2);

    cmdbuf[0] = IPC_MakeHeader(0x5,2,4); // 0x50084
    cmdbuf[1] = (u32)sockfd;
    cmdbuf[2] = (u32)tmp_addrlen;
    cmdbuf[3] = IPC_Desc_CurProcessHandle();
    cmdbuf[5] = IPC_Desc_StaticBuffer(tmp_addrlen,0);
    cmdbuf[6] = (u32)tmpaddr;

    ret = svcSendSyncRequest(SOCU_handle);
    if(ret != 0) {
        //errno = SYNC_ERROR;
        return ret;
    }

    ret = (int)cmdbuf[1];
    if(ret == 0)
        ret = _net_convert_error(cmdbuf[2]);

    if(ret < 0) {
        //errno = -ret;
        return -1;
    }

    return ret;
}
コード例 #19
0
ファイル: ac.c プロジェクト: joel16/3DSident
Result ACI_GetSSID(char * ssid)
{
	u32* cmdbuf = getThreadCommandBuffer();
	
	cmdbuf[0] = IPC_MakeHeader(0x40F,0,0); // 0x040F0000
	
	u32* staticbufs = getThreadStaticBuffers();
	
	staticbufs[0] = IPC_Desc_StaticBuffer(0x20, 0); //SSID length is 0x20
	staticbufs[1] = (u32)ssid;
	
	Result ret = 0;
	if(R_FAILED(ret = svcSendSyncRequest(acHandle))) return ret;
	
	return (Result)cmdbuf[1];
}
コード例 #20
0
ファイル: ac.c プロジェクト: joel16/3DSident
Result ACI_GetPassphrase(char * passphrase)
{
	u32* cmdbuf = getThreadCommandBuffer();
	
	cmdbuf[0] = IPC_MakeHeader(0x415,0,0); // 0x04150000
	
	u32* staticbufs = getThreadStaticBuffers();
	
	staticbufs[0] = IPC_Desc_StaticBuffer(0x40, 0); //passphrase length is 0x40
	staticbufs[1] = (u32)passphrase;
	
	Result ret = 0;
	if(R_FAILED(ret = svcSendSyncRequest(acHandle))) return ret;
	
	return (Result)cmdbuf[1];
}
コード例 #21
0
ファイル: apt.c プロジェクト: botanyaki/ctrulib
Result APT_StartSystemApplet(NS_APPID appID, u32 bufSize, Handle applHandle, u8 *buf)
{
	u32* cmdbuf=getThreadCommandBuffer();
	cmdbuf[0] = IPC_MakeHeader(0x1F,2,4); // 0x001F0084
	cmdbuf[1] = appID;
	cmdbuf[2] = bufSize;
	cmdbuf[3] = IPC_Desc_SharedHandles(1);
	cmdbuf[4] = applHandle;
	cmdbuf[5] = IPC_Desc_StaticBuffer(bufSize,0);
	cmdbuf[6] = (u32)buf;
	
	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(aptuHandle)))return ret;

	return cmdbuf[1];
}
コード例 #22
0
ファイル: gspgpu.c プロジェクト: Selver-gba/ctrulib
Result GSPGPU_ReadHWRegs(u32 regAddr, u32* data, u8 size)
{
	if(size>0x80 || !data)return -1;

	u32* cmdbuf=getThreadCommandBuffer();
	cmdbuf[0]=IPC_MakeHeader(0x4,2,0); // 0x40080
	cmdbuf[1]=regAddr;
	cmdbuf[2]=size;
	cmdbuf[0x40]=IPC_Desc_StaticBuffer(size, 0);
	cmdbuf[0x40+1]=(u32)data;

	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(gspGpuHandle)))return ret;

	return cmdbuf[1];
}
コード例 #23
0
ファイル: apt.c プロジェクト: botanyaki/ctrulib
Result APT_StartLibraryApplet(NS_APPID appID, Handle inhandle, u32 *parambuf, u32 parambufsize)
{
	u32* cmdbuf=getThreadCommandBuffer();
	cmdbuf[0]=IPC_MakeHeader(0x1E,2,4); // 0x1E0084
	cmdbuf[1]=appID;
	cmdbuf[2]=parambufsize;
	cmdbuf[3]=IPC_Desc_SharedHandles(1);
	cmdbuf[4]=inhandle;
	cmdbuf[5]=IPC_Desc_StaticBuffer(parambufsize,0);
	cmdbuf[6]=(u32)parambuf;
	
	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(aptuHandle)))return ret;

	return cmdbuf[1];
}
コード例 #24
0
ファイル: apt.c プロジェクト: botanyaki/ctrulib
Result APT_ReceiveParameter(NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize, u8* signalType)
{
	u32* cmdbuf=getThreadCommandBuffer();
	cmdbuf[0]=IPC_MakeHeader(0xD,2,0); // 0xD0080
	cmdbuf[1]=appID;
	cmdbuf[2]=bufferSize;

	u32 *staticbufs = getThreadStaticBuffers();
	staticbufs[0]=IPC_Desc_StaticBuffer(bufferSize,0);
	staticbufs[1]=(u32)buffer;
	
	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(aptuHandle)))return ret;

	if(signalType)*signalType=cmdbuf[3];
	if(actualSize)*actualSize=cmdbuf[4];

	return cmdbuf[1];
}
コード例 #25
0
ファイル: ps.c プロジェクト: TuxSH/ctrulib
Result PS_VerifyRsaSha256(u8 *hash, psRSAContext *ctx, u8 *signature)
{
	Result ret = 0;
	u32 *cmdbuf = getThreadCommandBuffer();
	u32 size;

	size = ctx->rsa_bitsize>>3;

	cmdbuf[0] = IPC_MakeHeader(0x2,9,4); // 0x20244
	memcpy(&cmdbuf[1], hash, 32);
	cmdbuf[9] = size;
	cmdbuf[10] = IPC_Desc_StaticBuffer(0x208, 0);
	cmdbuf[11] = (u32)ctx;
	cmdbuf[12] = IPC_Desc_Buffer(size, IPC_BUFFER_R);
	cmdbuf[13] = (u32)signature;

	if(R_FAILED(ret = svcSendSyncRequest(psHandle)))return ret;

	return (Result)cmdbuf[1];
}
コード例 #26
0
ファイル: loader.c プロジェクト: smealum/ctrulib
Result LOADER_GetProgramInfo(ExHeader_Info* exheaderInfo, u64 programHandle)
{
	Result ret = 0;
	u32 *cmdbuf = getThreadCommandBuffer();
	u32 *staticbufs = getThreadStaticBuffers();

	cmdbuf[0] = IPC_MakeHeader(4, 2, 0); // 0x40080
	cmdbuf[1] = (u32)programHandle;
	cmdbuf[2] = (u32)(programHandle >> 32);

	u32 staticbufscpy[2] = {staticbufs[0], staticbufs[1]};
	staticbufs[0] = IPC_Desc_StaticBuffer(0x400, 0);
	staticbufs[1] = (u32)exheaderInfo;

	if(R_FAILED(ret = svcSendSyncRequest(loaderHandle))) return ret;

	staticbufs[0] = staticbufscpy[0];
	staticbufs[1] = staticbufscpy[1];

	return (Result)cmdbuf[1];
}
コード例 #27
0
ファイル: apt.c プロジェクト: botanyaki/ctrulib
Result APT_SendParameter(NS_APPID src_appID, NS_APPID dst_appID, u32 bufferSize, u32* buffer, Handle paramhandle, u8 signalType)
{
	u32* cmdbuf=getThreadCommandBuffer();

	cmdbuf[0] = IPC_MakeHeader(0xC,4,4); // 0xC0104
	cmdbuf[1] = src_appID;
	cmdbuf[2] = dst_appID;
	cmdbuf[3] = signalType;
	cmdbuf[4] = bufferSize;

	cmdbuf[5] = IPC_Desc_SharedHandles(1);
	cmdbuf[6] = paramhandle;
	
	cmdbuf[7] = IPC_Desc_StaticBuffer(bufferSize,0);
	cmdbuf[8] = (u32)buffer;
	
	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(aptuHandle)))return ret;

	return cmdbuf[1];
}
コード例 #28
0
ファイル: uds.c プロジェクト: Caboosium/ctrulib
Result udsSendTo(u16 dst_NetworkNodeID, u8 data_channel, u8 flags, const void *buf, size_t size)
{
	u32* cmdbuf=getThreadCommandBuffer();

	u32 aligned_size = (size+0x3) & ~0x3;

	cmdbuf[0]=IPC_MakeHeader(0x17,6,2); // 0x170182
	cmdbuf[1]=0x1;//Unused
	cmdbuf[2]=dst_NetworkNodeID;
	cmdbuf[3]=data_channel;
	cmdbuf[4]=aligned_size>>2;
	cmdbuf[5]=size;
	cmdbuf[6]=flags;
	cmdbuf[7]=IPC_Desc_StaticBuffer(aligned_size, 5);
	cmdbuf[8]=(u32)buf;

	Result ret=0;
	if(R_FAILED(ret=svcSendSyncRequest(__uds_servhandle)))return ret;

	return cmdbuf[1];
}
コード例 #29
0
ファイル: uds.c プロジェクト: Caboosium/ctrulib
Result udsPullPacket(const udsBindContext *bindcontext, void *buf, size_t size, size_t *actual_size, u16 *src_NetworkNodeID)
{
	u32* cmdbuf=getThreadCommandBuffer();
	u32 saved_threadstorage[2];

	u32 aligned_size = (size+0x3) & ~0x3;

	cmdbuf[0]=IPC_MakeHeader(0x14,3,0); // 0x1400C0
	cmdbuf[1]=bindcontext->BindNodeID;
	cmdbuf[2]=aligned_size>>2;
	cmdbuf[3]=size;

	u32 * staticbufs = getThreadStaticBuffers();
	saved_threadstorage[0] = staticbufs[0];
	saved_threadstorage[1] = staticbufs[1];

	staticbufs[0] = IPC_Desc_StaticBuffer(aligned_size,0);
	staticbufs[1] = (u32)buf;

	Result ret=0;
	ret=svcSendSyncRequest(__uds_servhandle);

	staticbufs[0] = saved_threadstorage[0];
	staticbufs[1] = saved_threadstorage[1];

	if(R_FAILED(ret))return ret;

	ret = cmdbuf[1];

	if(R_SUCCEEDED(ret))
	{
		if(actual_size)*actual_size = cmdbuf[2];
		if(src_NetworkNodeID)*src_NetworkNodeID = cmdbuf[3];
	}

	return ret;
}
コード例 #30
0
ファイル: soc_poll.c プロジェクト: Findus79/ctrulib
int poll(struct pollfd *fds, nfds_t nfds, int timeout)
{
	int ret = 0;
	nfds_t i;
	u32 size = sizeof(struct pollfd)*nfds;
	u32 *cmdbuf = getThreadCommandBuffer();
	u32 saved_threadstorage[2];

	if(nfds == 0) {
		errno = EINVAL;
		return -1;
	}

	struct pollfd *tmp_fds = (struct pollfd*)malloc(sizeof(struct pollfd) * nfds);
	if(tmp_fds == NULL) {
		errno = ENOMEM;
		return -1;
	}

	memcpy(tmp_fds, fds, sizeof(struct pollfd) * nfds);

	for(i = 0; i < nfds; ++i) {
		tmp_fds[i].fd = soc_get_fd(fds[i].fd);
		if(tmp_fds[i].fd < 0) {
			errno = -tmp_fds[i].fd;
			free(tmp_fds);
			return -1;
		}
		tmp_fds[i].revents = 0;
	}

	cmdbuf[0] = IPC_MakeHeader(0x14,2,4); // 0x140084
	cmdbuf[1] = (u32)nfds;
	cmdbuf[2] = (u32)timeout;
	cmdbuf[3] = IPC_Desc_CurProcessHandle();
	cmdbuf[5] = IPC_Desc_StaticBuffer(size,10);
	cmdbuf[6] = (u32)tmp_fds;

	u32 * staticbufs = getThreadStaticBuffers();
	saved_threadstorage[0] = staticbufs[0];
	saved_threadstorage[1] = staticbufs[1];

	staticbufs[0] = IPC_Desc_StaticBuffer(size,0);
	staticbufs[1] = (u32)tmp_fds;

	ret = svcSendSyncRequest(SOCU_handle);
	if(ret != 0) {
		free(tmp_fds);
		errno = SYNC_ERROR;
		return ret;
	}

	staticbufs[0] = saved_threadstorage[0];
	staticbufs[1] = saved_threadstorage[1];

	ret = (int)cmdbuf[1];
	if(ret == 0)
		ret = _net_convert_error(cmdbuf[2]);

	if(ret < 0) {
		free(tmp_fds);
		errno = -ret;
		return -1;
	}

	for(i = 0; i < nfds; ++i)
		fds[i].revents = tmp_fds[i].revents;

	free(tmp_fds);

	return ret;
}