]>
git.cameronkatri.com Git - bsdgames-darwin.git/blob - hunt/huntd/get_names.c
1 /* $NetBSD: get_names.c,v 1.3 1998/07/06 07:00:31 mrg Exp $ */
3 * Copyright (c) 1983 Regents of the University of California.
4 * All rights reserved. The Berkeley software License Agreement
5 * specifies the terms and conditions for redistribution.
10 __RCSID("$NetBSD: get_names.c,v 1.3 1998/07/06 07:00:31 mrg Exp $");
15 #if defined(TALK_43) || defined(TALK_42)
17 # include <sys/param.h>
23 # include "talk_ctl.h"
27 static char hostname
[MAXHOSTNAMELEN
+ 1];
28 char *my_machine_name
;
31 * Determine the local user and machine
34 get_local_name(my_name
)
40 /* Load these useful values into the standard message header */
42 (void) strncpy(msg
.l_name
, my_name
, NAME_SIZE
);
43 msg
.l_name
[NAME_SIZE
- 1] = '\0';
47 msg
.vers
= TALK_VERSION
;
48 msg
.addr
.sa_family
= htons(AF_INET
);
49 msg
.ctl_addr
.sa_family
= htons(AF_INET
);
51 msg
.addr
.sin_family
= htons(AF_INET
);
52 msg
.ctl_addr
.sin_family
= htons(AF_INET
);
55 (void)gethostname(hostname
, sizeof (hostname
));
56 hostname
[sizeof(hostname
) - 1] = '\0';
57 my_machine_name
= hostname
;
58 /* look up the address of the local host */
59 hp
= gethostbyname(my_machine_name
);
60 if (hp
== (struct hostent
*) 0) {
61 printf("This machine doesn't exist. Boy, am I confused!\n");
64 memcpy(&my_machine_addr
, hp
->h_addr
, hp
->h_length
);
65 /* find the daemon portal */
67 sp
= getservbyname("ntalk", "udp");
69 sp
= getservbyname("talk", "udp");
73 syslog(LOG_ERR
, "This machine doesn't support talk");
75 perror("This machine doesn't support talk");
79 daemon_port
= sp
->s_port
;
83 * Determine the remote user and machine
86 get_remote_name(his_address
)
90 char *his_machine_name
;
95 /* check for, and strip out, the machine name of the target */
96 for (ptr
= his_address
; *ptr
!= '\0' && *ptr
!= '@' && *ptr
!= ':'
97 && *ptr
!= '!' && *ptr
!= '.'; ptr
++)
100 /* this is a local to local talk */
101 his_name
= his_address
;
102 his_machine_name
= my_machine_name
;
106 his_name
= his_address
;
107 his_machine_name
= ptr
+ 1;
109 /* host.user or host!user or host:user */
111 his_machine_name
= his_address
;
115 /* Load these useful values into the standard message header */
116 (void) strncpy(msg
.r_name
, his_name
, NAME_SIZE
);
117 msg
.r_name
[NAME_SIZE
- 1] = '\0';
119 /* if he is on the same machine, then simply copy */
120 if (memcmp((char *) &his_machine_name
, (char *) &my_machine_name
,
121 sizeof(his_machine_name
)) == 0)
122 memcpy(&his_machine_addr
, &my_machine_addr
,
123 sizeof(his_machine_name
));
125 /* look up the address of the recipient's machine */
126 hp
= gethostbyname(his_machine_name
);
127 if (hp
== (struct hostent
*) 0)
128 return 0; /* unknown host */
129 memcpy(&his_machine_addr
, hp
->h_addr
, hp
->h_length
);