/* * 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. */ #include "git2/errors.h" #include "common.h" #include "global.h" #include "streams/registry.h" #include "streams/tls.h" #include "streams/mbedtls.h" #include "streams/openssl.h" #include "streams/stransport.h" int git_tls_stream_new(git_stream **out, const char *host, const char *port) { int (*init)(git_stream **, const char *, const char *) = NULL; git_stream_registration custom = {0}; int error; assert(out && host && port); if ((error = git_stream_registry_lookup(&custom, GIT_STREAM_TLS)) == 0) { init = custom.init; } else if (error == GIT_ENOTFOUND) { #ifdef GIT_SECURE_TRANSPORT init = git_stransport_stream_new; #elif defined(GIT_OPENSSL) init = git_openssl_stream_new; #elif defined(GIT_MBEDTLS) init = git_mbedtls_stream_new; #endif } else { return error; } if (!init) { git_error_set(GIT_ERROR_SSL, "there is no TLS stream available"); return -1; } return init(out, host, port); } int git_tls_stream_wrap(git_stream **out, git_stream *in, const char *host) { int (*wrap)(git_stream **, git_stream *, const char *) = NULL; git_stream_registration custom = {0}; assert(out && in); if (git_stream_registry_lookup(&custom, GIT_STREAM_TLS) == 0) { wrap = custom.wrap; } else { #ifdef GIT_SECURE_TRANSPORT wrap = git_stransport_stream_wrap; #elif defined(GIT_OPENSSL) wrap = git_openssl_stream_wrap; #elif defined(GIT_MBEDTLS) wrap = git_mbedtls_stream_wrap; #endif } if (!wrap) { git_error_set(GIT_ERROR_SSL, "there is no TLS stream available"); return -1; } return wrap(out, in, host); }