X-Git-Url: http://www.git.cypherpunks.ru/?p=nncp.git;a=blobdiff_plain;f=src%2Ftoss.go;fp=src%2Ftoss.go;h=c4710494bc1a56d8ba5d785f89e0ce44ba23eb29;hp=d365e2efd5c47c172f607bee0f8919817da83189;hb=2e22bda93fdf8f2f84e4d19b3f1d46318b497139;hpb=16b44ce6e0f7e3d668c8cf7edf0ecf0bb38e1a4c diff --git a/src/toss.go b/src/toss.go index d365e2e..c471049 100644 --- a/src/toss.go +++ b/src/toss.go @@ -44,6 +44,7 @@ import ( const ( SeenDir = "seen" + ACKDir = "ack" ) type TossOpts struct { @@ -56,6 +57,7 @@ type TossOpts struct { NoTrns bool NoArea bool NoACK bool + GenACK bool } func jobPath2Seen(jobPath string) string { @@ -123,6 +125,33 @@ func jobProcess( humanize.IBytes(pktSize), ) }) + if opts.GenACK && pkt.Type != PktTypeACK { + newPktName, err := ctx.TxACK( + sender, sender.ACKNice, pktName, sender.ACKMinSize, + ) + if err != nil { + ctx.LogE("rx-unmarshal", les, err, func(les LEs) string { + return fmt.Sprintf("Tossing %s/%s: generating ACK", sender.Name, pktName) + }) + return err + } + ackDir := filepath.Join(ctx.Spool, sender.Id.String(), string(TTx), ACKDir) + os.MkdirAll(ackDir, os.FileMode(0777)) + if fd, err := os.Create(filepath.Join(ackDir, newPktName)); err == nil { + fd.Close() + if err = DirSync(ackDir); err != nil { + ctx.LogE("rx-genack", les, err, func(les LEs) string { + return fmt.Sprintf("Tossing %s/%s: genACK", sender.Name, pktName) + }) + return err + } + } else { + ctx.LogE("rx-genack", les, err, func(les LEs) string { + return fmt.Sprintf("Tossing %s/%s: genACK", sender.Name, pktName) + }) + return err + } + } switch pkt.Type { case PktTypeExec, PktTypeExecFat: if opts.NoExec {