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