/*
* Basic client process for time accounting system, non-network version.
* This process (and those that are linked to it) are run as commands
* and send events to the server process.
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include "time_entry.h"
main(argc, argv)
int argc;
char *argv[];
{
int skt_id, /* Socket descriptor */
msg_sock, /* Socket that will accept messages */
i,j;
EVENT_TYPE event;
struct sockaddr sa; /* Socket address structure */
char buff[80];
/*
* Specify the socket domain and type we want...
*/
skt_id = socket(AF_UNIX, SOCK_STREAM, 0);
if(skt_id == -1){
perror("Can't create socket");
exit(1);
}
/*
* Now set up the address structure and connect to the socket.
*/
sa.sa_family = AF_UNIX;
strcpy(sa.sa_data, SOCKET_NAME);
if(connect(skt_id, &sa, sizeof(sa)) == -1){
perror("Can't connect to socket");
exit(1);
}
build_event(argv[0], &event);
/*
* Now, send the event
*/
if(write(skt_id, &event, sizeof(event)) != sizeof(event)){
perror("Write");
exit(1);
}
/* Cleanup */
close(skt_id);
exit(0);
}
build_event(a, e)
char *a; /* Name process was invoked with */
EVENT_TYPE *e; /* A time entry event */
{
if(!strcmp(a, "pi")) /* A PHONE_IN event */
e->event_cd = PHONE_IN;
else if(!strcmp(a, "po")) /* PHONE_OUT */
e->event_cd = PHONE_OUT;
/*
* Check any other types...
*/
else
e->event_cd = SHUT_DOWN; /* Default is shut down */
e->bill_flag = 'Y'; /* Billable is the default */
/*
* Code here to get the system time (e->event_st), and the
* login name of the user (e->logname). For now, let's just
* hard code something...
*/
e->event_st = 0;
strcpy(e->logname, "bryang");
}