8 #define close(s) closesocket(s)
10 #include <sys/types.h>
11 #include <sys/socket.h>
12 #include <netinet/in.h>
13 #include <arpa/inet.h>
18 #define BUFFER_SIZE 1 << 10
21 int write_data(int s
, char *buf
, int n
)
28 if ((br
= send(s
,buf
,n
-bcount
,0)) > 0) {
38 int main(int argc
, char *argv
[])
45 struct sockaddr_in addr
;
52 printf("usage: sendelf [wii ip] [file.elf]\n");
57 if (WSAStartup(MAKEWORD(1, 1), &wsa
))
59 printf("WSAStartup() failed, %lu\n", (unsigned long)GetLastError());
64 fd
= fopen(argv
[2], "rb");
67 perror("fopen failed");
72 addr
.sin_addr
.S_un
.S_addr
= inet_addr(argv
[1]);
73 if(addr
.sin_addr
.S_un
.S_addr
== INADDR_NONE
)
75 if(inet_aton(argv
[1], &addr
.sin_addr
) == 0)
78 perror("inet_aton failed");
83 sock
= socket(PF_INET
, SOCK_STREAM
, 0);
86 perror("socket() failed");
91 addr
.sin_port
= htons(PORT
);
92 addr
.sin_family
= AF_INET
;
94 printf("connecting to %s:%d\n", inet_ntoa(addr
.sin_addr
), PORT
);
95 if(connect(sock
, (struct sockaddr
*)&addr
, sizeof(addr
)) == -1)
97 perror("connect() failed");
103 fseek(fd
, 0, SEEK_END
);
105 fseek(fd
, 0, SEEK_SET
);
107 printf("size: %08X\n", size
);
108 buffer
= malloc(BUFFER_SIZE
);
109 size2
= ((size
& 0xFF000000) >> 24) |
110 ((size
& 0x00FF0000) >> 8) |
111 ((size
& 0x0000FF00) << 8) |
112 ((size
& 0x000000FF) << 24);
113 printf("size2: %08X\n", size2
);
114 memcpy(buffer
, &size2
, sizeof(size
));
115 if((i
= write_data(sock
, buffer
, sizeof(size
))) < 0)
117 perror("send() failed");
126 memset(buffer
, 0, BUFFER_SIZE
);
127 printf("reading chunk #%d\n", i
);
128 if(fread(buffer
, size
> BUFFER_SIZE
? BUFFER_SIZE
: size
, 1, fd
) < 1)
130 perror("fread returned < 1");
135 printf("%d/%d\n", i
, size
);
136 if(write_data(sock
, buffer
, BUFFER_SIZE
) < 0)
138 perror("send() failed");
146 printf("file sent successfully(?)\n");