feat: initial goget release — modern IPv6-first download utility
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
//go:build linux || freebsd
|
||||
// +build linux freebsd
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
)
|
||||
|
||||
// RequestContext holds metadata about the request across layers
|
||||
type RequestContext struct {
|
||||
// Request ID for logging
|
||||
RequestID string
|
||||
|
||||
// Start of operation
|
||||
StartTime time.Time
|
||||
|
||||
// Protocols used in the chain
|
||||
ProtocolChain []string
|
||||
|
||||
// IP address to which was connected
|
||||
ConnectedIP string
|
||||
|
||||
// IP version (4 or 6)
|
||||
IPVersion int
|
||||
|
||||
// Number of attempts
|
||||
AttemptCount int
|
||||
|
||||
// Context for cancellation
|
||||
Context context.Context
|
||||
}
|
||||
|
||||
// NewRequestContext creates a new request context
|
||||
func NewRequestContext(ctx context.Context, requestID string) *RequestContext {
|
||||
return &RequestContext{
|
||||
RequestID: requestID,
|
||||
StartTime: time.Now(),
|
||||
ProtocolChain: make([]string, 0),
|
||||
IPVersion: 0,
|
||||
AttemptCount: 0,
|
||||
Context: ctx,
|
||||
}
|
||||
}
|
||||
|
||||
// Duration returns the duration of operation
|
||||
func (rc *RequestContext) Duration() time.Duration {
|
||||
return time.Since(rc.StartTime)
|
||||
}
|
||||
|
||||
// AddProtocol adds a protocol to the chain
|
||||
func (rc *RequestContext) AddProtocol(protocol string) {
|
||||
rc.ProtocolChain = append(rc.ProtocolChain, protocol)
|
||||
}
|
||||
|
||||
// IsCancelled returns whether the context was cancelled
|
||||
func (rc *RequestContext) IsCancelled() bool {
|
||||
select {
|
||||
case <-rc.Context.Done():
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user