mirror of
https://github.com/ginuerzh/gost.git
synced 2024-04-21 12:31:34 +00:00
fix ss UDP packet format
This commit is contained in:
+16
-2
@@ -283,7 +283,7 @@ func (s *ShadowUdpServer) ListenAndServe() error {
|
||||
}
|
||||
|
||||
select {
|
||||
case ch <- &packet{srcAddr: addr.String(), dstAddr: dgram.Header.Addr.String(), data: b[:n+3]}:
|
||||
case ch <- &packet{srcAddr: addr.String(), dstAddr: dgram.Header.Addr.String(), data: dgram.Data}:
|
||||
case <-time.After(time.Second * 3):
|
||||
glog.V(LWARNING).Infof("[ssu] %s -> %s : %s", addr, dgram.Header.Addr.String(), "send queue is full, discard")
|
||||
}
|
||||
@@ -292,12 +292,26 @@ func (s *ShadowUdpServer) ListenAndServe() error {
|
||||
// start recv queue
|
||||
go func(ch <-chan *packet) {
|
||||
for pkt := range ch {
|
||||
srcAddr, err := net.ResolveUDPAddr("udp", pkt.srcAddr)
|
||||
if err != nil {
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||
continue
|
||||
}
|
||||
dstAddr, err := net.ResolveUDPAddr("udp", pkt.dstAddr)
|
||||
if err != nil {
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||
continue
|
||||
}
|
||||
if _, err := conn.WriteTo(pkt.data, dstAddr); err != nil {
|
||||
|
||||
dgram := gosocks5.NewUDPDatagram(gosocks5.NewUDPHeader(0, 0, ToSocksAddr(srcAddr)), pkt.data)
|
||||
b := bytes.Buffer{}
|
||||
dgram.Write(&b)
|
||||
if b.Len() < 10 {
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : invalid udp datagram", pkt.dstAddr, pkt.srcAddr)
|
||||
continue
|
||||
}
|
||||
|
||||
if _, err := conn.WriteTo(b.Bytes()[3:], dstAddr); err != nil { // remove rsv and frag fields to make it standard shadowsocks UDP datagram
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||
return
|
||||
}
|
||||
|
||||
Vendored
+3
-3
@@ -21,10 +21,10 @@
|
||||
"revisionTime": "2017-01-19T05:34:58Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "idpL1fpHpfntk74IVfWtkP1PMZs=",
|
||||
"checksumSHA1": "2kMuCJwcxppxWtk9dX1WtWZMGB4=",
|
||||
"path": "github.com/ginuerzh/gost",
|
||||
"revision": "321b03712af504981d35a47c50c2cfe4dd788a9d",
|
||||
"revisionTime": "2017-01-21T03:16:33Z"
|
||||
"revision": "8861ffba01779f3a9f44b205b38d626fce71dff3",
|
||||
"revisionTime": "2017-01-24T13:01:52Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "URsJa4y/sUUw/STmbeYx9EKqaYE=",
|
||||
|
||||
@@ -283,7 +283,7 @@ func (s *ShadowUdpServer) ListenAndServe() error {
|
||||
}
|
||||
|
||||
select {
|
||||
case ch <- &packet{srcAddr: addr.String(), dstAddr: dgram.Header.Addr.String(), data: b[:n+3]}:
|
||||
case ch <- &packet{srcAddr: addr.String(), dstAddr: dgram.Header.Addr.String(), data: dgram.Data}:
|
||||
case <-time.After(time.Second * 3):
|
||||
glog.V(LWARNING).Infof("[ssu] %s -> %s : %s", addr, dgram.Header.Addr.String(), "send queue is full, discard")
|
||||
}
|
||||
@@ -292,12 +292,26 @@ func (s *ShadowUdpServer) ListenAndServe() error {
|
||||
// start recv queue
|
||||
go func(ch <-chan *packet) {
|
||||
for pkt := range ch {
|
||||
srcAddr, err := net.ResolveUDPAddr("udp", pkt.srcAddr)
|
||||
if err != nil {
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||
continue
|
||||
}
|
||||
dstAddr, err := net.ResolveUDPAddr("udp", pkt.dstAddr)
|
||||
if err != nil {
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||
continue
|
||||
}
|
||||
if _, err := conn.WriteTo(pkt.data, dstAddr); err != nil {
|
||||
|
||||
dgram := gosocks5.NewUDPDatagram(gosocks5.NewUDPHeader(0, 0, ToSocksAddr(srcAddr)), pkt.data)
|
||||
b := bytes.Buffer{}
|
||||
dgram.Write(&b)
|
||||
if b.Len() < 10 {
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : invalid udp datagram", pkt.dstAddr, pkt.srcAddr)
|
||||
continue
|
||||
}
|
||||
|
||||
if _, err := conn.WriteTo(b.Bytes()[3:], dstAddr); err != nil { // remove rsv and frag fields to make it standard shadowsocks UDP datagram
|
||||
glog.V(LWARNING).Infof("[ssu] %s <- %s : %s", pkt.dstAddr, pkt.srcAddr, err)
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user