aboutsummaryrefslogtreecommitdiff
path: root/wiiload_lite.go
diff options
context:
space:
mode:
authorfrosty <passedgoandgot200@disroot.org>2025-02-20 23:41:02 -0500
committerfrosty <passedgoandgot200@disroot.org>2025-02-20 23:45:04 -0500
commit15e576cd2f3e92053e2c219e14376a5f5435a219 (patch)
treef0aa54d02f1613df29c3f1037da7b589767d0ce1 /wiiload_lite.go
parente8c6437d862c901460d1b798f1ea9df9fb53ecd1 (diff)
downloadwiiload-lite-15e576cd2f3e92053e2c219e14376a5f5435a219.tar.gz
wiiload-lite-15e576cd2f3e92053e2c219e14376a5f5435a219.zip
fix module name to comply with standard
Diffstat (limited to 'wiiload_lite.go')
-rw-r--r--wiiload_lite.go91
1 files changed, 91 insertions, 0 deletions
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)))
+}