Allow not to limit bandwidth in LAN (fixes #1336)

This commit is contained in:
Audrius Butkevicius
2015-03-08 18:36:59 +00:00
parent 03bbf273b3
commit 6fa97eeec7
7 changed files with 161 additions and 5 deletions

View File

@@ -104,15 +104,18 @@ next:
continue next
}
// If rate limiting is set, we wrap the connection in a
// limiter.
// If rate limiting is set, and based on the address we should
// limit the connection, then we wrap it in a limiter.
limit := shouldLimit(conn.RemoteAddr())
wr := io.Writer(conn)
if writeRateLimit != nil {
if limit && writeRateLimit != nil {
wr = &limitedWriter{conn, writeRateLimit}
}
rd := io.Reader(conn)
if readRateLimit != nil {
if limit && readRateLimit != nil {
rd = &limitedReader{conn, readRateLimit}
}
@@ -121,7 +124,7 @@ next:
l.Infof("Established secure connection to %s at %s", remoteID, name)
if debugNet {
l.Debugf("cipher suite %04X", conn.ConnectionState().CipherSuite)
l.Debugf("cipher suite: %04X in lan: %t", conn.ConnectionState().CipherSuite, !limit)
}
events.Default.Log(events.DeviceConnected, map[string]string{
"id": remoteID.String(),
@@ -283,3 +286,20 @@ func setTCPOptions(conn *net.TCPConn) {
l.Infoln(err)
}
}
func shouldLimit(addr net.Addr) bool {
if cfg.Options().LimitBandwidthInLan {
return true
}
tcpaddr, ok := addr.(*net.TCPAddr)
if !ok {
return true
}
for _, lan := range lans {
if lan.Contains(tcpaddr.IP) {
return false
}
}
return !tcpaddr.IP.IsLoopback()
}