/* 
 * Copyright (C) 2010 iptelorg GmbH
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */
 
/** openssl BIOs for reading/writing via a fixed memory buffer.
 * @file modules/tls/tls_bio.h
 * @ingroup tls
 */
 
/*
 * History:
 * --------
 *  2010-03-25  initial version (andrei)
*/

#ifndef __tls_bio_h
#define __tls_bio_h

#include <openssl/bio.h>

/* memory buffer used for tls I/O */
struct tls_mbuf {
	unsigned char* buf;
	int pos;  /**< current position in the buffer while reading or writing*/
	int used; /**< how much it's used  (read or write)*/
	int size; /**< total buffer size (fixed) */
};

struct tls_bio_mbuf_data {
	struct tls_mbuf* rd;
	struct tls_mbuf* wr;
};


BIO_METHOD* tls_BIO_mbuf(void);
BIO* tls_BIO_new_mbuf(struct tls_mbuf* rd, struct tls_mbuf* wr);
int tls_BIO_mbuf_set(BIO* b, struct tls_mbuf* rd, struct tls_mbuf* wr);



/** intialize an mbuf structure.
 * @param mb - struct tls_mbuf pointer that will be intialized.
 * @param b  - buffer (unsigned char*).
 * @param sz - suze of the buffer (int).
 * WARNING: the buffer will not be copied, but referenced.
 */
#define tls_mbuf_init(mb, b, sz) \
	do { \
		(mb)->buf = (b); \
		(mb)->size = (sz); \
		(mb)->pos = 0; \
		(mb)->used = 0; \
	} while(0)



#endif /*__tls_bio_h*/

/* vi: set ts=4 sw=4 tw=79:ai:cindent: */