Lines Matching defs:rstrm
190 RECSTREAM *rstrm = mem_alloc(sizeof(RECSTREAM));
192 if (rstrm == NULL) {
201 rstrm->sendsize = sendsize = fix_buf_size(sendsize);
202 rstrm->out_base = malloc(rstrm->sendsize);
203 if (rstrm->out_base == NULL) {
205 mem_free(rstrm, sizeof(RECSTREAM));
209 rstrm->recvsize = recvsize = fix_buf_size(recvsize);
210 rstrm->in_base = malloc(recvsize);
211 if (rstrm->in_base == NULL) {
213 mem_free(rstrm->out_base, sendsize);
214 mem_free(rstrm, sizeof(RECSTREAM));
221 xdrs->x_private = rstrm;
222 rstrm->tcp_handle = tcp_handle;
223 rstrm->readit = readit;
224 rstrm->writeit = writeit;
225 rstrm->out_finger = rstrm->out_boundry = rstrm->out_base;
226 rstrm->frag_header = (uint32_t *)(void *)rstrm->out_base;
227 rstrm->out_finger += sizeof(uint32_t);
228 rstrm->out_boundry += sendsize;
229 rstrm->frag_sent = FALSE;
230 rstrm->in_size = recvsize;
231 rstrm->in_boundry = rstrm->in_base;
232 rstrm->in_finger = (rstrm->in_boundry += recvsize);
233 rstrm->fbtbc = 0;
234 rstrm->last_frag = TRUE;
235 rstrm->in_haveheader = FALSE;
236 rstrm->in_hdrlen = 0;
237 rstrm->in_hdrp = (char *)(void *)&rstrm->in_header;
238 rstrm->nonblock = FALSE;
239 rstrm->in_reclen = 0;
240 rstrm->in_received = 0;
252 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
253 int32_t *buflp = (int32_t *)(void *)(rstrm->in_finger);
257 if ((rstrm->fbtbc >= (long)sizeof(int32_t)) &&
258 (((uintptr_t)rstrm->in_boundry - (uintptr_t)buflp) >= sizeof(int32_t))) {
260 rstrm->fbtbc -= sizeof(int32_t);
261 rstrm->in_finger += sizeof(int32_t);
274 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
275 int32_t *dest_lp = ((int32_t *)(void *)(rstrm->out_finger));
277 if ((rstrm->out_finger += sizeof(int32_t)) > rstrm->out_boundry) {
282 rstrm->out_finger -= sizeof(int32_t);
283 rstrm->frag_sent = TRUE;
284 if (! flush_out(rstrm, FALSE))
286 dest_lp = ((int32_t *)(void *)(rstrm->out_finger));
287 rstrm->out_finger += sizeof(int32_t);
296 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
300 current = (u_int)rstrm->fbtbc;
302 if (rstrm->last_frag)
304 if (! set_input_fragment(rstrm))
309 if (! get_input_bytes(rstrm, addr, current))
312 rstrm->fbtbc -= current;
321 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
325 current = (size_t)((u_long)rstrm->out_boundry -
326 (u_long)rstrm->out_finger);
328 memmove(rstrm->out_finger, addr, current);
329 rstrm->out_finger += current;
333 if (rstrm->out_finger == rstrm->out_boundry) {
334 rstrm->frag_sent = TRUE;
335 if (! flush_out(rstrm, FALSE))
345 RECSTREAM *rstrm = (RECSTREAM *)xdrs->x_private;
348 pos = lseek((int)(u_long)rstrm->tcp_handle, (off_t)0, 1);
353 pos += rstrm->out_finger - rstrm->out_base;
357 pos -= rstrm->in_boundry - rstrm->in_finger;
370 RECSTREAM *rstrm = (RECSTREAM *)xdrs->x_private;
379 newpos = rstrm->out_finger - delta;
380 if ((newpos > (char *)(void *)(rstrm->frag_header)) &&
381 (newpos < rstrm->out_boundry)) {
382 rstrm->out_finger = newpos;
388 newpos = rstrm->in_finger - delta;
389 if ((delta < (int)(rstrm->fbtbc)) &&
390 (newpos <= rstrm->in_boundry) &&
391 (newpos >= rstrm->in_base)) {
392 rstrm->in_finger = newpos;
393 rstrm->fbtbc -= delta;
407 RECSTREAM *rstrm = (RECSTREAM *)xdrs->x_private;
413 if ((rstrm->out_finger + len) <= rstrm->out_boundry) {
414 buf = (int32_t *)(void *)rstrm->out_finger;
415 rstrm->out_finger += len;
420 if ((len <= (u_int)rstrm->fbtbc) &&
421 ((rstrm->in_finger + len) <= rstrm->in_boundry)) {
422 buf = (int32_t *)(void *)rstrm->in_finger;
423 rstrm->fbtbc -= len;
424 rstrm->in_finger += len;
437 RECSTREAM *rstrm = (RECSTREAM *)xdrs->x_private;
439 mem_free(rstrm->out_base, rstrm->sendsize);
440 mem_free(rstrm->in_base, rstrm->recvsize);
441 mem_free(rstrm, sizeof(RECSTREAM));
456 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
459 if (rstrm->nonblock) {
461 rstrm->fbtbc = 0;
464 if (rstrm->in_finger == rstrm->in_boundry &&
466 rstrm->fbtbc = 0;
471 while (rstrm->fbtbc > 0 || (! rstrm->last_frag)) {
472 if (! skip_input_bytes(rstrm, rstrm->fbtbc))
474 rstrm->fbtbc = 0;
475 if ((! rstrm->last_frag) && (! set_input_fragment(rstrm)))
478 rstrm->last_frag = FALSE;
490 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
492 while (rstrm->fbtbc > 0 || (! rstrm->last_frag)) {
493 if (!skip_input_bytes(rstrm, rstrm->fbtbc))
495 rstrm->fbtbc = 0;
496 if ((!rstrm->last_frag) && (!set_input_fragment(rstrm)))
499 if (rstrm->in_finger == rstrm->in_boundry)
513 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
516 if (sendnow || rstrm->frag_sent ||
517 ((u_long)rstrm->out_finger + sizeof(uint32_t) >=
518 (u_long)rstrm->out_boundry)) {
519 rstrm->frag_sent = FALSE;
520 return (flush_out(rstrm, TRUE));
522 len = (u_long)(rstrm->out_finger) - (u_long)(rstrm->frag_header) -
524 *(rstrm->frag_header) = htonl((uint32_t)len | LAST_FRAG);
525 rstrm->frag_header = (uint32_t *)(void *)rstrm->out_finger;
526 rstrm->out_finger += sizeof(uint32_t);
537 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
541 if (!rstrm->in_haveheader) {
542 n = rstrm->readit(rstrm->tcp_handle, rstrm->in_hdrp,
543 (int)sizeof (rstrm->in_header) - rstrm->in_hdrlen);
552 rstrm->in_hdrp += n;
554 rstrm->in_hdrlen += (int)n;
555 if (rstrm->in_hdrlen < (int)sizeof(rstrm->in_header)) {
559 rstrm->in_header = ntohl(rstrm->in_header);
560 fraglen = (int)(rstrm->in_header & ~LAST_FRAG);
561 if (fraglen == 0 || fraglen > rstrm->in_maxrec ||
562 (rstrm->in_reclen + fraglen) > rstrm->in_maxrec) {
566 rstrm->in_reclen += fraglen;
567 if ((u_int)rstrm->in_reclen > rstrm->recvsize) {
568 if (!realloc_stream(rstrm, rstrm->in_reclen)) {
573 if (rstrm->in_header & LAST_FRAG) {
574 rstrm->in_header &= ~LAST_FRAG;
575 rstrm->last_frag = TRUE;
579 n = rstrm->readit(rstrm->tcp_handle,
580 rstrm->in_base + rstrm->in_received,
581 (rstrm->in_reclen - rstrm->in_received));
594 rstrm->in_received += (int)n;
596 if (rstrm->in_received == rstrm->in_reclen) {
597 rstrm->in_haveheader = FALSE;
598 rstrm->in_hdrp = (char *)(void *)&rstrm->in_header;
599 rstrm->in_hdrlen = 0;
600 if (rstrm->last_frag) {
601 rstrm->fbtbc = rstrm->in_reclen;
602 rstrm->in_boundry = rstrm->in_base + rstrm->in_reclen;
603 rstrm->in_finger = rstrm->in_base;
604 rstrm->in_reclen = rstrm->in_received = 0;
617 RECSTREAM *rstrm = (RECSTREAM *)(xdrs->x_private);
619 rstrm->nonblock = TRUE;
621 maxrec = rstrm->recvsize;
622 rstrm->in_maxrec = maxrec;
631 flush_out(RECSTREAM *rstrm, bool_t eor)
634 uint32_t len = (uint32_t)((u_long)(rstrm->out_finger) -
635 (u_long)(rstrm->frag_header) - sizeof(uint32_t));
637 *(rstrm->frag_header) = htonl(len | eormask);
638 len = (uint32_t)((u_long)(rstrm->out_finger) -
639 (u_long)(rstrm->out_base));
640 if ((*(rstrm->writeit))(rstrm->tcp_handle, rstrm->out_base, (int)len)
643 rstrm->frag_header = (uint32_t *)(void *)rstrm->out_base;
644 rstrm->out_finger = (char *)rstrm->out_base + sizeof(uint32_t);
649 fill_input_buf(RECSTREAM *rstrm)
655 if (rstrm->nonblock)
657 where = rstrm->in_base;
658 i = (uint32_t)((u_long)rstrm->in_boundry % BYTES_PER_XDR_UNIT);
660 len = (uint32_t)(rstrm->in_size - i);
661 if ((len = (*(rstrm->readit))(rstrm->tcp_handle, where, len)) == -1)
663 rstrm->in_finger = where;
665 rstrm->in_boundry = where;
670 get_input_bytes(RECSTREAM *rstrm, char *addr, u_int len)
674 if (rstrm->nonblock) {
675 if (len > ((uintptr_t)rstrm->in_boundry - (uintptr_t)rstrm->in_finger))
677 memcpy(addr, rstrm->in_finger, len);
678 rstrm->in_finger += len;
683 uintptr_t d = ((uintptr_t)rstrm->in_boundry -
684 (uintptr_t)rstrm->in_finger);
688 if (! fill_input_buf(rstrm))
693 memmove(addr, rstrm->in_finger, current);
694 rstrm->in_finger += current;
702 set_input_fragment(RECSTREAM *rstrm)
706 if (rstrm->nonblock)
708 if (! get_input_bytes(rstrm, (char *)(void *)&header,
712 rstrm->last_frag = ((header & LAST_FRAG) == 0) ? FALSE : TRUE;
723 rstrm->fbtbc = header & (~LAST_FRAG);
728 skip_input_bytes(RECSTREAM *rstrm, long cnt)
733 current = (uint32_t)((long)rstrm->in_boundry -
734 (long)rstrm->in_finger);
736 if (! fill_input_buf(rstrm))
741 rstrm->in_finger += current;
760 realloc_stream(RECSTREAM *rstrm, int size)
765 if ((u_int)size > rstrm->recvsize) {
766 buf = realloc(rstrm->in_base, (size_t)size);
769 diff = buf - rstrm->in_base;
770 rstrm->in_finger += diff;
771 rstrm->in_base = buf;
772 rstrm->in_boundry = buf + size;
773 rstrm->recvsize = size;
774 rstrm->in_size = size;