| 
					
				 | 
			
			
				@@ -27,7 +27,7 @@ var ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	bytesProxied    atomic.Int64 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-func newSession(serverid, clientid syncthingprotocol.DeviceID, sessionRateLimit, globalRateLimit *rate.Limiter) *session { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func newSession(serverid, clientid syncthingprotocol.DeviceID, sessionLimitBps int, globalRateLimit *rate.Limiter) *session { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	serverkey := make([]byte, 32) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	_, err := rand.Read(serverkey) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if err != nil { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -40,12 +40,17 @@ func newSession(serverid, clientid syncthingprotocol.DeviceID, sessionRateLimit, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var sessionRateLimit *rate.Limiter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if sessionLimitBps > 0 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		sessionRateLimit = rate.NewLimiter(rate.Limit(sessionLimitBps), 2*sessionLimitBps) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	ses := &session{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		serverkey: serverkey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		serverid:  serverid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		clientkey: clientkey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		clientid:  clientid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		rateLimit: makeRateLimitFunc(sessionRateLimit, globalRateLimit), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		limiter:   sessionRateLimit, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		connsChan: make(chan net.Conn), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		conns:     make([]net.Conn, 0, 2), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -109,6 +114,7 @@ type session struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	clientid  syncthingprotocol.DeviceID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	rateLimit func(bytes int) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	limiter   *rate.Limiter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	connsChan chan net.Conn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	conns     []net.Conn 
			 |