From e8c6437d862c901460d1b798f1ea9df9fb53ecd1 Mon Sep 17 00:00:00 2001 From: frosty Date: Thu, 20 Feb 2025 23:39:07 -0500 Subject: rename project to wiiload-lite --- README.md | 9 ++++++ go.mod | 2 +- wiiload-lite.go | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wiiload.go | 91 --------------------------------------------------------- 4 files changed, 101 insertions(+), 92 deletions(-) create mode 100644 README.md create mode 100644 wiiload-lite.go delete mode 100644 wiiload.go diff --git a/README.md b/README.md new file mode 100644 index 0000000..4ffb401 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# wiiload-lite + +This is a simple reimplemention of the Wiiload protocol for the Homebrew Channel on the Nintendo Wii. + +## Usage + +``` +wiiload-lite ip_address file_path +``` diff --git a/go.mod b/go.mod index 2ae0a5f..30dbd48 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ -module github.com/frostyfalls/wiiload +module github.com/frostyfalls/wiiload-lite go 1.23.6 diff --git a/wiiload-lite.go b/wiiload-lite.go new file mode 100644 index 0000000..e14f64a --- /dev/null +++ b/wiiload-lite.go @@ -0,0 +1,91 @@ +package main + +import ( + "bytes" + "compress/zlib" + "encoding/binary" + "fmt" + "io" + "net" + "os" + "path/filepath" +) + +const ( + WiiloadVersionMajor = 0 + WiiloadVersionMinor = 5 + FileChunkSize = 1024 * 128 +) + +const usage = "usage: wiiload-lite ip_address file_path" + +func main() { + if len(os.Args) != 3 { + fmt.Fprintln(os.Stderr, usage) + os.Exit(1) + } + + ipAddress := os.Args[1] + filePath := os.Args[2] + + file, err := os.Open(filePath) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + defer file.Close() + + fileData, err := io.ReadAll(file) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + var buf bytes.Buffer + writer := zlib.NewWriter(&buf) + + _, err = writer.Write(fileData) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + err = writer.Close() + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + var compressedFileData = buf.Bytes() + + fileStat, err := file.Stat() + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + fileSize := fileStat.Size() + + conn, err := net.Dial("tcp", ipAddress+":4299") + if err != nil { + fmt.Println(err) + os.Exit(1) + } + defer conn.Close() + + conn.Write([]byte("HAXX")) + conn.Write([]byte{WiiloadVersionMajor}) + conn.Write([]byte{WiiloadVersionMinor}) + binary.Write(conn, binary.BigEndian, uint16(len(filepath.Base(filePath)))) + binary.Write(conn, binary.BigEndian, uint32(len(compressedFileData))) + binary.Write(conn, binary.BigEndian, uint32(fileSize)) + + for i := 0; i < len(compressedFileData); i += FileChunkSize { + end := i + FileChunkSize + if end > len(compressedFileData) { + end = len(compressedFileData) + } + conn.Write(compressedFileData[i:end]) + } + + conn.Write([]byte(filepath.Base(filePath))) +} diff --git a/wiiload.go b/wiiload.go deleted file mode 100644 index a0e7e86..0000000 --- a/wiiload.go +++ /dev/null @@ -1,91 +0,0 @@ -package main - -import ( - "bytes" - "compress/zlib" - "encoding/binary" - "fmt" - "io" - "net" - "os" - "path/filepath" -) - -const ( - WiiloadVersionMajor = 0 - WiiloadVersionMinor = 5 - FileChunkSize = 1024 * 128 -) - -const usage = "usage: wiiload ip_address file_path" - -func main() { - if len(os.Args) != 3 { - fmt.Fprintln(os.Stderr, usage) - os.Exit(1) - } - - ipAddress := os.Args[1] - filePath := os.Args[2] - - file, err := os.Open(filePath) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - defer file.Close() - - fileData, err := io.ReadAll(file) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - - var buf bytes.Buffer - writer := zlib.NewWriter(&buf) - - _, err = writer.Write(fileData) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - err = writer.Close() - if err != nil { - fmt.Println(err) - os.Exit(1) - } - - var compressedFileData = buf.Bytes() - - fileStat, err := file.Stat() - if err != nil { - fmt.Println(err) - os.Exit(1) - } - - fileSize := fileStat.Size() - - conn, err := net.Dial("tcp", ipAddress+":4299") - if err != nil { - fmt.Println(err) - os.Exit(1) - } - defer conn.Close() - - conn.Write([]byte("HAXX")) - conn.Write([]byte{WiiloadVersionMajor}) - conn.Write([]byte{WiiloadVersionMinor}) - binary.Write(conn, binary.BigEndian, uint16(len(filepath.Base(filePath)))) - binary.Write(conn, binary.BigEndian, uint32(len(compressedFileData))) - binary.Write(conn, binary.BigEndian, uint32(fileSize)) - - for i := 0; i < len(compressedFileData); i += FileChunkSize { - end := i + FileChunkSize - if end > len(compressedFileData) { - end = len(compressedFileData) - } - conn.Write(compressedFileData[i:end]) - } - - conn.Write([]byte(filepath.Base(filePath))) -} -- cgit v1.2.3