]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add cmux policy notify_set_n_cells() and notify_xmit_cells() callbacks
authorAndrea Shepard <andrea@torproject.org>
Thu, 27 Sep 2012 19:20:05 +0000 (12:20 -0700)
committerAndrea Shepard <andrea@torproject.org>
Wed, 10 Oct 2012 07:44:45 +0000 (00:44 -0700)
src/or/circuitmux.c
src/or/circuitmux.h

index 5a5739fcd95ac05f06ac809fddf957edd4fcd5a7..53d3a1ba7a68314a6c29a1f8ae9f8bc50a7a7c22 100644 (file)
@@ -995,6 +995,19 @@ circuitmux_set_num_cells(circuitmux_t *cmux, circuit_t *circ,
   cmux->n_cells -= hashent->muxinfo.cell_count;
   cmux->n_cells += n_cells;
 
+  /* Do we need to notify a cmux policy? */
+  if (cmux->policy && cmux->policy_data &&
+      cmux->policy->notify_set_n_cells) {
+    /* Yeah; assert that we have circuit policy data */
+    tor_assert(hashent->muxinfo.policy_data);
+    /* ... and call notify_set_n_cells */
+    cmux->policy->notify_set_n_cells(cmux,
+                                     cmux->policy_data,
+                                     circ,
+                                     hashent->muxinfo.policy_data,
+                                     n_cells);
+  }
+
   /*
    * Update cmux active circuit counter: is the old cell count > 0 and the
    * new cell count == 0 ?
index e344b6ed91fff0236079a20ba692c72756ab4bc7..dcacb8e15d5d275f97a525b080e51382f3357e25 100644 (file)
@@ -42,6 +42,17 @@ struct circuitmux_policy_s {
                                circuitmux_policy_data_t *pol_data,
                                circuit_t *circ,
                                circuitmux_policy_circ_data_t *pol_circ_data);
+  /* Notify of arriving/transmitted cells on a circuit */
+  void (*notify_set_n_cells)(circuitmux_t *cmux,
+                             circuitmux_policy_data_t *pol_data,
+                             circuit_t *circ,
+                             circuitmux_policy_circ_data_t *pol_circ_data,
+                             unsigned int n_cells);
+  void (*notify_xmit_cells)(circuitmux_t *cmux,
+                            circuitmux_policy_data_t *pol_data,
+                            circuit_t *circ,
+                            circuitmux_policy_circ_data_t *pol_circ_data,
+                            unsigned int n_cells);
 };
 
 /*