From dd4ff2c9b53dc9c8ba623477ead3e05f9baf73a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Sat, 1 Nov 2014 12:35:54 +0100 Subject: Introduce stackable IO streams We currently have gitno for talking over TCP, but this needs to know about both plaintext and OpenSSL connections and the code has gotten somewhat messy with ifdefs determining which version of the function should be called. In order to clean this up and abstract away the details of sending over the different types of streams, we can instead use an interface and stack stream implementations. We may not be able to use the stackability with all streams, but we are definitely be able to use the abstraction which is currently spread between different bits of gitno. --- include/git2/sys/stream.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 include/git2/sys/stream.h (limited to 'include/git2') diff --git a/include/git2/sys/stream.h b/include/git2/sys/stream.h new file mode 100644 index 000000000..69f8554da --- /dev/null +++ b/include/git2/sys/stream.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) the libgit2 contributors. All rights reserved. + * + * This file is part of libgit2, distributed under the GNU GPL v2 with + * a Linking Exception. For full terms see the included COPYING file. + */ +#ifndef INCLUDE_sys_git_stream_h__ +#define INCLUDE_sys_git_stream_h__ + +#include "git2/common.h" +#include "git2/types.h" + +GIT_BEGIN_DECL + +#define GIT_STREAM_VERSION 1 + +/** + * Every stream must have this struct as its first element, so the + * API can talk to it. You'd define your stream as + * + * struct my_stream { + * git_stream parent; + * ... + * } + * + * and fill the functions + */ +typedef struct git_stream { + int version; + + int encrypted; + int (*connect)(struct git_stream *); + int (*certificate)(git_cert **, struct git_stream *); + ssize_t (*read)(struct git_stream *, void *, size_t); + ssize_t (*write)(struct git_stream *, void *, size_t, int); + int (*close)(struct git_stream *); + void (*free)(struct git_stream *); +} git_stream; + +#endif -- cgit v1.2.1 From 49ae22baac96f14d63547c158a87b4de2d8373a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Wed, 10 Dec 2014 01:38:52 +0100 Subject: stream: constify the write buffer --- include/git2/sys/stream.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include/git2') diff --git a/include/git2/sys/stream.h b/include/git2/sys/stream.h index 69f8554da..c249055c9 100644 --- a/include/git2/sys/stream.h +++ b/include/git2/sys/stream.h @@ -32,7 +32,7 @@ typedef struct git_stream { int (*connect)(struct git_stream *); int (*certificate)(git_cert **, struct git_stream *); ssize_t (*read)(struct git_stream *, void *, size_t); - ssize_t (*write)(struct git_stream *, void *, size_t, int); + ssize_t (*write)(struct git_stream *, const char *, size_t, int); int (*close)(struct git_stream *); void (*free)(struct git_stream *); } git_stream; -- cgit v1.2.1