X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/80e2389990082500d76eb566d4946be3e786c3ef..d8f41ccd20de16f8ebe2ccc84d47bf1cb2b26bbb:/SecurityTests/clxutils/clAppUtils/sslRingBufferThreads.h diff --git a/SecurityTests/clxutils/clAppUtils/sslRingBufferThreads.h b/SecurityTests/clxutils/clAppUtils/sslRingBufferThreads.h new file mode 100644 index 00000000..5046d9ee --- /dev/null +++ b/SecurityTests/clxutils/clAppUtils/sslRingBufferThreads.h @@ -0,0 +1,67 @@ +/* + * sslRingBufferThreads.h - SecureTransport client and server thread + * routines which use ringBufferIo for I/O (no sockets). + */ + +#include +#include +#include + +#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_*/