6 #include <sys/socket.h>
7 #include <netinet/in.h>
12 #define BUFFER_SIZE 1 << 10
15 int write_data(int s
, char *buf
, int n
)
22 if ((br
= send(s
,buf
,n
-bcount
,0)) > 0) {
32 int main(int argc
, char *argv
[])
39 struct sockaddr_in addr
;
43 printf("usage: sendelf [wii ip] [file.elf]\n");
47 fd
= fopen(argv
[2], "rb");
50 perror("fopen failed");
54 if(inet_aton(argv
[1], &addr
.sin_addr
) == 0)
56 perror("inet_aton failed");
61 sock
= socket(PF_INET
, SOCK_STREAM
, 0);
64 perror("socket() failed");
69 addr
.sin_port
= htons(PORT
);
70 addr
.sin_family
= AF_INET
;
72 printf("connecting to %s:%d\n", inet_ntoa(addr
.sin_addr
), PORT
);
73 if(connect(sock
, (struct sockaddr
*)&addr
, sizeof(addr
)) == -1)
75 perror("connect() failed");
81 fseek(fd
, 0, SEEK_END
);
83 fseek(fd
, 0, SEEK_SET
);
85 printf("size: %08X\n", size
);
86 buffer
= malloc(BUFFER_SIZE
);
87 size2
= ((size
& 0xFF000000) >> 24) |
88 ((size
& 0x00FF0000) >> 8) |
89 ((size
& 0x0000FF00) << 8) |
90 ((size
& 0x000000FF) << 24);
91 printf("size2: %08X\n", size2
);
92 memcpy(buffer
, &size2
, sizeof(size
));
93 if((i
= write_data(sock
, buffer
, sizeof(size
))) < 0)
95 perror("send() failed");
104 memset(buffer
, 0, BUFFER_SIZE
);
105 printf("reading chunk #%d\n", i
);
106 if(fread(buffer
, size
> BUFFER_SIZE
? BUFFER_SIZE
: size
, 1, fd
) < 1)
108 perror("fread returned < 1");
113 printf("%d/%d\n", i
, size
);
114 if(write_data(sock
, buffer
, BUFFER_SIZE
) < 0)
116 perror("send() failed");
124 printf("file sent successfully(?)\n");