X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Ftoss.go;h=4a447cecadae479e81a15b39ef3d0c350cfed83a;hb=28707662c105334706aa3979759b0e76da94fa97;hp=3fc4865538e7133c0a39300539dd285d847e6c3e;hpb=9c70a8054e60010ad69699ad8532d4a3be06ea41;p=nncp.git diff --git a/src/toss.go b/src/toss.go index 3fc4865..4a447ce 100644 --- a/src/toss.go +++ b/src/toss.go @@ -588,11 +588,35 @@ func jobProcess( } ctx.LogD("rx-tx", les, logMsg) if !dryRun { - if err = ctx.TxTrns(node, nice, int64(pktSize), pipeR); err != nil { - ctx.LogE("rx", les, err, func(les LEs) string { - return logMsg(les) + ": txing" - }) - return err + if len(node.Via) == 0 { + if err = ctx.TxTrns(node, nice, int64(pktSize), pipeR); err != nil { + ctx.LogE("rx", les, err, func(les LEs) string { + return logMsg(les) + ": txing" + }) + return err + } + } else { + via := node.Via[:len(node.Via)-1] + node = ctx.Neigh[*node.Via[len(node.Via)-1]] + node = &Node{Id: node.Id, Via: via, ExchPub: node.ExchPub} + pktTrns, err := NewPkt(PktTypeTrns, 0, nodeId[:]) + if err != nil { + panic(err) + } + if _, err = ctx.Tx( + node, + pktTrns, + nice, + int64(pktSize), 0, + pipeR, + pktName, + nil, + ); err != nil { + ctx.LogE("rx", les, err, func(les LEs) string { + return logMsg(les) + ": txing" + }) + return err + } } } ctx.LogI("rx", les, func(les LEs) string {