]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
create a separate connection_edge_destroy() function
authorRoger Dingledine <arma@torproject.org>
Sun, 29 Feb 2004 00:11:37 +0000 (00:11 +0000)
committerRoger Dingledine <arma@torproject.org>
Sun, 29 Feb 2004 00:11:37 +0000 (00:11 +0000)
svn:r1176

src/or/circuit.c
src/or/connection.c
src/or/connection_edge.c
src/or/or.h

index f4d8bf8955c62e58c81ba82f9fbe07daf7b39e71..ae2e77b8c6b7134dab8cdd5e8b44a762bdf3ee38 100644 (file)
@@ -661,12 +661,12 @@ void circuit_close(circuit_t *circ) {
   if(circ->n_conn)
     connection_send_destroy(circ->n_circ_id, circ->n_conn);
   for(conn=circ->n_streams; conn; conn=conn->next_stream) {
-    connection_send_destroy(circ->n_circ_id, conn);
+    connection_edge_destroy(circ->n_circ_id, conn);
   }
   if(circ->p_conn)
     connection_send_destroy(circ->n_circ_id, circ->p_conn);
   for(conn=circ->p_streams; conn; conn=conn->next_stream) {
-    connection_send_destroy(circ->p_circ_id, conn);
+    connection_edge_destroy(circ->p_circ_id, conn);
   }
   if (circ->state == CIRCUIT_STATE_BUILDING ||
       circ->state == CIRCUIT_STATE_OR_WAIT) {
index 1ebc65aadd16dc8edf82e42aefbf4a3551d43bc5..700c056fbc242218a3d3cd49e5875597c97ba03f 100644 (file)
@@ -752,17 +752,7 @@ int connection_send_destroy(uint16_t circ_id, connection_t *conn) {
   cell_t cell;
 
   assert(conn);
-
-  if(!connection_speaks_cells(conn)) {
-     log_fn(LOG_INFO,"CircID %d: At an edge. Marking connection for close.",
-            circ_id);
-     conn->has_sent_end = 1; /* we're closing the circuit, nothing to send to */
-/* XXX really, we should separate this function into two functions.
- * one of them actually sends the destroy cell, as this function's name
- * implies, and another one destroys a stream. Yes/no? -RD */
-     connection_mark_for_close(conn, END_STREAM_REASON_DESTROY);
-     return 0;
-  }
+  assert(connection_speaks_cells(conn));
 
   memset(&cell, 0, sizeof(cell_t));
   cell.circ_id = circ_id;
index b159c194b20794153c8ff14025027417cf3cab43..9c245044f8de5a3138fd661f3618fc15fa57486b 100644 (file)
@@ -88,6 +88,16 @@ int connection_edge_process_inbuf(connection_t *conn) {
   return -1;
 }
 
+int connection_edge_destroy(uint16_t circ_id, connection_t *conn) {
+  assert(conn->type == CONN_TYPE_AP || conn->type == CONN_TYPE_EXIT);
+
+  log_fn(LOG_INFO,"CircID %d: At an edge. Marking connection for close.",
+         circ_id);
+  conn->has_sent_end = 1; /* we're closing the circuit, nothing to send to */
+  connection_mark_for_close(conn, END_STREAM_REASON_DESTROY);
+  return 0;
+}
+
 static char *connection_edge_end_reason(char *payload, uint16_t length) {
   if(length < 1) {
     log_fn(LOG_WARN,"End cell arrived with length 0. Should be at least 1.");
index c8433bdf4c1d1c17ed15bbcdf763ba44ed5a1409..dc513f99e9e5ff0bfa212e0657c54922f91163db 100644 (file)
@@ -698,6 +698,7 @@ void assert_connection_ok(connection_t *conn, time_t now);
 void relay_header_pack(char *dest, const relay_header_t *src);
 void relay_header_unpack(relay_header_t *dest, const char *src);
 int connection_edge_process_inbuf(connection_t *conn);
+int connection_edge_destroy(uint16_t circ_id, connection_t *conn);
 int connection_edge_end(connection_t *conn, char reason, crypt_path_t *cpath_layer);
 
 int connection_edge_send_command(connection_t *fromconn, circuit_t *circ, int relay_command,