From: Sergey Matveev Date: Sat, 7 Jan 2017 11:49:31 +0000 (+0300) Subject: Process already sent files with dummy empty payload X-Git-Tag: 0.1~38 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a3e264148275b3be383e76741f738f0708dd6ec2;p=nncp.git Process already sent files with dummy empty payload --- 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,