summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/transports/ssh.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/transports/ssh.c b/src/transports/ssh.c
index 1f6716f5d..33d0898ec 100644
--- a/src/transports/ssh.c
+++ b/src/transports/ssh.c
@@ -14,6 +14,7 @@
#include "netops.h"
#include "smart.h"
#include "cred.h"
+#include "socket_stream.h"
#ifdef GIT_SSH
@@ -25,7 +26,7 @@ static const char cmd_receivepack[] = "git-receive-pack";
typedef struct {
git_smart_subtransport_stream parent;
- gitno_socket socket;
+ git_stream *io;
LIBSSH2_SESSION *session;
LIBSSH2_CHANNEL *channel;
const char *cmd;
@@ -183,9 +184,10 @@ static void ssh_stream_free(git_smart_subtransport_stream *stream)
s->session = NULL;
}
- if (s->socket.socket) {
- (void)gitno_close(&s->socket);
- /* can't do anything here with error return value */
+ if (s->io) {
+ git_stream_close(s->io);
+ git_stream_free(s->io);
+ s->io = NULL;
}
git__free(s->url);
@@ -413,10 +415,11 @@ static int request_creds(git_cred **out, ssh_subtransport *t, const char *user,
static int _git_ssh_session_create(
LIBSSH2_SESSION** session,
- gitno_socket socket)
+ git_stream *io)
{
int rc = 0;
LIBSSH2_SESSION* s;
+ git_socket_stream *socket = (git_socket_stream *) io;
assert(session);
@@ -427,7 +430,7 @@ static int _git_ssh_session_create(
}
do {
- rc = libssh2_session_startup(s, socket.socket);
+ rc = libssh2_session_startup(s, socket->s);
} while (LIBSSH2_ERROR_EAGAIN == rc || LIBSSH2_ERROR_TIMEOUT == rc);
if (rc != LIBSSH2_ERROR_NONE) {
@@ -477,10 +480,11 @@ static int _git_ssh_setup_conn(
GITERR_CHECK_ALLOC(port);
}
- if ((error = gitno_connect(&s->socket, host, port, 0)) < 0)
+ if ((error = git_socket_stream_new(&s->io, host, port)) < 0 ||
+ (error = git_stream_connect(s->io)) < 0)
goto done;
- if ((error = _git_ssh_session_create(&session, s->socket)) < 0)
+ if ((error = _git_ssh_session_create(&session, s->io)) < 0)
goto done;
if (t->owner->certificate_check_cb != NULL) {