summaryrefslogtreecommitdiff
path: root/vio/Vio.h
diff options
context:
space:
mode:
Diffstat (limited to 'vio/Vio.h')
-rw-r--r--vio/Vio.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/vio/Vio.h b/vio/Vio.h
new file mode 100644
index 00000000000..959d472873f
--- /dev/null
+++ b/vio/Vio.h
@@ -0,0 +1,64 @@
+/*
+ * Abstract Virtual IO interface - class Vio. Heavily
+ * influenced by Berkeley sockets and oriented toward MySQL.
+ */
+
+/*
+** Virtual I/O library
+** Written by Andrei Errapart <andreie@no.spam.ee>
+** Modified by Monty
+*/
+
+#ifdef __GNUC__
+#pragma interface /* gcc class implementation */
+#endif
+
+VIO_NS_BEGIN
+
+enum enum_vio_type { VIO_CLOSED, VIO_TYPE_TCPIP, VIO_TYPE_SOCKET,
+ VIO_TYPE_NAMEDPIPE, VIO_TYPE_SSL};
+
+class Vio {
+public:
+ virtual bool is_open() const = 0;
+ virtual int read(vio_ptr buf, int size) = 0;
+ virtual int write(const vio_ptr buf, int size) = 0;
+ virtual int blocking(bool onoff) = 0;
+ virtual bool blocking() const = 0;
+ virtual bool fcntl() const = 0;
+ virtual int fastsend(bool onoff = true) = 0;
+ virtual int keepalive(bool onoff) = 0;
+ virtual bool should_retry() const = 0;
+ virtual int close() = 0;
+ virtual void release();
+ virtual const char* description() const = 0;
+ virtual bool peer_addr(char *buf) const = 0;
+ virtual const char* cipher_description() const = 0;
+ virtual int vio_errno();
+ virtual ~Vio();
+};
+
+/* Macros to simulate the violite C interface */
+
+
+Vio *vio_new(my_socket sd, enum enum_vio_type type,
+ my_bool localhost);
+#ifdef __WIN__
+Vio* vio_new_win32pipe(HANDLE hPipe);
+#endif
+
+#define vio_delete(vio) delete vio
+#define vio_read(vio,buf,size) vio->read(buf,size)
+#define vio_write(vio,buf,size) vio->write(buf,size)
+#define vio_blocking(vio,mode) vio->blocking(mode)
+#define vio_is_blocking(vio) vio->is_blocking()
+#define vio_fastsend(vio,mode) vio->fastsend(mode)
+#define vio_keepalive(vio,mode) vio->keepalive(mode)
+#define vio_shouldretry(vio) vio->shouldretry(mode)
+#define vio_close(vio) vio->close()
+#define vio_description(vio) vio->description()
+#define vio_errno(Vio *vio) vio->errno()
+#define vio_peer_addr(vio,buf) vio->peer_addr(buf)
+#define vio_in_addr(vio,in) vio->in_addr(in)
+
+VIO_NS_END