]> git.saurik.com Git - apple/security.git/blobdiff - SecurityTests/clxutils/clAppUtils/sslRingBufferThreads.h
Security-57031.1.35.tar.gz
[apple/security.git] / SecurityTests / clxutils / clAppUtils / sslRingBufferThreads.h
diff --git a/SecurityTests/clxutils/clAppUtils/sslRingBufferThreads.h b/SecurityTests/clxutils/clAppUtils/sslRingBufferThreads.h
new file mode 100644 (file)
index 0000000..5046d9e
--- /dev/null
@@ -0,0 +1,67 @@
+/* 
+ * 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_*/