summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2017-04-17 13:03:03 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2017-04-17 13:03:03 +0200
commit5c7609604634d84d137dcec2ce3be1d23ae8c791 (patch)
treeac0334aa3b63698353fe4ef53a1bfb18339d5a77
parentf9d3b0d05f19a59e3327deabc2edc93e507c6aa3 (diff)
downloadlibgit2-cmn/transport-get-proxy.tar.gz
transport: provide a getter for the proxy optionscmn/transport-get-proxy
As with the callbacks, third-party implementations of smart subtransports cannot reach into the opaque struct and thus cannot know what options the user set. Add a getter for these options to copy the proxy options into something external implementors can use.
-rw-r--r--include/git2/sys/transport.h10
-rw-r--r--src/transports/smart.c6
2 files changed, 16 insertions, 0 deletions
diff --git a/include/git2/sys/transport.h b/include/git2/sys/transport.h
index 60e38b21a..a395de5ed 100644
--- a/include/git2/sys/transport.h
+++ b/include/git2/sys/transport.h
@@ -241,6 +241,16 @@ GIT_EXTERN(int) git_transport_smart_certificate_check(git_transport *transport,
*/
GIT_EXTERN(int) git_transport_smart_credentials(git_cred **out, git_transport *transport, const char *user, int methods);
+/**
+ * Get a copy of the proxy options
+ *
+ * The url is copied and must be freed by the caller.
+ *
+ * @param out options struct to fill
+ * @param transport the transport to extract the data from.
+ */
+GIT_EXTERN(int) git_transport_smart_proxy_options(git_proxy_options *out, git_transport *transport);
+
/*
*** End of base transport interface ***
*** Begin interface for subtransports for the smart transport ***
diff --git a/src/transports/smart.c b/src/transports/smart.c
index e4aa26d86..a96fdf6fb 100644
--- a/src/transports/smart.c
+++ b/src/transports/smart.c
@@ -472,6 +472,12 @@ int git_transport_smart_credentials(git_cred **out, git_transport *transport, co
return t->cred_acquire_cb(out, t->url, user, methods, t->cred_acquire_payload);
}
+int git_transport_smart_proxy_options(git_proxy_options *out, git_transport *transport)
+{
+ transport_smart *t = (transport_smart *) transport;
+ return git_proxy_options_dup(out, &t->proxy);
+}
+
int git_transport_smart(git_transport **out, git_remote *owner, void *param)
{
transport_smart *t;