|
|
@@ -187,20 +187,18 @@ func (this *Shadowsocks) handleConnection(conn *hub.TCPConn) {
|
|
|
var writeFinish sync.Mutex
|
|
|
writeFinish.Lock()
|
|
|
go func() {
|
|
|
- firstChunk := alloc.NewBuffer().Slice(0, this.config.Cipher.IVSize())
|
|
|
- defer firstChunk.Release()
|
|
|
+ if payload, ok := <-ray.InboundOutput(); ok {
|
|
|
+ payload.SliceBack(16)
|
|
|
+ rand.Read(payload.Value[:16])
|
|
|
|
|
|
- writer, err := this.config.Cipher.NewEncodingStream(key, firstChunk.Value, conn)
|
|
|
- if err != nil {
|
|
|
- log.Error("Shadowsocks: Failed to create encoding stream: ", err)
|
|
|
- return
|
|
|
- }
|
|
|
+ writer, err := this.config.Cipher.NewEncodingStream(key, payload.Value[:16], conn)
|
|
|
+ if err != nil {
|
|
|
+ log.Error("Shadowsocks: Failed to create encoding stream: ", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
- if payload, ok := <-ray.InboundOutput(); ok {
|
|
|
- firstChunk.Append(payload.Value)
|
|
|
+ writer.Write(payload.Value)
|
|
|
payload.Release()
|
|
|
-
|
|
|
- writer.Write(firstChunk.Value)
|
|
|
v2io.ChanToWriter(writer, ray.InboundOutput())
|
|
|
}
|
|
|
writeFinish.Unlock()
|