Skip to content

Commit

Permalink
proto option for C# namespace
Browse files Browse the repository at this point in the history
  • Loading branch information
DarienRaymond committed Dec 22, 2016
1 parent e66a787 commit eb78243
Show file tree
Hide file tree
Showing 33 changed files with 187 additions and 1 deletion.
1 change: 1 addition & 0 deletions app/dispatcher/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.app.dispatcher;
option csharp_namespace = "V2Ray.Core.App.Dispatcher";
option go_package = "dispatcher";
option java_package = "com.v2ray.core.app.dispatcher";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions app/dns/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.app.dns;
option csharp_namespace = "V2Ray.Core.App.Dns";
option go_package = "dns";
option java_package = "com.v2ray.core.app.dns";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions app/router/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.app.router;
option csharp_namespace = "V2Ray.Core.App.Router";
option go_package = "router";
option java_package = "com.v2ray.core.app.router";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions app/web/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.app.web;
option csharp_namespace = "V2Ray.Core.App.Web";
option go_package = "web";
option java_package = "com.v2ray.core.app.web";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions common/net/address.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.common.net;
option csharp_namespace = "V2Ray.Core.Common.Net";
option go_package = "net";
option java_package = "com.v2ray.core.common.net";
option java_outer_classname = "AddressProto";
Expand Down
1 change: 1 addition & 0 deletions common/net/destination.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.common.net;
option csharp_namespace = "V2Ray.Core.Common.Net";
option go_package = "net";
option java_package = "com.v2ray.core.common.net";
option java_outer_classname = "DestinationProto";
Expand Down
1 change: 1 addition & 0 deletions common/net/network.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.common.net;
option csharp_namespace = "V2Ray.Core.Common.Net";
option go_package = "net";
option java_package = "com.v2ray.core.common.net";
option java_outer_classname = "NetworkProto";
Expand Down
1 change: 1 addition & 0 deletions common/net/port.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.common.net;
option csharp_namespace = "V2Ray.Core.Common.Net";
option go_package = "net";
option java_package = "com.v2ray.core.common.net";
option java_outer_classname = "PortProto";
Expand Down
1 change: 1 addition & 0 deletions common/protocol/headers.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.common.protocol;
option csharp_namespace = "V2Ray.Core.Common.Protocol";
option go_package = "protocol";
option java_package = "com.v2ray.core.common.protocol";
option java_outer_classname = "HeadersProto";
Expand Down
1 change: 1 addition & 0 deletions common/protocol/server_spec.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.common.protocol;
option csharp_namespace = "V2Ray.Core.Common.Protocol";
option go_package = "protocol";
option java_package = "com.v2ray.core.common.protocol";
option java_outer_classname = "ServerSpecProto";
Expand Down
1 change: 1 addition & 0 deletions common/protocol/user.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.common.protocol;
option csharp_namespace = "V2Ray.Core.Common.Protocol";
option go_package = "protocol";
option java_package = "com.v2ray.core.common.protocol";
option java_outer_classname = "UserProto";
Expand Down
1 change: 1 addition & 0 deletions common/serial/typed_message.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.common.serial;
option csharp_namespace = "V2Ray.Core.Common.Serial";
option go_package = "serial";
option java_package = "com.v2ray.core.common.serial";
option java_outer_classname = "TypedMessageProto";
Expand Down
1 change: 1 addition & 0 deletions config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core;
option csharp_namespace = "V2Ray.Core";
option go_package = "core";
option java_package = "com.v2ray.core";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions proxy/blackhole/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.proxy.blackhole;
option csharp_namespace = "V2Ray.Core.Proxy.Blackhole";
option go_package = "blackhole";
option java_package = "com.v2ray.core.proxy.blackhole";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions proxy/dokodemo/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.proxy.dokodemo;
option csharp_namespace = "V2Ray.Core.Proxy.Dokodemo";
option go_package = "dokodemo";
option java_package = "com.v2ray.core.proxy.dokodemo";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions proxy/freedom/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.proxy.freedom;
option csharp_namespace = "V2Ray.Core.Proxy.Freedom";
option go_package = "freedom";
option java_package = "com.v2ray.core.proxy.freedom";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions proxy/http/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.proxy.http;
option csharp_namespace = "V2Ray.Core.Proxy.Http";
option go_package = "http";
option java_package = "com.v2ray.core.proxy.http";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions proxy/shadowsocks/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.proxy.shadowsocks;
option csharp_namespace = "V2Ray.Core.Proxy.Shadowsocks";
option go_package = "shadowsocks";
option java_package = "com.v2ray.core.proxy.shadowsocks";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions proxy/socks/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.proxy.socks;
option csharp_namespace = "V2Ray.Core.Proxy.Socks";
option go_package = "socks";
option java_package = "com.v2ray.core.proxy.socks";
option java_outer_classname = "ConfigProto";
Expand Down
2 changes: 1 addition & 1 deletion proxy/vmess/account.proto
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
syntax = "proto3";

package v2ray.core.proxy.vmess;
option csharp_namespace = "V2Ray.Core.Proxy.Vmess";
option go_package = "vmess";

option java_package = "com.v2ray.core.proxy.vmess";
option java_outer_classname = "AccountProto";

Expand Down
1 change: 1 addition & 0 deletions proxy/vmess/inbound/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.proxy.vmess.inbound;
option csharp_namespace = "V2Ray.Core.Proxy.Vmess.Inbound";
option go_package = "inbound";
option java_package = "com.v2ray.core.proxy.vmess.inbound";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions proxy/vmess/outbound/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.proxy.vmess.outbound;
option csharp_namespace = "V2Ray.Core.Proxy.Vmess.Outbound";
option go_package = "outbound";
option java_package = "com.v2ray.core.proxy.vmess.outbound";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions transport/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.transport;
option csharp_namespace = "V2Ray.Core.Transport";
option go_package = "transport";
option java_package = "com.v2ray.core.transport";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions transport/internet/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.transport.internet;
option csharp_namespace = "V2Ray.Core.Transport.Internet";
option go_package = "internet";
option java_package = "com.v2ray.core.transport.internet";

Expand Down
1 change: 1 addition & 0 deletions transport/internet/headers/http/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.transport.internet.headers.http;
option csharp_namespace = "V2Ray.Core.Transport.Internet.Headers.Http";
option go_package = "http";
option java_package = "com.v2ray.core.transport.internet.headers.http";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions transport/internet/headers/noop/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.transport.internet.headers.noop;
option csharp_namespace = "V2Ray.Core.Transport.Internet.Headers.Noop";
option go_package = "noop";
option java_package = "com.v2ray.core.transport.internet.headers.noop";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions transport/internet/headers/srtp/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.transport.internet.headers.srtp;
option csharp_namespace = "V2Ray.Core.Transport.Internet.Headers.Srtp";
option go_package = "srtp";
option java_package = "com.v2ray.core.transport.internet.headers.srtp";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions transport/internet/headers/utp/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.transport.internet.headers.utp;
option csharp_namespace = "V2Ray.Core.Transport.Internet.Headers.Utp";
option go_package = "utp";
option java_package = "com.v2ray.core.transport.internet.headers.utp";
option java_outer_classname = "ConfigProto";
Expand Down
1 change: 1 addition & 0 deletions transport/internet/kcp/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.transport.internet.kcp;
option csharp_namespace = "V2Ray.Core.Transport.Internet.Kcp";
option go_package = "kcp";
option java_package = "com.v2ray.core.transport.internet.kcp";
option java_outer_classname = "ConfigProto";
Expand Down
155 changes: 155 additions & 0 deletions transport/internet/kcp/congestion.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
package kcp

import (
"sync"
)

const (
defaultRTT = 100
queueSize = 10
)

type Queue struct {
value [queueSize]uint32
start uint32
length uint32
}

func (v *Queue) Push(value uint32) {
if v.length < queueSize {
v.value[v.length] = value
v.length++
return
}
v.value[v.start] = value
v.start++
if v.start == queueSize {
v.start = 0
}
}

func (v *Queue) Max() uint32 {
max := v.value[0]
for i := 1; i < queueSize; i++ {
if v.value[i] > max {
max = v.value[i]
}
}
return max
}

func (v *Queue) Min() uint32 {
max := v.value[0]
for i := 1; i < queueSize; i++ {
if v.value[i] < max {
max = v.value[i]
}
}
return max
}

type CongestionState byte

const (
CongestionStateRTTProbe CongestionState = iota
CongestionStateBandwidthProbe
CongestionStateTransfer
)

type Congestion struct {
sync.RWMutex

state CongestionState
stateSince uint32
limit uint32 // bytes per 1000 seconds

rtt uint32 // millisec
rttHistory Queue
rttUpdateTime uint32

initialThroughput uint32 // bytes per 1000 seconds

cycleStartTime uint32
cycleBytesConfirmed uint32
cycleBytesSent uint32
cycleBytesLimit uint32

cycle uint32
bestCycleBytesConfirmed uint32
bestCycleBytesSent uint32
}

func (v *Congestion) SetState(current uint32, state CongestionState) {
v.state = state
v.stateSince = current
}

func (v *Congestion) Update(current uint32) {
switch v.state {
case CongestionStateRTTProbe:
if v.rtt > 0 {
v.SetState(current, CongestionStateBandwidthProbe)
v.cycleStartTime = current
v.cycleBytesConfirmed = 0
v.cycleBytesSent = 0
v.cycleBytesLimit = v.initialThroughput * v.rtt / 1000 / 1000
}
case CongestionStateBandwidthProbe:
if current-v.cycleStartTime >= v.rtt {

}
}
}

func (v *Congestion) AddBytesConfirmed(current uint32, bytesConfirmed uint32) {
v.Lock()
defer v.Unlock()

v.cycleBytesConfirmed += bytesConfirmed
v.Update(current)
}

func (v *Congestion) UpdateRTT(current uint32, rtt uint32) {
v.Lock()
defer v.Unlock()

if v.state == CongestionStateRTTProbe || rtt < v.rtt {
v.rtt = rtt
v.rttUpdateTime = current
}

v.Update(current)
}

func (v *Congestion) GetBytesLimit() uint32 {
v.RLock()
defer v.RUnlock()

if v.state == CongestionStateRTTProbe {
return v.initialThroughput/1000/(1000/defaultRTT) - v.cycleBytesSent
}

return v.cycleBytesLimit
}

func (v *Congestion) RoundTripTime() uint32 {
v.RLock()
defer v.RUnlock()

if v.state == CongestionStateRTTProbe {
return defaultRTT
}

return v.rtt
}

func (v *Congestion) Timeout() uint32 {
v.RLock()
defer v.RUnlock()

if v.state == CongestionStateRTTProbe {
return defaultRTT * 3 / 2
}

return v.rtt * 3 / 2
}
1 change: 1 addition & 0 deletions transport/internet/tcp/config.proto
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
syntax = "proto3";

package v2ray.core.transport.internet.tcp;
option csharp_namespace = "V2Ray.Core.Transport.Internet.Tcp";
option go_package = "tcp";
option java_package = "com.v2ray.core.transport.internet.tcp";
option java_outer_classname = "ConfigProto";
Expand Down
Loading

0 comments on commit eb78243

Please sign in to comment.