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