@@ -121,7 +121,7 @@ struct daemon {
121
121
struct list_head connecting ;
122
122
123
123
/* Connection to main daemon. */
124
- struct daemon_conn master ;
124
+ struct daemon_conn * master ;
125
125
126
126
/* Local and global features to offer to peers. */
127
127
u8 * localfeatures , * globalfeatures ;
@@ -372,7 +372,7 @@ static struct io_plan *peer_reconnected(struct io_conn *conn,
372
372
373
373
/* Tell master to kill it: will send peer_disconnect */
374
374
msg = towire_connect_reconnected (NULL , id );
375
- daemon_conn_send (& daemon -> master , take (msg ));
375
+ daemon_conn_send (daemon -> master , take (msg ));
376
376
377
377
/* Save arguments for next time. */
378
378
r = tal (daemon , struct peer_reconnected );
@@ -425,10 +425,10 @@ struct io_plan *peer_connected(struct io_conn *conn,
425
425
/*~ daemon_conn is a message queue for inter-daemon communication: we
426
426
* queue up the `connect_peer_connected` message to tell lightningd
427
427
* we have connected, and give the the peer and gossip fds. */
428
- daemon_conn_send (& daemon -> master , peer_connected_msg );
428
+ daemon_conn_send (daemon -> master , peer_connected_msg );
429
429
/* io_conn_fd() extracts the fd from ccan/io's io_conn */
430
- daemon_conn_send_fd (& daemon -> master , io_conn_fd (conn ));
431
- daemon_conn_send_fd (& daemon -> master , gossip_fd );
430
+ daemon_conn_send_fd (daemon -> master , io_conn_fd (conn ));
431
+ daemon_conn_send_fd (daemon -> master , gossip_fd );
432
432
433
433
/*~ Finally, we add it to the set of pubkeys: tal_dup will handle
434
434
* take() args for us, by simply tal_steal()ing it. */
@@ -550,7 +550,7 @@ static void PRINTF_FMT(5,6)
550
550
* asking. */
551
551
msg = towire_connectctl_connect_failed (NULL , id , err , wait_seconds ,
552
552
addrhint );
553
- daemon_conn_send (& daemon -> master , take (msg ));
553
+ daemon_conn_send (daemon -> master , take (msg ));
554
554
555
555
status_trace ("Failed connected out for %s: %s" ,
556
556
type_to_string (tmpctx , struct pubkey , id ),
@@ -1080,9 +1080,9 @@ static struct wireaddr_internal *setup_listeners(const tal_t *ctx,
1080
1080
/*~ Parse the incoming connect init message from lightningd ("master") and
1081
1081
* assign config variables to the daemon; it should be the first message we
1082
1082
* get. */
1083
- static struct io_plan * connect_init (struct daemon_conn * master ,
1084
- struct daemon * daemon ,
1085
- const u8 * msg )
1083
+ static struct io_plan * connect_init (struct io_conn * conn ,
1084
+ struct daemon * daemon ,
1085
+ const u8 * msg )
1086
1086
{
1087
1087
struct wireaddr * proxyaddr ;
1088
1088
struct wireaddr_internal * binding ;
@@ -1127,19 +1127,19 @@ static struct io_plan *connect_init(struct daemon_conn *master,
1127
1127
& announcable );
1128
1128
1129
1129
/* Tell it we're ready, handing it the addresses we have. */
1130
- daemon_conn_send (& daemon -> master ,
1130
+ daemon_conn_send (daemon -> master ,
1131
1131
take (towire_connectctl_init_reply (NULL ,
1132
1132
binding ,
1133
1133
announcable )));
1134
1134
1135
1135
/* Read the next message. */
1136
- return daemon_conn_read_next (master -> conn , master );
1136
+ return daemon_conn_read_next (conn , daemon -> master );
1137
1137
}
1138
1138
1139
1139
/*~ lightningd tells us to go! */
1140
- static struct io_plan * connect_activate (struct daemon_conn * master ,
1141
- struct daemon * daemon ,
1142
- const u8 * msg )
1140
+ static struct io_plan * connect_activate (struct io_conn * conn ,
1141
+ struct daemon * daemon ,
1142
+ const u8 * msg )
1143
1143
{
1144
1144
bool do_listen ;
1145
1145
@@ -1166,9 +1166,9 @@ static struct io_plan *connect_activate(struct daemon_conn *master,
1166
1166
daemon -> listen_fds = tal_free (daemon -> listen_fds );
1167
1167
1168
1168
/* OK, we're ready! */
1169
- daemon_conn_send (& daemon -> master ,
1169
+ daemon_conn_send (daemon -> master ,
1170
1170
take (towire_connectctl_activate_reply (NULL )));
1171
- return daemon_conn_read_next (master -> conn , master );
1171
+ return daemon_conn_read_next (conn , daemon -> master );
1172
1172
}
1173
1173
1174
1174
/*~ This is where we'd put a BOLT #10 reference, but it doesn't exist :( */
@@ -1334,7 +1334,7 @@ static struct io_plan *connect_to_peer(struct io_conn *conn,
1334
1334
master_badmsg (WIRE_CONNECTCTL_CONNECT_TO_PEER , msg );
1335
1335
1336
1336
try_connect_peer (daemon , & id , seconds_waited , addrhint );
1337
- return daemon_conn_read_next (conn , & daemon -> master );
1337
+ return daemon_conn_read_next (conn , daemon -> master );
1338
1338
}
1339
1339
1340
1340
/* lightningd tells us a peer has disconnected. */
@@ -1362,28 +1362,29 @@ static struct io_plan *peer_disconnected(struct io_conn *conn,
1362
1362
tal_free (key );
1363
1363
1364
1364
/* Read the next message from lightningd. */
1365
- return daemon_conn_read_next (conn , & daemon -> master );
1365
+ return daemon_conn_read_next (conn , daemon -> master );
1366
1366
}
1367
1367
1368
- static struct io_plan * recv_req (struct io_conn * conn , struct daemon_conn * master )
1368
+ static struct io_plan * recv_req (struct io_conn * conn ,
1369
+ const u8 * msg ,
1370
+ struct daemon * daemon )
1369
1371
{
1370
- struct daemon * daemon = container_of (master , struct daemon , master );
1371
- enum connect_wire_type t = fromwire_peektype (master -> msg_in );
1372
+ enum connect_wire_type t = fromwire_peektype (msg );
1372
1373
1373
1374
/* Demux requests from lightningd: we expect INIT then ACTIVATE, then
1374
1375
* connect requests and disconnected messages. */
1375
1376
switch (t ) {
1376
1377
case WIRE_CONNECTCTL_INIT :
1377
- return connect_init (master , daemon , master -> msg_in );
1378
+ return connect_init (conn , daemon , msg );
1378
1379
1379
1380
case WIRE_CONNECTCTL_ACTIVATE :
1380
- return connect_activate (master , daemon , master -> msg_in );
1381
+ return connect_activate (conn , daemon , msg );
1381
1382
1382
1383
case WIRE_CONNECTCTL_CONNECT_TO_PEER :
1383
- return connect_to_peer (conn , daemon , master -> msg_in );
1384
+ return connect_to_peer (conn , daemon , msg );
1384
1385
1385
1386
case WIRE_CONNECTCTL_PEER_DISCONNECTED :
1386
- return peer_disconnected (conn , daemon , master -> msg_in );
1387
+ return peer_disconnected (conn , daemon , msg );
1387
1388
1388
1389
/* We send these, we don't receive them */
1389
1390
case WIRE_CONNECTCTL_INIT_REPLY :
@@ -1396,7 +1397,7 @@ static struct io_plan *recv_req(struct io_conn *conn, struct daemon_conn *master
1396
1397
1397
1398
/* Master shouldn't give bad requests. */
1398
1399
status_failed (STATUS_FAIL_MASTER_IO , "%i: %s" ,
1399
- t , tal_hex (tmpctx , master -> msg_in ));
1400
+ t , tal_hex (tmpctx , msg ));
1400
1401
}
1401
1402
1402
1403
/*~ Helper for handshake.c: we ask `hsmd` to do the ECDH to get the shared
@@ -1424,8 +1425,7 @@ bool hsm_do_ecdh(struct secret *ss, const struct pubkey *point)
1424
1425
*
1425
1426
* The C++ method of omitting unused parameter names is *much* neater, and I
1426
1427
* hope we'll eventually see it in a C standard. */
1427
- static void master_gone (struct io_conn * unused UNUSED ,
1428
- struct daemon * daemon UNUSED )
1428
+ static void master_gone (struct daemon_conn * master UNUSED )
1429
1429
{
1430
1430
/* Can't tell master, it's gone. */
1431
1431
exit (2 );
@@ -1446,12 +1446,13 @@ int main(int argc, char *argv[])
1446
1446
list_head_init (& daemon -> connecting );
1447
1447
daemon -> listen_fds = tal_arr (daemon , struct listen_fd , 0 );
1448
1448
/* stdin == control */
1449
- daemon_conn_init (daemon , & daemon -> master , STDIN_FILENO , recv_req );
1450
- io_set_finish (daemon -> master .conn , master_gone , daemon );
1449
+ daemon -> master = daemon_conn_new (daemon , STDIN_FILENO , recv_req , NULL ,
1450
+ daemon );
1451
+ tal_add_destructor (daemon -> master , master_gone );
1451
1452
1452
1453
/* This tells the status_* subsystem to use this connection to send
1453
1454
* our status_ and failed messages. */
1454
- status_setup_async (& daemon -> master );
1455
+ status_setup_async (daemon -> master );
1455
1456
1456
1457
/* Should never exit. */
1457
1458
io_loop (NULL , NULL );
0 commit comments