~ This is where we create a new peer. */
| 111 | |
| 112 | /*~ This is where we create a new peer. */ |
| 113 | static struct peer *new_peer(struct daemon *daemon, |
| 114 | const struct node_id *id, |
| 115 | const struct crypto_state *cs, |
| 116 | const u8 *their_features TAKES, |
| 117 | enum is_websocket is_websocket, |
| 118 | struct timemono connect_starttime, |
| 119 | struct io_conn *conn STEALS, |
| 120 | int *fd_for_subd) |
| 121 | { |
| 122 | struct peer *peer = tal(daemon, struct peer); |
| 123 | |
| 124 | peer->daemon = daemon; |
| 125 | peer->id = *id; |
| 126 | peer->connect_starttime = connect_starttime; |
| 127 | peer->counter = daemon->connection_counter++; |
| 128 | peer->cs = *cs; |
| 129 | peer->subds = tal_arr(peer, struct subd *, 0); |
| 130 | peer->peer_in = NULL; |
| 131 | peer->bytes_rcvd_this_second = 0; |
| 132 | peer->bytes_rcvd_start_time = time_mono(); |
| 133 | peer->recv_timer = NULL; |
| 134 | peer->throttle_warned = false; |
| 135 | membuf_init(&peer->encrypted_peer_out, |
| 136 | tal_arr(peer, u8, 0), 0, |
| 137 | membuf_tal_resize); |
| 138 | peer->encrypted_peer_out_sent = 0; |
| 139 | peer->nonurgent_flush_timer = NULL; |
| 140 | peer->peer_out_urgent = 0; |
| 141 | peer->flushing_nonurgent = false; |
| 142 | peer->draining_state = NOT_DRAINING; |
| 143 | peer->peer_in_lastmsg = -1; |
| 144 | peer->peer_outq = msg_queue_new(peer, false); |
| 145 | peer->last_recv_time = time_mono(); |
| 146 | peer->is_websocket = is_websocket; |
| 147 | peer->dev_writes_enabled = NULL; |
| 148 | peer->dev_read_enabled = true; |
| 149 | peer->scid_queries = NULL; |
| 150 | peer->scid_query_flags = NULL; |
| 151 | peer->scid_query_idx = 0; |
| 152 | peer->scid_query_nodes = NULL; |
| 153 | peer->scid_query_nodes_idx = 0; |
| 154 | peer->onionmsg_incoming_tokens = ONION_MSG_TOKENS_MAX; |
| 155 | peer->onionmsg_last_incoming = time_mono(); |
| 156 | peer->onionmsg_limit_warned = false; |
| 157 | peer->their_features = tal_dup_talarr(peer, u8, their_features); |
| 158 | |
| 159 | peer->to_peer = conn; |
| 160 | |
| 161 | /* Now we own it */ |
| 162 | tal_steal(peer, peer->to_peer); |
| 163 | peer_htable_add(daemon->peers, peer); |
| 164 | tal_add_destructor(peer, destroy_peer); |
| 165 | |
| 166 | return peer; |
| 167 | } |
| 168 | |
| 169 | /*~ Helper to append a wireaddr to an array if wireaddr_internal */ |
| 170 | static void append_addr(struct wireaddr_internal **wireaddrs, |
no test coverage detected