/* * 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. */ #ifndef INCLUDE_sys_git_stream_h__ #define INCLUDE_sys_git_stream_h__ #include "git2/common.h" #include "git2/types.h" #include "git2/proxy.h" GIT_BEGIN_DECL #define GIT_STREAM_VERSION 1 /** * Every stream must have this struct as its first element, so the * API can talk to it. You'd define your stream as * * struct my_stream { * git_stream parent; * ... * } * * and fill the functions */ typedef struct git_stream { int version; int encrypted; int proxy_support; int (*connect)(struct git_stream *); int (*certificate)(git_cert **, struct git_stream *); int (*set_proxy)(struct git_stream *, const git_proxy_options *proxy_opts); ssize_t (*read)(struct git_stream *, void *, size_t); ssize_t (*write)(struct git_stream *, const char *, size_t, int); int (*close)(struct git_stream *); void (*free)(struct git_stream *); } git_stream; typedef int (*git_stream_cb)(git_stream **out, const char *host, const char *port); /** * Register a TLS stream constructor for the library to use * * If a constructor is already set, it will be overwritten. Pass * `NULL` in order to deregister the current constructor. * * @param ctor the constructor to use * @return 0 or an error code */ GIT_EXTERN(int) git_stream_register_tls(git_stream_cb ctor); GIT_END_DECL #endif