]> Cypherpunks.ru repositories - nncp.git/commitdiff
Process already sent files with dummy empty payload
authorSergey Matveev <stargrave@stargrave.org>
Sat, 7 Jan 2017 11:49:31 +0000 (14:49 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 7 Jan 2017 11:49:31 +0000 (14:49 +0300)
src/cypherpunks.ru/nncp/llp.go

index e237c8926854c92f5e8a4b24cfcf9d8d10908df5..26e982d0433a57fb25d87ad618df0718c1fe00d0 100644 (file)
@@ -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,