aboutsummaryrefslogtreecommitdiffstats
path: root/istream.h
diff options
context:
space:
mode:
authorTatsuya Kinoshita <tats@vega.ocn.ne.jp>2011-05-04 07:05:14 +0000
committerTatsuya Kinoshita <tats@vega.ocn.ne.jp>2011-05-04 07:05:14 +0000
commit72f72d64a422d6628c4796f5c0bf2e508f134214 (patch)
tree0c9ea90cc53310832c977265521fb44db24a515e /istream.h
parentAdding upstream version 0.3 (diff)
downloadw3m-1ef51c20e0ea7b35c8c9cad6f9d9bc1e16664cc5.tar.gz
w3m-1ef51c20e0ea7b35c8c9cad6f9d9bc1e16664cc5.zip
Adding upstream version 0.5.1upstream/0.5.1
Diffstat (limited to 'istream.h')
-rw-r--r--istream.h155
1 files changed, 155 insertions, 0 deletions
diff --git a/istream.h b/istream.h
new file mode 100644
index 0000000..a220d8b
--- /dev/null
+++ b/istream.h
@@ -0,0 +1,155 @@
+/* $Id: istream.h,v 1.12 2003/10/20 16:41:56 ukai Exp $ */
+#ifndef IO_STREAM_H
+#define IO_STREAM_H
+
+#include <stdio.h>
+#ifdef USE_SSL
+#include <openssl/bio.h>
+#include <openssl/x509.h>
+#include <openssl/ssl.h>
+#endif
+#include "Str.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+struct stream_buffer {
+ unsigned char *buf;
+ int size, cur, next;
+};
+
+typedef struct stream_buffer *StreamBuffer;
+
+struct file_handle {
+ FILE *f;
+ void (*close) ();
+};
+
+#ifdef USE_SSL
+struct ssl_handle {
+ SSL *ssl;
+ int sock;
+};
+#endif
+
+union input_stream;
+
+struct ens_handle {
+ union input_stream *is;
+ Str s;
+ int pos;
+ char encoding;
+};
+
+
+struct base_stream {
+ struct stream_buffer stream;
+ void *handle;
+ char type;
+ char iseos;
+ int (*read) ();
+ void (*close) ();
+};
+
+struct file_stream {
+ struct stream_buffer stream;
+ struct file_handle *handle;
+ char type;
+ char iseos;
+ int (*read) ();
+ void (*close) ();
+};
+
+struct str_stream {
+ struct stream_buffer stream;
+ Str handle;
+ char type;
+ char iseos;
+ int (*read) ();
+ void (*close) ();
+};
+
+#ifdef USE_SSL
+struct ssl_stream {
+ struct stream_buffer stream;
+ struct ssl_handle *handle;
+ char type;
+ char iseos;
+ int (*read) ();
+ void (*close) ();
+};
+#endif /* USE_SSL */
+
+struct encoded_stream {
+ struct stream_buffer stream;
+ struct ens_handle *handle;
+ char type;
+ char iseos;
+ int (*read) ();
+ void (*close) ();
+};
+
+union input_stream {
+ struct base_stream base;
+ struct file_stream file;
+ struct str_stream str;
+#ifdef USE_SSL
+ struct ssl_stream ssl;
+#endif /* USE_SSL */
+ struct encoded_stream ens;
+};
+
+typedef struct base_stream *BaseStream;
+typedef struct file_stream *FileStream;
+typedef struct str_stream *StrStream;
+#ifdef USE_SSL
+typedef struct ssl_stream *SSLStream;
+#endif /* USE_SSL */
+typedef struct encoded_stream *EncodedStrStream;
+
+typedef union input_stream *InputStream;
+
+extern InputStream newInputStream(int des);
+extern InputStream newFileStream(FILE * f, void (*closep) ());
+extern InputStream newStrStream(Str s);
+#ifdef USE_SSL
+extern InputStream newSSLStream(SSL * ssl, int sock);
+#endif
+extern InputStream newEncodedStream(InputStream is, char encoding);
+extern int ISclose(InputStream stream);
+extern int ISgetc(InputStream stream);
+extern int ISundogetc(InputStream stream);
+extern Str StrISgets(InputStream stream);
+extern Str StrmyISgets(InputStream stream);
+extern int ISread(InputStream stream, Str buf, int count);
+extern int ISfileno(InputStream stream);
+extern int ISeos(InputStream stream);
+#ifdef USE_SSL
+extern void ssl_accept_this_site(char *hostname);
+extern Str ssl_get_certificate(SSL * ssl, char *hostname);
+#endif
+
+#define IST_BASIC 0
+#define IST_FILE 1
+#define IST_STR 2
+#define IST_SSL 3
+#define IST_ENCODED 4
+#define IST_UNCLOSE 0x10
+
+#define IStype(stream) ((stream)->base.type)
+#define is_eos(stream) ISeos(stream)
+#define iseos(stream) ((stream)->base.iseos)
+#define file_of(stream) ((stream)->file.handle->f)
+#define set_close(stream,closep) ((IStype(stream)==IST_FILE)?((stream)->file.handle->close=(closep)):0)
+#define str_of(stream) ((stream)->str.handle)
+#ifdef USE_SSL
+#define ssl_socket_of(stream) ((stream)->ssl.handle->sock)
+#define ssl_of(stream) ((stream)->ssl.handle->ssl)
+#endif
+
+#ifdef USE_BINMODE_STREAM
+#define openIS(path) newInputStream(open((path),O_RDONLY|O_BINARY))
+#else
+#define openIS(path) newInputStream(open((path),O_RDONLY))
+#endif /* USE_BINMODE_STREAM */
+#endif