|  | @@ -152,7 +152,8 @@ cell_unpack(cell_t *dest, const char *src)
 | 
	
		
			
				|  |  |    memcpy(dest->payload, src+3, CELL_PAYLOAD_SIZE);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/** DOCDOC */
 | 
	
		
			
				|  |  | +/** Write the header of <b>cell</b> into the first VAR_CELL_HEADER_SIZE
 | 
	
		
			
				|  |  | + * bytes of <b>hdr_out</b>. */
 | 
	
		
			
				|  |  |  void
 | 
	
		
			
				|  |  |  var_cell_pack_header(const var_cell_t *cell, char *hdr_out)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -161,7 +162,8 @@ var_cell_pack_header(const var_cell_t *cell, char *hdr_out)
 | 
	
		
			
				|  |  |    set_uint16(hdr_out+3, htons(cell->payload_len));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/* DOCDOC*/
 | 
	
		
			
				|  |  | +/** Allocate and return a new var_cell_t with <b>payload_len</b> bytes of
 | 
	
		
			
				|  |  | + * payload space. */
 | 
	
		
			
				|  |  |  var_cell_t *
 | 
	
		
			
				|  |  |  var_cell_new(uint16_t payload_len)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -172,7 +174,7 @@ var_cell_new(uint16_t payload_len)
 | 
	
		
			
				|  |  |    return cell;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/** DOCDOC */
 | 
	
		
			
				|  |  | +/** Release all space held by <b>cell</b> */
 | 
	
		
			
				|  |  |  void
 | 
	
		
			
				|  |  |  var_cell_free(var_cell_t *cell)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -579,13 +581,17 @@ connection_tls_start_handshake(or_connection_t *conn, int receiving)
 | 
	
		
			
				|  |  |    return 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/*DOCDOC*/
 | 
	
		
			
				|  |  | +/** Invoked on the server side from inside tor_tls_read() when the server
 | 
	
		
			
				|  |  | + * gets a successful TLS renegotiation from the client. */
 | 
	
		
			
				|  |  |  static void
 | 
	
		
			
				|  |  |  connection_or_tls_renegotiated_cb(tor_tls_t *tls, void *_conn)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    or_connection_t *conn = _conn;
 | 
	
		
			
				|  |  |    (void)tls;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  /* Don't invoke this again. */
 | 
	
		
			
				|  |  | +  tor_tls_set_renegotiate_callback(tls, NULL, NULL);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    if (connection_tls_finish_handshake(conn) < 0) {
 | 
	
		
			
				|  |  |      /* XXXX_TLS double-check that it's ok to do this from inside read. */
 | 
	
		
			
				|  |  |      /* XXXX_TLS double-check that this verifies certificates. */
 | 
	
	
		
			
				|  | @@ -937,7 +943,10 @@ connection_or_write_cell_to_buf(const cell_t *cell, or_connection_t *conn)
 | 
	
		
			
				|  |  |      conn->timestamp_last_added_nonpadding = time(NULL);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/**DOCDOC*/
 | 
	
		
			
				|  |  | +/** Pack a variable-length <b>cell</b> into wire-format, and write it onto
 | 
	
		
			
				|  |  | + * <b>conn</b>'s outbuf.  Right now, this <em>DOES NOT</em> support cells that
 | 
	
		
			
				|  |  | + * affect a circuit.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  |  void
 | 
	
		
			
				|  |  |  connection_or_write_var_cell_to_buf(const var_cell_t *cell,
 | 
	
		
			
				|  |  |                                      or_connection_t *conn)
 | 
	
	
		
			
				|  | @@ -952,11 +961,12 @@ connection_or_write_var_cell_to_buf(const var_cell_t *cell,
 | 
	
		
			
				|  |  |      conn->timestamp_last_added_nonpadding = time(NULL);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/** DOCDOC */
 | 
	
		
			
				|  |  | +/** See whether there's a variable-length cell waiting on <b>conn</b>'s
 | 
	
		
			
				|  |  | + * inbuf.  Return values as for fetch_var_cell_from_buf(). */
 | 
	
		
			
				|  |  |  static int
 | 
	
		
			
				|  |  |  connection_fetch_var_cell_from_buf(or_connection_t *conn, var_cell_t **out)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -  return fetch_var_cell_from_buf(conn->_base.inbuf, out);
 | 
	
		
			
				|  |  | +  return fetch_var_cell_from_buf(conn->_base.inbuf, out, conn->link_proto);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /** Process cells from <b>conn</b>'s inbuf.
 | 
	
	
		
			
				|  | @@ -1026,12 +1036,14 @@ connection_or_send_destroy(uint16_t circ_id, or_connection_t *conn, int reason)
 | 
	
		
			
				|  |  |    return 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/**DOCDOC*/
 | 
	
		
			
				|  |  | +/** Array of recognized link protocol versions. */
 | 
	
		
			
				|  |  |  static const uint16_t or_protocol_versions[] = { 1, 2 };
 | 
	
		
			
				|  |  | +/** Number of versions in <b>or_protocol_versions</b>. */
 | 
	
		
			
				|  |  |  static const int n_or_protocol_versions =
 | 
	
		
			
				|  |  |    sizeof(or_protocol_versions)/sizeof(uint16_t);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/**DOCDOC*/
 | 
	
		
			
				|  |  | +/** Return true iff <b>v</b> is a link protocol version that this Tor
 | 
	
		
			
				|  |  | + * implementation believes it can support. */
 | 
	
		
			
				|  |  |  int
 | 
	
		
			
				|  |  |  is_or_protocol_version_known(uint16_t v)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -1043,7 +1055,8 @@ is_or_protocol_version_known(uint16_t v)
 | 
	
		
			
				|  |  |    return 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/** DOCDOC */
 | 
	
		
			
				|  |  | +/** Send a VERSIONS cell on <b>conn</b>, telling the other host about the
 | 
	
		
			
				|  |  | + * link protocol versions that this Tor can support. */
 | 
	
		
			
				|  |  |  static int
 | 
	
		
			
				|  |  |  connection_or_send_versions(or_connection_t *conn)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -1065,7 +1078,8 @@ connection_or_send_versions(or_connection_t *conn)
 | 
	
		
			
				|  |  |    return 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/** DOCDOC */
 | 
	
		
			
				|  |  | +/** Send a NETINFO cell on <b>conn</b>, telling the other server what we know
 | 
	
		
			
				|  |  | + * about their address, our address, and the current time. */
 | 
	
		
			
				|  |  |  int
 | 
	
		
			
				|  |  |  connection_or_send_netinfo(or_connection_t *conn)
 | 
	
		
			
				|  |  |  {
 |