sslRingBufferThreads.h   [plain text]


/* 
 * sslRingBufferThreads.h - SecureTransport client and server thread
 *		routines which use ringBufferIo for I/O (no sockets).
 */
 
#include <Security/SecureTransport.h>
#include <clAppUtils/ringBufferIo.h>
#include <CoreFoundation/CoreFoundation.h>

#ifndef	_SSL_RING_BUFFER_THREADS_H_
#define _SSL_RING_BUFFER_THREADS_H_

#ifdef __cplusplus
extern "C" {
#endif

/* 
 * arguments to client thread and server pseudothread
 */
typedef struct {
	CFArrayRef			idArray;		/* required for server, optional for client */
	CFArrayRef			trustedRoots;	/* generally from server's idArray */
	unsigned			xferSize;		/* total bytes for client to write and server to
										 * read */
	void				*xferBuf;		/* move to/from here */
	unsigned			chunkSize;		/* size of xferBuf; client writes this much at 
										 *   a time */
	bool				runForever;		/* if true, ignore xferSize and move data forever
										 *   or until error */
	SSLCipherSuite		cipherSuite;
	SSLProtocol			prot;
	RingBuffer			*ringWrite;		/* I/O writes to this... */
	RingBuffer			*ringRead;		/* ...and reads from this */
	
	/* client's goFlag is &(server's iAmReady); vice versa */
	bool				iAmReady;		/* this thread is ready for handshake */
	bool				*goFlag;		/* when both threads see this, they start
										 * their handshakes */
	bool				*abortFlag;		/* anyone sets this on error */
										/* everyone aborts when they see this true */
	bool				pauseOnError;	/* call testError() on error */
	
	/* returned on success */
	SSLProtocol			negotiatedProt;
	SSLCipherSuite		negotiatedCipher;
	
	CFAbsoluteTime		startHandshake;
	CFAbsoluteTime		startData;
	CFAbsoluteTime		endData;
} SslRingBufferArgs;

/* 
 * Client thread - handshake and write sslArgs->xferSize bytes of data.
 */
void *sslRbClientThread(void *arg);

/* 
 * Server function - like clientThread except it runs from the main thread.
 * handshake and read sslArgs->xferSize bytes of data.
 */
OSStatus sslRbServerThread(SslRingBufferArgs *sslArgs);

#ifdef __cplusplus
}
#endif

#endif	/* _SSL_RING_BUFFER_THREADS_H_*/