• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/lib/libc/xdr/

Lines Matching refs:rstrm

179 	RECSTREAM *rstrm = mem_alloc(sizeof(RECSTREAM));
181 if (rstrm == NULL) {
189 rstrm->sendsize = sendsize = fix_buf_size(sendsize);
190 rstrm->out_base = mem_alloc(rstrm->sendsize);
191 if (rstrm->out_base == NULL) {
193 mem_free(rstrm, sizeof(RECSTREAM));
196 rstrm->recvsize = recvsize = fix_buf_size(recvsize);
197 rstrm->in_base = mem_alloc(recvsize);
198 if (rstrm->in_base == NULL) {
200 mem_free(rstrm->out_base, sendsize);
201 mem_free(rstrm, sizeof(RECSTREAM));
208 xdrs->x_private = rstrm;
209 rstrm->tcp_handle = tcp_handle;
210 rstrm->readit = readit;
211 rstrm->writeit = writeit;
212 rstrm->out_finger = rstrm->out_boundry = rstrm->out_base;
213 rstrm->frag_header = (u_int32_t *)(void *)rstrm->out_base;
214 rstrm->out_finger += sizeof(u_int32_t);
215 rstrm->out_boundry += sendsize;
216 rstrm->frag_sent = FALSE;
217 rstrm->in_size = recvsize;
218 rstrm->in_boundry = rstrm->in_base;
219 rstrm->in_finger = (rstrm->in_boundry += recvsize);
220 rstrm->fbtbc = 0;
221 rstrm->last_frag = TRUE;
222 rstrm->in_haveheader = FALSE;
223 rstrm->in_hdrlen = 0;
224 rstrm->in_hdrp = (char *)(void *)&rstrm->in_header;
225 rstrm->nonblock = FALSE;
226 rstrm->in_reclen = 0;
227 rstrm->in_received = 0;
239 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
240 int32_t *buflp = (int32_t *)(void *)(rstrm->in_finger);
244 if ((rstrm->fbtbc >= sizeof(int32_t)) &&
245 (((long)rstrm->in_boundry - (long)buflp) >= sizeof(int32_t))) {
247 rstrm->fbtbc -= sizeof(int32_t);
248 rstrm->in_finger += sizeof(int32_t);
261 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
262 int32_t *dest_lp = ((int32_t *)(void *)(rstrm->out_finger));
264 if ((rstrm->out_finger += sizeof(int32_t)) > rstrm->out_boundry) {
269 rstrm->out_finger -= sizeof(int32_t);
270 rstrm->frag_sent = TRUE;
271 if (! flush_out(rstrm, FALSE))
273 dest_lp = ((int32_t *)(void *)(rstrm->out_finger));
274 rstrm->out_finger += sizeof(int32_t);
283 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
287 current = (int)rstrm->fbtbc;
289 if (rstrm->last_frag)
291 if (! set_input_fragment(rstrm))
296 if (! get_input_bytes(rstrm, addr, current))
299 rstrm->fbtbc -= current;
308 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
312 current = (size_t)((u_long)rstrm->out_boundry -
313 (u_long)rstrm->out_finger);
315 memmove(rstrm->out_finger, addr, current);
316 rstrm->out_finger += current;
319 if (rstrm->out_finger == rstrm->out_boundry) {
320 rstrm->frag_sent = TRUE;
321 if (! flush_out(rstrm, FALSE))
331 RECSTREAM *rstrm = (RECSTREAM *)xdrs->x_private;
334 pos = lseek((int)(u_long)rstrm->tcp_handle, (off_t)0, 1);
340 pos += rstrm->out_finger - rstrm->out_base;
344 pos -= rstrm->in_boundry - rstrm->in_finger;
357 RECSTREAM *rstrm = (RECSTREAM *)xdrs->x_private;
366 newpos = rstrm->out_finger - delta;
367 if ((newpos > (char *)(void *)(rstrm->frag_header)) &&
368 (newpos < rstrm->out_boundry)) {
369 rstrm->out_finger = newpos;
375 newpos = rstrm->in_finger - delta;
376 if ((delta < (int)(rstrm->fbtbc)) &&
377 (newpos <= rstrm->in_boundry) &&
378 (newpos >= rstrm->in_base)) {
379 rstrm->in_finger = newpos;
380 rstrm->fbtbc -= delta;
394 RECSTREAM *rstrm = (RECSTREAM *)xdrs->x_private;
400 if ((rstrm->out_finger + len) <= rstrm->out_boundry) {
401 buf = (int32_t *)(void *)rstrm->out_finger;
402 rstrm->out_finger += len;
407 if ((len <= rstrm->fbtbc) &&
408 ((rstrm->in_finger + len) <= rstrm->in_boundry)) {
409 buf = (int32_t *)(void *)rstrm->in_finger;
410 rstrm->fbtbc -= len;
411 rstrm->in_finger += len;
424 RECSTREAM *rstrm = (RECSTREAM *)xdrs->x_private;
426 mem_free(rstrm->out_base, rstrm->sendsize);
427 mem_free(rstrm->in_base, rstrm->recvsize);
428 mem_free(rstrm, sizeof(RECSTREAM));
443 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
446 if (rstrm->nonblock) {
448 rstrm->fbtbc = 0;
451 if (rstrm->in_finger == rstrm->in_boundry &&
453 rstrm->fbtbc = 0;
459 while (rstrm->fbtbc > 0 || (! rstrm->last_frag)) {
460 if (! skip_input_bytes(rstrm, rstrm->fbtbc))
462 rstrm->fbtbc = 0;
463 if ((! rstrm->last_frag) && (! set_input_fragment(rstrm)))
466 rstrm->last_frag = FALSE;
478 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
480 while (rstrm->fbtbc > 0 || (! rstrm->last_frag)) {
481 if (! skip_input_bytes(rstrm, rstrm->fbtbc))
483 rstrm->fbtbc = 0;
484 if ((! rstrm->last_frag) && (! set_input_fragment(rstrm)))
487 if (rstrm->in_finger == rstrm->in_boundry)
501 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
504 if (sendnow || rstrm->frag_sent ||
505 ((u_long)rstrm->out_finger + sizeof(u_int32_t) >=
506 (u_long)rstrm->out_boundry)) {
507 rstrm->frag_sent = FALSE;
508 return (flush_out(rstrm, TRUE));
510 len = (u_long)(rstrm->out_finger) - (u_long)(rstrm->frag_header) -
512 *(rstrm->frag_header) = htonl((u_int32_t)len | LAST_FRAG);
513 rstrm->frag_header = (u_int32_t *)(void *)rstrm->out_finger;
514 rstrm->out_finger += sizeof(u_int32_t);
525 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
529 if (!rstrm->in_haveheader) {
530 n = rstrm->readit(rstrm->tcp_handle, rstrm->in_hdrp,
531 (int)sizeof (rstrm->in_header) - rstrm->in_hdrlen);
540 rstrm->in_hdrp += n;
541 rstrm->in_hdrlen += n;
542 if (rstrm->in_hdrlen < sizeof (rstrm->in_header)) {
546 rstrm->in_header = ntohl(rstrm->in_header);
547 fraglen = (int)(rstrm->in_header & ~LAST_FRAG);
548 if (fraglen == 0 || fraglen > rstrm->in_maxrec ||
549 (rstrm->in_reclen + fraglen) > rstrm->in_maxrec) {
553 rstrm->in_reclen += fraglen;
554 if (rstrm->in_reclen > rstrm->recvsize)
555 realloc_stream(rstrm, rstrm->in_reclen);
556 if (rstrm->in_header & LAST_FRAG) {
557 rstrm->in_header &= ~LAST_FRAG;
558 rstrm->last_frag = TRUE;
568 n = rstrm->readit(rstrm->tcp_handle,
569 rstrm->in_base + rstrm->in_received,
570 (rstrm->in_reclen - rstrm->in_received));
582 rstrm->in_received += n;
584 if (rstrm->in_received == rstrm->in_reclen) {
585 rstrm->in_haveheader = FALSE;
586 rstrm->in_hdrp = (char *)(void *)&rstrm->in_header;
587 rstrm->in_hdrlen = 0;
588 if (rstrm->last_frag) {
589 rstrm->fbtbc = rstrm->in_reclen;
590 rstrm->in_boundry = rstrm->in_base + rstrm->in_reclen;
591 rstrm->in_finger = rstrm->in_base;
592 rstrm->in_reclen = rstrm->in_received = 0;
605 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
607 rstrm->nonblock = TRUE;
609 maxrec = rstrm->recvsize;
610 rstrm->in_maxrec = maxrec;
618 flush_out(RECSTREAM *rstrm, bool_t eor)
621 u_int32_t len = (u_int32_t)((u_long)(rstrm->out_finger) -
622 (u_long)(rstrm->frag_header) - sizeof(u_int32_t));
624 *(rstrm->frag_header) = htonl(len | eormask);
625 len = (u_int32_t)((u_long)(rstrm->out_finger) -
626 (u_long)(rstrm->out_base));
627 if ((*(rstrm->writeit))(rstrm->tcp_handle, rstrm->out_base, (int)len)
630 rstrm->frag_header = (u_int32_t *)(void *)rstrm->out_base;
631 rstrm->out_finger = (char *)rstrm->out_base + sizeof(u_int32_t);
636 fill_input_buf(RECSTREAM *rstrm)
642 if (rstrm->nonblock)
645 where = rstrm->in_base;
646 i = (u_int32_t)((u_long)rstrm->in_boundry % BYTES_PER_XDR_UNIT);
648 len = (u_int32_t)(rstrm->in_size - i);
649 if ((len = (*(rstrm->readit))(rstrm->tcp_handle, where, len)) == -1)
651 rstrm->in_finger = where;
653 rstrm->in_boundry = where;
658 get_input_bytes(RECSTREAM *rstrm, char *addr, int len)
662 if (rstrm->nonblock) {
663 if (len > (int)(rstrm->in_boundry - rstrm->in_finger))
665 memcpy(addr, rstrm->in_finger, (size_t)len);
666 rstrm->in_finger += len;
671 current = (size_t)((long)rstrm->in_boundry -
672 (long)rstrm->in_finger);
674 if (! fill_input_buf(rstrm))
679 memmove(addr, rstrm->in_finger, current);
680 rstrm->in_finger += current;
688 set_input_fragment(RECSTREAM *rstrm)
692 if (rstrm->nonblock)
694 if (! get_input_bytes(rstrm, (char *)(void *)&header, sizeof(header)))
697 rstrm->last_frag = ((header & LAST_FRAG) == 0) ? FALSE : TRUE;
708 rstrm->fbtbc = header & (~LAST_FRAG);
713 skip_input_bytes(RECSTREAM *rstrm, long cnt)
718 current = (size_t)((long)rstrm->in_boundry -
719 (long)rstrm->in_finger);
721 if (! fill_input_buf(rstrm))
726 rstrm->in_finger += current;
745 realloc_stream(RECSTREAM *rstrm, int size)
750 if (size > rstrm->recvsize) {
751 buf = realloc(rstrm->in_base, (size_t)size);
754 diff = buf - rstrm->in_base;
755 rstrm->in_finger += diff;
756 rstrm->in_base = buf;
757 rstrm->in_boundry = buf + size;
758 rstrm->recvsize = size;
759 rstrm->in_size = size;