diff --git a/src/Cafe/OS/libs/nn_olv/nn_olv.cpp b/src/Cafe/OS/libs/nn_olv/nn_olv.cpp index aabac935..0679491a 100644 --- a/src/Cafe/OS/libs/nn_olv/nn_olv.cpp +++ b/src/Cafe/OS/libs/nn_olv/nn_olv.cpp @@ -15,53 +15,6 @@ namespace nn { namespace olv { - static const char* startUrlTemplate = "%s/titles/show?src=menu"; - struct PortalAppParam_t - { - /* +0x1A5C3C */ char paramPack[0x200]; - /* +0x1A663B */ char serviceToken[0x201]; - /* +0x1A5E3C */ char startUrl[0x7ff]; // https://portal-us.olv.nintendo.net/titles/show?src=menu - }; - - uint32 StubPortalApp([[maybe_unused]] void* pPortalAppParam) - { - // Response to either a size or pointer. - // In any case, it usually ignores 0 or null. - return 0; - } - - void exportPortalAppParam_GetParamPack(PPCInterpreter_t* hCPU) - { - // r3 = PortalAppParam - ppcDefineParamTypePtr(portalAppParam, PortalAppParam_t, 0); - - strcpy(portalAppParam->paramPack, g_ParamPack.encodedParamPack); - - osLib_returnFromFunction(hCPU, memory_getVirtualOffsetFromPointer(&portalAppParam->serviceToken)); - } - - void exportPortalAppParam_GetServiceToken(PPCInterpreter_t* hCPU) - { - // r3 = PortalAppParam - ppcDefineParamTypePtr(portalAppParam, PortalAppParam_t, 0); - - strcpy(portalAppParam->serviceToken, g_DiscoveryResults.serviceToken); - - osLib_returnFromFunction(hCPU, memory_getVirtualOffsetFromPointer(&portalAppParam->serviceToken)); - } - - void exportPortalAppParam_GetStartUrl(PPCInterpreter_t* hCPU) - { - // r3 = PortalAppParam - ppcDefineParamTypePtr(portalAppParam, PortalAppParam_t, 0); - - cemu_assert_debug(g_DiscoveryResults.portalEndpoint[0]); - snprintf(portalAppParam->startUrl, sizeof(portalAppParam->startUrl), - startUrlTemplate, g_DiscoveryResults.portalEndpoint); - - osLib_returnFromFunction(hCPU, memory_getVirtualOffsetFromPointer(&portalAppParam->startUrl)); - } - static SysAllocator s_OlvReleaseBgThread; SysAllocator s_OlvReleaseBgThreadStack; SysAllocator s_OlvReleaseBgThreadName; @@ -155,11 +108,6 @@ namespace nn loadOliveUploadFavoriteTypes(); loadOlivePostAndTopicTypes(); - // TODO: loadOlivePortalAppTypes - osLib_addFunction("nn_olv", "GetParamPack__Q4_2nn3olv6hidden14PortalAppParamCFv", exportPortalAppParam_GetParamPack); - osLib_addFunction("nn_olv", "GetServiceToken__Q4_2nn3olv6hidden14PortalAppParamCFv", exportPortalAppParam_GetServiceToken); - osLib_addFunction("nn_olv", "GetStartUrl__Q4_2nn3olv6hidden14PortalAppParamCFv", exportPortalAppParam_GetStartUrl); - cafeExportRegisterFunc(GetErrorCode, "nn_olv", "GetErrorCode__Q2_2nn3olvFRCQ2_2nn6Result", LogType::NN_OLV); cafeExportRegisterFunc(StubPostApp, "nn_olv", "UploadPostDataByPostApp__Q2_2nn3olvFPCQ3_2nn3olv28UploadPostDataByPostAppParam", LogType::NN_OLV); @@ -171,14 +119,6 @@ namespace nn cafeExportRegisterFunc(StubPostAppResult, "nn_olv", "GetResultWithUploadedDirectMessageDataByPostApp__Q2_2nn3olvFPQ3_2nn3olv25UploadedDirectMessageData", LogType::NN_OLV); cafeExportRegisterFunc(StubPostAppResult, "nn_olv", "GetResultWithUploadedCommentDataByPostApp__Q2_2nn3olvFPQ3_2nn3olv19UploadedCommentData", LogType::NN_OLV); - cafeExportRegisterFunc(StubPortalApp, "nn_olv", "GetAppDataSize__Q4_2nn3olv6hidden14PortalAppParamCFv", LogType::NN_OLV); - cafeExportRegisterFunc(StubPortalApp, "nn_olv", "GetAppData__Q4_2nn3olv6hidden14PortalAppParamCFv", LogType::NN_OLV); - cafeExportRegisterFunc(StubPortalApp, "nn_olv", "GetDefaultBodyMemo__Q4_2nn3olv6hidden14PortalAppParamCFv", LogType::NN_OLV); - cafeExportRegisterFunc(StubPortalApp, "nn_olv", "GetExternalBinaryDataSize__Q4_2nn3olv6hidden14PortalAppParamCFv", LogType::NN_OLV); - cafeExportRegisterFunc(StubPortalApp, "nn_olv", "GetExternalBinaryData__Q4_2nn3olv6hidden14PortalAppParamCFv", LogType::NN_OLV); - cafeExportRegisterFunc(StubPortalApp, "nn_olv", "GetExternalImageDataSize__Q4_2nn3olv6hidden14PortalAppParamCFv", LogType::NN_OLV); - cafeExportRegisterFunc(StubPortalApp, "nn_olv", "GetExternalImageData__Q4_2nn3olv6hidden14PortalAppParamCFv", LogType::NN_OLV); - cafeExportRegisterFunc(UploadedPostData_GetPostId, "nn_olv", "GetPostId__Q3_2nn3olv16UploadedPostDataCFv", LogType::NN_OLV); } @@ -188,4 +128,4 @@ namespace nn } } -} +} \ No newline at end of file diff --git a/src/Cafe/OS/libs/nn_olv/nn_olv_InitializeTypes.cpp b/src/Cafe/OS/libs/nn_olv/nn_olv_InitializeTypes.cpp index 72028461..cca14eb0 100644 --- a/src/Cafe/OS/libs/nn_olv/nn_olv_InitializeTypes.cpp +++ b/src/Cafe/OS/libs/nn_olv/nn_olv_InitializeTypes.cpp @@ -279,8 +279,15 @@ namespace nn sint32 InitializePortalApp(nn::olv::PortalAppParam* pPortalAppParam, nn::olv::InitializeParam* pInitializeParam) { - // todo - stub - Initialize(pInitializeParam); + sint32 result = Initialize(pInitializeParam); + if (result != OLV_RESULT_SUCCESS) + return result; + + memcpy(pPortalAppParam->m_ParamPack, g_ParamPack.encodedParamPack, sizeof(g_ParamPack.encodedParamPack)); + memcpy(pPortalAppParam->m_ServiceToken, g_DiscoveryResults.serviceToken, sizeof(g_DiscoveryResults.serviceToken)); + + snprintf(reinterpret_cast(pPortalAppParam->m_StartUrl), sizeof(pPortalAppParam->m_StartUrl), + "%s/titles/show?src=menu", g_DiscoveryResults.portalEndpoint); return OLV_RESULT_SUCCESS; } @@ -303,4 +310,4 @@ namespace nn return g_IsInitialized; } } -} \ No newline at end of file +} \ No newline at end of file diff --git a/src/Cafe/OS/libs/nn_olv/nn_olv_InitializeTypes.h b/src/Cafe/OS/libs/nn_olv/nn_olv_InitializeTypes.h index 810cee35..e635fa57 100644 --- a/src/Cafe/OS/libs/nn_olv/nn_olv_InitializeTypes.h +++ b/src/Cafe/OS/libs/nn_olv/nn_olv_InitializeTypes.h @@ -106,6 +106,9 @@ namespace nn public: PortalAppParam() { + m_ParamPack[0] = 0; + m_ServiceToken[0] = 0; + m_StartUrl[0] = 0; } static PortalAppParam* __ctor(PortalAppParam* _this) { @@ -117,39 +120,39 @@ namespace nn else return new (_this) PortalAppParam(); } - /* - struct PortalAppParam { - uint appDataSize; // for all sizes, if it is 0 then it returns null pointer - char appData[1024]; - uint defaultBodyMemoSize; - char defaultBodyMemo[153644]; - uint externalImageDataSize; - char externalImageData[524288]; - uint externalBinaryDataSize; - char externalBinaryData[1048576]; - char paramPack[512]; - char startUrl[2047]; - char serviceToken[513]; - uint startType; - char bodyText[512]; // may actually be u16, as in, utf-16 - char topicTag[304]; - char searchKey[1520]; - char externalUrl[256]; - uint bodyTextMaxLength; // why is it back here - char feeling; // it is just a char - char padding_0[3]; - uint communityId; - uint userPid; - uint flags; - char postId[32]; - int useWebHost; // unknown, only referenced when initializing?, when 0 portalHost is used otherwise webHost - char webHost[2047]; // actually the api url - char portalHost[2047]; // portal-us.olv.nintendo.net - undefined padding_1[3434]; // unreferenced, alignment? - }; - */ - }; + uint8be* GetParamPack() + { + return m_ParamPack; + } + static uint8be* __GetParamPack(PortalAppParam* _this) + { + return _this->GetParamPack(); + } + + uint8be* GetServiceToken() + { + return m_ServiceToken; + } + static uint8be* __GetServiceToken(PortalAppParam* _this) + { + return _this->GetServiceToken(); + } + + uint8be* GetStartUrl() + { + return m_StartUrl; + } + static uint8be* __GetStartUrl(PortalAppParam* _this) + { + return _this->GetStartUrl(); + } + + public: + /* +0x1A5C3C */ uint8be m_ParamPack[0x200]; + /* +0x1A663B */ uint8be m_ServiceToken[0x201]; // IndependentServiceToken for Miiverse title + /* +0x1A5E3C */ uint8be m_StartUrl[0x7ff]; // https://portal-us.olv.nintendo.net/titles/show?src=menu + }; namespace Report { @@ -164,7 +167,6 @@ namespace nn static void loadOliveInitializeTypes() { cafeExportRegisterFunc(Initialize, "nn_olv", "Initialize__Q2_2nn3olvFPCQ3_2nn3olv15InitializeParam", LogType::NN_OLV); - cafeExportRegisterFunc(InitializePortalApp, "nn_olv", "InitializePortalApp__Q3_2nn3olv6hiddenFPQ4_2nn3olv6hidden14PortalAppParamPCQ3_2nn3olv15InitializeParam", LogType::NN_OLV); cafeExportRegisterFunc(IsInitialized, "nn_olv", "IsInitialized__Q2_2nn3olvFv", LogType::NN_OLV); cafeExportRegisterFunc(Report::GetReportTypes, "nn_olv", "GetReportTypes__Q3_2nn3olv6ReportFv", LogType::NN_OLV); cafeExportRegisterFunc(Report::SetReportTypes, "nn_olv", "SetReportTypes__Q3_2nn3olv6ReportFUi", LogType::NN_OLV); @@ -175,7 +177,11 @@ namespace nn cafeExportRegisterFunc(InitializeParam::__SetReportTypes, "nn_olv", "SetReportTypes__Q3_2nn3olv15InitializeParamFUi", LogType::NN_OLV); cafeExportRegisterFunc(InitializeParam::__SetSysArgs, "nn_olv", "SetSysArgs__Q3_2nn3olv15InitializeParamFPCvUi", LogType::NN_OLV); + cafeExportRegisterFunc(InitializePortalApp, "nn_olv", "InitializePortalApp__Q3_2nn3olv6hiddenFPQ4_2nn3olv6hidden14PortalAppParamPCQ3_2nn3olv15InitializeParam", LogType::NN_OLV); cafeExportRegisterFunc(PortalAppParam::__ctor, "nn_olv", "__ct__Q4_2nn3olv6hidden14PortalAppParamFv", LogType::NN_OLV); + cafeExportRegisterFunc(PortalAppParam::__GetParamPack, "nn_olv", "GetParamPack__Q4_2nn3olv6hidden14PortalAppParamCFv", LogType::NN_OLV); + cafeExportRegisterFunc(PortalAppParam::__GetServiceToken, "nn_olv", "GetServiceToken__Q4_2nn3olv6hidden14PortalAppParamCFv", LogType::NN_OLV); + cafeExportRegisterFunc(PortalAppParam::__GetStartUrl, "nn_olv", "GetStartUrl__Q4_2nn3olv6hidden14PortalAppParamCFv", LogType::NN_OLV); } } -} +} \ No newline at end of file