begin touching up a DNS Client implementation; internal.GetIP/SetIP refactor

This commit is contained in:
soypat
2025-06-21 01:29:38 -03:00
parent 48f1fa9103
commit 1fcde05284
9 changed files with 209 additions and 29 deletions
+18 -10
View File
@@ -10,7 +10,7 @@ var (
errInvalidIPVersionToSetAddr = errors.New("invalid ip version to setDstAddr")
)
func GetIPSourceAddr(buf []byte) (addr []byte, id, ipEndOff uint16, err error) {
func GetIPAddr(buf []byte) (src, dst []byte, id, ipEndOff uint16, err error) {
b0 := buf[0]
version := b0 >> 4
switch version {
@@ -18,33 +18,41 @@ func GetIPSourceAddr(buf []byte) (addr []byte, id, ipEndOff uint16, err error) {
ihl := b0 & 0xf
ipEndOff = 4 * uint16(ihl)
id = binary.BigEndian.Uint16(buf[4:6])
addr = buf[12:16]
src = buf[12:16]
dst = buf[16:20]
case 6:
addr = buf[8:24]
src = buf[8:24]
dst = buf[24:40]
ipEndOff = 40
default:
err = errUnsupportedIP
}
return addr, id, ipEndOff, err
return src, dst, id, ipEndOff, err
}
func SetIPDestinationAddr(buf []byte, id uint16, addr []byte) (err error) {
var dstaddr []byte
func SetIPAddrs(buf []byte, id uint16, src, dst []byte) (err error) {
var dstaddr, srcaddr []byte
version := buf[0] >> 4
switch version {
case 4:
srcaddr = buf[12:16]
dstaddr = buf[16:20]
if id > 0 {
binary.BigEndian.PutUint16(buf[4:6], id)
}
case 6:
srcaddr = buf[8:24]
dstaddr = buf[24:40]
default:
err = errUnsupportedIP
return errUnsupportedIP
}
if err == nil && len(dstaddr) != len(addr) {
return errInvalidIPVersionToSetAddr
if src != nil && len(srcaddr) != len(src) {
return errors.New("mismatched length of ip src addr")
}
copy(dstaddr, addr)
if dst != nil && len(dstaddr) != len(dst) {
return errors.New("mismatched length of ip dst addr")
}
copy(srcaddr, src)
copy(dstaddr, dst)
return nil
}