removed the win32 stuff. use henke37 and dasda's gui
[svpe-wii.git] / tcploader / pc / main.c
blob0932a064a53deb0b5871dfa8e1c583f49536fcae
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
5 #include <sys/types.h>
6 #include <sys/socket.h>
7 #include <netinet/in.h>
8 #include <arpa/inet.h>
9 #include <unistd.h>
10 #include <netdb.h>
12 #define BUFFER_SIZE 1 << 10
13 #define PORT 8080
15 int write_data(int s, char *buf, int n)
17 int bcount;
18 int br;
19 bcount = 0;
20 br = 0;
21 while(bcount < n) {
22 if ((br = send(s,buf,n-bcount,0)) > 0) {
23 bcount += br;
24 buf += br;
26 else if (br < 0)
27 return br;
29 return (bcount);
32 int main(int argc, char *argv[])
34 FILE *fd;
35 char *buffer;
36 int i;
37 int size, size2;
38 int sock;
39 struct sockaddr_in addr;
41 if(argc != 3)
43 printf("usage: sendelf [wii ip] [file.elf]\n");
44 return -1;
47 fd = fopen(argv[2], "rb");
48 if(fd == NULL)
50 perror("fopen failed");
51 return -1;
54 if(inet_aton(argv[1], &addr.sin_addr) == 0)
56 perror("inet_aton failed");
57 fclose(fd);
58 return -1;
61 sock = socket(PF_INET, SOCK_STREAM, 0);
62 if(sock < 0)
64 perror("socket() failed");
65 fclose(fd);
66 return -1;
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");
76 fclose(fd);
77 close(sock);
78 return -1;
81 fseek(fd, 0, SEEK_END);
82 size = ftell(fd);
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");
96 fclose(fd);
97 close(sock);
98 return -1;
101 i = 0;
102 while(i < size)
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");
109 /* fclose(fd);
110 close(sock);
111 return -1;*/
113 printf("%d/%d\n", i, size);
114 if(write_data(sock, buffer, BUFFER_SIZE) < 0)
116 perror("send() failed");
117 fclose(fd);
118 close(sock);
119 return -1;
121 i += BUFFER_SIZE;
124 printf("file sent successfully(?)\n");
125 fclose(fd);
126 close(sock);
128 return 0;