Commit 97cc6953ec86efb667bf8c788dcdc8864265e3e0
0 parents
Exists in
master
first commit
Showing
2 changed files
with
617 additions
and
0 deletions
Show diff stats
index.php
... | ... | @@ -0,0 +1,102 @@ |
1 | +<?php | |
2 | + date_default_timezone_set("Asia/Taipei"); | |
3 | + $date = date_create(); | |
4 | + $time = date_format($date, 'Y-m-d H:i:s'); | |
5 | + | |
6 | + $link = mysqli_connect("10.10.10.237", "root", "SANlien<03051501>", "practice"); | |
7 | + | |
8 | + if (mysqli_connect_errno()) { | |
9 | + //printf("Connect failed: %s\n", mysqli_connect_error()); | |
10 | + exit(); | |
11 | + } | |
12 | + | |
13 | + //printf("#connect successfully<br><br>\n"); | |
14 | + | |
15 | + if(isset($_GET["inst"])) | |
16 | + { | |
17 | + $serial = "\"".$_GET["inst"]."\""; | |
18 | + if( !(isset($_GET["code"]))) | |
19 | + { | |
20 | + //echo "not API<br>"; | |
21 | + $query = "SELECT OpCode FROM status WHERE SerialNo = $serial"; | |
22 | + //echo "#query <br> => <br> $query<br><br>"; | |
23 | + | |
24 | + if ($result = mysqli_query($link, $query)) | |
25 | + { | |
26 | + if ($row = mysqli_fetch_row($result)) | |
27 | + { | |
28 | + $service_code = "\"$row[0]\""; | |
29 | + echo "service_code:$row[0]"; | |
30 | + | |
31 | + //echo "<br><br>insert service_code to log<br>"; | |
32 | + $query = "INSERT INTO log(Time,SerialNo,OpCode) VALUES (\"$time\", $serial, $service_code)"; | |
33 | + //echo "#query <br> => <br> $query<br><br>"; | |
34 | + mysqli_query($link, $query); | |
35 | + //printf("Insert New Record sucessfully<br>"); | |
36 | + } | |
37 | + else | |
38 | + { | |
39 | + //echo "<br><br>insert wrong service_code to log<br>"; | |
40 | + $query = "INSERT INTO log(Time,SerialNo,OpCode,msg) VALUES (\"$time\", $serial, \"\",\"wrong serial\")"; | |
41 | + mysqli_query($link, $query); | |
42 | + | |
43 | + //printf("Insert New wrong record sucessfully<br><br>"); | |
44 | + } | |
45 | + mysqli_free_result($result); | |
46 | + mysqli_free_result($row); | |
47 | + } | |
48 | + } | |
49 | + else | |
50 | + { | |
51 | + //echo "is API<br>"; | |
52 | + $service_code = "\"".$_GET["code"]."\""; | |
53 | + | |
54 | + if($service_code == "\"666\"") | |
55 | + { | |
56 | + //echo "<br>insert API's service code to log<br>"; | |
57 | + $query = "INSERT INTO log(Time,SerialNo,OpCode) VALUES (\"$time\", $serial, $service_code)"; | |
58 | + mysqli_query($link, $query); | |
59 | + //printf("Insert into log sucessfully<br><br>"); | |
60 | + | |
61 | + //printf("update status to 666<br>"); | |
62 | + $query="UPDATE status SET OpCode = $service_code WHERE SerialNo = $serial"; | |
63 | + mysqli_query($link, $query); | |
64 | + //printf("update successfully.<br>Affected rows (UPDATE): %d<br>", mysqli_affected_rows($link)); | |
65 | + } | |
66 | + else if($service_code == "\"400\"") | |
67 | + { | |
68 | + if(isset($_GET["msg"])) | |
69 | + { | |
70 | + $msg="\"".$_GET["msg"]."\""; | |
71 | + $query = "INSERT INTO log(Time,SerialNo,OpCode,msg) VALUES (\"$time\", $serial, $service_code,$msg)"; | |
72 | + mysqli_query($link, $query); | |
73 | + //printf("Insert 400 sucessfully<br><br>"); | |
74 | + | |
75 | + //printf("update status to 000<br>"); | |
76 | + $query="UPDATE status SET OpCode = \"000\" WHERE SerialNo = $serial"; | |
77 | + mysqli_query($link, $query); | |
78 | + //printf("update successfully.<br>Affected rows (UPDATE): %d<br>", mysqli_affected_rows($link)); | |
79 | + } | |
80 | + } | |
81 | + else if($service_code == "\"777\"") | |
82 | + { | |
83 | + //echo "<br>insert API's service code to log<br>"; | |
84 | + $query = "INSERT INTO log(Time,SerialNo,OpCode) VALUES (\"$time\", $serial, $service_code)"; | |
85 | + mysqli_query($link, $query); | |
86 | + //printf("Insert into log sucessfully<br><br>"); | |
87 | + | |
88 | + //printf("update status to 000<br>"); | |
89 | + $query="UPDATE status SET OpCode = \"000\" WHERE SerialNo = $serial"; | |
90 | + mysqli_query($link, $query); | |
91 | + //printf("update successfully.<br>Affected rows (UPDATE): %d<br>", mysqli_affected_rows($link)); | |
92 | + } | |
93 | + | |
94 | + } | |
95 | + } | |
96 | + else | |
97 | + { | |
98 | + //printf("no serial"); | |
99 | + } | |
100 | + | |
101 | +mysqli_close($link); | |
102 | +?> | |
0 | 103 | \ No newline at end of file | ... | ... |
serviceApi.c
... | ... | @@ -0,0 +1,515 @@ |
1 | +#include <stdio.h> | |
2 | +#include <string.h> //memcmp 要 include 的 header | |
3 | +#include <stdlib.h> | |
4 | +#include <unistd.h> //getpid() | |
5 | +#include <errno.h> | |
6 | +#include <netdb.h> | |
7 | +#include <sys/types.h> | |
8 | +#include <netinet/in.h> //sockaddr_in | |
9 | +#include <sys/socket.h> //socket() | |
10 | + | |
11 | +#define PORT 80 // Client 所要連線的 port | |
12 | +#define MAXDATASIZE 500 //最大可收的 bytes 大小 | |
13 | + | |
14 | +char ip[50]; | |
15 | +char port[50]; | |
16 | +char user[50]; | |
17 | +char password[50]; | |
18 | +char folder[50]; | |
19 | +char command[500]; | |
20 | +char serial[50]; | |
21 | +int checkT = 0, checkR = 0; //0為complete; -1回傳開檔失敗; -2回傳 傳檔/收檔失敗 的錯誤 Message | |
22 | +int errorCountR = 0, errorCountT = 0; | |
23 | + | |
24 | +void readConfig() //用來存取 ip, port, password 等等變數的 function | |
25 | +{ | |
26 | + FILE *fp; | |
27 | + fp = fopen("service.cfg", "r"); //開檔,讀取service.cfg的檔案 | |
28 | + if(fp == NULL) | |
29 | + printf("open failure\n"); | |
30 | + else | |
31 | + { | |
32 | + while(1) | |
33 | + { | |
34 | + fgets(command, 500, fp); //從fp中一次讀取一行指令(500字元)到common中 | |
35 | + | |
36 | + if(feof(fp)) //如讀到底則 Break | |
37 | + { | |
38 | + break; | |
39 | + } | |
40 | + else | |
41 | + { | |
42 | + char check[500]; | |
43 | + sscanf(command, "%s %*s", check); //從command中讀取前面的字元存到 check 中,後面的字元省略 | |
44 | + | |
45 | + if(memcmp(check, "IP", 2) == 0) //如 (check == "IP") 則從 command 中讀取後面的字元存到 ip 變數中,前面的字元省略 | |
46 | + { | |
47 | + sscanf(command, "%*s %s", ip); | |
48 | + } | |
49 | + else if(memcmp(check, "PORT", 4) == 0) | |
50 | + { | |
51 | + sscanf(command, "%*s %s", port); | |
52 | + } | |
53 | + else if(memcmp(check, "PASSWORD", 8) == 0) | |
54 | + { | |
55 | + sscanf(command, "%*s %s", password); | |
56 | + } | |
57 | + else if(memcmp(check, "USER", 4) == 0) | |
58 | + { | |
59 | + sscanf(command, "%*s %s", user); | |
60 | + } | |
61 | + else if(memcmp(check, "FOLDER", 6) == 0) | |
62 | + { | |
63 | + sscanf(command, "%*s %s", folder); | |
64 | + } | |
65 | + } | |
66 | + } | |
67 | + fclose(fp); | |
68 | + } | |
69 | +} | |
70 | + | |
71 | +/*void readSerialNo() //用來讀取序號用的 function | |
72 | +{ | |
73 | + FILE *fp2; | |
74 | + fp2 = fopen("/proc/cpuinfo", "r"); | |
75 | + | |
76 | + if(fp2 == NULL) | |
77 | + { | |
78 | + printf("open failure\n"); | |
79 | + } | |
80 | + else | |
81 | + { | |
82 | + while(1) | |
83 | + { | |
84 | + fgets(command, 500, fp2); | |
85 | + if(feof(fp2)) | |
86 | + { | |
87 | + break; | |
88 | + } | |
89 | + else | |
90 | + { | |
91 | + char check[500]; | |
92 | + sscanf(command, "%s %*[]", check); | |
93 | + if(memcmp(check, "Serial", 6) == 0) | |
94 | + { | |
95 | + sscanf(command, "%*[^:] %*s %s", serial); //從command中,前面到:為止都省略掉,再省略一個空格,讀取最後一個字元存到serial | |
96 | + //printf("%s\n", serial); | |
97 | + sprintf(serial, "%s", serial); //把serial存成指定格式(%s) | |
98 | + //printf("%d\n", strlen(serial)); //測試serial有幾個字元 | |
99 | + } | |
100 | + } | |
101 | + } | |
102 | + fclose(fp2); //記得關檔 | |
103 | + } | |
104 | +}*/ | |
105 | + | |
106 | +void FileRevOk() //查看是否成功下載檔案,如成功跳出"file recv successfully" | |
107 | +{ //如失敗跳出 "file not recv" | |
108 | + char buf[500]; | |
109 | + FILE *pp; | |
110 | + | |
111 | + printf("Befor receive, 以上正常\n"); | |
112 | + | |
113 | + if((pp = popen(command, "r")) == NULL) | |
114 | + { | |
115 | + printf("popen() error!\n"); | |
116 | + checkR = -1; | |
117 | + return; //回傳 not found | |
118 | + } | |
119 | + else | |
120 | + { | |
121 | + while(fgets(buf, sizeof(buf), pp)) | |
122 | + { | |
123 | + //printf("%s", buf); | |
124 | + if(memcmp(buf, "file recv ok", 12) == 0) | |
125 | + { | |
126 | + printf("file recv successfully\n"); | |
127 | + pclose(pp); | |
128 | + checkR = 0; | |
129 | + return; | |
130 | + } | |
131 | + } | |
132 | + | |
133 | + pclose(pp); | |
134 | + printf("file not recv\n"); | |
135 | + checkR = -2; | |
136 | + return; | |
137 | + } | |
138 | +} | |
139 | + | |
140 | +void FileTransferOk() | |
141 | +{ | |
142 | + char buf[500]; | |
143 | + FILE *pp; | |
144 | + | |
145 | + puts("Befor transfer, 以上正常\n"); | |
146 | + | |
147 | + if((pp = popen(command, "r")) == NULL) | |
148 | + { | |
149 | + printf("popen() error!\n"); | |
150 | + checkT = -1; | |
151 | + return; | |
152 | + } | |
153 | + else | |
154 | + { | |
155 | + while(fgets(buf, sizeof(buf), pp)) | |
156 | + { | |
157 | + if(memcmp(buf, "Transfer OK.", 12) == 0) | |
158 | + { | |
159 | + printf("file transfer successfully\n"); | |
160 | + pclose(pp); | |
161 | + checkT = 0; | |
162 | + return; | |
163 | + } | |
164 | + } | |
165 | + | |
166 | + pclose(pp); | |
167 | + printf("file not transfer\n"); | |
168 | + checkT = -2; | |
169 | + return; | |
170 | + } | |
171 | +} | |
172 | + | |
173 | +//////////////////////////////////////////////////////////////////////////////// | |
174 | +// // | |
175 | +// tcpConnect // | |
176 | +// // | |
177 | +//////////////////////////////////////////////////////////////////////////////// | |
178 | + | |
179 | +int tcpConnect(int return_code, char msg[50]) | |
180 | +{ | |
181 | + int sockfd; //socket的描述 | |
182 | + int i; | |
183 | + int numbytes; | |
184 | + int service_code; | |
185 | + char buf[MAXDATASIZE]; | |
186 | + struct hostent *host; | |
187 | + struct sockaddr_in info; | |
188 | + struct timeval tv; | |
189 | + | |
190 | + sprintf(buf, "GET /index.php?inst=%s&&code=%d&&msg=%s HTTP/1.1\r\n", serial, return_code, msg); | |
191 | + i = strlen(buf); | |
192 | + | |
193 | + if(return_code == 400) | |
194 | + { | |
195 | + //printf("Failure, Error message : %s\n", message); | |
196 | + sprintf(&buf[i], "Host: %s\r\nConnection: Failure\r\n\r\n\r\n\0\0\0\0\0\0\0", ip); | |
197 | + } | |
198 | + else if(return_code == 777) | |
199 | + { | |
200 | + //printf("complete\n"); | |
201 | + sprintf(&buf[i], "Host: %s\r\nConnection: Complete\r\n\r\n\r\n\0\0\0\0\0\0\0", ip); | |
202 | + } | |
203 | + else if(return_code == 666) | |
204 | + { | |
205 | + //printf("under processing\n"); | |
206 | + sprintf(&buf[i], "Host: %s\r\nConnection: Keep-Alive\r\n\r\n\r\n\0\0\0\0\0\0\0", ip); | |
207 | + } | |
208 | + else | |
209 | + { | |
210 | + puts("your return_code is wrong.\n"); | |
211 | + } | |
212 | + | |
213 | + sockfd = socket(AF_INET, SOCK_STREAM, 0); //socket的描述浮 | |
214 | + if(sockfd == -1) | |
215 | + { | |
216 | + perror("socket"); | |
217 | + exit(1); | |
218 | + } | |
219 | + | |
220 | + | |
221 | + bzero(&info, sizeof(info)); //初始化,將struct涵蓋的bits設為0 | |
222 | + info.sin_family = AF_INET; //使用IPv4協定的地址 | |
223 | + info.sin_addr.s_addr = inet_addr(ip); //IP address, inet_addr()可將字串IP變成 binary's IP | |
224 | + //info.sin_addr.s_addr = inet_addr("10.0.0.49");//先指向自己的 IP 練習, 可以把防火牆打開測試connected的timeout | |
225 | + info.sin_port = htons(PORT); //埠號,Host TO Network Short integer的縮寫,它將本機端的字節序(endian)轉換成了網路端的字節序 | |
226 | + //printf("test %x\n", info.sin_addr.s_addr); | |
227 | + | |
228 | + //socket的連線 | |
229 | + //沒有timeout版本的connect | |
230 | + if((connect(sockfd, (struct sockaddr *)&info, sizeof(info))) == -1) | |
231 | + { | |
232 | + perror("connect"); | |
233 | + exit(1); | |
234 | + } | |
235 | + printf("connect successfully\n"); | |
236 | + //沒有timeout版本的connect | |
237 | + | |
238 | + | |
239 | + //有timeout 版本的connect | |
240 | + /*int res = connect(sockfd, (struct sockaddr *)&info, sizeof(info)); | |
241 | + if(res < 0) | |
242 | + { | |
243 | + if(errno == EINPROGRESS) //connect 還在進行中 | |
244 | + { | |
245 | + perror("EINPROGRESS in connect"); | |
246 | + | |
247 | + fd_set myset; | |
248 | + do | |
249 | + { | |
250 | + tv.tv_sec = 10; | |
251 | + tv.tv_usec = 0; | |
252 | + FD_ZERO(&myset); | |
253 | + FD_SET(sockfd, &myset); | |
254 | + res = select(sockfd+1, NULL, &myset, NULL, &tv); | |
255 | + if(res < 0 && errno != EINTR) | |
256 | + { | |
257 | + perror("connect error"); | |
258 | + exit(1); | |
259 | + } | |
260 | + else if(res >0) | |
261 | + { | |
262 | + socklen_t len; | |
263 | + int valopt; | |
264 | + | |
265 | + len = sizeof(int); | |
266 | + if(getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &len) < 0) //getsockopt can determine if the socket is connected (=0, connected) | |
267 | + { | |
268 | + perror("Error in getsockopt()"); | |
269 | + exit(1); | |
270 | + } | |
271 | + | |
272 | + if(valopt) | |
273 | + { | |
274 | + perror("Error in delay"); | |
275 | + exit(1); | |
276 | + } | |
277 | + break; | |
278 | + } | |
279 | + else | |
280 | + { | |
281 | + perror("Timeout"); | |
282 | + exit(1); | |
283 | + } | |
284 | + }while(1); | |
285 | + } | |
286 | + else | |
287 | + { | |
288 | + perror("connect error"); | |
289 | + exit(1); | |
290 | + } | |
291 | + }//有timeout版的connect | |
292 | + */ | |
293 | + | |
294 | + //傳送資料(send a message on a socket),如正確 send 會回傳實際送出的 Byte 數 | |
295 | + if((send(sockfd, buf, sizeof(buf), 0)) == -1) | |
296 | + { | |
297 | + perror("send"); | |
298 | + exit(1); | |
299 | + } | |
300 | + //printf("send:\n%s\n", buf); | |
301 | + printf("After the send function \n\n"); | |
302 | + | |
303 | + | |
304 | + //接收資料,如正確 recv 會回傳實際讀到並寫入到 buffer 的 Byte 數 | |
305 | + numbytes = recv(sockfd, buf, sizeof(buf), 0); | |
306 | + //printf("numbytes = %d\n", numbytes); | |
307 | + if(numbytes == -1) | |
308 | + { | |
309 | + perror("recv"); | |
310 | + exit(1); | |
311 | + } | |
312 | + | |
313 | + close(sockfd); | |
314 | + | |
315 | + buf[numbytes] = '\0'; | |
316 | + printf("Received in pid = %d, text = %s \n", getpid(), buf); | |
317 | + | |
318 | + return 0; | |
319 | +} | |
320 | + | |
321 | +int updateFirmware() | |
322 | +{ | |
323 | + int sockfd; //socket的描述 | |
324 | + int i; | |
325 | + int numbytes; | |
326 | + int service_code; | |
327 | + char buf[12] = {1,2,0,0,0,6,1,6,0,0x70,1,0x81}; | |
328 | + struct hostent *host; | |
329 | + struct sockaddr_in info; | |
330 | + | |
331 | + i = strlen(buf); | |
332 | + | |
333 | + sockfd = socket(AF_INET, SOCK_STREAM, 0); //socket的描述浮 | |
334 | + if(sockfd == -1) | |
335 | + { | |
336 | + perror("socket"); | |
337 | + exit(1); | |
338 | + } | |
339 | + | |
340 | + bzero(&info, sizeof(info)); //初始化,將struct涵蓋的bits設為0 | |
341 | + info.sin_family = AF_INET; //使用IPv4協定的地址 | |
342 | + //info.sin_addr.s_addr = inet_addr(ip); //IP address, inet_addr()可將字串IP變成 binary's IP | |
343 | + info.sin_addr.s_addr = inet_addr("127.0.0.1");//先指向自己的 IP 練習, 可以把防火牆打開測試connected的timeout | |
344 | + info.sin_port = htons(502); //埠號,Host TO Network Short integer的縮寫,它將本機端的字節序(endian)轉換成了網路端的字節序 | |
345 | + | |
346 | + //socket的連線 | |
347 | + //沒有timeout版本的connect | |
348 | + if((connect(sockfd, (struct sockaddr *)&info, sizeof(info))) == -1) | |
349 | + { | |
350 | + perror("connect"); | |
351 | + exit(1); | |
352 | + } | |
353 | + | |
354 | + //傳送資料(send a message on a socket),如正確 send 會回傳實際送出的 Byte 數 | |
355 | + if((send(sockfd, buf, sizeof(buf), 0)) == -1) | |
356 | + { | |
357 | + perror("send"); | |
358 | + exit(1); | |
359 | + } | |
360 | + printf("After the send function \n\n"); | |
361 | + | |
362 | + //接收資料,如正確 recv 會回傳實際讀到並寫入到 buffer 的 Byte 數 | |
363 | + numbytes = recv(sockfd, buf, sizeof(buf), 0); | |
364 | + if(numbytes == -1) | |
365 | + { | |
366 | + perror("recv"); | |
367 | + exit(1); | |
368 | + } | |
369 | + | |
370 | + close(sockfd); | |
371 | + | |
372 | + buf[numbytes] = '\0'; | |
373 | + | |
374 | + return 0; | |
375 | + | |
376 | +} | |
377 | +///////////////////// main /////////////////////////////////////////// | |
378 | + | |
379 | +int main(int argc, char *argv[]) | |
380 | +{ | |
381 | + int return_code; | |
382 | + int version; | |
383 | + int date; | |
384 | + | |
385 | + return_code = atoi(argv[4]); | |
386 | + version = atoi(argv[6]); | |
387 | + date = atoi(argv[8]); | |
388 | + sprintf(serial, "%s", argv[9]); | |
389 | + | |
390 | + readConfig(); //呼叫存取ip,password等等變數的function | |
391 | + if(return_code == 0) //如return_code為0,則輸出0且結束 | |
392 | + printf("0\n"); //do nothing | |
393 | + else if(return_code == 400) | |
394 | + puts("工作失敗\n"); | |
395 | + else if(return_code == 666) | |
396 | + puts("上一個程式還在執行中\n"); | |
397 | + else if(return_code == 777) | |
398 | + puts("已完成\n"); | |
399 | + else if(return_code == 10|| return_code == 110 || return_code == 20 || return_code == 120 || | |
400 | + return_code == 1 || return_code == 101 || return_code == 200 || return_code == 300) | |
401 | + { | |
402 | + tcpConnect(666, ""); //呼叫tcp function會回處理中(參數666) | |
403 | + errorCountPlus: //如errorCountR or errorCountT <3會用goto回到這裡再執行一次 | |
404 | + switch(return_code) | |
405 | + { | |
406 | + case 10: //如return_code為 010 則上傳 vAlert8.cfg | |
407 | + sprintf(command, "./ftpUpload.exe %s %s %s %s %s vAlert8.cfg STOR", ip, port, user, password, folder); | |
408 | + //printf("test command %s\n", command); //sprintf 為,把這些格式的值寫到command中 | |
409 | + system(command); //叫 system 去執行command(自己設的變數) | |
410 | + FileTransferOk(); | |
411 | + break; | |
412 | + case 110: //如return_code為 110 則下載 vAlert8.cfg | |
413 | + sprintf(command, "./ftpClient.exe %s %s %s %s vAlert8.cfg reset\n", ip, port, user, password); | |
414 | + //printf("%s\n", command); | |
415 | + system(command); | |
416 | + FileRevOk(); | |
417 | + break; | |
418 | + case 20: //如return_code為 020 則上傳 vAlert8Common.cfg | |
419 | + sprintf(command, "./ftpUpload.exe %s %s %s %s %s vAlert8Common.cfg STOR", ip, port, user, password, folder); | |
420 | + //printf("%s\n", command); | |
421 | + system(command); | |
422 | + FileTransferOk(); | |
423 | + break; | |
424 | + case 120: //如return_code為 120 則下載 vAlert8Common.cfg | |
425 | + sprintf(command, "./ftpClient.exe %s %s %s %s vAlert8Common.cfg reset", ip, port, user, password); | |
426 | + //printf("%s\n",command); | |
427 | + system(command); | |
428 | + FileRevOk(); | |
429 | + break; | |
430 | + case 1: //如return_code為 001 則上傳清單上的檔案,需先下載再上傳檔案清單 | |
431 | + sprintf(command, "./ftpClient.exe %s %s %s %s uploadFileList_%s reset", ip, port, user, password, serial); | |
432 | + system(command); //先下載檔案 | |
433 | + FileRevOk(); | |
434 | + | |
435 | + FILE *fp3; | |
436 | + fp3 = fopen("uploadFileList.txt","r"); | |
437 | + if(fp3 == NULL) | |
438 | + { | |
439 | + printf("open failure\n"); | |
440 | + } | |
441 | + else //再上傳檔案清單 | |
442 | + { | |
443 | + char temp[500]; | |
444 | + fgets(temp, 500, fp3); | |
445 | + sprintf(command,"./ftpUpload.exe %s %s %s %s %s/%s uploadFileList_%s STOR", ip, port, user, password, folder, temp, serial); | |
446 | + //printf("%s\n", command); | |
447 | + system(command); | |
448 | + FileTransferOk(); | |
449 | + } | |
450 | + fclose(fp3); | |
451 | + break; | |
452 | + case 101: //如return_code為 101 則單純下載檔案清單 | |
453 | + sprintf(command, "./ftpClients.exe %s %s %s %s uploadFileList_%s reset", ip, port, user, password, serial); | |
454 | + //printf("%s\n", command); | |
455 | + system(command); | |
456 | + FileRevOk(); | |
457 | + break; | |
458 | + case 200: | |
459 | + puts("更新韌體\n"); | |
460 | + updateFirmware(); | |
461 | + break; | |
462 | + case 300: //如return_code為 300 則先下載 run_serial.sh,並執行排程 | |
463 | + sprintf(command, "./ftpClient.exe %s %s %s %s run_%s.sh reset", ip, port, user, password, serial); | |
464 | + //printf("%s\n", command); | |
465 | + system(command); | |
466 | + FileRevOk(); | |
467 | + | |
468 | + sprintf(command, "sudo chmod +x run_%s.sh", serial);//改成可執行檔 | |
469 | + //printf("first %s\n", command); | |
470 | + system(command); | |
471 | + | |
472 | + sprintf(command, "sudo ./run_%s.sh", serial); //執行排程 | |
473 | + //printf("second %s\n", command); | |
474 | + system(command); | |
475 | + break; | |
476 | + }//end switch | |
477 | + }//end else if | |
478 | + else | |
479 | + { | |
480 | + puts("wrong code\n"); | |
481 | + } | |
482 | + if(checkR == 0 && checkT == 0) //FileRevOk && FileTransferOk 的結果都收到OK回傳777 | |
483 | + { | |
484 | + tcpConnect(777, ""); | |
485 | + } | |
486 | + else //Received 沒收到三次會回傳400 | |
487 | + { | |
488 | + if(checkR != 0 && errorCountR < 3) | |
489 | + { | |
490 | + errorCountR++; | |
491 | + printf("Received fail %d time\n", errorCountR); | |
492 | + checkR = 0; | |
493 | + goto errorCountPlus; | |
494 | + } | |
495 | + else if(checkR == -1) | |
496 | + tcpConnect(400, "popen()_error"); | |
497 | + else if(checkR == -2) | |
498 | + tcpConnect(400, "file_not_recv"); | |
499 | + | |
500 | + | |
501 | + if(checkT != 0 && errorCountT < 3) //Transfer 沒收到三次會回傳400 | |
502 | + { | |
503 | + errorCountT++; | |
504 | + printf("Transfer fail %d time\n", errorCountT); | |
505 | + checkT = 0; | |
506 | + goto errorCountPlus; | |
507 | + } | |
508 | + else if(checkT == -1) | |
509 | + tcpConnect(400, "popen()_error"); | |
510 | + else if(checkT == -2) | |
511 | + tcpConnect(400, "file_not_transfer"); | |
512 | + } | |
513 | + | |
514 | + return 0; | |
515 | +} | |
0 | 516 | \ No newline at end of file | ... | ... |