/* $Header: process.c 1.5 83/03/28 20:16:07 moore Exp $ */
/* process.c handles the requests, which can be of three types:
ANNOUNCE - announce to a user that a talk is wanted
LEAVE_INVITE - insert the request into the table
LOOK_UP - look up to see if a request is waiting in
in the table for the local user
DELETE - delete invitation
process_request(request
, response
)
response
->type
= request
->type
;
do_announce(request
, response
);
ptr
= find_request(request
);
if (ptr
!= (CTL_MSG
*) 0) {
response
->id_num
= ptr
->id_num
;
response
->answer
= SUCCESS
;
insert_table(request
, response
);
ptr
= find_match(request
);
if (ptr
!= (CTL_MSG
*) 0) {
response
->id_num
= ptr
->id_num
;
response
->addr
= ptr
->addr
;
response
->answer
= SUCCESS
;
response
->answer
= NOT_HERE
;
response
->answer
= delete_invite(request
->id_num
);
response
->answer
= UNKNOWN_REQUEST
;
struct hostent
*gethostbyaddr();
do_announce(request
, response
)
/* see if the user is logged */
result
= find_user(request
->r_name
, request
->r_tty
);
response
->answer
= result
;
hp
= gethostbyaddr(&request
->ctl_addr
.sin_addr
,
sizeof(struct in_addr
), AF_INET
);
if ( hp
== (struct hostent
*) 0 ) {
response
->answer
= MACHINE_UNKNOWN
;
ptr
= find_request(request
);
if (ptr
== (CTL_MSG
*) 0) {
insert_table(request
,response
);
response
->answer
= announce(request
, hp
->h_name
);
} else if (request
->id_num
> ptr
->id_num
) {
* this is an explicit re-announce, so update the id_num
* field to avoid duplicates and re-announce the talk
ptr
->id_num
= response
->id_num
= new_id();
response
->answer
= announce(request
, hp
->h_name
);
/* a duplicated request, so ignore it */
response
->id_num
= ptr
->id_num
;
response
->answer
= SUCCESS
;
* Search utmp for the local user
if ((fd
= open("/etc/utmp", 0)) == -1) {
print_error("Can't open /etc/utmp");
while (read(fd
, (char *) &ubuf
, sizeof ubuf
) == sizeof(ubuf
)) {
if (strncmp(ubuf
.ut_name
, name
, sizeof ubuf
.ut_name
) == 0) {
/* no particular tty was requested */
(void) strcpy(tty
, ubuf
.ut_line
);
} else if (strcmp(ubuf
.ut_line
, tty
) == 0) {