diff options
Diffstat (limited to 'vendor/github.com/SevereCloud/vksdk/v2/internal')
-rw-r--r-- | vendor/github.com/SevereCloud/vksdk/v2/internal/charset.go | 60 | ||||
-rw-r--r-- | vendor/github.com/SevereCloud/vksdk/v2/internal/transport.go | 74 |
2 files changed, 134 insertions, 0 deletions
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/internal/charset.go b/vendor/github.com/SevereCloud/vksdk/v2/internal/charset.go new file mode 100644 index 00000000..0174ebf2 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/internal/charset.go @@ -0,0 +1,60 @@ +/* +Package internal unimportable +*/ +package internal // import "github.com/SevereCloud/vksdk/v2/internal" + +import ( + "io" + "strings" + + "golang.org/x/text/encoding/charmap" + "golang.org/x/text/runes" + "golang.org/x/text/transform" +) + +// illegal is a collection of runes. +type illegal struct{} + +// Contains return true. +func (i illegal) Contains(r rune) bool { + return !(r == 0x09 || + r == 0x0A || + r == 0x0D || + r >= 0x20 && r <= 0xDF77 || + r >= 0xE000 && r <= 0xFFFD || + r >= 0x10000 && r <= 0x10FFFF) +} + +// XMLSanitizerReader creates an io.Reader that +// wraps another io.Reader and removes illegal xml +// characters from the io stream. +func XMLSanitizerReader(xml io.Reader) io.Reader { + var i illegal + t := transform.Chain(runes.Remove(i)) + + return transform.NewReader(xml, t) +} + +// CharsetUnknownError unknown charset. +type CharsetUnknownError struct { + Name string +} + +// Error returns the message of a CharsetUnknownError. +func (c *CharsetUnknownError) Error() string { + return "unknown charset: " + c.Name +} + +// CharsetReader if non-nil, defines a function to generate +// charset-conversion readers, converting from the provided +// non-UTF-8 charset into UTF-8. If CharsetReader is nil or +// returns an error, parsing stops with an error. One of the +// the CharsetReader's result values must be non-nil. +func CharsetReader(charset string, input io.Reader) (io.Reader, error) { + switch strings.ToLower(charset) { + case "windows-1251": + return charmap.Windows1251.NewDecoder().Reader(input), nil + default: + return nil, &CharsetUnknownError{Name: charset} + } +} diff --git a/vendor/github.com/SevereCloud/vksdk/v2/internal/transport.go b/vendor/github.com/SevereCloud/vksdk/v2/internal/transport.go new file mode 100644 index 00000000..2ff8fbb3 --- /dev/null +++ b/vendor/github.com/SevereCloud/vksdk/v2/internal/transport.go @@ -0,0 +1,74 @@ +/* +Package internal unimportable +*/ +package internal // import "github.com/SevereCloud/vksdk/v2/internal" + +import ( + "context" + "net/http" + + "github.com/SevereCloud/vksdk/v2" +) + +// UserAgent module. +const UserAgent = "vksdk/" + vksdk.Version + " (+https://github.com/SevereCloud/vksdk)" + +// ContextKey is just an empty struct. It exists so HTTPClient can be +// an immutable public variable with a unique type. It's immutable +// because nobody else can create a ContextKey, being unexported. +type ContextKey int + +// ContextKey list. +const ( + HTTPClientKey ContextKey = iota + UserAgentKey + GroupIDKey + EventIDKey + LongPollTsKey + CallbackRetryCounterKey + CallbackRetryAfterKey +) + +// ContextClient return *http.Client. +func ContextClient(ctx context.Context) *http.Client { + if ctx != nil { + if hc, ok := ctx.Value(HTTPClientKey).(*http.Client); ok { + return hc + } + } + + return http.DefaultClient +} + +// ContextUserAgent return User-Agent from context. +func ContextUserAgent(ctx context.Context) string { + if ctx != nil { + if hc, ok := ctx.Value(UserAgentKey).(string); ok { + return hc + } + } + + return UserAgent +} + +// DoRequest sends an HTTP request and returns an HTTP response. +// +// The provided ctx must be non-nil. If it is canceled or times out, +// ctx.Err() will be returned. +func DoRequest(ctx context.Context, req *http.Request) (*http.Response, error) { + client := ContextClient(ctx) + + if req.UserAgent() == "" { + req.Header.Set("User-Agent", ContextUserAgent(ctx)) + } + + resp, err := client.Do(req.WithContext(ctx)) + // If we got an error, and the context has been canceled, + // the context's error is probably more useful. + if err != nil { + <-ctx.Done() + err = ctx.Err() + } + + return resp, err +} |