pkt: add the comment type This is needed for smart HTTP Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
diff --git a/src/pkt.c b/src/pkt.c
index f97246a..48daeaf 100644
--- a/src/pkt.c
+++ b/src/pkt.c
@@ -98,6 +98,23 @@ static int pack_pkt(git_pkt **out)
return GIT_SUCCESS;
}
+static int comment_pkt(git_pkt **out, const char *line, size_t len)
+{
+ git_pkt_comment *pkt;
+
+ pkt = git__malloc(sizeof(git_pkt_comment) + len + 1);
+ if (pkt == NULL)
+ return GIT_ENOMEM;
+
+ pkt->type = GIT_PKT_COMMENT;
+ memcpy(pkt->comment, line, len);
+ pkt->comment[len] = '\0';
+
+ *out = (git_pkt *) pkt;
+
+ return GIT_SUCCESS;
+}
+
/*
* Parse an other-ref line.
*/
@@ -242,6 +259,8 @@ int git_pkt_parse_line(git_pkt **head, const char *line, const char **out, size_
error = ack_pkt(head, line, len);
else if (!git__prefixcmp(line, "NAK"))
error = nak_pkt(head);
+ else if (*line == '#')
+ error = comment_pkt(head, line, len);
else
error = ref_pkt(head, line, len);
diff --git a/src/pkt.h b/src/pkt.h
index 1c6a206..cee3ceb 100644
--- a/src/pkt.h
+++ b/src/pkt.h
@@ -38,6 +38,7 @@ enum git_pkt_type {
GIT_PKT_ACK,
GIT_PKT_NAK,
GIT_PKT_PACK,
+ GIT_PKT_COMMENT,
};
/* Used for multi-ack */
@@ -74,6 +75,11 @@ typedef struct {
enum git_ack_status status;
} git_pkt_ack;
+typedef struct {
+ enum git_pkt_type type;
+ char comment[GIT_FLEX_ARRAY];
+} git_pkt_comment;
+
int git_pkt_parse_line(git_pkt **head, const char *line, const char **out, size_t len);
int git_pkt_send_flush(int s);
int git_pkt_send_done(int s);