]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pkt-line: define PACKET_READ_RESPONSE_END
authorDenton Liu <liu.denton@gmail.com>
Tue, 19 May 2020 10:53:59 +0000 (06:53 -0400)
committerJunio C Hamano <gitster@pobox.com>
Sun, 24 May 2020 23:26:00 +0000 (16:26 -0700)
In a future commit, we will use PACKET_READ_RESPONSE_END to separate
messages proxied by remote-curl. To prepare for this, add the
PACKET_READ_RESPONSE_END enum value.

In switch statements that need a case added, die() or BUG() when a
PACKET_READ_RESPONSE_END is unexpected. Otherwise, mirror how
PACKET_READ_DELIM is implemented (especially in cases where packets are
being forwarded).

Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
connect.c
pkt-line.c
pkt-line.h
remote-curl.c
serve.c
t/helper/test-pkt-line.c

index 23013c634436adeeac65bd5e6a0d895a06fe6fe6..11c6ec70a0c5718e11bd265b29bda75a0d13d672 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -127,6 +127,7 @@ enum protocol_version discover_version(struct packet_reader *reader)
                die_initial_contact(0);
        case PACKET_READ_FLUSH:
        case PACKET_READ_DELIM:
+       case PACKET_READ_RESPONSE_END:
                version = protocol_v0;
                break;
        case PACKET_READ_NORMAL:
@@ -310,6 +311,7 @@ struct ref **get_remote_heads(struct packet_reader *reader,
                        state = EXPECTING_DONE;
                        break;
                case PACKET_READ_DELIM:
+               case PACKET_READ_RESPONSE_END:
                        die(_("invalid packet"));
                }
 
index 3beab1dc6b9847543e6e85af0c4c40ca2c816d59..8f9bc68ee28ef46b2cd221a46a2049bf8a633511 100644 (file)
@@ -99,6 +99,13 @@ void packet_delim(int fd)
                die_errno(_("unable to write delim packet"));
 }
 
+void packet_response_end(int fd)
+{
+       packet_trace("0002", 4, 1);
+       if (write_in_full(fd, "0002", 4) < 0)
+               die_errno(_("unable to write stateless separator packet"));
+}
+
 int packet_flush_gently(int fd)
 {
        packet_trace("0000", 4, 1);
@@ -337,6 +344,10 @@ enum packet_read_status packet_read_with_status(int fd, char **src_buffer,
                packet_trace("0001", 4, 0);
                *pktlen = 0;
                return PACKET_READ_DELIM;
+       } else if (len == 2) {
+               packet_trace("0002", 4, 0);
+               *pktlen = 0;
+               return PACKET_READ_RESPONSE_END;
        } else if (len < 4) {
                die(_("protocol error: bad line length %d"), len);
        }
index a72af9112ba1ce270a6dbff5ccf601830ce41757..5b373fe4cdaae2d1446fb86d4fb0762aaac764f5 100644 (file)
@@ -22,6 +22,7 @@
  */
 void packet_flush(int fd);
 void packet_delim(int fd);
+void packet_response_end(int fd);
 void packet_write_fmt(int fd, const char *fmt, ...) __attribute__((format (printf, 2, 3)));
 void packet_buf_flush(struct strbuf *buf);
 void packet_buf_delim(struct strbuf *buf);
@@ -94,6 +95,7 @@ enum packet_read_status {
        PACKET_READ_NORMAL,
        PACKET_READ_FLUSH,
        PACKET_READ_DELIM,
+       PACKET_READ_RESPONSE_END,
 };
 enum packet_read_status packet_read_with_status(int fd, char **src_buffer,
                                                size_t *src_len, char *buffer,
index e020140092dc5680601a191a603ec5dacb6bf5ea..d02cb547e97ee5fef3a1b1af3280ec40bc656d45 100644 (file)
@@ -601,6 +601,8 @@ static int rpc_read_from_out(struct rpc_state *rpc, int options,
                case PACKET_READ_FLUSH:
                        memcpy(buf - 4, "0000", 4);
                        break;
+               case PACKET_READ_RESPONSE_END:
+                       die(_("remote server sent stateless separator"));
                }
        }
 
diff --git a/serve.c b/serve.c
index 317256c1a493c4b2cc730a6212add4d1ef5696d4..c046926ba141c76fc2a6b6fb1db80e31c1c28e8c 100644 (file)
--- a/serve.c
+++ b/serve.c
@@ -217,6 +217,8 @@ static int process_request(void)
 
                        state = PROCESS_REQUEST_DONE;
                        break;
+               case PACKET_READ_RESPONSE_END:
+                       BUG("unexpected stateless separator packet");
                }
        }
 
index 12ca698e17a1d556bf345355495849b452b79330..69152958e58eafea73264b1edb99e729613c6843 100644 (file)
@@ -46,6 +46,9 @@ static void unpack(void)
                case PACKET_READ_DELIM:
                        printf("0001\n");
                        break;
+               case PACKET_READ_RESPONSE_END:
+                       printf("0002\n");
+                       break;
                }
        }
 }
@@ -75,6 +78,7 @@ static void unpack_sideband(void)
                case PACKET_READ_FLUSH:
                        return;
                case PACKET_READ_DELIM:
+               case PACKET_READ_RESPONSE_END:
                        break;
                }
        }