• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lightningnetwork / lnd / 13035292482

29 Jan 2025 03:59PM UTC coverage: 49.3% (-9.5%) from 58.777%
13035292482

Pull #9456

github

mohamedawnallah
docs: update release-notes-0.19.0.md

In this commit, we warn users about the removal
of RPCs `SendToRoute`, `SendToRouteSync`, `SendPayment`,
and `SendPaymentSync` in the next release 0.20.
Pull Request #9456: lnrpc+docs: deprecate warning `SendToRoute`, `SendToRouteSync`, `SendPayment`, and `SendPaymentSync` in Release 0.19

100634 of 204126 relevant lines covered (49.3%)

1.54 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

66.22
/graph/db/addr.go
1
package graphdb
2

3
import (
4
        "encoding/binary"
5
        "errors"
6
        "fmt"
7
        "io"
8
        "net"
9

10
        "github.com/lightningnetwork/lnd/tor"
11
)
12

13
// addressType specifies the network protocol and version that should be used
14
// when connecting to a node at a particular address.
15
type addressType uint8
16

17
const (
18
        // tcp4Addr denotes an IPv4 TCP address.
19
        tcp4Addr addressType = 0
20

21
        // tcp6Addr denotes an IPv6 TCP address.
22
        tcp6Addr addressType = 1
23

24
        // v2OnionAddr denotes a version 2 Tor onion service address.
25
        v2OnionAddr addressType = 2
26

27
        // v3OnionAddr denotes a version 3 Tor (prop224) onion service address.
28
        v3OnionAddr addressType = 3
29
)
30

31
// encodeTCPAddr serializes a TCP address into its compact raw bytes
32
// representation.
33
func encodeTCPAddr(w io.Writer, addr *net.TCPAddr) error {
3✔
34
        var (
3✔
35
                addrType byte
3✔
36
                ip       []byte
3✔
37
        )
3✔
38

3✔
39
        if addr.IP.To4() != nil {
6✔
40
                addrType = byte(tcp4Addr)
3✔
41
                ip = addr.IP.To4()
3✔
42
        } else {
6✔
43
                addrType = byte(tcp6Addr)
3✔
44
                ip = addr.IP.To16()
3✔
45
        }
3✔
46

47
        if ip == nil {
3✔
48
                return fmt.Errorf("unable to encode IP %v", addr.IP)
×
49
        }
×
50

51
        if _, err := w.Write([]byte{addrType}); err != nil {
3✔
52
                return err
×
53
        }
×
54

55
        if _, err := w.Write(ip); err != nil {
3✔
56
                return err
×
57
        }
×
58

59
        var port [2]byte
3✔
60
        byteOrder.PutUint16(port[:], uint16(addr.Port))
3✔
61
        if _, err := w.Write(port[:]); err != nil {
3✔
62
                return err
×
63
        }
×
64

65
        return nil
3✔
66
}
67

68
// encodeOnionAddr serializes an onion address into its compact raw bytes
69
// representation.
70
func encodeOnionAddr(w io.Writer, addr *tor.OnionAddr) error {
3✔
71
        var suffixIndex int
3✔
72
        hostLen := len(addr.OnionService)
3✔
73
        switch hostLen {
3✔
74
        case tor.V2Len:
3✔
75
                if _, err := w.Write([]byte{byte(v2OnionAddr)}); err != nil {
3✔
76
                        return err
×
77
                }
×
78
                suffixIndex = tor.V2Len - tor.OnionSuffixLen
3✔
79
        case tor.V3Len:
3✔
80
                if _, err := w.Write([]byte{byte(v3OnionAddr)}); err != nil {
3✔
81
                        return err
×
82
                }
×
83
                suffixIndex = tor.V3Len - tor.OnionSuffixLen
3✔
84
        default:
×
85
                return errors.New("unknown onion service length")
×
86
        }
87

88
        suffix := addr.OnionService[suffixIndex:]
3✔
89
        if suffix != tor.OnionSuffix {
3✔
90
                return fmt.Errorf("invalid suffix \"%v\"", suffix)
×
91
        }
×
92

93
        host, err := tor.Base32Encoding.DecodeString(
3✔
94
                addr.OnionService[:suffixIndex],
3✔
95
        )
3✔
96
        if err != nil {
3✔
97
                return err
×
98
        }
×
99

100
        // Sanity check the decoded length.
101
        switch {
3✔
102
        case hostLen == tor.V2Len && len(host) != tor.V2DecodedLen:
×
103
                return fmt.Errorf("onion service %v decoded to invalid host %x",
×
104
                        addr.OnionService, host)
×
105

106
        case hostLen == tor.V3Len && len(host) != tor.V3DecodedLen:
×
107
                return fmt.Errorf("onion service %v decoded to invalid host %x",
×
108
                        addr.OnionService, host)
×
109
        }
110

111
        if _, err := w.Write(host); err != nil {
3✔
112
                return err
×
113
        }
×
114

115
        var port [2]byte
3✔
116
        byteOrder.PutUint16(port[:], uint16(addr.Port))
3✔
117
        if _, err := w.Write(port[:]); err != nil {
3✔
118
                return err
×
119
        }
×
120

121
        return nil
3✔
122
}
123

124
// DeserializeAddr reads the serialized raw representation of an address and
125
// deserializes it into the actual address. This allows us to avoid address
126
// resolution within the channeldb package.
127
func DeserializeAddr(r io.Reader) (net.Addr, error) {
3✔
128
        var addrType [1]byte
3✔
129
        if _, err := r.Read(addrType[:]); err != nil {
3✔
130
                return nil, err
×
131
        }
×
132

133
        var address net.Addr
3✔
134
        switch addressType(addrType[0]) {
3✔
135
        case tcp4Addr:
3✔
136
                var ip [4]byte
3✔
137
                if _, err := r.Read(ip[:]); err != nil {
3✔
138
                        return nil, err
×
139
                }
×
140

141
                var port [2]byte
3✔
142
                if _, err := r.Read(port[:]); err != nil {
3✔
143
                        return nil, err
×
144
                }
×
145

146
                address = &net.TCPAddr{
3✔
147
                        IP:   net.IP(ip[:]),
3✔
148
                        Port: int(binary.BigEndian.Uint16(port[:])),
3✔
149
                }
3✔
150
        case tcp6Addr:
3✔
151
                var ip [16]byte
3✔
152
                if _, err := r.Read(ip[:]); err != nil {
3✔
153
                        return nil, err
×
154
                }
×
155

156
                var port [2]byte
3✔
157
                if _, err := r.Read(port[:]); err != nil {
3✔
158
                        return nil, err
×
159
                }
×
160

161
                address = &net.TCPAddr{
3✔
162
                        IP:   net.IP(ip[:]),
3✔
163
                        Port: int(binary.BigEndian.Uint16(port[:])),
3✔
164
                }
3✔
165
        case v2OnionAddr:
3✔
166
                var h [tor.V2DecodedLen]byte
3✔
167
                if _, err := r.Read(h[:]); err != nil {
3✔
168
                        return nil, err
×
169
                }
×
170

171
                var p [2]byte
3✔
172
                if _, err := r.Read(p[:]); err != nil {
3✔
173
                        return nil, err
×
174
                }
×
175

176
                onionService := tor.Base32Encoding.EncodeToString(h[:])
3✔
177
                onionService += tor.OnionSuffix
3✔
178
                port := int(binary.BigEndian.Uint16(p[:]))
3✔
179

3✔
180
                address = &tor.OnionAddr{
3✔
181
                        OnionService: onionService,
3✔
182
                        Port:         port,
3✔
183
                }
3✔
184
        case v3OnionAddr:
3✔
185
                var h [tor.V3DecodedLen]byte
3✔
186
                if _, err := r.Read(h[:]); err != nil {
3✔
187
                        return nil, err
×
188
                }
×
189

190
                var p [2]byte
3✔
191
                if _, err := r.Read(p[:]); err != nil {
3✔
192
                        return nil, err
×
193
                }
×
194

195
                onionService := tor.Base32Encoding.EncodeToString(h[:])
3✔
196
                onionService += tor.OnionSuffix
3✔
197
                port := int(binary.BigEndian.Uint16(p[:]))
3✔
198

3✔
199
                address = &tor.OnionAddr{
3✔
200
                        OnionService: onionService,
3✔
201
                        Port:         port,
3✔
202
                }
3✔
203
        default:
×
204
                return nil, ErrUnknownAddressType
×
205
        }
206

207
        return address, nil
3✔
208
}
209

210
// SerializeAddr serializes an address into its raw bytes representation so that
211
// it can be deserialized without requiring address resolution.
212
func SerializeAddr(w io.Writer, address net.Addr) error {
3✔
213
        switch addr := address.(type) {
3✔
214
        case *net.TCPAddr:
3✔
215
                return encodeTCPAddr(w, addr)
3✔
216
        case *tor.OnionAddr:
3✔
217
                return encodeOnionAddr(w, addr)
3✔
218
        default:
×
219
                return ErrUnknownAddressType
×
220
        }
221
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc