Fix ss-server udp

This commit is contained in:
世界 2022-05-12 21:27:50 +08:00
parent 6973a8f4c3
commit 58e06dc57c
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
5 changed files with 10 additions and 19 deletions

View file

@ -41,7 +41,6 @@ func (e *ServerConnError) Error() string {
} }
type ServerPacketError struct { type ServerPacketError struct {
N.PacketConn
Source M.Socksaddr Source M.Socksaddr
Cause error Cause error
} }

View file

@ -201,7 +201,7 @@ func (c *serverConn) WriterReplaceable() bool {
func (s *Service) NewPacket(conn N.PacketConn, buffer *buf.Buffer, metadata M.Metadata) error { func (s *Service) NewPacket(conn N.PacketConn, buffer *buf.Buffer, metadata M.Metadata) error {
err := s.newPacket(conn, buffer, metadata) err := s.newPacket(conn, buffer, metadata)
if err != nil { if err != nil {
err = &shadowsocks.ServerPacketError{PacketConn: conn, Source: metadata.Source, Cause: err} err = &shadowsocks.ServerPacketError{Source: metadata.Source, Cause: err}
} }
return err return err
} }

View file

@ -67,7 +67,6 @@ var List = []string{
func New(method string, pskList [][]byte, password string, secureRNG io.Reader) (shadowsocks.Method, error) { func New(method string, pskList [][]byte, password string, secureRNG io.Reader) (shadowsocks.Method, error) {
m := &Method{ m := &Method{
name: method, name: method,
pskList: pskList,
secureRNG: secureRNG, secureRNG: secureRNG,
replayFilter: replay.NewCuckoo(60), replayFilter: replay.NewCuckoo(60),
} }
@ -125,6 +124,7 @@ func New(method string, pskList [][]byte, password string, secureRNG io.Reader)
m.udpCipher = newXChacha20Poly1305(pskList[0]) m.udpCipher = newXChacha20Poly1305(pskList[0])
} }
m.pskList = pskList
return m, nil return m, nil
} }
@ -479,9 +479,6 @@ func (c *clientPacketConn) WritePacket(buffer *buf.Buffer, destination M.Socksad
if err != nil { if err != nil {
return err return err
} }
if err != nil {
return err
}
if c.udpCipher != nil { if c.udpCipher != nil {
c.udpCipher.Seal(buffer.Index(dataIndex), buffer.To(dataIndex), buffer.From(dataIndex), nil) c.udpCipher.Seal(buffer.Index(dataIndex), buffer.To(dataIndex), buffer.From(dataIndex), nil)
buffer.Extend(c.udpCipher.Overhead()) buffer.Extend(c.udpCipher.Overhead())
@ -687,9 +684,6 @@ func (c *clientPacketConn) WriteTo(p []byte, addr net.Addr) (n int, err error) {
if err != nil { if err != nil {
return return
} }
if err != nil {
return
}
if c.udpCipher != nil { if c.udpCipher != nil {
c.udpCipher.Seal(buffer.Index(dataIndex), buffer.To(dataIndex), buffer.From(dataIndex), nil) c.udpCipher.Seal(buffer.Index(dataIndex), buffer.To(dataIndex), buffer.From(dataIndex), nil)
buffer.Extend(c.udpCipher.Overhead()) buffer.Extend(c.udpCipher.Overhead())

View file

@ -71,17 +71,14 @@ func NewService(method string, psk []byte, password string, secureRNG io.Reader,
s.constructor = newChacha20Poly1305 s.constructor = newChacha20Poly1305
} }
if len(psk) == s.keySaltLength { if len(psk) < s.keySaltLength {
s.psk = psk return nil, shadowsocks.ErrBadKey
} else if len(psk) != 0 { } else if len(psk) > s.keySaltLength {
if len(psk) < s.keySaltLength { psk = Key(psk, s.keySaltLength)
return nil, shadowsocks.ErrBadKey
}
s.psk = Key(psk, s.keySaltLength)
} else if password == "" { } else if password == "" {
return nil, ErrMissingPasswordPSK return nil, ErrMissingPasswordPSK
} else { } else {
s.psk = Key([]byte(password), s.keySaltLength) psk = Key([]byte(password), s.keySaltLength)
} }
switch method { switch method {
@ -93,6 +90,7 @@ func NewService(method string, psk []byte, password string, secureRNG io.Reader,
s.udpCipher = newXChacha20Poly1305(psk) s.udpCipher = newXChacha20Poly1305(psk)
} }
s.psk = psk
return s, nil return s, nil
} }
@ -271,7 +269,7 @@ func (c *serverConn) WriterReplaceable() bool {
func (s *Service) NewPacket(conn N.PacketConn, buffer *buf.Buffer, metadata M.Metadata) error { func (s *Service) NewPacket(conn N.PacketConn, buffer *buf.Buffer, metadata M.Metadata) error {
err := s.newPacket(conn, buffer, metadata) err := s.newPacket(conn, buffer, metadata)
if err != nil { if err != nil {
err = &shadowsocks.ServerPacketError{PacketConn: conn, Source: metadata.Source, Cause: err} err = &shadowsocks.ServerPacketError{Source: metadata.Source, Cause: err}
} }
return err return err
} }

View file

@ -191,7 +191,7 @@ func (s *MultiService[U]) newConnection(ctx context.Context, conn net.Conn, meta
func (s *MultiService[U]) NewPacket(conn N.PacketConn, buffer *buf.Buffer, metadata M.Metadata) error { func (s *MultiService[U]) NewPacket(conn N.PacketConn, buffer *buf.Buffer, metadata M.Metadata) error {
err := s.newPacket(conn, buffer, metadata) err := s.newPacket(conn, buffer, metadata)
if err != nil { if err != nil {
err = &shadowsocks.ServerPacketError{PacketConn: conn, Source: metadata.Source, Cause: err} err = &shadowsocks.ServerPacketError{Source: metadata.Source, Cause: err}
} }
return err return err
} }