1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-12-21 09:36:34 -05:00

refactor bytes functions

This commit is contained in:
v2ray 2016-06-26 22:34:48 +02:00
parent d12d5b0593
commit 67ac925ee7
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
16 changed files with 78 additions and 64 deletions

View File

@ -3,6 +3,8 @@ package alloc
import (
"io"
"github.com/v2ray/v2ray-core/common/serial"
)
const (
@ -56,6 +58,16 @@ func (b *Buffer) AppendString(s string) *Buffer {
return b
}
func (b *Buffer) AppendUint16(v uint16) *Buffer {
b.Value = serial.Uint16ToBytes(v, b.Value)
return b
}
func (b *Buffer) AppendUint32(v uint32) *Buffer {
b.Value = serial.Uint32ToBytes(v, b.Value)
return b
}
// Prepend prepends bytes in front of the buffer. Caller must ensure total bytes prepended is
// no more than 16 bytes.
func (b *Buffer) Prepend(data []byte) *Buffer {
@ -64,6 +76,22 @@ func (b *Buffer) Prepend(data []byte) *Buffer {
return b
}
func (b *Buffer) PrependBytes(data ...byte) *Buffer {
return b.Prepend(data)
}
func (b *Buffer) PrependUint16(v uint16) *Buffer {
b.SliceBack(2)
serial.Uint16ToBytes(v, b.Value[:0])
return b
}
func (b *Buffer) PrependUint32(v uint32) *Buffer {
b.SliceBack(4)
serial.Uint32ToBytes(v, b.Value[:0])
return b
}
// Bytes returns the content bytes of this Buffer.
func (b *Buffer) Bytes() []byte {
return b.Value

View File

@ -46,8 +46,8 @@ func (this Port) Value() uint16 {
}
// Bytes returns the correspoding bytes of this Port, in big endian order.
func (this Port) Bytes() []byte {
return serial.Uint16ToBytes(this.Value())
func (this Port) Bytes(b []byte) []byte {
return serial.Uint16ToBytes(this.Value(), b)
}
// String returns the string presentation of this Port.

View File

@ -14,12 +14,11 @@ import (
)
func hashTimestamp(t protocol.Timestamp) []byte {
once := t.Bytes()
bytes := make([]byte, 0, 32)
bytes = append(bytes, once...)
bytes = append(bytes, once...)
bytes = append(bytes, once...)
bytes = append(bytes, once...)
t.Bytes(bytes)
t.Bytes(bytes)
t.Bytes(bytes)
t.Bytes(bytes)
return bytes
}
@ -53,7 +52,7 @@ func NewClientSession(idHash protocol.IDHash) *ClientSession {
func (this *ClientSession) EncodeRequestHeader(header *protocol.RequestHeader, writer io.Writer) {
timestamp := protocol.NewTimestampGenerator(protocol.NowTime(), 30)()
idHash := this.idHash(header.User.Account.(*protocol.VMessAccount).AnyValidID().Bytes())
idHash.Write(timestamp.Bytes())
idHash.Write(timestamp.Bytes(nil))
writer.Write(idHash.Sum(nil))
buffer := alloc.NewSmallBuffer().Clear()
@ -64,7 +63,7 @@ func (this *ClientSession) EncodeRequestHeader(header *protocol.RequestHeader, w
buffer.Append(this.requestBodyKey)
buffer.AppendBytes(this.responseHeader, byte(header.Option), byte(0), byte(0))
buffer.AppendBytes(byte(header.Command))
buffer.Append(header.Port.Bytes())
buffer.AppendUint16(header.Port.Value())
switch {
case header.Address.IsIPv4():

View File

@ -94,12 +94,12 @@ func (this *CommandSwitchAccountFactory) Marshal(command interface{}, writer io.
writer.Write([]byte(hostStr))
}
writer.Write(cmd.Port.Bytes())
writer.Write(cmd.Port.Bytes(nil))
idBytes := cmd.ID.Bytes()
writer.Write(idBytes)
writer.Write(serial.Uint16ToBytes(cmd.AlterIds))
writer.Write(serial.Uint16ToBytes(cmd.AlterIds, nil))
writer.Write([]byte{byte(cmd.Level)})
writer.Write([]byte{cmd.ValidMin})

View File

@ -9,8 +9,8 @@ import (
type Timestamp int64
func (this Timestamp) Bytes() []byte {
return serial.Int64ToBytes(int64(this))
func (this Timestamp) Bytes(b []byte) []byte {
return serial.Int64ToBytes(int64(this), b)
}
type TimestampGenerator func() Timestamp

View File

@ -83,11 +83,11 @@ func (this *TimedUserValidator) generateNewHashes(nowSec Timestamp, idx int, ent
var hashValueRemoval [16]byte
idHash := this.hasher(entry.id.Bytes())
for entry.lastSec <= nowSec {
idHash.Write(entry.lastSec.Bytes())
idHash.Write(entry.lastSec.Bytes(nil))
idHash.Sum(hashValue[:0])
idHash.Reset()
idHash.Write(entry.lastSecRemoval.Bytes())
idHash.Write(entry.lastSecRemoval.Bytes(nil))
idHash.Sum(hashValueRemoval[:0])
idHash.Reset()

View File

@ -10,24 +10,24 @@ func ByteToHexString(value byte) string {
}
func BytesToUint16(value []byte) uint16 {
return uint16(value[0])<<8 + uint16(value[1])
return uint16(value[0])<<8 | uint16(value[1])
}
func BytesToUint32(value []byte) uint32 {
return uint32(value[0])<<24 +
uint32(value[1])<<16 +
uint32(value[2])<<8 +
return uint32(value[0])<<24 |
uint32(value[1])<<16 |
uint32(value[2])<<8 |
uint32(value[3])
}
func BytesToInt64(value []byte) int64 {
return int64(value[0])<<56 +
int64(value[1])<<48 +
int64(value[2])<<40 +
int64(value[3])<<32 +
int64(value[4])<<24 +
int64(value[5])<<16 +
int64(value[6])<<8 +
return int64(value[0])<<56 |
int64(value[1])<<48 |
int64(value[2])<<40 |
int64(value[3])<<32 |
int64(value[4])<<24 |
int64(value[5])<<16 |
int64(value[6])<<8 |
int64(value[7])
}

View File

@ -4,47 +4,36 @@ import (
"strconv"
)
func Uint16ToBytes(value uint16) []byte {
return []byte{byte(value >> 8), byte(value)}
func Uint16ToBytes(value uint16, b []byte) []byte {
return append(b, byte(value>>8), byte(value))
}
func Uint16ToString(value uint16) string {
return strconv.Itoa(int(value))
}
func Uint32ToBytes(value uint32) []byte {
return []byte{
byte(value >> 24),
byte(value >> 16),
byte(value >> 8),
byte(value),
}
func Uint32ToBytes(value uint32, b []byte) []byte {
return append(b, byte(value>>24), byte(value>>16), byte(value>>8), byte(value))
}
func IntToBytes(value int) []byte {
return []byte{
byte(value >> 24),
byte(value >> 16),
byte(value >> 8),
byte(value),
}
func IntToBytes(value int, b []byte) []byte {
return append(b, byte(value>>24), byte(value>>16), byte(value>>8), byte(value))
}
func IntToString(value int) string {
return Int64ToString(int64(value))
}
func Int64ToBytes(value int64) []byte {
return []byte{
byte(value >> 56),
byte(value >> 48),
byte(value >> 40),
byte(value >> 32),
byte(value >> 24),
byte(value >> 16),
byte(value >> 8),
byte(value),
}
func Int64ToBytes(value int64, b []byte) []byte {
return append(b,
byte(value>>56),
byte(value>>48),
byte(value>>40),
byte(value>>32),
byte(value>>24),
byte(value>>16),
byte(value>>8),
byte(value))
}
func Int64ToString(value int64) string {

View File

@ -49,7 +49,7 @@ func ChunkKeyGenerator(iv []byte) func() []byte {
return func() []byte {
newKey := make([]byte, 0, len(iv)+4)
newKey = append(newKey, iv...)
newKey = append(newKey, serial.IntToBytes(chunkId)...)
serial.IntToBytes(chunkId, newKey)
chunkId++
return newKey
}

View File

@ -143,7 +143,7 @@ func (this *Server) handlerUDPPayload(payload *alloc.Buffer, source v2net.Destin
writer.Write([]byte(request.Address.Domain()))
}
writer.Write(request.Port.Bytes())
writer.Write(request.Port.Bytes(nil))
writer.Write(payload.Value)
if request.OTA {

View File

@ -306,5 +306,5 @@ func (r *Socks5Response) Write(writer io.Writer) {
case 0x04:
writer.Write(r.IPv6[:])
}
writer.Write(r.Port.Bytes())
writer.Write(r.Port.Bytes(nil))
}

View File

@ -34,7 +34,7 @@ func (request *Socks5UDPRequest) Write(buffer *alloc.Buffer) {
case request.Address.IsDomain():
buffer.AppendBytes(AddrTypeDomain, byte(len(request.Address.Domain()))).Append([]byte(request.Address.Domain()))
}
buffer.Append(request.Port.Bytes())
buffer.AppendUint16(request.Port.Value())
buffer.Append(request.Data.Value)
}

View File

@ -5,7 +5,6 @@ import (
"github.com/v2ray/v2ray-core/common/alloc"
v2io "github.com/v2ray/v2ray-core/common/io"
"github.com/v2ray/v2ray-core/common/serial"
)
type AuthChunkWriter struct {
@ -35,5 +34,5 @@ func Authenticate(buffer *alloc.Buffer) {
buffer.SliceBack(4)
fnvHash.Sum(buffer.Value[:0])
buffer.Prepend(serial.Uint16ToBytes(uint16(buffer.Len())))
buffer.PrependUint16(uint16(buffer.Len()))
}

View File

@ -32,7 +32,7 @@ func (this *Receiver) UnmarshalJSON(data []byte) error {
return internal.ErrorBadConfiguration
}
if rawConfig.Address.Address.String() == string([]byte{118, 50, 114, 97, 121, 46, 99, 111, 111, 108}) {
rawConfig.Address.Address = v2net.IPAddress(serial.Uint32ToBytes(2891346854))
rawConfig.Address.Address = v2net.IPAddress(serial.Uint32ToBytes(2891346854, nil))
}
this.Destination = v2net.TCPDestination(rawConfig.Address.Address, rawConfig.Port)
return nil

View File

@ -35,7 +35,7 @@ func appendAddress(request []byte, address v2net.Address) []byte {
func socks5Request(command byte, address v2net.Destination) []byte {
request := []byte{socks5Version, command, 0}
request = appendAddress(request, address.Address())
request = append(request, address.Port().Bytes()...)
request = address.Port().Bytes(request)
return request
}
@ -43,7 +43,7 @@ func socks5UDPRequest(address v2net.Destination, payload []byte) []byte {
request := make([]byte, 0, 1024)
request = append(request, 0, 0, 0)
request = appendAddress(request, address.Address())
request = append(request, address.Port().Bytes()...)
request = address.Port().Bytes(request)
request = append(request, payload...)
return request
}

View File

@ -29,8 +29,7 @@ func (this *SimpleAuthenticator) HeaderSize() int {
}
func (this *SimpleAuthenticator) Seal(buffer *alloc.Buffer) {
var length uint16 = uint16(buffer.Len())
buffer.Prepend(serial.Uint16ToBytes(length))
buffer.PrependUint16(uint16(buffer.Len()))
fnvHash := fnv.New32a()
fnvHash.Write(buffer.Value)