diff options
| author | Carlos Martín Nieto <cmn@dwim.me> | 2014-11-01 12:35:54 +0100 |
|---|---|---|
| committer | Carlos Martín Nieto <cmn@dwim.me> | 2014-12-10 01:17:40 +0100 |
| commit | dd4ff2c9b53dc9c8ba623477ead3e05f9baf73a0 (patch) | |
| tree | 415f05b927cc5be53ff933061dc9bd7ac309f9e3 /src/stream.h | |
| parent | c89f1cf9d60c9e0543e53fbf411b994ef1ff32d1 (diff) | |
| download | libgit2-dd4ff2c9b53dc9c8ba623477ead3e05f9baf73a0.tar.gz | |
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.
Diffstat (limited to 'src/stream.h')
| -rw-r--r-- | src/stream.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/stream.h b/src/stream.h new file mode 100644 index 000000000..8eec83009 --- /dev/null +++ b/src/stream.h @@ -0,0 +1,48 @@ +/* + * 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_stream_h__ +#define INCLUDE_stream_h__ + +#include "common.h" +#include "git2/sys/stream.h" + +GIT_INLINE(int) git_stream_connect(git_stream *st) +{ + return st->connect(st); +} + +GIT_INLINE(int) git_stream_certificate(git_cert **out, git_stream *st) +{ + if (!st->encrypted) { + giterr_set(GITERR_INVALID, "an unencrypted stream does not have a certificate"); + return -1; + } + + return st->certificate(out, st); +} + +GIT_INLINE(ssize_t) git_stream_read(git_stream *st, void *data, size_t len) +{ + return st->read(st, data, len); +} + +GIT_INLINE(ssize_t) git_stream_write(git_stream *st, void *data, size_t len, int flags) +{ + return st->write(st, data, len, flags); +} + +GIT_INLINE(int) git_stream_close(git_stream *st) +{ + return st->close(st); +} + +GIT_INLINE(void) git_stream_free(git_stream *st) +{ + return st->free(st); +} + +#endif |
