From a3e264148275b3be383e76741f738f0708dd6ec2 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 7 Jan 2017 14:49:31 +0300 Subject: [PATCH] Process already sent files with dummy empty payload --- src/cypherpunks.ru/nncp/llp.go | 37 ++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/cypherpunks.ru/nncp/llp.go b/src/cypherpunks.ru/nncp/llp.go index e237c89..26e982d 100644 --- a/src/cypherpunks.ru/nncp/llp.go +++ b/src/cypherpunks.ru/nncp/llp.go @@ -528,29 +528,32 @@ func (state *LLPState) StartWorkers(conn net.Conn, infosPayloads [][]byte, paylo state.ctx.LogE("llp-file", SdsAdd(sdsp, SDS{"err": err}), "") break } - state.ctx.LogD("llp-file", sdsp, "seeking") - if _, err = fd.Seek(int64(freq.Offset), 0); err != nil { - state.ctx.LogE("llp-file", SdsAdd(sdsp, SDS{"err": err}), "") - break - } - buf := make([]byte, MaxLLPSize-LLPHeadOverhead-LLPFileOverhead) - n, err := fd.Read(buf) - if err != nil { - state.ctx.LogE("llp-file", SdsAdd(sdsp, SDS{"err": err}), "") - break - } - buf = buf[:n] - state.ctx.LogD( - "llp-file", - SdsAdd(sdsp, SDS{"size": strconv.Itoa(n)}), - "read", - ) fi, err := fd.Stat() if err != nil { state.ctx.LogE("llp-file", SdsAdd(sdsp, SDS{"err": err}), "") break } fullSize := uint64(fi.Size()) + var buf []byte + if freq.Offset < fullSize { + state.ctx.LogD("llp-file", sdsp, "seeking") + if _, err = fd.Seek(int64(freq.Offset), 0); err != nil { + state.ctx.LogE("llp-file", SdsAdd(sdsp, SDS{"err": err}), "") + break + } + buf = make([]byte, MaxLLPSize-LLPHeadOverhead-LLPFileOverhead) + n, err := fd.Read(buf) + if err != nil { + state.ctx.LogE("llp-file", SdsAdd(sdsp, SDS{"err": err}), "") + break + } + buf = buf[:n] + state.ctx.LogD( + "llp-file", + SdsAdd(sdsp, SDS{"size": strconv.Itoa(n)}), + "read", + ) + } fd.Close() payload = MarshalLLP(LLPTypeFile, LLPFile{ Hash: freq.Hash, -- 2.48.1