mirror of
https://github.com/cwinfo/matterbridge.git
synced 2024-11-14 16:40:26 +00:00
44 lines
921 B
Go
44 lines
921 B
Go
|
package netutil
|
||
|
|
||
|
import (
|
||
|
"net"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// An addr that is neither restricted to TCP nor UDP, but has an IP and a port.
|
||
|
type PortAddr struct {
|
||
|
IP net.IP
|
||
|
Port uint16
|
||
|
}
|
||
|
|
||
|
// Parses an IP address with a port, for example "209.197.29.196:27017".
|
||
|
// If the given string is not valid, this function returns nil.
|
||
|
func ParsePortAddr(addr string) *PortAddr {
|
||
|
parts := strings.Split(addr, ":")
|
||
|
if len(parts) != 2 {
|
||
|
return nil
|
||
|
}
|
||
|
ip := net.ParseIP(parts[0])
|
||
|
if ip == nil {
|
||
|
return nil
|
||
|
}
|
||
|
port, err := strconv.ParseUint(parts[1], 10, 16)
|
||
|
if err != nil {
|
||
|
return nil
|
||
|
}
|
||
|
return &PortAddr{ip, uint16(port)}
|
||
|
}
|
||
|
|
||
|
func (p *PortAddr) ToTCPAddr() *net.TCPAddr {
|
||
|
return &net.TCPAddr{p.IP, int(p.Port), ""}
|
||
|
}
|
||
|
|
||
|
func (p *PortAddr) ToUDPAddr() *net.UDPAddr {
|
||
|
return &net.UDPAddr{p.IP, int(p.Port), ""}
|
||
|
}
|
||
|
|
||
|
func (p *PortAddr) String() string {
|
||
|
return p.IP.String() + ":" + strconv.FormatUint(uint64(p.Port), 10)
|
||
|
}
|