浏览代码

proto option for C# namespace

Darien Raymond 8 年之前
父节点
当前提交
eb782436b3

+ 1 - 0
app/dispatcher/config.proto

@@ -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";

+ 1 - 0
app/dns/config.proto

@@ -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";

+ 1 - 0
app/router/config.proto

@@ -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";

+ 1 - 0
app/web/config.proto

@@ -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";

+ 1 - 0
common/net/address.proto

@@ -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";

+ 1 - 0
common/net/destination.proto

@@ -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";

+ 1 - 0
common/net/network.proto

@@ -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";

+ 1 - 0
common/net/port.proto

@@ -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";

+ 1 - 0
common/protocol/headers.proto

@@ -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";

+ 1 - 0
common/protocol/server_spec.proto

@@ -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";

+ 1 - 0
common/protocol/user.proto

@@ -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";

+ 1 - 0
common/serial/typed_message.proto

@@ -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";

+ 1 - 0
config.proto

@@ -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";

+ 1 - 0
proxy/blackhole/config.proto

@@ -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";

+ 1 - 0
proxy/dokodemo/config.proto

@@ -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";

+ 1 - 0
proxy/freedom/config.proto

@@ -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";

+ 1 - 0
proxy/http/config.proto

@@ -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";

+ 1 - 0
proxy/shadowsocks/config.proto

@@ -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";

+ 1 - 0
proxy/socks/config.proto

@@ -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";

+ 1 - 1
proxy/vmess/account.proto

@@ -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";
 

+ 1 - 0
proxy/vmess/inbound/config.proto

@@ -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";

+ 1 - 0
proxy/vmess/outbound/config.proto

@@ -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";

+ 1 - 0
transport/config.proto

@@ -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";

+ 1 - 0
transport/internet/config.proto

@@ -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";
 

+ 1 - 0
transport/internet/headers/http/config.proto

@@ -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";

+ 1 - 0
transport/internet/headers/noop/config.proto

@@ -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";

+ 1 - 0
transport/internet/headers/srtp/config.proto

@@ -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";

+ 1 - 0
transport/internet/headers/utp/config.proto

@@ -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";

+ 1 - 0
transport/internet/kcp/config.proto

@@ -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";

+ 155 - 0
transport/internet/kcp/congestion.go

@@ -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 - 0
transport/internet/tcp/config.proto

@@ -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";

+ 1 - 0
transport/internet/tls/config.proto

@@ -1,6 +1,7 @@
 syntax = "proto3";
 
 package v2ray.core.transport.internet.tls;
+option csharp_namespace = "V2Ray.Core.Transport.Internet.Tls";
 option go_package = "tls";
 option java_package = "com.v2ray.core.transport.internet.tls";
 option java_outer_classname = "ConfigProto";

+ 1 - 0
transport/internet/ws/config.proto

@@ -1,6 +1,7 @@
 syntax = "proto3";
 
 package v2ray.core.transport.internet.ws;
+option csharp_namespace = "V2Ray.Core.Transport.Internet.Ws";
 option go_package = "ws";
 option java_package = "com.v2ray.core.transport.internet.ws";
 option java_outer_classname = "ConfigProto";