xref: /original-bsd/old/talk/talk/ctl.c (revision 17b51d1b)
1 /*
2  * Copyright (c) 1983 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  */
6 
7 #ifndef lint
8 static char sccsid[] = "@(#)ctl.c	5.1 (Berkeley) 6/6/85";
9 #endif not lint
10 
11 /*
12  * This file handles haggling with the various talk daemons to
13  * get a socket to talk to. sockt is opened and connected in
14  * the progress
15  */
16 
17 #include "talk_ctl.h"
18 
19 struct	sockaddr_in daemon_addr = { AF_INET };
20 struct	sockaddr_in ctl_addr = { AF_INET };
21 struct	sockaddr_in my_addr = { AF_INET };
22 
23     /* inet addresses of the two machines */
24 struct	in_addr my_machine_addr;
25 struct	in_addr his_machine_addr;
26 
27 u_short daemon_port;	/* port number of the talk daemon */
28 
29 int	ctl_sockt;
30 int	sockt;
31 int	invitation_waiting = 0;
32 
33 CTL_MSG msg;
34 
35 open_sockt()
36 {
37     int length;
38 
39     my_addr.sin_addr = my_machine_addr;
40     my_addr.sin_port = 0;
41     sockt = socket(AF_INET, SOCK_STREAM, 0);
42     if (sockt <= 0)
43 	p_error("Bad socket");
44     if (bind(sockt, &my_addr, sizeof(my_addr)) != 0)
45 	p_error("Binding local socket");
46     length = sizeof(my_addr);
47     if (getsockname(sockt, &my_addr, &length) == -1)
48 	p_error("Bad address for socket");
49 }
50 
51 /* open the ctl socket */
52 open_ctl()
53 {
54     int length;
55 
56     ctl_addr.sin_port = 0;
57     ctl_addr.sin_addr = my_machine_addr;
58     ctl_sockt = socket(AF_INET, SOCK_DGRAM, 0);
59     if (ctl_sockt <= 0)
60 	p_error("Bad socket");
61     if (bind(ctl_sockt, &ctl_addr, sizeof(ctl_addr)) != 0)
62 	p_error("Couldn't bind to control socket");
63     length = sizeof(ctl_addr);
64     if (getsockname(ctl_sockt, &ctl_addr, &length) == -1)
65 	p_error("Bad address for ctl socket");
66 }
67 
68 /* print_addr is a debug print routine */
69 print_addr(addr)
70 struct sockaddr_in addr;
71 {
72     int i;
73 
74     printf("addr = %x, port = %o, family = %o zero = ",
75 	    addr.sin_addr, addr.sin_port, addr.sin_family);
76     for (i = 0; i<8;i++)
77 	printf("%o ", (int)addr.sin_zero[i]);
78     putchar('\n');
79 }
80