diff --git a/proxy/intrinsic/client.go b/proxy/intrinsic/client.go index 822ff80..6e25823 100644 --- a/proxy/intrinsic/client.go +++ b/proxy/intrinsic/client.go @@ -78,16 +78,12 @@ func (self *ClientContext) Dial(network string, addr string) (net.Conn, error) { } func (self *ClientContext) dialUDP(network, addr string) (net.Conn, error) { - raddr, err := net.ResolveUDPAddr(network, addr) - if err != nil { - return nil, err - } local := core.MakePipe() c := local[1] go func() { defer c.Close() disp := self.router.C.(*UDPDispatcher) - id := disp.NewEntry(raddr) + id := disp.NewEntry(addr) defer disp.DeleteEntry(id) cp := core.NewSyncPortWithTimeout(c, nil, core.DEFAULT_UDP_TIMEOUT) r, err := self.router.NewRoute(id, cp) @@ -101,10 +97,6 @@ func (self *ClientContext) dialUDP(network, addr string) (net.Conn, error) { } func (self *ClientContext) dialTCP(network, addr string) (net.Conn, error) { - raddr, err := net.ResolveTCPAddr(network, addr) - if err != nil { - return nil, err - } local := core.MakePipe() go func() { defer local[1].Close() @@ -117,7 +109,7 @@ func (self *ClientContext) dialTCP(network, addr string) (net.Conn, error) { i := Intrinsic{Func: RELAY_TCP} { data := &bytes.Buffer{} - req := TCPRequest{Addr: *raddr} + req := TCPRequest{Addr: addr} enc := gob.NewEncoder(data) if err := enc.Encode(&req); err != nil { log.Println(err) @@ -140,11 +132,11 @@ func (self *ClientContext) dialTCP(network, addr string) (net.Conn, error) { } type UDPDispatcher struct { - t core.Map[core.RouteId, *net.UDPAddr] + t core.Map[core.RouteId, string] c uint64 } -func (self *UDPDispatcher) NewEntry(addr *net.UDPAddr) core.RouteId { +func (self *UDPDispatcher) NewEntry(addr string) core.RouteId { id := core.RouteId(atomic.AddUint64(&self.c, 1)) self.t.Store(id, addr) return id @@ -159,7 +151,7 @@ func (self *UDPDispatcher) Encode(id core.RouteId, data *iovec.IoVec) error { if !in { return fmt.Errorf("Remote address of RouteId #%d doesn't exist", id) } - msg := UDPMessage{Id: id, Addr: *raddr, Data: data.Consume()} + msg := UDPMessage{Id: id, Addr: raddr, Data: data.Consume()} var buf bytes.Buffer enc := gob.NewEncoder(&buf) if err := enc.Encode(&msg); err != nil { diff --git a/proxy/intrinsic/server.go b/proxy/intrinsic/server.go index 1a43cb0..8c104a8 100644 --- a/proxy/intrinsic/server.go +++ b/proxy/intrinsic/server.go @@ -25,12 +25,12 @@ const ( ) type TCPRequest struct { - Addr net.TCPAddr + Addr string } type UDPMessage struct { Id core.RouteId - Addr net.UDPAddr + Addr string Data []byte } @@ -64,7 +64,7 @@ func (self *Server) relayUDP() error { log.Println(err) return } - c, err := net.Dial("udp", msg.Addr.String()) + c, err := net.Dial("udp", msg.Addr) if err != nil { log.Println(err) return @@ -128,7 +128,7 @@ func (self *Server) Run() { log.Println(err) return } - if err := self.relayTCP(req.Addr.String()); err != nil { + if err := self.relayTCP(req.Addr); err != nil { log.Println(err) return }