summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/Philipp15b/go-steam/netutil/addr.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/Philipp15b/go-steam/netutil/addr.go')
-rw-r--r--vendor/github.com/Philipp15b/go-steam/netutil/addr.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/vendor/github.com/Philipp15b/go-steam/netutil/addr.go b/vendor/github.com/Philipp15b/go-steam/netutil/addr.go
new file mode 100644
index 00000000..72b959e6
--- /dev/null
+++ b/vendor/github.com/Philipp15b/go-steam/netutil/addr.go
@@ -0,0 +1,43 @@
+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)
+}