CLEANUP: peers: remove a bit of spaghetti to prepare for the next bugfix
We'll need to centralize some pool_alloc()/pool_free() calls in the
upcoming fix so before that we need to reduce the number of points
by which we leave the critical code.
diff --git a/src/peers.c b/src/peers.c
index 789fa8c..58248bb 100644
--- a/src/peers.c
+++ b/src/peers.c
@@ -600,14 +600,9 @@
int totl = 0;
reql = bo_getblk(si->ob, (char *)&c, sizeof(c), totl);
- if (reql <= 0) { /* closed or EOL not found */
- if (reql == 0) {
- /* nothing to read */
- goto incomplete;
- }
- si->applet.st0 = PEER_SESSION_END;
- goto switchstate;
- }
+ if (reql <= 0) /* closed or EOL not found */
+ goto incomplete;
+
totl += reql;
if ((c & 0x80) || (c == 'D')) {
@@ -625,13 +620,9 @@
}
else {
reql = bo_getblk(si->ob, (char *)&netinteger, sizeof(netinteger), totl);
- if (reql <= 0) { /* closed or EOL not found */
- if (reql == 0) {
- goto incomplete;
- }
- si->applet.st0 = PEER_SESSION_END;
- goto switchstate;
- }
+ if (reql <= 0) /* closed or EOL not found */
+ goto incomplete;
+
totl += reql;
pushack = ntohl(netinteger);
}
@@ -642,24 +633,16 @@
stkey.key = stkey.data.buf;
reql = bo_getblk(si->ob, (char *)&netinteger, sizeof(netinteger), totl);
- if (reql <= 0) { /* closed or EOL not found */
- if (reql == 0) {
- goto incomplete;
- }
- si->applet.st0 = PEER_SESSION_END;
- goto switchstate;
- }
+ if (reql <= 0) /* closed or EOL not found */
+ goto incomplete;
+
totl += reql;
stkey.key_len = ntohl(netinteger);
reql = bo_getblk(si->ob, stkey.key, stkey.key_len, totl);
- if (reql <= 0) { /* closed or EOL not found */
- if (reql == 0) {
- goto incomplete;
- }
- si->applet.st0 = PEER_SESSION_END;
- goto switchstate;
- }
+ if (reql <= 0) /* closed or EOL not found */
+ goto incomplete;
+
totl += reql;
}
else if (ps->table->table->type == STKTABLE_TYPE_INTEGER) {
@@ -668,13 +651,9 @@
stkey.key = &stkey.data.integer;
reql = bo_getblk(si->ob, (char *)&netinteger, sizeof(netinteger), totl);
- if (reql <= 0) { /* closed or EOL not found */
- if (reql == 0) {
- goto incomplete;
- }
- si->applet.st0 = PEER_SESSION_END;
- goto switchstate;
- }
+ if (reql <= 0) /* closed or EOL not found */
+ goto incomplete;
+
totl += reql;
stkey.data.integer = ntohl(netinteger);
}
@@ -684,26 +663,17 @@
stkey.key = stkey.data.buf;
reql = bo_getblk(si->ob, (char *)&stkey.data.buf, ps->table->table->key_size, totl);
- if (reql <= 0) { /* closed or EOL not found */
- if (reql == 0) {
- goto incomplete;
- }
- si->applet.st0 = PEER_SESSION_END;
- goto switchstate;
- }
- totl += reql;
+ if (reql <= 0) /* closed or EOL not found */
+ goto incomplete;
+ totl += reql;
}
/* read server id */
reql = bo_getblk(si->ob, (char *)&netinteger, sizeof(netinteger), totl);
- if (reql <= 0) { /* closed or EOL not found */
- if (reql == 0) {
- goto incomplete;
- }
- si->applet.st0 = PEER_SESSION_END;
- goto switchstate;
- }
+ if (reql <= 0) /* closed or EOL not found */
+ goto incomplete;
+
totl += reql;
srvid = ntohl(netinteger);
@@ -806,13 +776,9 @@
uint32_t netinteger;
reql = bo_getblk(si->ob, (char *)&netinteger, sizeof(netinteger), totl);
- if (reql <= 0) { /* closed or EOL not found */
- if (reql == 0) {
- goto incomplete;
- }
- si->applet.st0 = PEER_SESSION_END;
- goto switchstate;
- }
+ if (reql <= 0) /* closed or EOL not found */
+ goto incomplete;
+
totl += reql;
/* Consider remote is up to date with "acked" version */
@@ -828,8 +794,16 @@
bo_skip(si->ob, totl);
/* loop on that state to peek next message */
- continue;
+ goto switchstate;
+
incomplete:
+ /* we get here when a bo_getblk() returns <= 0 */
+ if (reql < 0) {
+ /* there was an error */
+ si->applet.st0 = PEER_SESSION_END;
+ goto switchstate;
+ }
+
/* Nothing to read, now we start to write */
/* Confirm finished or partial messages */