Browse Source

Move sideband server side support into reusable form.

The server side support; this is just the very low level, and the
caller needs to know which band it wants to send things out.

Signed-off-by: Junio C Hamano <junkio@cox.net>
(cherry picked from b786552b67878c7780c50def4c069d46dc54efbe commit)
maint
Junio C Hamano 18 years ago
parent
commit
958c24b1b8
  1. 26
      sideband.c
  2. 1
      sideband.h
  3. 50
      upload-pack.c

26
sideband.c

@ -46,3 +46,29 @@ int recv_sideband(const char *me, int in_stream, int out, int err, char *buf, in @@ -46,3 +46,29 @@ int recv_sideband(const char *me, int in_stream, int out, int err, char *buf, in
}
return 0;
}

/*
* fd is connected to the remote side; send the sideband data
* over multiplexed packet stream.
*/
ssize_t send_sideband(int fd, int band, const char *data, ssize_t sz, int packet_max)
{
ssize_t ssz = sz;
const char *p = data;

while (sz) {
unsigned n;
char hdr[5];

n = sz;
if (packet_max - 5 < n)
n = packet_max - 5;
sprintf(hdr, "%04x", n + 5);
hdr[4] = band;
safe_write(fd, hdr, 5);
safe_write(fd, p, n);
p += n;
sz -= n;
}
return ssz;
}

1
sideband.h

@ -7,5 +7,6 @@ @@ -7,5 +7,6 @@
#define DEFAULT_PACKET_MAX 1000

int recv_sideband(const char *me, int in_stream, int out, int err, char *, int);
ssize_t send_sideband(int fd, int band, const char *data, ssize_t sz, int packet_max);

#endif

50
upload-pack.c

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
#include "cache.h"
#include "refs.h"
#include "pkt-line.h"
#include "sideband.h"
#include "tag.h"
#include "object.h"
#include "commit.h"
@ -33,45 +34,19 @@ static int strip(char *line, int len) @@ -33,45 +34,19 @@ static int strip(char *line, int len)
return len;
}

#define PACKET_MAX 1000
static ssize_t send_client_data(int fd, const char *data, ssize_t sz)
{
ssize_t ssz;
const char *p;

if (!data) {
if (!use_sideband)
return 0;
packet_flush(1);
}

if (!use_sideband) {
if (fd == 3)
/* emergency quit */
fd = 2;
if (fd == 2) {
xwrite(fd, data, sz);
return sz;
}
return safe_write(fd, data, sz);
}
p = data;
ssz = sz;
while (sz) {
unsigned n;
char hdr[5];

n = sz;
if (PACKET_MAX - 5 < n)
n = PACKET_MAX - 5;
sprintf(hdr, "%04x", n + 5);
hdr[4] = fd;
safe_write(1, hdr, 5);
safe_write(1, p, n);
p += n;
sz -= n;
if (use_sideband)
return send_sideband(1, fd, data, sz, DEFAULT_PACKET_MAX);

if (fd == 3)
/* emergency quit */
fd = 2;
if (fd == 2) {
xwrite(fd, data, sz);
return sz;
}
return ssz;
return safe_write(fd, data, sz);
}

static void create_pack_file(void)
@ -308,7 +283,8 @@ static void create_pack_file(void) @@ -308,7 +283,8 @@ static void create_pack_file(void)
goto fail;
fprintf(stderr, "flushed.\n");
}
send_client_data(1, NULL, 0);
if (use_sideband)
packet_flush(1);
return;
}
fail:

Loading…
Cancel
Save