Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/cs/6263.c
1808 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1990-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* *
19
***********************************************************************/
20
#pragma prototyped
21
/*
22
* Glenn Fowler
23
* AT&T Research
24
*
25
* simple name service on port 6263 (use the phone keypad luke)
26
* client sends cs connect stream path
27
* server sends back /dev/tcp/.../... path
28
*/
29
30
static const char id[] = "@(#)$Id: cs.6263 (AT&T Research) 2000-05-11 $\0\n";
31
32
#include <css.h>
33
#include <error.h>
34
35
static int
36
actionf(register Css_t* css, register Cssfd_t* fp, Cssdisc_t* disc)
37
{
38
register ssize_t n;
39
register char* s;
40
register char* t;
41
int ud;
42
43
static char path[PATH_MAX];
44
45
if (fp->status == CS_POLL_READ)
46
{
47
if ((n = csread(css->state, fp->fd, path, sizeof(path) - 1, CS_LINE)) <= 1)
48
return -1;
49
path[n - 1] = 0;
50
if ((ud = csopen(css->state, path, CS_OPEN_READ)) >= 0)
51
{
52
s = cspath(css->state, ud, 0);
53
if (t = strrchr(s, '.'))
54
*t = 0;
55
close(ud);
56
}
57
else
58
s = 0;
59
if (s)
60
n = strlen(s);
61
else
62
{
63
s = path;
64
n = 0;
65
}
66
s[n++] = '\n';
67
cswrite(css->state, fp->fd, s, n);
68
}
69
return -1;
70
}
71
72
static int
73
exceptf(Css_t* css, unsigned long op, unsigned long arg, Cssdisc_t* disc)
74
{
75
switch (op)
76
{
77
case CSS_INTERRUPT:
78
error(ERROR_SYSTEM|3, "%s: interrupt exit", fmtsignal(arg));
79
return 0;
80
case CSS_DORMANT:
81
error(2, "dormant exit");
82
exit(0);
83
}
84
error(ERROR_SYSTEM|3, "poll error op=0x%08x arg=0x%08x", op, arg);
85
return -1;
86
}
87
88
int
89
main(int argc, char** argv)
90
{
91
Css_t* css;
92
Cssdisc_t disc;
93
94
NoP(argc);
95
memset(&disc, 0, sizeof(disc));
96
disc.version = CSS_VERSION;
97
disc.flags = CSS_DAEMON|CSS_ERROR|CSS_DORMANT|CSS_INTERRUPT;
98
disc.timeout = 20 * 60 * 1000L;
99
disc.actionf = actionf;
100
disc.errorf = errorf;
101
disc.exceptf = exceptf;
102
if (!(css = cssopen(argv[1], &disc)))
103
exit(1);
104
error_info.id = css->id;
105
csspoll(CS_NEVER, 0);
106
exit(1);
107
}
108
109