github.com/decred/dcrlnd@v0.7.6/htlcswitch/failure_detail.go (about)

     1  package htlcswitch
     2  
     3  // FailureDetail is an interface implemented by failures that occur on
     4  // our incoming or outgoing link, or within the switch itself.
     5  type FailureDetail interface {
     6  	// FailureString returns the string representation of a failure
     7  	// detail.
     8  	FailureString() string
     9  }
    10  
    11  // OutgoingFailure is an enum which is used to enrich failures which occur in
    12  // the switch or on our outgoing link with additional metadata.
    13  type OutgoingFailure int
    14  
    15  const (
    16  	// OutgoingFailureNone is returned when the wire message contains
    17  	// sufficient information.
    18  	OutgoingFailureNone OutgoingFailure = iota
    19  
    20  	// OutgoingFailureDecodeError indicates that we could not decode the
    21  	// failure reason provided for a failed payment.
    22  	OutgoingFailureDecodeError
    23  
    24  	// OutgoingFailureLinkNotEligible indicates that a routing attempt was
    25  	// made over a link that is not eligible for routing.
    26  	OutgoingFailureLinkNotEligible
    27  
    28  	// OutgoingFailureOnChainTimeout indicates that a payment had to be
    29  	// timed out on chain before it got past the first hop by us or the
    30  	// remote party.
    31  	OutgoingFailureOnChainTimeout
    32  
    33  	// OutgoingFailureHTLCExceedsMax is returned when a htlc exceeds our
    34  	// policy's maximum htlc amount.
    35  	OutgoingFailureHTLCExceedsMax
    36  
    37  	// OutgoingFailureInsufficientBalance is returned when we cannot route a
    38  	// htlc due to insufficient outgoing capacity.
    39  	OutgoingFailureInsufficientBalance
    40  
    41  	// OutgoingFailureCircularRoute is returned when an attempt is made
    42  	// to forward a htlc through our node which arrives and leaves on the
    43  	// same channel.
    44  	OutgoingFailureCircularRoute
    45  
    46  	// OutgoingFailureIncompleteForward is returned when we cancel an incomplete
    47  	// forward.
    48  	OutgoingFailureIncompleteForward
    49  
    50  	// OutgoingFailureDownstreamHtlcAdd is returned when we fail to add a
    51  	// downstream htlc to our outgoing link.
    52  	OutgoingFailureDownstreamHtlcAdd
    53  
    54  	// OutgoingFailureForwardsDisabled is returned when the switch is
    55  	// configured to disallow forwards.
    56  	OutgoingFailureForwardsDisabled
    57  )
    58  
    59  // FailureString returns the string representation of a failure detail.
    60  //
    61  // Note: it is part of the FailureDetail interface.
    62  func (fd OutgoingFailure) FailureString() string {
    63  	switch fd {
    64  	case OutgoingFailureNone:
    65  		return "no failure detail"
    66  
    67  	case OutgoingFailureDecodeError:
    68  		return "could not decode wire failure"
    69  
    70  	case OutgoingFailureLinkNotEligible:
    71  		return "link not eligible"
    72  
    73  	case OutgoingFailureOnChainTimeout:
    74  		return "payment was resolved on-chain, then canceled back"
    75  
    76  	case OutgoingFailureHTLCExceedsMax:
    77  		return "htlc exceeds maximum policy amount"
    78  
    79  	case OutgoingFailureInsufficientBalance:
    80  		return "insufficient bandwidth to route htlc"
    81  
    82  	case OutgoingFailureCircularRoute:
    83  		return "same incoming and outgoing channel"
    84  
    85  	case OutgoingFailureIncompleteForward:
    86  		return "failed after detecting incomplete forward"
    87  
    88  	case OutgoingFailureDownstreamHtlcAdd:
    89  		return "could not add downstream htlc"
    90  
    91  	case OutgoingFailureForwardsDisabled:
    92  		return "node configured to disallow forwards"
    93  
    94  	default:
    95  		return "unknown failure detail"
    96  	}
    97  }