48 lines
742 B
Go
48 lines
742 B
Go
package hsp
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type Adddress struct {
|
|
Host string
|
|
Port string
|
|
Route string
|
|
}
|
|
|
|
func ParseAddress(address string) (*Adddress, error) {
|
|
parts := strings.SplitN(address, "/", 2)
|
|
|
|
var route string
|
|
if len(parts) == 1 {
|
|
route = "/"
|
|
} else if len(parts) > 1 {
|
|
route = "/" + strings.Join(parts[1:], "")
|
|
} else {
|
|
return nil, fmt.Errorf("Failed to parse address: %s", address)
|
|
}
|
|
|
|
addr := parts[0]
|
|
|
|
port := HSP_PORT
|
|
|
|
if strings.Contains(addr, ":") {
|
|
p := strings.Split(addr, ":")
|
|
if len(p) >= 2 {
|
|
port = p[len(p) - 1]
|
|
addr = p[0]
|
|
}
|
|
}
|
|
|
|
return &Adddress{
|
|
Host: addr,
|
|
Port: port,
|
|
Route: route,
|
|
}, nil
|
|
}
|
|
|
|
func (a *Adddress) String() string {
|
|
return fmt.Sprintf("%s:%s", a.Host, a.Port)
|
|
}
|