ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/ihost/ihost.c
(Generate patch)

Comparing projects/cms/source/ihost/ihost.c (file contents):
Revision 1.15 by pajs, Sun May 19 15:14:31 2002 UTC vs.
Revision 1.17 by pajs, Mon May 20 12:28:46 2002 UTC

# Line 28 | Line 28
28   #include "statgrab.h"
29   #include <time.h>
30   #include <sys/socket.h>
31 + #include <netinet/in.h>
32 + #include <arpa/inet.h>
33  
34 + #define versionNo 0.8
35   #define RECONFIGURE_RETURN_CODE 2
36   #define UDP_MAX_PACKET_SIZE 8192
37  
38   typedef struct{
39          int fm_port;
40          char *fm_host;
41 <        
41 >
42 >        char *my_ip;    
43          char *my_fqdn;
44          char *server_fqdn;
45          int server_udp_port;
# Line 60 | Line 64 | char* sock_comm(FILE *f_r, FILE *f_w, char *sendString
64   int ihost_configure(ihost_state_t *ihost_state){
65          struct sockaddr_in addr;
66          struct in_addr haddr;
67 +        struct sockaddr ip;
68 +        int ip_len;
69          int sd;
70          FILE *fm_fd_r, *fm_fd_w;
71          char *reply;
# Line 101 | Line 107 | int ihost_configure(ihost_state_t *ihost_state){
107                  errf("Failed to open write stream (%m)");
108                  return -1;
109          }
110 +        ip_len=sizeof ip;
111 +        memset(&ip, 0, ip_len);
112 +        if((getsockname(sd, &ip, &ip_len)) != 0){
113 +                errf("Failed to get IP address (%m)");
114 +                return -1;
115 +        }
116 +        if (ip.sa_family!=AF_INET){
117 +                errf("sa family is wrong type");
118 +                return -1;
119 +        }
120 +        
121 +        if((ihost_state->my_ip=inet_ntoa(((struct sockaddr_in *)&ip)->sin_addr))==NULL){
122 +                errf("Failed to get IP (%m)");
123 +                return -1;
124 +        }      
125  
126          reply=sock_comm(fm_fd_r, fm_fd_w, "STARTCONFIG");
127          if ((reply==NULL) || (strncasecmp(reply, "OK", 2) != 0) ) {
# Line 346 | Line 367 | char *stat_grab(ihost_state_t *ihost_state, int counte
367                  free(stats[x]);
368          }
369          xml_data_p=xml_data;
370 <        xml_data=strf("<packet seq_no=\"%d\" machine_name=\"%s\" date=\"%ld\" type=\"data\" ip=\"%s\" key=\"%s\">%s</packet>", counter, ihost_state->my_fqdn, time(NULL), "127.0.0.1", ihost_state->key, xml_data);
370 >        xml_data=strf("<packet seq_no=\"%d\" machine_name=\"%s\" date=\"%ld\" type=\"data\" ip=\"%s\" key=\"%s\">%s</packet>", counter, ihost_state->my_fqdn, time(NULL), ihost_state->my_ip, ihost_state->key, xml_data);
371          free(xml_data_p);
372          
373          return xml_data;
# Line 390 | Line 411 | int send_stats(ihost_state_t *ihost_state, char *data_
411          return 0;      
412   }
413  
414 + void usage(char *progname){
415 +        fprintf(stderr, "Usage %s [options] server port\n", progname);
416 +        fprintf(stderr, "Options\n");
417 +        fprintf(stderr, "  -v           Verbose, the more v flags the more verbose, eg -vv\n");
418 +        fprintf(stderr, "  -d           Daemon mode, self backgrounding\n");
419 +        fprintf(stderr, "  -s           Send errors to syslog\n");
420 +        fprintf(stderr, "  -V           Print version number\n");
421 +        fprintf(stderr, "  -h           Prints this help page\n");      
422 +        exit(1);        
423 + }
424 +
425   int main(int argc, char **argv){
426          ihost_state_t ihost_state;
427          int heartbeat_exit;
# Line 398 | Line 430 | int main(int argc, char **argv){
430          int sleep_delay=0;
431          char *xml_stats;
432  
433 +        int cmdopt;
434 +        extern int optind;
435 +        int verbose=0, daemon=0, syslog=0 ;
436 +        
437          /* NULL'ify so i can tell if i need to free it or not */
438          ihost_state.fm_host=NULL;
439          ihost_state.my_fqdn=NULL;
# Line 407 | Line 443 | int main(int argc, char **argv){
443          ihost_state.key=NULL;
444  
445          errf_set_progname(argv[0]);
446 <        if(argc!=3){
447 <                errf_usage("<host> <port>");    
448 <                exit(1);
446 >
447 >        while((cmdopt=getopt(argc, argv, "vdshV")) != -1){
448 >                switch(cmdopt){
449 >                        case 'v':
450 >                                verbose++;
451 >                                break;
452 >                        
453 >                        case 'd':
454 >                                daemon=1;
455 >                                break;
456 >                        
457 >                        case 's':
458 >                                syslog=1;
459 >                                break;
460 >        
461 >                        case 'h':
462 >                                usage(argv[0]);
463 >                                break;
464 >                        case 'V':
465 >                                errf("%s version %f",argv[0], versionNo);
466 >                                break;
467 >                        default:
468 >                                usage(argv[0]);
469 >                                exit(1);
470 >                }
471          }
472  
473 <        ihost_state.fm_host=argv[1];
474 <        ihost_state.fm_port=atoi(argv[2]);
473 >        if(argc!=optind+2){
474 >                usage(argv[0]);
475 >                exit(1);
476 >        }
477 >        ihost_state.fm_host=argv[optind];
478 >        ihost_state.fm_port=atoi(argv[optind+1]);
479 >        if(ihost_state.fm_port==0){
480 >                errf("Invalid port number");
481 >                usage(argv[0]);
482 >        }
483 >        printf("%s\n%d\n",ihost_state.fm_host, ihost_state.fm_port);
484  
485          if(ihost_configure(&ihost_state)!=0){
486                  errf("configure failed");

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines