]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
sendme: Helper to know if next cell is a SENDME
authorDavid Goulet <dgoulet@torproject.org>
Wed, 24 Apr 2019 14:25:29 +0000 (10:25 -0400)
committerDavid Goulet <dgoulet@torproject.org>
Mon, 29 Apr 2019 16:17:57 +0000 (12:17 -0400)
We'll use it this in order to know when to hash the cell for the SENDME
instead of doing it at every cell.

Part of #26288

Signed-off-by: David Goulet <dgoulet@torproject.org>
src/core/or/sendme.c
src/core/or/sendme.h

index 3dcd9df08ececb368efa586f66975a8c60583478..c66e947bc441863800947230f042bff4ebd7fa0d 100644 (file)
@@ -286,6 +286,29 @@ send_circuit_level_sendme(circuit_t *circ, crypt_path_t *layer_hint,
   return 0;
 }
 
+/*
+ * Public API
+ */
+
+/** Return true iff the next cell for the given cell window is expected to be
+ * a SENDME.
+ *
+ * We are able to know that because the package or deliver window value minus
+ * one cell (the possible SENDME cell) should be a multiple of the increment
+ * window value. */
+bool
+sendme_circuit_is_next_cell(int window)
+{
+  /* Is this the last cell before a SENDME? The idea is that if the package or
+   * deliver window reaches a multiple of the increment, after this cell, we
+   * should expect a SENDME. */
+  if (((window - 1) % CIRCWINDOW_INCREMENT) != 0) {
+    return false;
+  }
+  /* Next cell is expected to be a SENDME. */
+  return true;
+}
+
 /** Called when we've just received a relay data cell, when we've just
  * finished flushing all bytes to stream <b>conn</b>, or when we've flushed
  * *some* bytes to the stream <b>conn</b>.
@@ -550,7 +573,7 @@ sendme_note_cell_digest(circuit_t *circ)
   /* Is this the last cell before a SENDME? The idea is that if the
    * package_window reaches a multiple of the increment, after this cell, we
    * should expect a SENDME. */
-  if (((circ->package_window - 1) % CIRCWINDOW_INCREMENT) != 0) {
+  if (!sendme_circuit_is_next_cell(circ->package_window)) {
     return;
   }
 
index 71df9b6f07ec66af4465905ed6a15019fc924dc5..0965b5b22a304f6a27a1d4f479d53858d2275ff3 100644 (file)
@@ -37,6 +37,9 @@ int sendme_note_stream_data_packaged(edge_connection_t *conn);
 /* Track cell digest. */
 void sendme_note_cell_digest(circuit_t *circ);
 
+/* Circuit level information. */
+bool sendme_circuit_is_next_cell(int window);
+
 /* Private section starts. */
 #ifdef SENDME_PRIVATE