mirror of https://github.com/v2ray/v2ray-core
				
				
				
			fix UDP handling in Shadowsocks client
							parent
							
								
									0e01e28278
								
							
						
					
					
						commit
						4b5e41c783
					
				| 
						 | 
				
			
			@ -155,7 +155,7 @@ func (v *Client) Process(ctx context.Context, outboundRay ray.OutboundRay, diale
 | 
			
		|||
				User:   user,
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if err := buf.Copy(reader, outboundRay.OutboundOutput(), buf.UpdateActivity(timer)); err != nil {
 | 
			
		||||
			if err := buf.Copy(reader, outboundRay.OutboundOutput(), buf.UpdateActivity(timer), buf.IgnoreReaderError()); err != nil {
 | 
			
		||||
				return newError("failed to transport all UDP response").Base(err)
 | 
			
		||||
			}
 | 
			
		||||
			return nil
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -140,6 +140,9 @@ func (v *AesCfb) EncodePacket(key []byte, b *buf.Buffer) error {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func (v *AesCfb) DecodePacket(key []byte, b *buf.Buffer) error {
 | 
			
		||||
	if b.Len() <= v.IVSize() {
 | 
			
		||||
		return newError("insufficient data: ", b.Len())
 | 
			
		||||
	}
 | 
			
		||||
	iv := b.BytesTo(v.IVSize())
 | 
			
		||||
	stream := crypto.NewAesDecryptionStream(key, iv)
 | 
			
		||||
	stream.XORKeyStream(b.BytesFrom(v.IVSize()), b.BytesFrom(v.IVSize()))
 | 
			
		||||
| 
						 | 
				
			
			@ -203,6 +206,9 @@ func (c *AEADCipher) EncodePacket(key []byte, b *buf.Buffer) error {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func (c *AEADCipher) DecodePacket(key []byte, b *buf.Buffer) error {
 | 
			
		||||
	if b.Len() <= v.IVSize() {
 | 
			
		||||
		return newError("insufficient data: ", b.Len())
 | 
			
		||||
	}
 | 
			
		||||
	ivLen := c.IVSize()
 | 
			
		||||
	payloadLen := b.Len()
 | 
			
		||||
	auth := c.createAuthenticator(key, b.BytesTo(ivLen))
 | 
			
		||||
| 
						 | 
				
			
			@ -253,6 +259,9 @@ func (v *ChaCha20) EncodePacket(key []byte, b *buf.Buffer) error {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func (v *ChaCha20) DecodePacket(key []byte, b *buf.Buffer) error {
 | 
			
		||||
	if b.Len() <= v.IVSize() {
 | 
			
		||||
		return newError("insufficient data: ", b.Len())
 | 
			
		||||
	}
 | 
			
		||||
	iv := b.BytesTo(v.IVSize())
 | 
			
		||||
	stream := crypto.NewChaCha20Stream(key, iv)
 | 
			
		||||
	stream.XORKeyStream(b.BytesFrom(v.IVSize()), b.BytesFrom(v.IVSize()))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue