1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2025-01-30 13:17:11 -05:00
This commit is contained in:
Darien Raymond 2017-11-21 17:02:55 +01:00
parent fcc66704fa
commit b0ac43a8fc
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169

View File

@ -40,8 +40,10 @@ type SizeCounter struct {
Size int64
}
// CopyOption is an option for copying data.
type CopyOption func(*copyHandler)
// IgnoreReaderError is a CopyOption that ignores errors from reader. Copy will continue in such case.
func IgnoreReaderError() CopyOption {
return func(handler *copyHandler) {
handler.onReadError = append(handler.onReadError, func(err error) error {
@ -50,6 +52,7 @@ func IgnoreReaderError() CopyOption {
}
}
// IgnoreWriterError is a CopyOption that ignores errors from writer. Copy will continue in such case.
func IgnoreWriterError() CopyOption {
return func(handler *copyHandler) {
handler.onWriteError = append(handler.onWriteError, func(err error) error {
@ -58,6 +61,7 @@ func IgnoreWriterError() CopyOption {
}
}
// UpdateActivity is a CopyOption to update activity on each data copy operation.
func UpdateActivity(timer signal.ActivityUpdater) CopyOption {
return func(handler *copyHandler) {
handler.onData = append(handler.onData, func(MultiBuffer) {
@ -66,6 +70,7 @@ func UpdateActivity(timer signal.ActivityUpdater) CopyOption {
}
}
// CountSize is a CopyOption that sums the total size of data copied into the given SizeCounter.
func CountSize(sc *SizeCounter) CopyOption {
return func(handler *copyHandler) {
handler.onData = append(handler.onData, func(b MultiBuffer) {
@ -97,8 +102,7 @@ func copyInternal(reader Reader, writer Writer, handler *copyHandler) error {
}
}
// Copy dumps all payload from reader to writer or stops when an error occurs.
// ActivityTimer gets updated as soon as there is a payload.
// Copy dumps all payload from reader to writer or stops when an error occurs. It returns nil when EOF.
func Copy(reader Reader, writer Writer, options ...CopyOption) error {
handler := new(copyHandler)
for _, option := range options {