Blame


1 cfa37a7b 2004-04-10 devnull .TH PLUMB 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
3 cfa37a7b 2004-04-10 devnull eplumb, plumbfree, plumbopen, plumbsend, plumbsendtext, plumblookup, plumbpack, plumbpackattr, plumbaddattr, plumbdelattr, plumbrecv, plumbunpack, plumbunpackpartial, plumbunpackattr, Plumbmsg \- plumb messages
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
5 cfa37a7b 2004-04-10 devnull .B #include <u.h>
6 cfa37a7b 2004-04-10 devnull .br
7 cfa37a7b 2004-04-10 devnull .B #include <libc.h>
8 cfa37a7b 2004-04-10 devnull .br
9 cfa37a7b 2004-04-10 devnull .B #include <plumb.h>
10 cfa37a7b 2004-04-10 devnull .PP
11 cfa37a7b 2004-04-10 devnull .ta \w'\fLPlumbattr* 'u
12 cfa37a7b 2004-04-10 devnull .PP
13 cfa37a7b 2004-04-10 devnull .B
14 cfa37a7b 2004-04-10 devnull int plumbopen(char *port, int omode)
15 cfa37a7b 2004-04-10 devnull .PP
16 cfa37a7b 2004-04-10 devnull .B
17 cfa37a7b 2004-04-10 devnull int plumbsend(int fd, Plumbmsg *m)
18 cfa37a7b 2004-04-10 devnull .PP
19 cfa37a7b 2004-04-10 devnull .B
20 cfa37a7b 2004-04-10 devnull int plumbsendtext(int fd, char *src, char *dst, char *wdir, char *data)
21 cfa37a7b 2004-04-10 devnull .PP
22 cfa37a7b 2004-04-10 devnull .B
23 cfa37a7b 2004-04-10 devnull void plumbfree(Plumbmsg *m)
24 cfa37a7b 2004-04-10 devnull .PP
25 cfa37a7b 2004-04-10 devnull .B
26 cfa37a7b 2004-04-10 devnull Plumbmsg* plumbrecv(int fd)
27 cfa37a7b 2004-04-10 devnull .PP
28 cfa37a7b 2004-04-10 devnull .B
29 cfa37a7b 2004-04-10 devnull char* plumbpack(Plumbmsg *m, int *np)
30 cfa37a7b 2004-04-10 devnull .PP
31 cfa37a7b 2004-04-10 devnull .B
32 cfa37a7b 2004-04-10 devnull Plumbmsg* plumbunpack(char *buf, int n)
33 cfa37a7b 2004-04-10 devnull .PP
34 cfa37a7b 2004-04-10 devnull .B
35 cfa37a7b 2004-04-10 devnull Plumbmsg* plumbunpackpartial(char *buf, int n, int *morep)
36 cfa37a7b 2004-04-10 devnull .PP
37 cfa37a7b 2004-04-10 devnull .B
38 cfa37a7b 2004-04-10 devnull char* plumbpackattr(Plumbattr *a)
39 cfa37a7b 2004-04-10 devnull .PP
40 cfa37a7b 2004-04-10 devnull .B
41 cfa37a7b 2004-04-10 devnull Plumbattr* plumbunpackattr(char *a)
42 cfa37a7b 2004-04-10 devnull .PP
43 cfa37a7b 2004-04-10 devnull .B
44 cfa37a7b 2004-04-10 devnull char* plumblookup(Plumbattr *a, char *name)
45 cfa37a7b 2004-04-10 devnull .PP
46 cfa37a7b 2004-04-10 devnull .B
47 cfa37a7b 2004-04-10 devnull Plumbattr* plumbaddattr(Plumbattr *a, Plumbattr *new)
48 cfa37a7b 2004-04-10 devnull .PP
49 cfa37a7b 2004-04-10 devnull .B
50 cfa37a7b 2004-04-10 devnull Plumbattr* plumbdelattr(Plumbattra *a, char *name)
51 cfa37a7b 2004-04-10 devnull .PP
52 cfa37a7b 2004-04-10 devnull .B
53 cfa37a7b 2004-04-10 devnull int eplumb(int key, char *port)
54 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
55 cfa37a7b 2004-04-10 devnull These routines manipulate
56 cfa37a7b 2004-04-10 devnull .IR plumb (6)
57 cfa37a7b 2004-04-10 devnull messages, transmitting them, receiving them, and
58 cfa37a7b 2004-04-10 devnull converting them between text and these data structures:
59 cfa37a7b 2004-04-10 devnull .IP
60 cfa37a7b 2004-04-10 devnull .EX
61 cfa37a7b 2004-04-10 devnull .ta 6n +\w'\fLPlumbattr 'u +\w'ndata; 'u
62 cfa37a7b 2004-04-10 devnull typedef
63 cfa37a7b 2004-04-10 devnull struct Plumbmsg
64 cfa37a7b 2004-04-10 devnull {
65 cfa37a7b 2004-04-10 devnull char *src;
66 cfa37a7b 2004-04-10 devnull char *dst;
67 cfa37a7b 2004-04-10 devnull char *wdir;
68 cfa37a7b 2004-04-10 devnull char *type;
69 cfa37a7b 2004-04-10 devnull Plumbattr *attr;
70 cfa37a7b 2004-04-10 devnull int ndata;
71 cfa37a7b 2004-04-10 devnull char *data;
72 cfa37a7b 2004-04-10 devnull } Plumbmsg;
73 cfa37a7b 2004-04-10 devnull
74 cfa37a7b 2004-04-10 devnull typedef
75 cfa37a7b 2004-04-10 devnull struct Plumbattr
76 cfa37a7b 2004-04-10 devnull {
77 cfa37a7b 2004-04-10 devnull char *name;
78 cfa37a7b 2004-04-10 devnull char *value;
79 cfa37a7b 2004-04-10 devnull Plumbattr *next;
80 cfa37a7b 2004-04-10 devnull } Plumbattr;
81 cfa37a7b 2004-04-10 devnull .EE
82 cfa37a7b 2004-04-10 devnull .PP
83 cfa37a7b 2004-04-10 devnull .I Plumbopen
84 cfa37a7b 2004-04-10 devnull opens the named plumb
85 cfa37a7b 2004-04-10 devnull .IR port ,
86 cfa37a7b 2004-04-10 devnull using
87 bf8a59fa 2004-04-11 devnull .IR open (3)
88 cfa37a7b 2004-04-10 devnull mode
89 cfa37a7b 2004-04-10 devnull .IR omode .
90 cfa37a7b 2004-04-10 devnull If
91 cfa37a7b 2004-04-10 devnull .I port
92 cfa37a7b 2004-04-10 devnull begins with a slash, it is taken as a literal file name;
93 cfa37a7b 2004-04-10 devnull otherwise
94 cfa37a7b 2004-04-10 devnull .I plumbopen
95 cfa37a7b 2004-04-10 devnull searches for the location of the
96 cfa37a7b 2004-04-10 devnull .IR plumber (4)
97 cfa37a7b 2004-04-10 devnull service and opens the port there.
98 cfa37a7b 2004-04-10 devnull .PP
99 cfa37a7b 2004-04-10 devnull For programs using the
100 bf8a59fa 2004-04-11 devnull .IR event (3)
101 cfa37a7b 2004-04-10 devnull interface,
102 cfa37a7b 2004-04-10 devnull .I eplumb
103 cfa37a7b 2004-04-10 devnull registers, using the given
104 cfa37a7b 2004-04-10 devnull .IR key ,
105 cfa37a7b 2004-04-10 devnull receipt of messages from the named
106 cfa37a7b 2004-04-10 devnull .IR port .
107 cfa37a7b 2004-04-10 devnull .PP
108 cfa37a7b 2004-04-10 devnull .I Plumbsend
109 cfa37a7b 2004-04-10 devnull formats and writes message
110 cfa37a7b 2004-04-10 devnull .I m
111 cfa37a7b 2004-04-10 devnull to the file descriptor
112 cfa37a7b 2004-04-10 devnull .IR fd ,
113 cfa37a7b 2004-04-10 devnull which will usually be the result of
114 cfa37a7b 2004-04-10 devnull .B plumbopen("send",
115 cfa37a7b 2004-04-10 devnull .BR OWRITE) .
116 cfa37a7b 2004-04-10 devnull .I Plumbsendtext
117 cfa37a7b 2004-04-10 devnull is a simplified version for text-only messages; it assumes
118 cfa37a7b 2004-04-10 devnull .B type
119 cfa37a7b 2004-04-10 devnull is
120 cfa37a7b 2004-04-10 devnull .BR text ,
121 cfa37a7b 2004-04-10 devnull sets
122 cfa37a7b 2004-04-10 devnull .B attr
123 cfa37a7b 2004-04-10 devnull to nil,
124 cfa37a7b 2004-04-10 devnull and sets
125 cfa37a7b 2004-04-10 devnull .B ndata
126 cfa37a7b 2004-04-10 devnull to
127 cfa37a7b 2004-04-10 devnull .BI strlen( data )\f1.
128 cfa37a7b 2004-04-10 devnull .PP
129 cfa37a7b 2004-04-10 devnull .I Plumbfree
130 cfa37a7b 2004-04-10 devnull frees all the data associated with the message
131 cfa37a7b 2004-04-10 devnull .IR m ,
132 cfa37a7b 2004-04-10 devnull all the components of which must therefore have been allocated with
133 bf8a59fa 2004-04-11 devnull .IR malloc (3).
134 cfa37a7b 2004-04-10 devnull .PP
135 cfa37a7b 2004-04-10 devnull .I Plumbrecv
136 cfa37a7b 2004-04-10 devnull returns the next message available on the file descriptor
137 cfa37a7b 2004-04-10 devnull .IR fd ,
138 cfa37a7b 2004-04-10 devnull or nil for error.
139 cfa37a7b 2004-04-10 devnull .PP
140 cfa37a7b 2004-04-10 devnull .I Plumbpack
141 cfa37a7b 2004-04-10 devnull encodes message
142 cfa37a7b 2004-04-10 devnull .I m
143 cfa37a7b 2004-04-10 devnull as a character string in the format of
144 cfa37a7b 2004-04-10 devnull .IR plumb (6) ,
145 cfa37a7b 2004-04-10 devnull setting
146 cfa37a7b 2004-04-10 devnull .BI * np
147 cfa37a7b 2004-04-10 devnull to the length in bytes of the string.
148 cfa37a7b 2004-04-10 devnull .I Plumbunpack
149 cfa37a7b 2004-04-10 devnull does the inverse, translating the
150 cfa37a7b 2004-04-10 devnull .I n
151 cfa37a7b 2004-04-10 devnull bytes of
152 cfa37a7b 2004-04-10 devnull .I buf
153 cfa37a7b 2004-04-10 devnull into a
154 cfa37a7b 2004-04-10 devnull .BR Plumbmsg .
155 cfa37a7b 2004-04-10 devnull .PP
156 cfa37a7b 2004-04-10 devnull .I Plumbunpackpartial
157 cfa37a7b 2004-04-10 devnull enables unpacking of messages that arrive in pieces.
158 cfa37a7b 2004-04-10 devnull The first call to
159 cfa37a7b 2004-04-10 devnull .I plumbunpackpartial
160 cfa37a7b 2004-04-10 devnull for a given message must be sufficient to unpack the header;
161 cfa37a7b 2004-04-10 devnull subsequent calls permit unpacking messages with long data sections.
162 cfa37a7b 2004-04-10 devnull For each call,
163 cfa37a7b 2004-04-10 devnull .I buf
164 cfa37a7b 2004-04-10 devnull points to the beginning of the complete message received so far, and
165 cfa37a7b 2004-04-10 devnull .I n
166 cfa37a7b 2004-04-10 devnull reports the total number of bytes received for that message.
167 cfa37a7b 2004-04-10 devnull If the message is complete, the return value will be as in
168 cfa37a7b 2004-04-10 devnull .IR plumbunpack .
169 cfa37a7b 2004-04-10 devnull If not, and
170 cfa37a7b 2004-04-10 devnull .I morep
171 cfa37a7b 2004-04-10 devnull is not null, the return value will be
172 cfa37a7b 2004-04-10 devnull .B nil
173 cfa37a7b 2004-04-10 devnull and
174 cfa37a7b 2004-04-10 devnull .BR * morep
175 cfa37a7b 2004-04-10 devnull will be set to the number of bytes remaining to be read for this message to be complete
176 cfa37a7b 2004-04-10 devnull (recall that the byte count is in the header).
177 cfa37a7b 2004-04-10 devnull Those bytes should be read by the caller, placed at location
178 cfa37a7b 2004-04-10 devnull .IB buf + n \f1,
179 cfa37a7b 2004-04-10 devnull and the message unpacked again.
180 cfa37a7b 2004-04-10 devnull If an error is encountered, the return value will be
181 cfa37a7b 2004-04-10 devnull .B nil
182 cfa37a7b 2004-04-10 devnull and
183 cfa37a7b 2004-04-10 devnull .BI * morep
184 cfa37a7b 2004-04-10 devnull will be zero.
185 cfa37a7b 2004-04-10 devnull .PP
186 cfa37a7b 2004-04-10 devnull .I Plumbpackattr
187 cfa37a7b 2004-04-10 devnull converts the list
188 cfa37a7b 2004-04-10 devnull .I a
189 cfa37a7b 2004-04-10 devnull of
190 cfa37a7b 2004-04-10 devnull .B Plumbattr
191 cfa37a7b 2004-04-10 devnull structures into a null-terminated string.
192 cfa37a7b 2004-04-10 devnull If an attribute value contains white space, quote characters, or equal signs,
193 cfa37a7b 2004-04-10 devnull the value will be quoted appropriately.
194 cfa37a7b 2004-04-10 devnull A newline character will terminate processing.
195 cfa37a7b 2004-04-10 devnull .I Plumbunpackattr
196 cfa37a7b 2004-04-10 devnull converts the null-terminated string
197 cfa37a7b 2004-04-10 devnull .I a
198 cfa37a7b 2004-04-10 devnull back into a list of
199 cfa37a7b 2004-04-10 devnull .I Plumbattr
200 cfa37a7b 2004-04-10 devnull structures.
201 cfa37a7b 2004-04-10 devnull .PP
202 cfa37a7b 2004-04-10 devnull .I Plumblookup
203 cfa37a7b 2004-04-10 devnull searches the
204 cfa37a7b 2004-04-10 devnull .B Plumbattr
205 cfa37a7b 2004-04-10 devnull list
206 cfa37a7b 2004-04-10 devnull .I a
207 cfa37a7b 2004-04-10 devnull for an attribute with the given
208 cfa37a7b 2004-04-10 devnull .I name
209 cfa37a7b 2004-04-10 devnull and returns the associated value.
210 cfa37a7b 2004-04-10 devnull The returned string is the original value, not a copy.
211 cfa37a7b 2004-04-10 devnull If the attribute has no value, the returned value will be the empty string;
212 cfa37a7b 2004-04-10 devnull if the attribute does not occur in the list at all, the value will be nil.
213 cfa37a7b 2004-04-10 devnull .PP
214 cfa37a7b 2004-04-10 devnull .I Plumbaddattr
215 cfa37a7b 2004-04-10 devnull appends the
216 cfa37a7b 2004-04-10 devnull .I new
217 cfa37a7b 2004-04-10 devnull .B Plumbattr
218 cfa37a7b 2004-04-10 devnull (which may be a list) to the attribute list
219 cfa37a7b 2004-04-10 devnull .IR a
220 cfa37a7b 2004-04-10 devnull and returns the new list.
221 cfa37a7b 2004-04-10 devnull .I Plumbattr
222 cfa37a7b 2004-04-10 devnull searches the list
223 cfa37a7b 2004-04-10 devnull .I a
224 cfa37a7b 2004-04-10 devnull for the first attribute with name
225 cfa37a7b 2004-04-10 devnull .I name
226 cfa37a7b 2004-04-10 devnull and deletes it from the list, returning the resulting list.
227 cfa37a7b 2004-04-10 devnull .I Plumbdelattr
228 cfa37a7b 2004-04-10 devnull is a no-op if no such attribute exists.
229 cfa37a7b 2004-04-10 devnull .SH SOURCE
230 b5fdffee 2004-04-19 devnull .B /usr/local/plan9/src/libplumb
231 cfa37a7b 2004-04-10 devnull .SH SEE ALSO
232 cfa37a7b 2004-04-10 devnull .IR plumb (1),
233 bf8a59fa 2004-04-11 devnull .IR event (3),
234 cfa37a7b 2004-04-10 devnull .IR plumber (4),
235 cfa37a7b 2004-04-10 devnull .IR plumb (6)
236 cfa37a7b 2004-04-10 devnull .SH DIAGNOSTICS
237 cfa37a7b 2004-04-10 devnull When appropriate, including when a
238 cfa37a7b 2004-04-10 devnull .I plumbsend
239 cfa37a7b 2004-04-10 devnull fails, these routine set
240 cfa37a7b 2004-04-10 devnull .IR errstr .