Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion config/SZBE69_B8/objects.json
Original file line number Diff line number Diff line change
Expand Up @@ -1439,7 +1439,7 @@
"system/utl/FileStream.cpp": "Matching",
"system/utl/GlitchFinder.cpp": "NonMatching",
"system/utl/HangBlock_Wii.cpp": "Matching",
"system/utl/HttpWii.cpp": "MISSING",
"system/utl/HttpWii.cpp": "NonMatching",
"system/utl/HxGuid.cpp": "Matching",
"system/utl/IntPacker.cpp": "Matching",
"system/utl/JobMgr.cpp": "NonMatching",
Expand Down
28 changes: 15 additions & 13 deletions src/sdk/RVL_SDK/revolution/sc/scapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,48 +50,50 @@ typedef enum {
} SCSensorBarPos;

typedef struct SCIdleMode {
u8 wc24; // at 0x0
u8 wc24; // at 0x0
u8 slotLight; // at 0x1
} SCIdleMode;

typedef struct SCBtDeviceInfo {
BD_ADDR devAddr; // size 0x06, offset 0x00
BD_ADDR devAddr; // size 0x06, offset 0x00
struct small_dev_info small; // size 0x40, offset 0x06
} SCBtDeviceInfo;

typedef struct SCBtDeviceInfoArray {
u8 num; // size 0x001, offset 0x000 // name known from asserts
u8 num; // size 0x001, offset 0x000 // name known from asserts
union {
struct {
SCBtDeviceInfo registered[WUD_MAX_DEV_ENTRY_FOR_STD]; // at 0x1
SCBtDeviceInfo active[WUD_MAX_CHANNELS]; // at 0x2BD
SCBtDeviceInfo active[WUD_MAX_CHANNELS]; // at 0x2BD
};
struct {
/* NOTE: functions in WUD act as if the above is only one buffer
* (see __wudSecurityEventStackCallback, case BTA_DM_LINK_DOWN_EVT)
*/
SCBtDeviceInfo devices[14]; // size 0x3d4, offset 0x001
SCBtDeviceInfo wbc; // size 0x046, offset 0x3d5
SCBtDeviceInfo at_0x41b; // size 0x046, offset 0x41b
SCBtDeviceInfo devices[14]; // size 0x3d4, offset 0x001
SCBtDeviceInfo wbc; // size 0x046, offset 0x3d5
SCBtDeviceInfo at_0x41b; // size 0x046, offset 0x41b
};
};
} SCBtDeviceInfoArray; // size 0x461
} SCBtDeviceInfoArray; // size 0x461

typedef struct SCBtCmpDevInfo {
BD_ADDR devAddr; // size 0x06, offset 0x00
BD_ADDR devAddr; // size 0x06, offset 0x00
struct small_dev_info small; // size 0x40, offset 0x06
LINK_KEY linkKey; // size 0x10, offset 0x30 // ? or just a buffer
LINK_KEY linkKey; // size 0x10, offset 0x30 // ? or just a buffer
} SCBtCmpDevInfo; // size 0x56

typedef struct SCBtCmpDevInfoArray {
u8 num; // size 0x001, offset 0x000 // name known from asserts
SCBtCmpDevInfo devices[6]; // size 0x204, offset 0x001
u8 num; // size 0x001, offset 0x000 // name known from asserts
SCBtCmpDevInfo devices[6]; // size 0x204, offset 0x001
} SCBtCmpDevInfoArray; // size 0x205

BOOL SCCheckPCMessageRestriction(void);

u8 SCGetAspectRatio(void);
s8 SCGetDisplayOffsetH(void);
u8 SCGetEuRgb60Mode(void);
void SCGetIdleMode(SCIdleMode* mode);
void SCGetIdleMode(SCIdleMode *mode);
u8 SCGetLanguage(void);
u8 SCGetProgressiveMode(void);
u8 SCGetScreenSaverMode(void);
Expand Down
17 changes: 17 additions & 0 deletions src/sdk/RevoEX/nhttp/nhttp.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once
#include <types.h>

#ifdef __cplusplus
extern "C" {
#endif

int NHTTPGetError();

void NHTTPStartup(void *, void *, int);

void NHTTPCleanupAsync(void *);
int NHTTPCancelConnection(void *);

#ifdef __cplusplus
}
#endif
2 changes: 1 addition & 1 deletion src/system/math/StreamChecksum.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ bool StreamChecksumValidator::Validate() {

void StreamChecksumValidator::HandleError(const char *c) {
TheDebug << MakeString(c);
ThePlatformMgr.SetDiskError((DiskError)3);
ThePlatformMgr.SetDiskError(kFailedChecksum);
}

bool StreamChecksumValidator::SetFileChecksum(bool b) {
Expand Down
4 changes: 4 additions & 0 deletions src/system/os/PlatformMgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ class PlatformMgr : public MsgSource, public ContentMgr::Callback {
bool IsEthernetCableConnected();
void PreInit();
void RegionInit();
void Init();
void UpdateSigninState();
void SetUserSignedIn(int);
void SetUserSignedOut(int);
Expand Down Expand Up @@ -239,4 +240,7 @@ DECLARE_MESSAGE(PartyMembersChangedMsg, "party_members_changed")
END_MESSAGE

DECLARE_MESSAGE(EnumerateMessagesCompleteMsg, "enumerate_messages_complete")
END_MESSAGE

DECLARE_MESSAGE(WiiDiscErrorMsg, "wii_disc_error")
END_MESSAGE
42 changes: 41 additions & 1 deletion src/system/os/PlatformMgr_Wii.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@
#include "os/PlatformMgr.h"
#include "os/Joypad_Wii.h"
#include "os/CritSec.h"
#include "system/obj/Dir.h"
#include "system/utl/HttpWii.h"
#include "meta/Profile.h"
#include "meta/WiiProfileMgr.h"
#include "RevoEX/nhttp/nhttp.h"
#include "revolution/gx/GXTypes.h"
#include "revolution/os/OSReset.h"
#include "revolution/os/OSThread.h"
Expand Down Expand Up @@ -130,6 +133,18 @@ void PlatformMgr::RegionInit() {
}
}

void PlatformMgr::Init() {
mHomeMenuWii->Init();
SetName("platform_mgr", ObjectDir::sMainDir);
JoypadSubscribe(this);
SetScreenSaver(true);
TheHttpWii.Init();
UpdateSigninState();
mIsOnlineRestricted = SCCheckPCMessageRestriction();
TheContentMgr->RegisterCallback(this, false);
SOHeapInit();
}

void PlatformMgr::SetNotifyUILocation(NotifyLocation) {}
bool PlatformMgr::IsEthernetCableConnected() { return mEthernetCableConnected; }

Expand Down Expand Up @@ -338,6 +353,8 @@ void PlatformMgr::ClearNetError() {
mHasNetError = 0;
}

int PlatformMgr::GetLastNHTTPError() { return NHTTPGetError(); }

int PlatformMgr::GetLastDNSError() { return -gDNSError; }

void PlatformMgr::SetConnected(bool connected) { mConnected = connected; }
Expand All @@ -363,7 +380,30 @@ bool PlatformMgr::OnMsg(const ButtonUpMsg &msg) {
return false;
}

void PlatformMgr::SetDiskError(DiskError err) {}
void PlatformMgr::SetDiskError(DiskError err) {
if (mDiskError != kFailedChecksum && mDiskError != err) {
mDiskError = err;
if (err == kNoDiskError) {
mDiscErrorMgr->SetDiscError(false);
mDiscErrorMgr->mRetryError = false;
mDiscErrorMgr->mMovieReadError = false;
} else if (err == kDiskError) {
mDiscErrorMgr->SetDiscError(true);
mDiscErrorMgr->mRetryError = true;
} else if (err == kWrongDisk) {
mDiscErrorMgr->SetDiscError(true);
mDiscErrorMgr->mRetryError = false;
}
if (err != kNoDiskError) {
if (mNetworkPlay == false) {
} else {
}
}
if (mDiskError == kFailedChecksum) {
TheDebug.Exit(1, true);
}
}
}

void WiiPowerCallback() { gPowerCallback = kQuitShutdown; }
void WiiResetCallback() { gPowerCallback = kQuitRestart; }
Expand Down
104 changes: 104 additions & 0 deletions src/system/utl/HttpWii.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
#include "HttpWii.h"
#include "system/os/Debug.h"
#include "system/utl/MemMgr.h"
#include <RevoEX/nhttp/nhttp.h>

HttpWii TheHttpWii;

void *CommerceEcAlloc(int sz, int al) {
void *r = NULL;
if (sz != 0)
r = _MemAlloc(sz, al);
return r;
}

void *CommerceEcFree(void *ptr) {
if (ptr == NULL)
return;
_MemFree(ptr);
}

const char *HttpWii::GetNHTTPErrorString(NHTTPError err) {
if (err == NHTTP_ERROR_SYSTEM) {
return "NHTTP_ERROR_SYSTEM";
} else if (err < NHTTP_NUM_ERRORS) {
static const char *table[NHTTP_NUM_ERRORS] = { "NHTTP_ERROR_NONE",
"NHTTP_ERROR_ALLOC",
"NHTTP_ERROR_TOOMANYREQ",
"NHTTP_ERROR_SOCKET",
"NHTTP_ERROR_DNS",
"NHTTP_ERROR_CONNECT",
"NHTTP_ERROR_BUFFULL",
"NHTTP_ERROR_HTTPPARSE",
"NHTTP_ERROR_CANCELED",
"NHTTP_ERROR_REVOLUTIONSDK",
"NHTTP_ERROR_REVOLUTIONWIFI",
"NHTTP_ERROR_UNKNOWN",
"NHTTP_ERROR_DNS_PROXY",
"NHTTP_ERROR_CONNECT_PROXY",
"NHTTP_ERROR_SSL",
"NHTTP_ERROR_BUSY" };
return table[err];
} else {
TheDebug.Fail(FormatString("unknown NHTTPError! (added recently?)").Str());
return "unknown (internal error)";
}
}

HttpWii::HttpWii() {}
HttpWii::~HttpWii() {}

void HttpWii::Init() { mDataBuffer = NULL; }

void HttpWii::Start() {
if (mStatus != 1) {
NHTTPStartup(CommerceEcAlloc, CommerceEcFree, 0x11);
mStatus = 1;
}
}

void HttpWii::CleanupCallback() { TheHttpWii.mStatus = 0; }

BOOL gWaitingOnCancelToComplete;

void HttpWii::Stop() {
if (mStatus == 1) {
CancelAsyncAll();
mStatus = 2;
gWaitingOnCancelToComplete = false;
}
}

int HttpWii::GetStatus() {
if (mStatus == 2) {
for (int i = 0; i < NUM_HTTPWII_HANDLES; i++) {
if (mHandles[i] != NULL) {
unsigned long r;
if (CompleteAsync(i, r) == 0)
return mStatus;
}
}
if (gWaitingOnCancelToComplete == false) {
NHTTPCleanupAsync(CleanupCallback);
gWaitingOnCancelToComplete = true;
}
}
return mStatus;
}

int HttpWii::CancelAsync(int task) {
BOOL r;
if (mHandles[task] == NULL) {
r = false;
} else {
r = (bool)NHTTPCancelConnection(mHandles[task]);
}
return r;
}

int HttpWii::CancelAsyncAll() {
for (int i = 0; i < NUM_HTTPWII_HANDLES; i++) {
CancelAsync(i);
}
return TRUE;
}
48 changes: 48 additions & 0 deletions src/system/utl/HttpWii.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#pragma once
#include "obj/Data.h"
#include "os/Timer.h"

#define NUM_HTTPWII_HANDLES 10

extern "C" {
void *CommerceEcAlloc(int, int);
void *CommerceEcFree(void *);
}

enum NHTTPError {
NHTTP_NUM_ERRORS = 0x10,
NHTTP_ERROR_SYSTEM = -1
};

class HttpWii {
public:
HttpWii();
~HttpWii();

void Init();
void Start();
void Stop();
int GetStatus();
int GetFileAsync(const char *, void *, int);
int CompleteAsync(int, unsigned long &);
int CancelAsync(int task);
int CancelAsyncAll();

static void CleanupCallback();
static const char *GetNHTTPErrorString(NHTTPError err);

bool mServerVerifySSL;
bool mUseSSL;
bool mUseFileLoad;
char *mRootCA;
unsigned long mCertSize;
DataArray *mServerInfo;
void *mDataBuffer;
int mDataBufferSize;
void *mHandles[NUM_HTTPWII_HANDLES];
unsigned int mLastReceived[NUM_HTTPWII_HANDLES];
Timer mTimeout[NUM_HTTPWII_HANDLES];
int mStatus; // ??
};

extern HttpWii TheHttpWii;