diff options
-rw-r--r-- | src/testbed/testbed_api.c | 3 | ||||
-rw-r--r-- | src/testbed/testbed_api_peers.c | 53 | ||||
-rw-r--r-- | src/testbed/testbed_api_peers.h | 35 |
3 files changed, 91 insertions, 0 deletions
diff --git a/src/testbed/testbed_api.c b/src/testbed/testbed_api.c index 7011e6506..0c891b447 100644 --- a/src/testbed/testbed_api.c +++ b/src/testbed/testbed_api.c | |||
@@ -258,6 +258,7 @@ handle_opsuccess (struct GNUNET_TESTBED_Controller *c, | |||
258 | struct GNUNET_TESTBED_Peer *peer; | 258 | struct GNUNET_TESTBED_Peer *peer; |
259 | 259 | ||
260 | peer = opc->data; | 260 | peer = opc->data; |
261 | GNUNET_TESTBED_peer_deregister_ (peer); | ||
261 | GNUNET_free (peer); | 262 | GNUNET_free (peer); |
262 | opc->data = NULL; | 263 | opc->data = NULL; |
263 | //PEERDESTROYDATA | 264 | //PEERDESTROYDATA |
@@ -270,6 +271,7 @@ handle_opsuccess (struct GNUNET_TESTBED_Controller *c, | |||
270 | data = opc->data; | 271 | data = opc->data; |
271 | GNUNET_free (data); /* FIXME: Decide whether we call data->op_cb */ | 272 | GNUNET_free (data); /* FIXME: Decide whether we call data->op_cb */ |
272 | opc->data = NULL; | 273 | opc->data = NULL; |
274 | GNUNET_TESTBED_cleanup_peers_ (); | ||
273 | } | 275 | } |
274 | break; | 276 | break; |
275 | default: | 277 | default: |
@@ -330,6 +332,7 @@ handle_peer_create_success (struct GNUNET_TESTBED_Controller *c, | |||
330 | peer = data->peer; | 332 | peer = data->peer; |
331 | GNUNET_assert (peer->unique_id == ntohl (msg->peer_id)); | 333 | GNUNET_assert (peer->unique_id == ntohl (msg->peer_id)); |
332 | peer->state = PS_CREATED; | 334 | peer->state = PS_CREATED; |
335 | GNUNET_TESTBED_peer_register_ (peer); | ||
333 | cb = data->cb; | 336 | cb = data->cb; |
334 | cls = data->cls; | 337 | cls = data->cls; |
335 | GNUNET_free (opc->data); | 338 | GNUNET_free (opc->data); |
diff --git a/src/testbed/testbed_api_peers.c b/src/testbed/testbed_api_peers.c index 39e4b596a..9ad8366f2 100644 --- a/src/testbed/testbed_api_peers.c +++ b/src/testbed/testbed_api_peers.c | |||
@@ -33,6 +33,59 @@ | |||
33 | #include "testbed_api_hosts.h" | 33 | #include "testbed_api_hosts.h" |
34 | #include "testbed_api_operations.h" | 34 | #include "testbed_api_operations.h" |
35 | 35 | ||
36 | |||
37 | /** | ||
38 | * Peer list DLL head | ||
39 | */ | ||
40 | static struct GNUNET_TESTBED_Peer *peer_list_head; | ||
41 | |||
42 | /** | ||
43 | * Peer list DLL tail | ||
44 | */ | ||
45 | static struct GNUNET_TESTBED_Peer *peer_list_tail; | ||
46 | |||
47 | |||
48 | /** | ||
49 | * Adds a peer to the peer list | ||
50 | * | ||
51 | * @param peer the peer to add to the peer list | ||
52 | */ | ||
53 | void | ||
54 | GNUNET_TESTBED_peer_register_ (struct GNUNET_TESTBED_Peer *peer) | ||
55 | { | ||
56 | GNUNET_CONTAINER_DLL_insert_tail (peer_list_head, peer_list_tail, peer); | ||
57 | } | ||
58 | |||
59 | |||
60 | /** | ||
61 | * Removes a peer from the peer list | ||
62 | * | ||
63 | * @param peer the peer to remove | ||
64 | */ | ||
65 | void | ||
66 | GNUNET_TESTBED_peer_deregister_ (struct GNUNET_TESTBED_Peer *peer) | ||
67 | { | ||
68 | GNUNET_CONTAINER_DLL_remove (peer_list_head, peer_list_tail, peer); | ||
69 | } | ||
70 | |||
71 | |||
72 | /** | ||
73 | * Frees all peers | ||
74 | */ | ||
75 | void | ||
76 | GNUNET_TESTBED_cleanup_peers_ (void) | ||
77 | { | ||
78 | struct GNUNET_TESTBED_Peer *peer; | ||
79 | |||
80 | while (NULL != (peer = peer_list_head)) | ||
81 | { | ||
82 | GNUNET_TESTBED_peer_deregister_ (peer); | ||
83 | GNUNET_free (peer); | ||
84 | } | ||
85 | } | ||
86 | |||
87 | |||
88 | |||
36 | /** | 89 | /** |
37 | * Function to call to start a peer_create type operation once all | 90 | * Function to call to start a peer_create type operation once all |
38 | * queues the operation is part of declare that the | 91 | * queues the operation is part of declare that the |
diff --git a/src/testbed/testbed_api_peers.h b/src/testbed/testbed_api_peers.h index 8598cc177..49f875607 100644 --- a/src/testbed/testbed_api_peers.h +++ b/src/testbed/testbed_api_peers.h | |||
@@ -66,6 +66,16 @@ enum PeerState | |||
66 | struct GNUNET_TESTBED_Peer | 66 | struct GNUNET_TESTBED_Peer |
67 | { | 67 | { |
68 | /** | 68 | /** |
69 | * peer list DLL | ||
70 | */ | ||
71 | struct GNUNET_TESTBED_Peer *next; | ||
72 | |||
73 | /** | ||
74 | * peer list DLL | ||
75 | */ | ||
76 | struct GNUNET_TESTBED_Peer *prev; | ||
77 | |||
78 | /** | ||
69 | * Our controller context (not necessarily the controller | 79 | * Our controller context (not necessarily the controller |
70 | * that is responsible for starting/running the peer!). | 80 | * that is responsible for starting/running the peer!). |
71 | */ | 81 | */ |
@@ -248,5 +258,30 @@ struct GNUNET_TESTBED_PeerGetConfigurationMessage * | |||
248 | GNUNET_TESTBED_generate_peergetconfig_msg_ (uint32_t peer_id, | 258 | GNUNET_TESTBED_generate_peergetconfig_msg_ (uint32_t peer_id, |
249 | uint64_t operation_id); | 259 | uint64_t operation_id); |
250 | 260 | ||
261 | |||
262 | /** | ||
263 | * Adds a peer to the peer list | ||
264 | * | ||
265 | * @param peer the peer to add to the peer list | ||
266 | */ | ||
267 | void | ||
268 | GNUNET_TESTBED_peer_register_ (struct GNUNET_TESTBED_Peer *peer); | ||
269 | |||
270 | |||
271 | /** | ||
272 | * Removes a peer from the peer list | ||
273 | * | ||
274 | * @param peer the peer to remove | ||
275 | */ | ||
276 | void | ||
277 | GNUNET_TESTBED_peer_deregister_ (struct GNUNET_TESTBED_Peer *peer); | ||
278 | |||
279 | |||
280 | /** | ||
281 | * Frees all peers | ||
282 | */ | ||
283 | void | ||
284 | GNUNET_TESTBED_cleanup_peers_ (void); | ||
285 | |||
251 | #endif | 286 | #endif |
252 | /* end of testbed_api_peers.h */ | 287 | /* end of testbed_api_peers.h */ |