Documentation ¶
Index ¶
- Constants
- Variables
- func CanonicalHeaderKey(s string) string
- func CheckResponseCode(respCode int, allowed []int) error
- func GetContentLength(request *Request) (int64, error)
- func GetLastModified(request *Request) (int64, error)
- func IsExpired(request *Request, info *ExpireInfo) (bool, error)
- func IsNoClientFoundError(err error) bool
- func IsResourceNotReachableError(err error) bool
- func IsSupportRange(request *Request) (bool, error)
- func List(request *Request) ([]*url.URL, error)
- func ListClients() []string
- func Register(scheme string, resourceClient ResourceClient, adaptor RequestAdapter, ...) error
- func RequestEq(url string) gomock.Matcher
- func UnRegister(scheme string)
- func UpdatePluginDir(pluginDir string)
- func WithContentLength(length int64) func(*Response)
- func WithExpireInfo(info ExpireInfo) func(*Response)
- func WithHeader(header map[string]string) func(*Response)
- func WithStatus(code int, status string) func(*Response)
- func WithTemporary(temporary func() bool) func(*Response)
- func WithValidate(validate func() error) func(*Response)
- type ClientManager
- type ExpireInfo
- type Header
- type Hook
- type Metadata
- type Option
- type Request
- type RequestAdapter
- type ResourceClient
- type ResourceLister
- type ResourceMetadataGetter
- type Response
- type UnexpectedStatusCodeError
Constants ¶
const ( LastModified = "X-Dragonfly-Last-Modified" IfModifiedSince = "X-Dragonfly-If-Modified-Since" ETag = "X-Dragonfly-ETag" IfNoneMatch = "X-Dragonfly-If-None-Match" Range = "X-Dragonfly-Range" // startIndex-endIndex )
const LastModifiedLayout = "Mon, 02 Jan 2006 15:04:05 GMT"
const (
TimeFormat = "Mon, 02 Jan 2006 15:04:05 GMT"
)
const (
UnknownSourceFileLen = -2
)
Variables ¶
var ( // ErrResourceNotReachable represents the url resource is a not reachable. ErrResourceNotReachable = errors.New("resource is not reachable") // ErrNoClientFound represents no source client to resolve url ErrNoClientFound = errors.New("no source client found") // ErrClientNotSupportList represents the source client not support list action ErrClientNotSupportList = errors.New("source client not support list") // ErrClientNotSupportGetMetadata represents the source client not support get metadata ErrClientNotSupportGetMetadata = errors.New("source client not support get metadata") )
Functions ¶
func CanonicalHeaderKey ¶ added in v2.0.2
func CheckResponseCode ¶ added in v2.0.2
CheckResponseCode returns UnexpectedStatusError if the given response code is not one of the allowed status codes; otherwise nil.
func GetContentLength ¶
func GetLastModified ¶ added in v2.0.2
func IsNoClientFoundError ¶ added in v2.0.2
func IsResourceNotReachableError ¶ added in v2.0.2
func IsSupportRange ¶
func ListClients ¶ added in v2.0.3
func ListClients() []string
func Register ¶
func Register(scheme string, resourceClient ResourceClient, adaptor RequestAdapter, hooks ...Hook) error
func UnRegister ¶
func UnRegister(scheme string)
func UpdatePluginDir ¶ added in v2.0.2
func UpdatePluginDir(pluginDir string)
func WithContentLength ¶ added in v2.0.2
func WithExpireInfo ¶ added in v2.0.2
func WithExpireInfo(info ExpireInfo) func(*Response)
func WithHeader ¶ added in v2.0.2
func WithStatus ¶ added in v2.0.2
func WithTemporary ¶ added in v2.0.5
func WithValidate ¶ added in v2.0.3
Types ¶
type ClientManager ¶
type ClientManager interface { // Register registers a source client with scheme Register(scheme string, resourceClient ResourceClient, adapter RequestAdapter, hook ...Hook) error // UnRegister revoke a source client from manager UnRegister(scheme string) // GetClient gets a source client by scheme GetClient(scheme string, options ...Option) (ResourceClient, bool) // ListClients lists all supported client scheme ListClients() []string }
func NewManager ¶
func NewManager() ClientManager
type ExpireInfo ¶ added in v2.0.2
type Header ¶ added in v2.0.2
A Header represents the key-value pairs in a Dragonfly source header.
The keys should be in canonical form, as returned by CanonicalHeaderKey.
func (Header) Add ¶ added in v2.0.2
Add adds the key, value pair to the header. It appends to any existing values associated with key. The key is case insensitive; it is canonicalized by CanonicalHeaderKey.
func (Header) Del ¶ added in v2.0.2
Del deletes the values associated with key. The key is case insensitive; it is canonicalized by CanonicalHeaderKey.
func (Header) Get ¶ added in v2.0.2
Get gets the first value associated with the given key. If there are no values associated with the key, Get returns "". It is case insensitive; textproto.CanonicalMIMEHeaderKey is used to canonicalize the provided key. To use non-canonical keys, access the map directly.
func (Header) Set ¶ added in v2.0.2
Set sets the header entries associated with key to the single element value. It replaces any existing values associated with key. The key is case insensitive; it is canonicalized by textproto.CanonicalMIMEHeaderKey. To use non-canonical keys, assign to the map directly.
type Hook ¶ added in v2.0.2
type Hook interface { BeforeRequest(request *Request) error AfterResponse(response *Response) error }
Hook TODO hook
type Metadata ¶ added in v2.0.5
type Metadata struct { Status string StatusCode int Header Header // SupportRange indicates source supports partial download, like Range in http request SupportRange bool // ContentLength indicates the current content length for the target request // ContentLength int64 // TotalContentLength indicates the total content length for the target request // eg, for http response header: // Content-Range: bytes 0-9/2443 // 2443 is the TotalContentLength, 10 is the ContentLength TotalContentLength int64 Validate func() error Temporary func() bool }
func GetMetadata ¶ added in v2.0.5
type Request ¶ added in v2.0.2
func NewRequest ¶ added in v2.0.2
func NewRequestWithContext ¶ added in v2.0.2
func NewRequestWithHeader ¶ added in v2.0.2
func (*Request) Clone ¶ added in v2.0.2
Clone returns a deep copy of r with its context changed to ctx. The provided ctx must be non-nil.
For an outgoing client request, the context controls the entire lifetime of a request and its response: obtaining a connection, sending the request, and reading the response headers and body.
func (*Request) Context ¶ added in v2.0.2
Context returns the request's context. To change the context, use WithContext.
The returned context is always non-nil; it defaults to the background context.
For outgoing client requests, the context controls cancellation.
For incoming server requests, the context is canceled when the client's connection closes, the request is canceled (with HTTP/2), or when the ServeHTTP method returns.
func (*Request) WithContext ¶ added in v2.0.2
WithContext returns a shallow copy of r with its context changed to ctx. The provided ctx must be non-nil.
For outgoing client request, the context controls the entire lifetime of a request and its response: obtaining a connection, sending the request, and reading the response headers and body.
To create a new request with a context, use NewRequestWithContext. To change the context of a request, such as an incoming request you want to modify before sending back out, use Request.Clone. Between those two uses, it's rare to need WithContext.
type RequestAdapter ¶ added in v2.0.4
type ResourceClient ¶
type ResourceClient interface { // GetContentLength get length of resource content // return source.UnknownSourceFileLen if response status is not StatusOK and StatusPartialContent GetContentLength(request *Request) (int64, error) // IsSupportRange checks if resource supports breakpoint continuation // return false if response status is not StatusPartialContent IsSupportRange(request *Request) (bool, error) // IsExpired checks if a resource received or stored is the same. // return false and non-nil err to prevent the source from exploding if // fails to get the result, it is considered that the source has not expired IsExpired(request *Request, info *ExpireInfo) (bool, error) // Download downloads from source Download(request *Request) (*Response, error) // GetLastModified gets last modified timestamp milliseconds of resource GetLastModified(request *Request) (int64, error) }
ResourceClient defines the API interface to interact with source.
func LoadPlugin ¶
func LoadPlugin(dir, scheme string) (ResourceClient, error)
type ResourceLister ¶ added in v2.0.2
ResourceLister defines the interface to list all downloadable resources in request url
type ResourceMetadataGetter ¶ added in v2.0.5
ResourceMetadataGetter defines the API interface to get metadata for special resource The metadata will be used for concurrent multiple pieces downloading
type Response ¶ added in v2.0.2
type Response struct { Status string StatusCode int Header Header Body io.ReadCloser ContentLength int64 // Validate this response is okay to transfer in p2p network, like status 200 or 206 in http is valid to do this, // otherwise return status code to original client Validate func() error // Temporary check the error whether the error is temporary, if is true, we can retry it later Temporary func() bool }
func NewResponse ¶ added in v2.0.2
func NewResponse(rc io.ReadCloser, opts ...func(*Response)) *Response
func (*Response) ExpireInfo ¶ added in v2.0.2
func (resp *Response) ExpireInfo() ExpireInfo
type UnexpectedStatusCodeError ¶ added in v2.0.2
type UnexpectedStatusCodeError struct {
// contains filtered or unexported fields
}
UnexpectedStatusCodeError is returned when a source responds with neither an error nor with a status code indicating success.
func (UnexpectedStatusCodeError) Error ¶ added in v2.0.2
func (e UnexpectedStatusCodeError) Error() string
Error implements interface error
func (UnexpectedStatusCodeError) Got ¶ added in v2.0.2
func (e UnexpectedStatusCodeError) Got() int
Got is the actual status code returned by source.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
clients
|
|
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |