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