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_netops_h__ 8 #define INCLUDE_netops_h__ 9 10 #include "common.h" 11 12 #include "posix.h" 13 #include "stream.h" 14 #include "net.h" 15 16 #ifdef GIT_OPENSSL 17 # include <openssl/ssl.h> 18 #endif 19 20 typedef struct gitno_ssl { 21 #ifdef GIT_OPENSSL 22 SSL *ssl; 23 #else 24 size_t dummy; 25 #endif 26 } gitno_ssl; 27 28 /* Represents a socket that may or may not be using SSL */ 29 typedef struct gitno_socket { 30 GIT_SOCKET socket; 31 gitno_ssl ssl; 32 } gitno_socket; 33 34 typedef struct gitno_buffer { 35 char *data; 36 size_t len; 37 size_t offset; 38 int (*recv)(struct gitno_buffer *buffer); 39 void *cb_data; 40 } gitno_buffer; 41 42 /* Flags to gitno_connect */ 43 enum { 44 /* Attempt to create an SSL connection. */ 45 GITNO_CONNECT_SSL = 1, 46 }; 47 48 /** 49 * Check if the name in a cert matches the wanted hostname 50 * 51 * Check if a pattern from a certificate matches the hostname we 52 * wanted to connect to according to RFC2818 rules (which specifies 53 * HTTP over TLS). Mainly, an asterisk matches anything, but is 54 * limited to a single url component. 55 * 56 * Note that this does not set an error message. It expects the user 57 * to provide the message for the user. 58 */ 59 int gitno__match_host(const char *pattern, const char *host); 60 61 void gitno_buffer_setup_fromstream(git_stream *st, gitno_buffer *buf, char *data, size_t len); 62 void gitno_buffer_setup_callback(gitno_buffer *buf, char *data, size_t len, int (*recv)(gitno_buffer *buf), void *cb_data); 63 int gitno_recv(gitno_buffer *buf); 64 65 void gitno_consume(gitno_buffer *buf, const char *ptr); 66 void gitno_consume_n(gitno_buffer *buf, size_t cons); 67 68 #endif 69