pespin has uploaded this change for review.

View Change

server: Split buffer read from full msg handling

This also simplifies follow-up patches modifying the way we read
packets through osmo_stream.

Change-Id: Ie7b8af0edbccc83812a44c6bfd61c98fbc3df324
---
M src/osmo_server_network.c
1 file changed, 35 insertions(+), 26 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-pcap refs/changes/23/39323/1
diff --git a/src/osmo_server_network.c b/src/osmo_server_network.c
index 8f9d528..778566d 100644
--- a/src/osmo_server_network.c
+++ b/src/osmo_server_network.c
@@ -253,6 +253,40 @@
return 1;
}

+/* Read segment payload, of size data->len.
+ * returns >0 on success, <= 0 on failure (closes conn) */
+static int rx_link(struct osmo_pcap_conn *conn, const struct osmo_pcap_data *data)
+{
+ int rc;
+
+ /* count the full packet we got */
+ rate_ctr_inc2(conn->ctrg, PEER_CTR_PKTS);
+ rate_ctr_inc2(conn->server->ctrg, SERVER_CTR_PKTS);
+
+ /* count the bytes of it */
+ rate_ctr_add2(conn->ctrg, PEER_CTR_BYTES, data->len);
+ rate_ctr_add2(conn->server->ctrg, SERVER_CTR_BYTES, data->len);
+
+ switch (conn->data->type) {
+ case PKT_LINK_HDR:
+ rc = rx_link_hdr(conn, conn->data);
+ break;
+ case PKT_LINK_DATA:
+ rc = rx_link_data(conn, conn->data);
+ break;
+ default:
+ OSMO_ASSERT(0);
+ }
+
+ if (conn->reopen_delayed) {
+ LOGP(DSERVER, LOGL_INFO, "Reopening log for %s now.\n", conn->name);
+ osmo_pcap_conn_restart_trace(conn);
+ conn->reopen_delayed = false;
+ }
+
+ return rc;
+}
+
static int do_read_tls(struct osmo_pcap_conn *conn, void *buf, size_t want_size)
{
size_t size = want_size;
@@ -328,32 +362,7 @@
conn->state = STATE_INITIAL;
conn->pend = sizeof(*conn->data);

- /* count the full packet we got */
- rate_ctr_inc2(conn->ctrg, PEER_CTR_PKTS);
- rate_ctr_inc2(conn->server->ctrg, SERVER_CTR_PKTS);
-
- /* count the bytes of it */
- rate_ctr_add2(conn->ctrg, PEER_CTR_BYTES, conn->data->len);
- rate_ctr_add2(conn->server->ctrg, SERVER_CTR_BYTES, conn->data->len);
-
- switch (conn->data->type) {
- case PKT_LINK_HDR:
- rc = rx_link_hdr(conn, conn->data);
- break;
- case PKT_LINK_DATA:
- rc = rx_link_data(conn, conn->data);
- break;
- default:
- OSMO_ASSERT(0);
- }
-
- if (conn->reopen_delayed) {
- LOGP(DSERVER, LOGL_INFO, "Reopening log for %s now.\n", conn->name);
- osmo_pcap_conn_restart_trace(conn);
- conn->reopen_delayed = false;
- }
-
- return rc;
+ return rx_link(conn, conn->data);
}

/* returns >0 on success, <= 0 on failure (closes conn) */

To view, visit change 39323. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: osmo-pcap
Gerrit-Branch: master
Gerrit-Change-Id: Ie7b8af0edbccc83812a44c6bfd61c98fbc3df324
Gerrit-Change-Number: 39323
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin@sysmocom.de>