mirror of
https://github.com/cwinfo/matterbridge.git
synced 2025-06-27 21:39:22 +00:00
Add sshchat dependencies in vendor
This commit is contained in:
21
vendor/github.com/shazow/rateio/LICENSE
generated
vendored
Normal file
21
vendor/github.com/shazow/rateio/LICENSE
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Andrey Petrov
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
29
vendor/github.com/shazow/rateio/doc.go
generated
vendored
Normal file
29
vendor/github.com/shazow/rateio/doc.go
generated
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
Package rateio provides an io interfaces for rate-limiting.
|
||||
|
||||
This can be used to apply rate limiting to any type that implements an io-style interface.
|
||||
|
||||
For example, we can use it to restrict the reading rate of a net.Conn:
|
||||
|
||||
type limitedConn struct {
|
||||
net.Conn
|
||||
io.Reader // Our rate-limited io.Reader for net.Conn
|
||||
}
|
||||
|
||||
func (r *limitedConn) Read(p []byte) (n int, err error) {
|
||||
return r.Reader.Read(p)
|
||||
}
|
||||
|
||||
// ReadLimitConn returns a net.Conn whose io.Reader interface is rate-limited by limiter.
|
||||
func ReadLimitConn(conn net.Conn, limiter rateio.Limiter) net.Conn {
|
||||
return &limitedConn{
|
||||
Conn: conn,
|
||||
Reader: rateio.NewReader(conn, limiter),
|
||||
}
|
||||
}
|
||||
|
||||
Then we can use ReadLimitConn to wrap our existing net.Conn and continue using
|
||||
the wrapped version in its place.
|
||||
|
||||
*/
|
||||
package rateio
|
62
vendor/github.com/shazow/rateio/limiter.go
generated
vendored
Normal file
62
vendor/github.com/shazow/rateio/limiter.go
generated
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
package rateio
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
)
|
||||
|
||||
const minInt = -int(^uint(0)>>1) - 1
|
||||
|
||||
// The error returned when the read rate exceeds our specification.
|
||||
var ErrRateExceeded = errors.New("Read rate exceeded.")
|
||||
|
||||
// Limiter is an interface for a rate limiter.
|
||||
// There are a few example limiters included in the package, but feel free to go wild with your own.
|
||||
type Limiter interface {
|
||||
// Apply this many bytes to the limiter, return ErrRateExceeded if the defined rate is exceeded.
|
||||
Count(int) error
|
||||
}
|
||||
|
||||
// simpleLimiter is a rate limiter that restricts Amount bytes in Frequency duration.
|
||||
type simpleLimiter struct {
|
||||
Amount int
|
||||
Frequency time.Duration
|
||||
|
||||
numRead int
|
||||
timeRead time.Time
|
||||
}
|
||||
|
||||
// NewSimpleLimiter creates a Limiter that restricts a given number of bytes per frequency.
|
||||
func NewSimpleLimiter(amount int, frequency time.Duration) Limiter {
|
||||
return &simpleLimiter{
|
||||
Amount: amount,
|
||||
Frequency: frequency,
|
||||
}
|
||||
}
|
||||
|
||||
// NewGracefulLimiter returns a Limiter that is the same as a
|
||||
// SimpleLimiter but adds a grace period at the start of the rate
|
||||
// limiting where it allows unlimited bytes to be read during that
|
||||
// period.
|
||||
func NewGracefulLimiter(amount int, frequency time.Duration, grace time.Duration) Limiter {
|
||||
return &simpleLimiter{
|
||||
Amount: amount,
|
||||
Frequency: frequency,
|
||||
numRead: minInt,
|
||||
timeRead: time.Now().Add(grace),
|
||||
}
|
||||
}
|
||||
|
||||
// Count applies n bytes to the limiter.
|
||||
func (limit *simpleLimiter) Count(n int) error {
|
||||
now := time.Now()
|
||||
if now.After(limit.timeRead) {
|
||||
limit.numRead = 0
|
||||
limit.timeRead = now.Add(limit.Frequency)
|
||||
}
|
||||
limit.numRead += n
|
||||
if limit.numRead > limit.Amount {
|
||||
return ErrRateExceeded
|
||||
}
|
||||
return nil
|
||||
}
|
25
vendor/github.com/shazow/rateio/reader.go
generated
vendored
Normal file
25
vendor/github.com/shazow/rateio/reader.go
generated
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
package rateio
|
||||
|
||||
import "io"
|
||||
|
||||
type reader struct {
|
||||
io.Reader
|
||||
Limiter
|
||||
}
|
||||
|
||||
// Read reads data into p.
|
||||
// Returns ErrRateExceeded error if our specified read is exceeded.
|
||||
func (r *reader) Read(p []byte) (n int, err error) {
|
||||
n, err = r.Reader.Read(p)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = r.Limiter.Count(n)
|
||||
return
|
||||
}
|
||||
|
||||
// NewReader proxies an io.Reader but keeps track of bytes read based on our Limiter.
|
||||
func NewReader(r io.Reader, limiter Limiter) io.Reader {
|
||||
return &reader{r, limiter}
|
||||
}
|
25
vendor/github.com/shazow/rateio/writer.go
generated
vendored
Normal file
25
vendor/github.com/shazow/rateio/writer.go
generated
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
package rateio
|
||||
|
||||
import "io"
|
||||
|
||||
type writer struct {
|
||||
io.Writer
|
||||
Limiter
|
||||
}
|
||||
|
||||
// Write writes the contents of p into the buffer.
|
||||
// Returns ErrRateExceeded error if our specified read is exceeded.
|
||||
func (w *writer) Write(p []byte) (n int, err error) {
|
||||
n, err = w.Writer.Write(p)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = w.Limiter.Count(n)
|
||||
return
|
||||
}
|
||||
|
||||
// NewWriter proxies an io.Writer but keeps track of bytes read based on our Limiter.
|
||||
func NewWriter(w io.Writer, limiter Limiter) io.Writer {
|
||||
return &writer{w, limiter}
|
||||
}
|
Reference in New Issue
Block a user