]>
Commit | Line | Data |
---|---|---|
6946a3be 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 | ||
8 | #include "git2/errors.h" | |
6946a3be | 9 | |
ac3d33df JK |
10 | #include "common.h" |
11 | #include "global.h" | |
12 | #include "streams/registry.h" | |
13 | #include "streams/tls.h" | |
14 | #include "streams/mbedtls.h" | |
eae0bfdc PP |
15 | #include "streams/openssl.h" |
16 | #include "streams/stransport.h" | |
6946a3be | 17 | |
ac3d33df | 18 | int git_tls_stream_new(git_stream **out, const char *host, const char *port) |
7fafde63 | 19 | { |
ac3d33df JK |
20 | int (*init)(git_stream **, const char *, const char *) = NULL; |
21 | git_stream_registration custom = {0}; | |
22 | int error; | |
23 | ||
24 | assert(out && host && port); | |
25 | ||
26 | if ((error = git_stream_registry_lookup(&custom, GIT_STREAM_TLS)) == 0) { | |
27 | init = custom.init; | |
28 | } else if (error == GIT_ENOTFOUND) { | |
29 | #ifdef GIT_SECURE_TRANSPORT | |
30 | init = git_stransport_stream_new; | |
31 | #elif defined(GIT_OPENSSL) | |
32 | init = git_openssl_stream_new; | |
33 | #elif defined(GIT_MBEDTLS) | |
34 | init = git_mbedtls_stream_new; | |
35 | #endif | |
36 | } else { | |
37 | return error; | |
38 | } | |
39 | ||
40 | if (!init) { | |
41 | git_error_set(GIT_ERROR_SSL, "there is no TLS stream available"); | |
42 | return -1; | |
43 | } | |
7fafde63 | 44 | |
ac3d33df | 45 | return init(out, host, port); |
7fafde63 CMN |
46 | } |
47 | ||
ac3d33df | 48 | int git_tls_stream_wrap(git_stream **out, git_stream *in, const char *host) |
6946a3be | 49 | { |
ac3d33df JK |
50 | int (*wrap)(git_stream **, git_stream *, const char *) = NULL; |
51 | git_stream_registration custom = {0}; | |
7fafde63 | 52 | |
ac3d33df | 53 | assert(out && in); |
7fafde63 | 54 | |
ac3d33df JK |
55 | if (git_stream_registry_lookup(&custom, GIT_STREAM_TLS) == 0) { |
56 | wrap = custom.wrap; | |
57 | } else { | |
6946a3be | 58 | #ifdef GIT_SECURE_TRANSPORT |
ac3d33df | 59 | wrap = git_stransport_stream_wrap; |
24e53d2f | 60 | #elif defined(GIT_OPENSSL) |
ac3d33df JK |
61 | wrap = git_openssl_stream_wrap; |
62 | #elif defined(GIT_MBEDTLS) | |
63 | wrap = git_mbedtls_stream_wrap; | |
6946a3be | 64 | #endif |
ac3d33df JK |
65 | } |
66 | ||
67 | if (!wrap) { | |
68 | git_error_set(GIT_ERROR_SSL, "there is no TLS stream available"); | |
69 | return -1; | |
70 | } | |
71 | ||
72 | return wrap(out, in, host); | |
6946a3be | 73 | } |