Simplify channel operations

This commit is contained in:
V2Ray committed 2015-09-13 20:01:50 +02:00
1 parent ef950770fe
commit d12737b3b8
11 files changed
+63 -176

No files matched your search

-75
View File
@@ -1,75 +0,0 @@
package io
import (
"errors"
)
const (
SizeSmall = 16
SizeMedium = 128
SizeLarge = 512
)
var (
ErrorNoChannel = errors.New("No suitable channels found.")
)
type BufferSet struct {
small chan []byte
medium chan []byte
large chan []byte
}
func NewBufferSet() *BufferSet {
bSet := new(BufferSet)
bSet.small = make(chan []byte, 128)
bSet.medium = make(chan []byte, 128)
bSet.large = make(chan []byte, 128)
return bSet
}
func (bSet *BufferSet) detectBucket(size int, strict bool) (chan []byte, error) {
if strict {
if size == SizeSmall {
return bSet.small, nil
} else if size == SizeMedium {
return bSet.medium, nil
} else if size == SizeLarge {
return bSet.large, nil
}
} else {
if size <= SizeSmall {
return bSet.small, nil
} else if size <= SizeMedium {
return bSet.medium, nil
} else if size <= SizeLarge {
return bSet.large, nil
}
}
return nil, ErrorNoChannel
}
func (bSet *BufferSet) FetchBuffer(minSize int) []byte {
var buffer []byte
byteChan, err := bSet.detectBucket(minSize, false)
if err != nil {
return make([]byte, minSize)
}
select {
case buffer = <-byteChan:
default:
buffer = make([]byte, minSize)
}
return buffer
}
func (bSet *BufferSet) ReturnBuffer(buffer []byte) {
byteChan, err := bSet.detectBucket(len(buffer), true)
if err != nil {
return
}
select {
case byteChan <- buffer:
default:
}
}
+4 -3
View File
@@ -9,7 +9,6 @@ import (
"errors"
"fmt"
"io"
_ "log"
mrand "math/rand"
"github.com/v2ray/v2ray-core"
@@ -27,6 +26,8 @@ const (
var (
ErrorInvalidUser = errors.New("Invalid User")
emptyIV = make([]byte, blockSize)
)
// VMessRequest implements the request message of VMess protocol. It only contains
@@ -75,7 +76,7 @@ func (r *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
}
request.UserId = *userId
decryptor, err := NewDecryptionReader(reader, userId.Hash([]byte("PWD")), make([]byte, blockSize))
decryptor, err := NewDecryptionReader(reader, userId.Hash([]byte("PWD")), emptyIV)
if err != nil {
return nil, err
}
@@ -224,7 +225,7 @@ func (w *VMessRequestWriter) Write(writer io.Writer, request *VMessRequest) erro
if err != nil {
return err
}
aesStream := cipher.NewCFBEncrypter(aesCipher, make([]byte, blockSize))
aesStream := cipher.NewCFBEncrypter(aesCipher, emptyIV)
cWriter := v2io.NewCryptionWriter(aesStream, writer)
_, err = writer.Write(buffer[0:encryptionBegin])