aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cadet/gnunet-service-cadet_core.c39
-rw-r--r--src/cadet/gnunet-service-cadet_tunnels.c3
-rw-r--r--src/fs/gnunet-service-fs_cadet_client.c4
-rw-r--r--src/include/gnunet_mq_lib.h17
-rw-r--r--src/pt/gnunet-daemon-pt.c1
-rw-r--r--src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c5
-rw-r--r--src/scalarproduct/gnunet-service-scalarproduct_alice.c5
-rw-r--r--src/set/gnunet-service-set.c3
-rw-r--r--src/vpn/gnunet-service-vpn.c3
9 files changed, 51 insertions, 29 deletions
diff --git a/src/cadet/gnunet-service-cadet_core.c b/src/cadet/gnunet-service-cadet_core.c
index c5d2f195a..220a2b3cd 100644
--- a/src/cadet/gnunet-service-cadet_core.c
+++ b/src/cadet/gnunet-service-cadet_core.c
@@ -39,7 +39,6 @@
39#include "gnunet_statistics_service.h" 39#include "gnunet_statistics_service.h"
40#include "cadet_protocol.h" 40#include "cadet_protocol.h"
41 41
42
43#define LOG(level, ...) GNUNET_log_from(level,"cadet-cor",__VA_ARGS__) 42#define LOG(level, ...) GNUNET_log_from(level,"cadet-cor",__VA_ARGS__)
44 43
45/** 44/**
@@ -47,7 +46,6 @@
47 */ 46 */
48struct RouteDirection; 47struct RouteDirection;
49 48
50
51/** 49/**
52 * Set of CadetRoutes that have exactly the same number of messages 50 * Set of CadetRoutes that have exactly the same number of messages
53 * in their buffer. Used so we can efficiently find all of those 51 * in their buffer. Used so we can efficiently find all of those
@@ -346,7 +344,8 @@ discard_all_from_rung_tail ()
346static void 344static void
347route_message (struct CadetPeer *prev, 345route_message (struct CadetPeer *prev,
348 const struct GNUNET_CADET_ConnectionTunnelIdentifier *cid, 346 const struct GNUNET_CADET_ConnectionTunnelIdentifier *cid,
349 const struct GNUNET_MessageHeader *msg) 347 const struct GNUNET_MessageHeader *msg,
348 const enum GNUNET_MQ_PriorityPreferences priority)
350{ 349{
351 struct CadetRoute *route; 350 struct CadetRoute *route;
352 struct RouteDirection *dir; 351 struct RouteDirection *dir;
@@ -399,7 +398,7 @@ route_message (struct CadetPeer *prev,
399 } 398 }
400 /* Check if buffering is disallowed, and if so, make sure we only queue 399 /* Check if buffering is disallowed, and if so, make sure we only queue
401 one message per direction. */ 400 one message per direction. */
402 if ( (0 != (route->options & GNUNET_CADET_OPTION_NOBUFFER)) && 401 if ( (0 != (priority & GNUNET_MQ_PREF_NO_BUFFER)) &&
403 (NULL != dir->env_head) ) 402 (NULL != dir->env_head) )
404 discard_buffer (dir, 403 discard_buffer (dir,
405 dir->env_head); 404 dir->env_head);
@@ -793,9 +792,7 @@ handle_connection_create (void *cls,
793 uint16_t size = ntohs (msg->header.size) - sizeof (*msg); 792 uint16_t size = ntohs (msg->header.size) - sizeof (*msg);
794 unsigned int path_length; 793 unsigned int path_length;
795 unsigned int off; 794 unsigned int off;
796 enum GNUNET_CADET_ChannelOption options;
797 795
798 options = (enum GNUNET_CADET_ChannelOption) ntohl (msg->options);
799 path_length = size / sizeof (struct GNUNET_PeerIdentity); 796 path_length = size / sizeof (struct GNUNET_PeerIdentity);
800 if (0 == path_length) 797 if (0 == path_length)
801 { 798 {
@@ -869,7 +866,8 @@ handle_connection_create (void *cls,
869 GNUNET_sh2s (&msg->cid.connection_of_tunnel)); 866 GNUNET_sh2s (&msg->cid.connection_of_tunnel));
870 route_message (sender, 867 route_message (sender,
871 &msg->cid, 868 &msg->cid,
872 &msg->header); 869 &msg->header,
870 GNUNET_MQ_PRIO_CRITICAL_CONTROL);
873 return; 871 return;
874 } 872 }
875 if (off == path_length - 1) 873 if (off == path_length - 1)
@@ -901,7 +899,6 @@ handle_connection_create (void *cls,
901 GCT_add_inbound_connection (GCP_get_tunnel (origin, 899 GCT_add_inbound_connection (GCP_get_tunnel (origin,
902 GNUNET_YES), 900 GNUNET_YES),
903 &msg->cid, 901 &msg->cid,
904 (enum GNUNET_CADET_ChannelOption) ntohl (msg->options),
905 path)) 902 path))
906 { 903 {
907 /* Send back BROKEN: duplicate connection on the same path, 904 /* Send back BROKEN: duplicate connection on the same path,
@@ -956,7 +953,6 @@ handle_connection_create (void *cls,
956 GNUNET_i2s (&pids[off + 1]), 953 GNUNET_i2s (&pids[off + 1]),
957 off + 1); 954 off + 1);
958 route = GNUNET_new (struct CadetRoute); 955 route = GNUNET_new (struct CadetRoute);
959 route->options = options;
960 route->cid = msg->cid; 956 route->cid = msg->cid;
961 route->last_use = GNUNET_TIME_absolute_get (); 957 route->last_use = GNUNET_TIME_absolute_get ();
962 dir_init (&route->prev, 958 dir_init (&route->prev,
@@ -985,7 +981,8 @@ handle_connection_create (void *cls,
985 /* also pass CREATE message along to next hop */ 981 /* also pass CREATE message along to next hop */
986 route_message (sender, 982 route_message (sender,
987 &msg->cid, 983 &msg->cid,
988 &msg->header); 984 &msg->header,
985 GNUNET_MQ_PRIO_CRITICAL_CONTROL);
989} 986}
990 987
991 988
@@ -1029,7 +1026,8 @@ handle_connection_create_ack (void *cls,
1029 /* We're just an intermediary peer, route the message along its path */ 1026 /* We're just an intermediary peer, route the message along its path */
1030 route_message (peer, 1027 route_message (peer,
1031 &msg->cid, 1028 &msg->cid,
1032 &msg->header); 1029 &msg->header,
1030 GNUNET_MQ_PRIO_CRITICAL_CONTROL);
1033} 1031}
1034 1032
1035 1033
@@ -1077,7 +1075,8 @@ handle_connection_broken (void *cls,
1077 /* We're just an intermediary peer, route the message along its path */ 1075 /* We're just an intermediary peer, route the message along its path */
1078 route_message (peer, 1076 route_message (peer,
1079 &msg->cid, 1077 &msg->cid,
1080 &msg->header); 1078 &msg->header,
1079 GNUNET_MQ_PREF_NO_BUFFER);
1081 route = get_route (&msg->cid); 1080 route = get_route (&msg->cid);
1082 if (NULL != route) 1081 if (NULL != route)
1083 destroy_route (route); 1082 destroy_route (route);
@@ -1130,7 +1129,8 @@ handle_connection_destroy (void *cls,
1130 GNUNET_sh2s (&msg->cid.connection_of_tunnel)); 1129 GNUNET_sh2s (&msg->cid.connection_of_tunnel));
1131 route_message (peer, 1130 route_message (peer,
1132 &msg->cid, 1131 &msg->cid,
1133 &msg->header); 1132 &msg->header,
1133 GNUNET_MQ_PREF_NO_BUFFER);
1134 route = get_route (&msg->cid); 1134 route = get_route (&msg->cid);
1135 if (NULL != route) 1135 if (NULL != route)
1136 destroy_route (route); 1136 destroy_route (route);
@@ -1181,7 +1181,8 @@ handle_tunnel_kx (void *cls,
1181 /* We're just an intermediary peer, route the message along its path */ 1181 /* We're just an intermediary peer, route the message along its path */
1182 route_message (peer, 1182 route_message (peer,
1183 &msg->cid, 1183 &msg->cid,
1184 &msg->header); 1184 &msg->header,
1185 GNUNET_MQ_PRIO_CRITICAL_CONTROL);
1185} 1186}
1186 1187
1187 1188
@@ -1223,7 +1224,8 @@ handle_tunnel_kx_auth (void *cls,
1223 /* We're just an intermediary peer, route the message along its path */ 1224 /* We're just an intermediary peer, route the message along its path */
1224 route_message (peer, 1225 route_message (peer,
1225 &msg->kx.cid, 1226 &msg->kx.cid,
1226 &msg->kx.header); 1227 &msg->kx.header,
1228 GNUNET_MQ_PRIO_CRITICAL_CONTROL);
1227} 1229}
1228 1230
1229 1231
@@ -1280,7 +1282,8 @@ handle_tunnel_encrypted (void *cls,
1280 /* We're just an intermediary peer, route the message along its path */ 1282 /* We're just an intermediary peer, route the message along its path */
1281 route_message (peer, 1283 route_message (peer,
1282 &msg->cid, 1284 &msg->cid,
1283 &msg->header); 1285 &msg->header,
1286 GNUNET_MQ_PRIO_CRITICAL_CONTROL);
1284} 1287}
1285 1288
1286 1289
@@ -1401,13 +1404,13 @@ GCO_init (const struct GNUNET_CONFIGURATION_Handle *c)
1401 "CADET", 1404 "CADET",
1402 "MAX_ROUTES", 1405 "MAX_ROUTES",
1403 &max_routes)) 1406 &max_routes))
1404 max_routes = 5000; 1407 max_routes = 5000;
1405 if (GNUNET_OK != 1408 if (GNUNET_OK !=
1406 GNUNET_CONFIGURATION_get_value_number (c, 1409 GNUNET_CONFIGURATION_get_value_number (c,
1407 "CADET", 1410 "CADET",
1408 "MAX_MSGS_QUEUE", 1411 "MAX_MSGS_QUEUE",
1409 &max_buffers)) 1412 &max_buffers))
1410 max_buffers = 10000; 1413 max_buffers = 10000;
1411 routes = GNUNET_CONTAINER_multishortmap_create (1024, 1414 routes = GNUNET_CONTAINER_multishortmap_create (1024,
1412 GNUNET_NO); 1415 GNUNET_NO);
1413 route_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); 1416 route_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
diff --git a/src/cadet/gnunet-service-cadet_tunnels.c b/src/cadet/gnunet-service-cadet_tunnels.c
index a2a493ebd..11be2bce0 100644
--- a/src/cadet/gnunet-service-cadet_tunnels.c
+++ b/src/cadet/gnunet-service-cadet_tunnels.c
@@ -2731,7 +2731,6 @@ consider_path_cb (void *cls,
2731 ct->cc = GCC_create (t->destination, 2731 ct->cc = GCC_create (t->destination,
2732 path, 2732 path,
2733 off, 2733 off,
2734 GNUNET_CADET_OPTION_DEFAULT, /* FIXME: set based on what channels want/need! */
2735 ct, 2734 ct,
2736 &connection_ready_cb, 2735 &connection_ready_cb,
2737 ct); 2736 ct);
@@ -3204,7 +3203,6 @@ GCT_create_tunnel (struct CadetPeer *destination)
3204int 3203int
3205GCT_add_inbound_connection (struct CadetTunnel *t, 3204GCT_add_inbound_connection (struct CadetTunnel *t,
3206 const struct GNUNET_CADET_ConnectionTunnelIdentifier *cid, 3205 const struct GNUNET_CADET_ConnectionTunnelIdentifier *cid,
3207 enum GNUNET_CADET_ChannelOption options,
3208 struct CadetPeerPath *path) 3206 struct CadetPeerPath *path)
3209{ 3207{
3210 struct CadetTConnection *ct; 3208 struct CadetTConnection *ct;
@@ -3214,7 +3212,6 @@ GCT_add_inbound_connection (struct CadetTunnel *t,
3214 ct->t = t; 3212 ct->t = t;
3215 ct->cc = GCC_create_inbound (t->destination, 3213 ct->cc = GCC_create_inbound (t->destination,
3216 path, 3214 path,
3217 options,
3218 ct, 3215 ct,
3219 cid, 3216 cid,
3220 &connection_ready_cb, 3217 &connection_ready_cb,
diff --git a/src/fs/gnunet-service-fs_cadet_client.c b/src/fs/gnunet-service-fs_cadet_client.c
index 9ba250dfa..9f654849d 100644
--- a/src/fs/gnunet-service-fs_cadet_client.c
+++ b/src/fs/gnunet-service-fs_cadet_client.c
@@ -494,7 +494,6 @@ reset_cadet (struct CadetHandle *mh)
494 mh, 494 mh,
495 &mh->target, 495 &mh->target,
496 &port, 496 &port,
497 GNUNET_CADET_OPTION_RELIABLE,
498 &window_change_cb, 497 &window_change_cb,
499 &disconnect_cb, 498 &disconnect_cb,
500 handlers); 499 handlers);
@@ -572,6 +571,8 @@ transmit_pending (void *cls)
572 GNUNET_i2s (&mh->target)); 571 GNUNET_i2s (&mh->target));
573 env = GNUNET_MQ_msg (sqm, 572 env = GNUNET_MQ_msg (sqm,
574 GNUNET_MESSAGE_TYPE_FS_CADET_QUERY); 573 GNUNET_MESSAGE_TYPE_FS_CADET_QUERY);
574 GNUNET_MQ_env_set_options(env,
575 GNUNET_MQ_PREF_RELIABLE);
575 sqm->type = htonl (sr->type); 576 sqm->type = htonl (sr->type);
576 sqm->query = sr->query; 577 sqm->query = sr->query;
577 GNUNET_MQ_notify_sent (env, 578 GNUNET_MQ_notify_sent (env,
@@ -634,7 +635,6 @@ get_cadet (const struct GNUNET_PeerIdentity *target)
634 mh, 635 mh,
635 &mh->target, 636 &mh->target,
636 &port, 637 &port,
637 GNUNET_CADET_OPTION_RELIABLE,
638 &window_change_cb, 638 &window_change_cb,
639 &disconnect_cb, 639 &disconnect_cb,
640 handlers); 640 handlers);
diff --git a/src/include/gnunet_mq_lib.h b/src/include/gnunet_mq_lib.h
index 81100d7d8..d3f4c9717 100644
--- a/src/include/gnunet_mq_lib.h
+++ b/src/include/gnunet_mq_lib.h
@@ -296,7 +296,22 @@ enum GNUNET_MQ_PriorityPreferences
296 /** 296 /**
297 * Flag to indicate that out-of-order delivery is OK. 297 * Flag to indicate that out-of-order delivery is OK.
298 */ 298 */
299 GNUNET_MQ_PREF_OUT_OF_ORDER = 256 299 GNUNET_MQ_PREF_OUT_OF_ORDER = 256,
300
301 /**
302 * Flag to indicate no buffering.
303 */
304 GNUNET_MQ_PREF_NO_BUFFER = 512,
305
306 /**
307 * Flag to indicate default
308 */
309 GNUNET_MQ_PREF_DEFAULT = 1024,
310
311 /**
312 * Flag to indicate reliable
313 */
314 GNUNET_MQ_PREF_RELIABLE = 2048
300 315
301}; 316};
302 317
diff --git a/src/pt/gnunet-daemon-pt.c b/src/pt/gnunet-daemon-pt.c
index cd17c2b7b..99cbfebf8 100644
--- a/src/pt/gnunet-daemon-pt.c
+++ b/src/pt/gnunet-daemon-pt.c
@@ -1088,7 +1088,6 @@ try_open_exit ()
1088 pos, 1088 pos,
1089 &pos->peer, 1089 &pos->peer,
1090 &port, 1090 &port,
1091 GNUNET_CADET_OPTION_DEFAULT,
1092 &channel_idle_notify_cb, 1091 &channel_idle_notify_cb,
1093 &cadet_channel_end_cb, 1092 &cadet_channel_end_cb,
1094 cadet_handlers); 1093 cadet_handlers);
diff --git a/src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c b/src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
index 4b1a09e50..123a02188 100644
--- a/src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
+++ b/src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
@@ -634,6 +634,8 @@ send_alices_cryptodata_message (struct AliceServiceSession *s)
634 e = GNUNET_MQ_msg_extra (msg, 634 e = GNUNET_MQ_msg_extra (msg,
635 todo_count * 2 * sizeof (struct GNUNET_CRYPTO_EccPoint), 635 todo_count * 2 * sizeof (struct GNUNET_CRYPTO_EccPoint),
636 GNUNET_MESSAGE_TYPE_SCALARPRODUCT_ECC_ALICE_CRYPTODATA); 636 GNUNET_MESSAGE_TYPE_SCALARPRODUCT_ECC_ALICE_CRYPTODATA);
637 GNUNET_MQ_env_set_options(e,
638 GNUNET_MQ_PREF_RELIABLE);
637 msg->contained_element_count = htonl (todo_count); 639 msg->contained_element_count = htonl (todo_count);
638 payload = (struct GNUNET_CRYPTO_EccPoint *) &msg[1]; 640 payload = (struct GNUNET_CRYPTO_EccPoint *) &msg[1];
639 r_ia = gcry_mpi_new (0); 641 r_ia = gcry_mpi_new (0);
@@ -837,7 +839,6 @@ client_request_complete_alice (struct AliceServiceSession *s)
837 s, 839 s,
838 &s->peer, 840 &s->peer,
839 &s->session_id, 841 &s->session_id,
840 GNUNET_CADET_OPTION_RELIABLE,
841 NULL, 842 NULL,
842 &cb_channel_destruction, 843 &cb_channel_destruction,
843 cadet_handlers); 844 cadet_handlers);
@@ -865,6 +866,8 @@ client_request_complete_alice (struct AliceServiceSession *s)
865 866
866 e = GNUNET_MQ_msg (msg, 867 e = GNUNET_MQ_msg (msg,
867 GNUNET_MESSAGE_TYPE_SCALARPRODUCT_ECC_SESSION_INITIALIZATION); 868 GNUNET_MESSAGE_TYPE_SCALARPRODUCT_ECC_SESSION_INITIALIZATION);
869 GNUNET_MQ_env_set_options(e,
870 GNUNET_MQ_PREF_RELIABLE);
868 msg->session_id = s->session_id; 871 msg->session_id = s->session_id;
869 GNUNET_MQ_send (s->cadet_mq, 872 GNUNET_MQ_send (s->cadet_mq,
870 e); 873 e);
diff --git a/src/scalarproduct/gnunet-service-scalarproduct_alice.c b/src/scalarproduct/gnunet-service-scalarproduct_alice.c
index 393a1951b..18c5cc49a 100644
--- a/src/scalarproduct/gnunet-service-scalarproduct_alice.c
+++ b/src/scalarproduct/gnunet-service-scalarproduct_alice.c
@@ -893,6 +893,8 @@ send_alices_cryptodata_message (struct AliceServiceSession *s)
893 e = GNUNET_MQ_msg_extra (msg, 893 e = GNUNET_MQ_msg_extra (msg,
894 todo_count * sizeof (struct GNUNET_CRYPTO_PaillierCiphertext), 894 todo_count * sizeof (struct GNUNET_CRYPTO_PaillierCiphertext),
895 GNUNET_MESSAGE_TYPE_SCALARPRODUCT_ALICE_CRYPTODATA); 895 GNUNET_MESSAGE_TYPE_SCALARPRODUCT_ALICE_CRYPTODATA);
896 GNUNET_MQ_env_set_options(e,
897 GNUNET_MQ_PREF_RELIABLE);
896 msg->contained_element_count = htonl (todo_count); 898 msg->contained_element_count = htonl (todo_count);
897 payload = (struct GNUNET_CRYPTO_PaillierCiphertext *) &msg[1]; 899 payload = (struct GNUNET_CRYPTO_PaillierCiphertext *) &msg[1];
898 a = gcry_mpi_new (0); 900 a = gcry_mpi_new (0);
@@ -1073,7 +1075,6 @@ client_request_complete_alice (struct AliceServiceSession *s)
1073 s, 1075 s,
1074 &s->peer, 1076 &s->peer,
1075 &s->session_id, 1077 &s->session_id,
1076 GNUNET_CADET_OPTION_RELIABLE,
1077 NULL, 1078 NULL,
1078 &cb_channel_destruction, 1079 &cb_channel_destruction,
1079 cadet_handlers); 1080 cadet_handlers);
@@ -1101,6 +1102,8 @@ client_request_complete_alice (struct AliceServiceSession *s)
1101 1102
1102 e = GNUNET_MQ_msg (msg, 1103 e = GNUNET_MQ_msg (msg,
1103 GNUNET_MESSAGE_TYPE_SCALARPRODUCT_SESSION_INITIALIZATION); 1104 GNUNET_MESSAGE_TYPE_SCALARPRODUCT_SESSION_INITIALIZATION);
1105 GNUNET_MQ_env_set_options(e,
1106 GNUNET_MQ_PREF_RELIABLE);
1104 msg->session_id = s->session_id; 1107 msg->session_id = s->session_id;
1105 msg->public_key = my_pubkey; 1108 msg->public_key = my_pubkey;
1106 GNUNET_MQ_send (s->cadet_mq, 1109 GNUNET_MQ_send (s->cadet_mq,
diff --git a/src/set/gnunet-service-set.c b/src/set/gnunet-service-set.c
index 71f74594f..f1d94bef7 100644
--- a/src/set/gnunet-service-set.c
+++ b/src/set/gnunet-service-set.c
@@ -741,6 +741,8 @@ handle_incoming_msg (void *cls,
741 env = GNUNET_MQ_msg_nested_mh (cmsg, 741 env = GNUNET_MQ_msg_nested_mh (cmsg,
742 GNUNET_MESSAGE_TYPE_SET_REQUEST, 742 GNUNET_MESSAGE_TYPE_SET_REQUEST,
743 op->context_msg); 743 op->context_msg);
744 GNUNET_MQ_env_set_options(env,
745 GNUNET_MQ_PREF_RELIABLE);
744 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 746 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
745 "Suggesting incoming request with accept id %u to listener %p of client %p\n", 747 "Suggesting incoming request with accept id %u to listener %p of client %p\n",
746 op->suggest_id, 748 op->suggest_id,
@@ -1628,7 +1630,6 @@ handle_client_evaluate (void *cls,
1628 op, 1630 op,
1629 &msg->target_peer, 1631 &msg->target_peer,
1630 &msg->app_id, 1632 &msg->app_id,
1631 GNUNET_CADET_OPTION_RELIABLE,
1632 &channel_window_cb, 1633 &channel_window_cb,
1633 &channel_end_cb, 1634 &channel_end_cb,
1634 cadet_handlers); 1635 cadet_handlers);
diff --git a/src/vpn/gnunet-service-vpn.c b/src/vpn/gnunet-service-vpn.c
index 91bc13fd8..7bd26798e 100644
--- a/src/vpn/gnunet-service-vpn.c
+++ b/src/vpn/gnunet-service-vpn.c
@@ -589,6 +589,8 @@ send_to_channel (struct ChannelState *ts,
589 589
590 GNUNET_assert (NULL != ts->channel); 590 GNUNET_assert (NULL != ts->channel);
591 mq = GNUNET_CADET_get_mq (ts->channel); 591 mq = GNUNET_CADET_get_mq (ts->channel);
592 GNUNET_MQ_env_set_options(env,
593 GNUNET_MQ_PREF_DEFAULT);
592 GNUNET_MQ_send (mq, 594 GNUNET_MQ_send (mq,
593 env); 595 env);
594 if (GNUNET_MQ_get_length (mq) > MAX_MESSAGE_QUEUE_SIZE) 596 if (GNUNET_MQ_get_length (mq) > MAX_MESSAGE_QUEUE_SIZE)
@@ -1388,7 +1390,6 @@ create_channel (struct ChannelState *ts,
1388 ts, 1390 ts,
1389 target, 1391 target,
1390 port, 1392 port,
1391 GNUNET_CADET_OPTION_DEFAULT,
1392 NULL, 1393 NULL,
1393 &channel_cleaner, 1394 &channel_cleaner,
1394 cadet_handlers); 1395 cadet_handlers);