+
+func (ctx *Ctx) CheckNoCK(nodeId *NodeId, hshValue *[MTHSize]byte, mth MTH) (int64, error) {
+ dirToSync := filepath.Join(ctx.Spool, nodeId.String(), string(TRx))
+ pktName := Base32Codec.EncodeToString(hshValue[:])
+ pktPath := filepath.Join(dirToSync, pktName)
+ fd, err := os.Open(pktPath + NoCKSuffix)
+ if err != nil {
+ return 0, err
+ }
+ defer fd.Close()
+ fi, err := fd.Stat()
+ if err != nil {
+ return 0, err
+ }
+ size := fi.Size()
+ les := LEs{
+ {"XX", string(TRx)},
+ {"Node", nodeId},
+ {"Pkt", pktName},
+ {"FullSize", size},
+ }
+ var gut bool
+ if mth == nil {
+ gut, err = Check(fd, size, hshValue[:], les, ctx.ShowPrgrs)
+ } else {
+ if _, err = mth.PreaddFrom(
+ bufio.NewReaderSize(fd, MTHSize),
+ pktName, ctx.ShowPrgrs,
+ ); err != nil {
+ return 0, err
+ }
+ if bytes.Compare(mth.Sum(nil), hshValue[:]) == 0 {
+ gut = true
+ }
+ }
+ if err != nil || !gut {
+ return 0, errors.New("checksum mismatch")
+ }
+ if err = os.Rename(pktPath+NoCKSuffix, pktPath); err != nil {
+ return 0, err
+ }
+ if err = DirSync(dirToSync); err != nil {
+ return size, err
+ }
+ if ctx.HdrUsage {
+ if _, err = fd.Seek(0, io.SeekStart); err != nil {
+ return size, err
+ }
+ _, pktEncRaw, err := ctx.HdrRead(fd)
+ if err != nil {
+ return size, err
+ }
+ ctx.HdrWrite(pktEncRaw, pktPath)
+ }
+ return size, err
+}