Browse Source

peer: add peer_fail helper.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ppa-0.6.1
Rusty Russell 9 years ago
parent
commit
1ed4dbde05
  1. 33
      daemon/peer.c
  2. 3
      daemon/peer.h

33
daemon/peer.c

@ -352,15 +352,20 @@ static struct io_plan *peer_close(struct io_conn *conn, struct peer *peer)
return io_wait(conn, NULL, io_never, NULL); return io_wait(conn, NULL, io_never, NULL);
} }
void peer_fail(struct peer *peer, const char *caller)
{
/* FIXME: Save state here? */
set_peer_state(peer, STATE_ERR_BREAKDOWN, caller, false);
peer_breakdown(peer);
}
/* Communication failed: send err (if non-NULL), then dump to chain and close. */ /* Communication failed: send err (if non-NULL), then dump to chain and close. */
static bool peer_comms_err(struct peer *peer, Pkt *err) static bool peer_comms_err(struct peer *peer, Pkt *err)
{ {
if (err) if (err)
queue_pkt_err(peer, err); queue_pkt_err(peer, err);
/* FIXME: Save state here? */ peer_fail(peer, __func__);
set_peer_state(peer, STATE_ERR_BREAKDOWN, __func__, false);
peer_breakdown(peer);
return false; return false;
} }
@ -1552,9 +1557,7 @@ static void state_single(struct peer *peer,
if (!db_start_transaction(peer) if (!db_start_transaction(peer)
|| !db_update_state(peer) || !db_update_state(peer)
|| !db_commit_transaction(peer)) { || !db_commit_transaction(peer)) {
set_peer_state(peer, STATE_ERR_BREAKDOWN, __func__, peer_fail(peer, __func__);
false);
peer_breakdown(peer);
/* Start output if not running already; it will close conn. */ /* Start output if not running already; it will close conn. */
io_wake(peer); io_wake(peer);
@ -2258,8 +2261,7 @@ static void do_commit(struct peer *peer, struct command *jsoncmd)
database_error: database_error:
db_abort_transaction(peer); db_abort_transaction(peer);
set_peer_state(peer, STATE_ERR_BREAKDOWN, __func__, false); peer_fail(peer, __func__);
peer_breakdown(peer);
} }
/* FIXME: don't spin on this timer if we're not connected! */ /* FIXME: don't spin on this timer if we're not connected! */
@ -2961,10 +2963,8 @@ static void check_htlc_expiry(struct peer *peer)
if (!state_is_normal(peer->state)) if (!state_is_normal(peer->state))
return; return;
if (any_deadline_past(peer)) { if (any_deadline_past(peer))
set_peer_state(peer, STATE_ERR_BREAKDOWN, __func__, false); peer_fail(peer, __func__);
peer_breakdown(peer);
}
} }
static enum watch_result anchor_depthchange(struct peer *peer, static enum watch_result anchor_depthchange(struct peer *peer,
@ -3004,8 +3004,7 @@ static enum watch_result anchor_depthchange(struct peer *peer,
log_broken(peer->log, "fee rate %"PRIu64" lower than %"PRIu64, log_broken(peer->log, "fee rate %"PRIu64" lower than %"PRIu64,
peer->local.commit->cstate->fee_rate, peer->local.commit->cstate->fee_rate,
get_feerate(peer->dstate)); get_feerate(peer->dstate));
set_peer_state(peer, STATE_ERR_BREAKDOWN, __func__, false); peer_fail(peer, __func__);
peer_breakdown(peer);
} }
return KEEP_WATCHING; return KEEP_WATCHING;
@ -4136,8 +4135,7 @@ static void try_reconnect(struct peer *peer)
if (fd < 0) { if (fd < 0) {
log_broken(peer->log, "do_reconnect: failed to create socket: %s", log_broken(peer->log, "do_reconnect: failed to create socket: %s",
strerror(errno)); strerror(errno));
set_peer_state(peer, STATE_ERR_BREAKDOWN, "do_reconnect", false); peer_fail(peer, __func__);
peer_breakdown(peer);
return; return;
} }
@ -4717,8 +4715,7 @@ static void json_disconnect(struct command *cmd,
log_debug(peer->log, "Pretending connection is closed"); log_debug(peer->log, "Pretending connection is closed");
peer->fake_close = true; peer->fake_close = true;
peer->connected = false; peer->connected = false;
set_peer_state(peer, STATE_ERR_BREAKDOWN, "json_disconnect", false); peer_fail(peer, __func__);
peer_breakdown(peer);
command_success(cmd, null_response(cmd)); command_success(cmd, null_response(cmd));
} }

3
daemon/peer.h

@ -280,6 +280,9 @@ const char *command_htlc_add(struct peer *peer, u64 msatoshis,
void peer_unexpected_pkt(struct peer *peer, const Pkt *pkt, const char *where); void peer_unexpected_pkt(struct peer *peer, const Pkt *pkt, const char *where);
/* Peer has an issue, breakdown and fail. */
void peer_fail(struct peer *peer, const char *caller);
/* Peer has completed open, or problem (if non-NULL). */ /* Peer has completed open, or problem (if non-NULL). */
void peer_open_complete(struct peer *peer, const char *problem); void peer_open_complete(struct peer *peer, const char *problem);

Loading…
Cancel
Save