]> git.proxmox.com Git - libgit2.git/blame - src/streams/tls.c
New upstream version 1.0.1+dfsg.1
[libgit2.git] / src / streams / tls.c
CommitLineData
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 18int 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 48int 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}