|  | @@ -238,7 +238,7 @@ func WriteTCPResponse(request *protocol.RequestHeader, writer io.Writer) (buf.Wr
 | 
	
		
			
				|  |  |  	return buf.NewWriter(crypto.NewCryptionWriter(stream, writer)), nil
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func EncodeUDPPacket(request *protocol.RequestHeader, payload *buf.Buffer) (*buf.Buffer, error) {
 | 
	
		
			
				|  |  | +func EncodeUDPPacket(request *protocol.RequestHeader, payload []byte) (*buf.Buffer, error) {
 | 
	
		
			
				|  |  |  	user := request.User
 | 
	
		
			
				|  |  |  	rawAccount, err := user.GetTypedAccount()
 | 
	
		
			
				|  |  |  	if err != nil {
 | 
	
	
		
			
				|  | @@ -266,7 +266,7 @@ func EncodeUDPPacket(request *protocol.RequestHeader, payload *buf.Buffer) (*buf
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	buffer.AppendSupplier(serial.WriteUint16(uint16(request.Port)))
 | 
	
		
			
				|  |  | -	buffer.Append(payload.Bytes())
 | 
	
		
			
				|  |  | +	buffer.Append(payload)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if request.Option.Has(RequestOptionOneTimeAuth) {
 | 
	
		
			
				|  |  |  		authenticator := NewAuthenticator(HeaderKeyGenerator(account.Key, iv))
 | 
	
	
		
			
				|  | @@ -382,23 +382,12 @@ type UDPWriter struct {
 | 
	
		
			
				|  |  |  	Request *protocol.RequestHeader
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (w *UDPWriter) Write(mb buf.MultiBuffer) error {
 | 
	
		
			
				|  |  | -	defer mb.Release()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	for _, b := range mb {
 | 
	
		
			
				|  |  | -		if err := w.writeInternal(b); err != nil {
 | 
	
		
			
				|  |  | -			return err
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	return nil
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -func (w *UDPWriter) writeInternal(buffer *buf.Buffer) error {
 | 
	
		
			
				|  |  | -	payload, err := EncodeUDPPacket(w.Request, buffer)
 | 
	
		
			
				|  |  | +func (w *UDPWriter) Write(payload []byte) (int, error) {
 | 
	
		
			
				|  |  | +	packet, err := EncodeUDPPacket(w.Request, payload)
 | 
	
		
			
				|  |  |  	if err != nil {
 | 
	
		
			
				|  |  | -		return err
 | 
	
		
			
				|  |  | +		return 0, err
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	_, err = w.Writer.Write(payload.Bytes())
 | 
	
		
			
				|  |  | -	payload.Release()
 | 
	
		
			
				|  |  | -	return err
 | 
	
		
			
				|  |  | +	_, err = w.Writer.Write(packet.Bytes())
 | 
	
		
			
				|  |  | +	packet.Release()
 | 
	
		
			
				|  |  | +	return len(payload), err
 | 
	
		
			
				|  |  |  }
 |