This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| sdk:gps-tcp-server-gnsstogps [2020/07/21 14:27] – [tcp server proxy script] fachet | sdk:gps-tcp-server-gnsstogps [2020/07/21 14:33] (current) – [tcp server proxy script] fachet | ||
|---|---|---|---|
| Line 113: | Line 113: | ||
| chars = explode(s); | chars = explode(s); | ||
| for (i = 1; i < pos; i++) { /* skip $ and *XX */ | for (i = 1; i < pos; i++) { /* skip $ and *XX */ | ||
| - | | + | c = ord(chars[i]); |
| - | cs ^= c; | + | cs ^= c; |
| } | } | ||
| r = sprintf(" | r = sprintf(" | ||
| Line 122: | Line 122: | ||
| /* main() */ | /* main() */ | ||
| - | if (argc < 2) { | + | if (argc < 2) |
| usage(); | usage(); | ||
| - | } | ||
| - | |||
| /* open TCP server socket */ | /* open TCP server socket */ | ||
| Line 133: | Line 131: | ||
| exit(-1); | exit(-1); | ||
| } | } | ||
| - | |||
| ret = bind(server, | ret = bind(server, | ||
| Line 152: | Line 149: | ||
| while (!quit) { | while (!quit) { | ||
| client = accept(server); | client = accept(server); | ||
| - | | + | |
| - | nb_syslog(" | + | nb_syslog(" |
| sleep(1); | sleep(1); | ||
| continue; | continue; | ||
| - | } else { | + | } else { |
| - | | + | nb_syslog(" |
| - | | + | clients=mkarray(client); |
| } | } | ||
| clientConnection=true; | clientConnection=true; | ||
| Line 168: | Line 165: | ||
| /* process NMEA stream */ | /* process NMEA stream */ | ||
| nb_syslog(" | nb_syslog(" | ||
| - | while(clientConnection) { | + | while (clientConnection) { |
| /* connect to gpsd */ | /* connect to gpsd */ | ||
| - | if(gpsd < 0) { | + | if (gpsd < 0) { |
| gpsd = gpsd_connect(gpsd); | gpsd = gpsd_connect(gpsd); | ||
| - | if(gpsd < 0) { | + | if (gpsd < 0) { |
| - | nb_syslog(" | + | nb_syslog(" |
| - | sleep(5); | + | sleep(5); |
| continue; | continue; | ||
| } | } | ||
| Line 182: | Line 179: | ||
| rv = select(array_merge(clients, | rv = select(array_merge(clients, | ||
| - | if(rv == -1) { | + | if (rv == -1) { |
| nb_syslog(" | nb_syslog(" | ||
| close(gpsd); | close(gpsd); | ||
| gpsd = -1; | gpsd = -1; | ||
| continue; | continue; | ||
| - | } else if(rv == 0) { | + | } else if (rv == 0) { |
| /* nothing received */ | /* nothing received */ | ||
| continue; | continue; | ||
| } else if(rv == server) { | } else if(rv == server) { | ||
| - | | + | newclient = accept(server); |
| - | if (newclient < 0) { | + | if (newclient < 0) { |
| - | nb_syslog(" | + | nb_syslog(" |
| - | continue; | + | continue; |
| - | } else { | + | } else { |
| nb_syslog(" | nb_syslog(" | ||
| clients=array_merge(clients, | clients=array_merge(clients, | ||
| Line 205: | Line 202: | ||
| len = strlen(data); | len = strlen(data); | ||
| /* Check for correct framing: CR+LF */ | /* Check for correct framing: CR+LF */ | ||
| - | if(len > 2) { | + | if (len > 2) { |
| - | if(strrchr(data, | + | if (strrchr(data, |
| nb_syslog(" | nb_syslog(" | ||
| close(gpsd); | close(gpsd); | ||
| Line 215: | Line 212: | ||
| } | } | ||
| - | if(len == 0) { | + | if (len == 0) { |
| nb_syslog(" | nb_syslog(" | ||
| close(gpsd); | close(gpsd); | ||
| Line 222: | Line 219: | ||
| } | } | ||
| /* Convert message $GN to $GP for backward compatibility */ | /* Convert message $GN to $GP for backward compatibility */ | ||
| - | if(strstr(data, | + | if (strstr(data, |
| a_arr = explode(data); | a_arr = explode(data); | ||
| a_arr[2] = " | a_arr[2] = " | ||
| Line 232: | Line 229: | ||
| */ | */ | ||
| for (i=0; | for (i=0; | ||
| - | | + | sent = send(clients[i], |
| - | if(sent < 0 ) { | + | if (sent < 0) { |
| - | nb_syslog(" | + | nb_syslog(" |
| - | clients=array_compact(array_unset(clients, | + | clients=array_compact(array_unset(clients, |
| - | } | + | } |
| } | } | ||
| } | } | ||
| Line 244: | Line 241: | ||
| } | } | ||
| - | if (gpsd > -1) { | + | if (gpsd > -1) |
| close(gpsd); | close(gpsd); | ||
| - | } | + | if (server > -1) |
| - | if (server > -1) { | + | |
| close(server); | close(server); | ||
| - | } | ||
| exit(-1); | exit(-1); | ||
| - | |||
| </ | </ | ||
| + | |||
| + | |||
| + | |||