FreeCalypso > hg > fc-rfcal-tools
annotate cmu200/session.c @ 68:3ec82dc1dbda
fc-cmu200d: implemented reading and parsing of cable config files (-c arg)
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Fri, 14 Jul 2017 04:34:15 +0000 | 
| parents | b552e8d86474 | 
| children | 
| rev | line source | 
|---|---|
| 0 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 /* | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2 * This module contains the code that handles a single local socket | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 * connection session. | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 */ | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 #include <ctype.h> | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 #include <stdio.h> | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 #include <stdlib.h> | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 #include <string.h> | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 #include <strings.h> | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 extern int activesock; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 #define MAX_FIELDS 10 | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 char client_cmd[256], *client_cmd_fields[MAX_FIELDS+1]; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 int client_cmd_nfields; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 parse_cmd_into_fields() | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 { | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 char *cp; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 client_cmd_nfields = 0; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 for (cp = client_cmd; ; ) { | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 while (isspace(*cp)) | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 cp++; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 if (*cp == '\0') | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 break; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 if (client_cmd_nfields >= MAX_FIELDS) { | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 send_socket_response("-Command has too many fields\n"); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 return(1); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 } | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 client_cmd_fields[client_cmd_nfields++] = cp; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 while (*cp && !isspace(*cp)) | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 cp++; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 if (*cp) | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 *cp++ = '\0'; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 } | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 client_cmd_fields[client_cmd_nfields] = 0; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 return(0); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 } | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 handle_command() | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 { | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 char readbuf[256]; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 int cc, pos, rc; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 for (pos = 0; ; ) { | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 cc = read(activesock, readbuf, sizeof readbuf); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 if (cc <= 0) { | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 printf("Client program closed connection\n"); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 return(1); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 } | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 if (pos + cc > sizeof client_cmd) { | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 send_socket_response("-Command too long\n"); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 return(1); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 } | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 bcopy(readbuf, client_cmd + pos, cc); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 pos += cc; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 if (client_cmd[pos-1] == '\n') | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 break; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 } | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 client_cmd[pos-1] = '\0'; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 printf("Client command: %s\n", client_cmd); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 rc = parse_cmd_into_fields(); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 66 if (rc) | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 return(0); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 if (!client_cmd_nfields) { | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 send_socket_response("+Empty command OK\n"); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 return(0); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 } | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 return dispatch_client_command(); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 } | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 74 | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 75 handle_session() | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 { | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 77 int rc; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 78 | 
| 3 
b552e8d86474
fc-cmu200d: started implementing operation modes
 Mychaela Falconia <falcon@freecalypso.org> parents: 
0diff
changeset | 79 cmu200_session_begin(); | 
| 0 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 80 send_socket_response("+CMU200 interface daemon ready\n"); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 81 for (;;) { | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 rc = handle_command(); | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 83 if (rc) | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 84 break; | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 85 } | 
| 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 86 close(activesock); | 
| 3 
b552e8d86474
fc-cmu200d: started implementing operation modes
 Mychaela Falconia <falcon@freecalypso.org> parents: 
0diff
changeset | 87 stop_signal_gen(); | 
| 0 
bd62be88259d
initial import of rfcal code and docs from freecalypso-tools repository
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 } | 
