]>
Commit | Line | Data |
---|---|---|
dd4ff2c9 CMN |
1 | /* |
2 | * Copyright (C) the libgit2 contributors. All rights reserved. | |
3 | * | |
4 | * This file is part of libgit2, distributed under the GNU GPL v2 with | |
5 | * a Linking Exception. For full terms see the included COPYING file. | |
6 | */ | |
7 | #ifndef INCLUDE_stream_h__ | |
8 | #define INCLUDE_stream_h__ | |
9 | ||
10 | #include "common.h" | |
11 | #include "git2/sys/stream.h" | |
12 | ||
13 | GIT_INLINE(int) git_stream_connect(git_stream *st) | |
14 | { | |
15 | return st->connect(st); | |
16 | } | |
17 | ||
84d83b8e CMN |
18 | GIT_INLINE(int) git_stream_is_encrypted(git_stream *st) |
19 | { | |
20 | return st->encrypted; | |
21 | } | |
22 | ||
dd4ff2c9 CMN |
23 | GIT_INLINE(int) git_stream_certificate(git_cert **out, git_stream *st) |
24 | { | |
25 | if (!st->encrypted) { | |
ac3d33df | 26 | git_error_set(GIT_ERROR_INVALID, "an unencrypted stream does not have a certificate"); |
dd4ff2c9 CMN |
27 | return -1; |
28 | } | |
29 | ||
30 | return st->certificate(out, st); | |
31 | } | |
32 | ||
1376e784 CMN |
33 | GIT_INLINE(int) git_stream_supports_proxy(git_stream *st) |
34 | { | |
35 | return st->proxy_support; | |
36 | } | |
37 | ||
b373e9a6 | 38 | GIT_INLINE(int) git_stream_set_proxy(git_stream *st, const git_proxy_options *proxy_opts) |
1376e784 CMN |
39 | { |
40 | if (!st->proxy_support) { | |
ac3d33df | 41 | git_error_set(GIT_ERROR_INVALID, "proxy not supported on this stream"); |
1376e784 CMN |
42 | return -1; |
43 | } | |
44 | ||
b373e9a6 | 45 | return st->set_proxy(st, proxy_opts); |
1376e784 CMN |
46 | } |
47 | ||
dd4ff2c9 CMN |
48 | GIT_INLINE(ssize_t) git_stream_read(git_stream *st, void *data, size_t len) |
49 | { | |
50 | return st->read(st, data, len); | |
51 | } | |
52 | ||
49ae22ba | 53 | GIT_INLINE(ssize_t) git_stream_write(git_stream *st, const char *data, size_t len, int flags) |
dd4ff2c9 CMN |
54 | { |
55 | return st->write(st, data, len, flags); | |
56 | } | |
57 | ||
ac3d33df JK |
58 | GIT_INLINE(int) git_stream__write_full(git_stream *st, const char *data, size_t len, int flags) |
59 | { | |
60 | size_t total_written = 0; | |
61 | ||
62 | while (total_written < len) { | |
63 | ssize_t written = git_stream_write(st, data + total_written, len - total_written, flags); | |
64 | if (written <= 0) | |
65 | return -1; | |
66 | ||
67 | total_written += written; | |
68 | } | |
69 | ||
70 | return 0; | |
71 | } | |
72 | ||
dd4ff2c9 CMN |
73 | GIT_INLINE(int) git_stream_close(git_stream *st) |
74 | { | |
75 | return st->close(st); | |
76 | } | |
77 | ||
78 | GIT_INLINE(void) git_stream_free(git_stream *st) | |
79 | { | |
d39f643a CMN |
80 | if (!st) |
81 | return; | |
82 | ||
a2fd56ab | 83 | st->free(st); |
dd4ff2c9 CMN |
84 | } |
85 | ||
86 | #endif |