Home | History | Annotate | Download | only in libfetch

Lines Matching refs:io

138 _http_new_chunk(struct httpio *io)
142 if (_fetch_getln(io->conn) == -1)
145 if (io->conn->buflen < 2 || !ishexnumber((unsigned)*io->conn->buf))
148 for (p = io->conn->buf; *p && !isspace((unsigned)*p); ++p) {
154 io->chunksize = io->chunksize * 16 +
157 io->chunksize = io->chunksize * 16 +
164 io->total += io->chunksize;
165 if (io->chunksize == 0)
169 __func__, (unsigned long)io->chunksize,
170 (unsigned long)io->total);
174 return (io->chunksize);
181 _http_growbuf(struct httpio *io, size_t len)
185 if (io->bufsize >= len)
188 if ((tmp = realloc(io->buf, len)) == NULL)
190 io->buf = tmp;
191 io->bufsize = len;
199 _http_fillbuf(struct httpio *io, size_t len)
201 if (io->error)
203 if (io->eof)
206 if (io->chunked == 0) {
207 if (_http_growbuf(io, len) == -1)
209 if ((io->buflen = _fetch_read(io->conn, io->buf, len)) == -1) {
210 io->error = 1;
213 io->bufpos = 0;
214 return (io->buflen);
217 if (io->chunksize == 0) {
218 switch (_http_new_chunk(io)) {
220 io->error = 1;
223 io->eof = 1;
228 if (len > io->chunksize)
229 len = io->chunksize;
230 if (_http_growbuf(io, len) == -1)
232 if ((io->buflen = _fetch_read(io->conn, io->buf, len)) == -1) {
233 io->error = 1;
236 io->chunksize -= io->buflen;
238 if (io->chunksize == 0) {
241 if (_fetch_read(io->conn, endl, 2) != 2 ||
246 io->bufpos = 0;
248 return (io->buflen);
257 struct httpio *io = (struct httpio *)v;
260 if (io->error)
262 if (io->eof)
267 if (!io->buf || io->bufpos == io->buflen)
268 if (_http_fillbuf(io, (unsigned) len) < 1)
270 l = io->buflen - io->bufpos;
273 bcopy(io->buf + io->bufpos, buf + pos, (unsigned) l);
274 io->bufpos += l;
277 if (!pos && io->error)
288 struct httpio *io = (struct httpio *)v;
290 return (_fetch_write(io->conn, buf, (unsigned) len));
299 struct httpio *io = (struct httpio *)v;
302 r = _fetch_close(io->conn);
303 if (io->buf)
304 free(io->buf);
305 free(io);
315 struct httpio *io;
318 if ((io = calloc(1, sizeof(*io))) == NULL) {
322 io->conn = conn;
323 io->chunked = chunked;
324 f = funopen(io, _http_readfn, _http_writefn, NULL, _http_closefn);
327 free(io);