<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi all,<br>
    <br>
    I am working on integrating uTCP and uTLS (
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <a href="http://arxiv.org/abs/1103.0463">http://arxiv.org/abs/1103.0463</a>)
    into Tor to see if we can lower the latency due to head of line
    blocking across circuits. This is Tracker Item #7679 (
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <a href="https://trac.torproject.org/projects/tor/ticket/7679">https://trac.torproject.org/projects/tor/ticket/7679</a>). 
    I want to first test the Tor code's ability to process cells from
    different circuits out of order with respect to how TCP delivered
    them. To test this, I made some changes to the file named
    src/or/channel.c.<br>
    <br>
    1. I forced queueing of cells into the channel's incoming_queue
    with:<br>
    channel_queue_cell(...) {<br>
    ...<br>
    need_to_queue = 1; // Force all cells into the queue, so they do NOT
    go directly to the handler.<br>
    ...<br>
    <br>
    2. Now, look for case when two cells from different circuits are
    present in the incoming_queue and process the second cell before the
    first cell.<br>
    channel_process_cells(...) {<br>
    ...<br>
      while (NULL != (q =
    TOR_SIMPLEQ_FIRST(&chan->incoming_queue))) {<br>
        // Remove q from the incoming_queue.<br>
        // if the queue is still not empty, get the next one,<br>
        // if the circuit ids do not match, Swap the cells.<br>
      }<br>
    ...<br>
    }<br>
    <br>
    My problem is that number 2. above never occurs. I have not observed
    a case where the incoming_queue ever has two cells from different
    circuits. In fact, I don't think I've ever had a time when the
    incoming_queue has more than 1 cell in it.  I am hammering a small
    tor test network with 30+ curl requests at once. I have two proxies,
    each of them uses the same entry node, and the same exit node, and
    there is only one other node in the network, so the circuit that is
    set up should be the same for every single request.  Am I missing
    something? Will this function (channel_process_cells) ever process
    more than one cell at a time? I've checked the logs to verify that
    different circuits are actually set up for the different requests
    (rather than the Proxies just reusing the existing circuit and
    giving each new request a new stream id).<br>
    <br>
    Thanks for the help!<br>
    <br>
    Fitz<br>
  </body>
</html>