/*
 * Copyright (c) 1995 Danny Gasparovski.
 * 
 * Please read the file COPYRIGHT for the 
 * terms and conditions of the copyright.
 */

#ifndef _SBUF_H_
#define _SBUF_H_

#include "mbuf.h"
#include <stddef.h>

/* a SBuf is a simple circular buffer used to hold RX and TX data in a struct socket
 */

typedef struct sbuf {
	unsigned  sb_cc;      /* actual chars in buffer */
	unsigned  sb_datalen; /* Length of data  */
	char*     sb_wptr;    /* write pointer. points to where the next
			                                       * bytes should be written in the sbuf */
	char*     sb_rptr;    /* read pointer. points to where the next
                                                                       * byte should be read from the sbuf */
	char*     sb_data;	/* Actual data */
} SBufRec, *SBuf;

void sbuf_free    (SBuf  sb);
void sbuf_drop    (SBuf  sb, int  num);
void sbuf_reserve (SBuf  sb, int  count);
void sbuf_append  (struct socket *so, MBuf  m);
void sbuf_appendsb(SBuf  sb, MBuf  m);
void sbuf_copy    (SBuf  sb, int  offset, int  length, char *to);

#define sbuf_flush(sb) sbuf_drop((sb),(sb)->sb_cc)
#define sbuf_space(sb) ((sb)->sb_datalen - (sb)->sb_cc)

#endif