/*
NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2018 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2016-2019 Sergey Matveev <stargrave@stargrave.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+the Free Software Foundation, version 3 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
return names
}
-func TestTossEmail(t *testing.T) {
- f := func(recipients [16]uint8) bool {
+func TestTossExec(t *testing.T) {
+ f := func(replyNice uint8, handleRaw uint32, recipients [16]uint8) bool {
+ handle := strconv.Itoa(int(handleRaw))
for i, recipient := range recipients {
recipients[i] = recipient % 8
}
ctx.Neigh[*our.Id] = our.Their()
}
for _, recipient := range recipients {
- if err := ctx.TxMail(
+ if err := ctx.TxExec(
ctx.Neigh[*privates[recipient].Id],
- DefaultNiceMail,
- "recipient",
- []byte{123},
+ DefaultNiceExec,
+ replyNice,
+ handle,
+ []string{"arg0", "arg1"},
+ []byte("BODY\n"),
1<<15,
); err != nil {
t.Error(err)
if len(dirFiles(rxPath)) == 0 {
continue
}
- ctx.Toss(ctx.Self.Id, DefaultNiceMail-1, false, false)
+ ctx.Toss(ctx.Self.Id, DefaultNiceExec-1, false, false, false, false, false, false)
if len(dirFiles(rxPath)) == 0 {
return false
}
- ctx.Neigh[*nodeOur.Id].Sendmail = []string{"/bin/sh", "-c", "false"}
- ctx.Toss(ctx.Self.Id, DefaultNiceMail, false, false)
+ ctx.Neigh[*nodeOur.Id].Exec = make(map[string][]string)
+ ctx.Neigh[*nodeOur.Id].Exec[handle] = []string{"/bin/sh", "-c", "false"}
+ ctx.Toss(ctx.Self.Id, DefaultNiceExec, false, false, false, false, false, false)
if len(dirFiles(rxPath)) == 0 {
return false
}
- ctx.Neigh[*nodeOur.Id].Sendmail = []string{
+ ctx.Neigh[*nodeOur.Id].Exec[handle] = []string{
"/bin/sh", "-c",
- fmt.Sprintf("cat >> %s", filepath.Join(spool, "mbox")),
+ fmt.Sprintf(
+ "echo $NNCP_NICE $0 $1 >> %s ; cat >> %s",
+ filepath.Join(spool, "mbox"),
+ filepath.Join(spool, "mbox"),
+ ),
}
- ctx.Toss(ctx.Self.Id, DefaultNiceMail, false, false)
+ ctx.Toss(ctx.Self.Id, DefaultNiceExec, false, false, false, false, false, false)
if len(dirFiles(rxPath)) != 0 {
return false
}
}
expected := make([]byte, 0, 16)
for i := 0; i < 16; i++ {
- expected = append(expected, 123)
+ expected = append(
+ expected,
+ []byte(fmt.Sprintf("%d arg0 arg1\n", replyNice))...,
+ )
+ expected = append(expected, []byte("BODY\n")...)
}
return bytes.Compare(mbox, expected) == 0
}
}
rxPath := filepath.Join(spool, ctx.Self.Id.String(), string(TRx))
os.Rename(filepath.Join(spool, ctx.Self.Id.String(), string(TTx)), rxPath)
- ctx.Toss(ctx.Self.Id, DefaultNiceFile, false, false)
+ ctx.Toss(ctx.Self.Id, DefaultNiceFile, false, false, false, false, false, false)
if len(dirFiles(rxPath)) == 0 {
return false
}
ctx.Neigh[*nodeOur.Id].Incoming = &incomingPath
- ctx.Toss(ctx.Self.Id, DefaultNiceFile, false, false)
+ ctx.Toss(ctx.Self.Id, DefaultNiceFile, false, false, false, false, false, false)
if len(dirFiles(rxPath)) != 0 {
return false
}
rxPath := filepath.Join(spool, ctx.Self.Id.String(), string(TRx))
os.Rename(filepath.Join(spool, ctx.Self.Id.String(), string(TTx)), rxPath)
ctx.Neigh[*nodeOur.Id].Incoming = &incomingPath
- ctx.Toss(ctx.Self.Id, DefaultNiceFile, false, false)
+ ctx.Toss(ctx.Self.Id, DefaultNiceFile, false, false, false, false, false, false)
expected := make(map[string]struct{})
expected["samefile"] = struct{}{}
for i := 0; i < files-1; i++ {
}
func TestTossFreq(t *testing.T) {
- f := func(fileSizes []uint8) bool {
+ f := func(fileSizes []uint8, replyNice uint8) bool {
if len(fileSizes) == 0 {
return true
}
if err := ctx.TxFreq(
ctx.Neigh[*nodeOur.Id],
DefaultNiceFreq,
+ replyNice,
fileName,
fileName,
1<<15,
txPath := filepath.Join(spool, ctx.Self.Id.String(), string(TTx))
os.Rename(txPath, rxPath)
os.MkdirAll(txPath, os.FileMode(0700))
- ctx.Toss(ctx.Self.Id, DefaultNiceFreq, false, false)
+ ctx.Toss(ctx.Self.Id, DefaultNiceFreq, false, false, false, false, false, false)
if len(dirFiles(txPath)) != 0 || len(dirFiles(rxPath)) == 0 {
return false
}
ctx.Neigh[*nodeOur.Id].Freq = &spool
- ctx.Toss(ctx.Self.Id, DefaultNiceFreq, false, false)
+ ctx.Toss(ctx.Self.Id, DefaultNiceFreq, false, false, false, false, false, false)
if len(dirFiles(txPath)) != 0 || len(dirFiles(rxPath)) == 0 {
return false
}
panic(err)
}
}
- ctx.Toss(ctx.Self.Id, DefaultNiceFreq, false, false)
+ ctx.Toss(ctx.Self.Id, DefaultNiceFreq, false, false, false, false, false, false)
if len(dirFiles(txPath)) == 0 || len(dirFiles(rxPath)) != 0 {
return false
}
t.Error(err)
return false
}
+ if pkt.Nice != replyNice {
+ return false
+ }
dst := string(pkt.Path[:int(pkt.PathLen)])
if bytes.Compare(buf.Bytes(), files[dst]) != 0 {
return false
os.MkdirAll(txPath, os.FileMode(0700))
for _, data := range datum {
pktTrans := Pkt{
- Magic: MagicNNCPPv1,
+ Magic: MagicNNCPPv2,
Type: PktTypeTrns,
PathLen: blake2b.Size256,
Path: new([MaxPathSize]byte),
panic(err)
}
}
- ctx.Toss(ctx.Self.Id, 123, false, false)
+ ctx.Toss(ctx.Self.Id, 123, false, false, false, false, false, false)
if len(dirFiles(rxPath)) != 0 {
return false
}
for k, data := range datum {
if bytes.Compare(dataRead, data) == 0 {
delete(datum, k)
- break
}
}
}