xref: /inferno-os/appl/grid/lib/announce.b (revision 170ff9d45744c9a94d26be32709fb3f616ba141a)
1implement Announce;
2include "sys.m";
3	sys:	Sys;
4include "dial.m";
5	dial: Dial;
6include "grid/announce.m";
7
8init()
9{
10	sys = load Sys Sys->PATH;
11}
12
13announce(): (string, ref Sys->Connection)
14{
15	sysname := readfile("/dev/sysname");
16	c := dial->announce("tcp!*!0");
17	if(c == nil)
18		return (nil, nil);
19	local := readfile(c.dir + "/local");
20	if(local == nil)
21		return (nil, nil);
22	for(i := len local - 1; i >= 0; i--)
23		if(local[i] == '!')
24			break;
25	port := local[i+1:];
26	if(port == nil)
27		return (nil, nil);
28	if(port[len port - 1] == '\n')
29		port = port[0:len port - 1];
30	return ("tcp!" + sysname + "!" + port, c);
31}
32
33
34readfile(f: string): string
35{
36	fd := sys->open(f, Sys->OREAD);
37	if (fd == nil)
38		return nil;
39	buf := array[8192] of byte;
40	n := sys->read(fd, buf, len buf);
41	if (n <= 0)
42		return nil;
43	return string buf[0:n];
44}
45