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 }