summaryrefslogtreecommitdiff
path: root/src/netops.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/netops.c')
-rw-r--r--src/netops.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/netops.c b/src/netops.c
index 23e7e9d3c..ab135c46b 100644
--- a/src/netops.c
+++ b/src/netops.c
@@ -104,6 +104,16 @@ static int ssl_set_error(gitno_ssl *ssl, int error)
int gitno_recv(gitno_buffer *buf)
{
+ if (buf->io) {
+ int ret;
+ ret = git_stream_read(buf->io, buf->data + buf->offset, buf->len - buf->offset);
+ if (ret < 0)
+ return -1;
+
+ buf->offset += ret;
+ return ret;
+ }
+
return buf->recv(buf);
}
@@ -168,6 +178,15 @@ void gitno_buffer_setup(gitno_socket *socket, gitno_buffer *buf, char *data, siz
gitno_buffer_setup_callback(socket, buf, data, len, gitno__recv, NULL);
}
+void gitno_buffer_setup_fromstream(git_stream *st, gitno_buffer *buf, char *data, size_t len)
+{
+ memset(data, 0x0, len);
+ buf->data = data;
+ buf->len = len;
+ buf->offset = 0;
+ buf->io = st;
+}
+
/* Consume up to ptr and move the rest of the buffer to the beginning */
void gitno_consume(gitno_buffer *buf, const char *ptr)
{