func MakePing(dm *drymartini.DryMartini, addrString string) (success bool, err error) { var remoteHost net.IP var remotePort uint16 remoteHost, remotePort, err = kademlia.AddrStrToHostPort(addrString) success = drymartini.MakeMartiniPing(dm, remoteHost, remotePort) return }
func (dmInst *DryMartiniInstruction) Execute(dm *drymartini.DryMartini) (status bool) { var err error switch { case dmInst.IsExit(): if Verbose { log.Printf("Executing Exit Instruction\n") } return true case dmInst.IsSkip(): if Verbose { log.Printf("Executing Skip Instruction: _%s_\n", dmInst.CmdStr) } return true case dmInst.IsPing(): var success bool if Verbose { log.Printf("Executing Ping Instruction 'ping Addr:%s\n", dmInst.Addr) } remoteHost, remotePort, err := kademlia.AddrStrToHostPort(dmInst.Addr) if err != nil { log.Printf("Error converting AddrToHostPort, %s", err) os.Exit(1) } success = drymartini.MakeMartiniPing(dm, remoteHost, remotePort) return success case dmInst.IsJoin(): if Verbose { log.Printf("Executing MartiniJoin Instruction\n") } //remoteHost, remotePort, err := kademlia.AddrStrToHostPort(dmInst.Addr) //drymartini.MakeJoin(dm, remoteHost, remotePort) //if err != nil { // log.Printf("Error converting AddrToHostPort, %s", err) // os.Exit(1) //} return true case dmInst.IsWhoami(): if Verbose { log.Printf("Executing Whoami Instruction\n") fmt.Printf("Local Node ID: %s\n", dm.KademliaInst.ContactInfo.NodeID.AsString()) } else { fmt.Printf("%s\n", dm.KademliaInst.ContactInfo.NodeID.AsString()) } return true case dmInst.IsPrintLocalBuckets(): log.Printf("Print Local Buckets!\n") kademlia.PrintLocalBuckets(dm.KademliaInst) return true case dmInst.IsPrintLocalData(): log.Printf("Print Local Data!\n") //kademlia.PrintLocalData(dm.KademliaInst) drymartini.PrintLocalData(dm) return true case dmInst.IsPrintLocalFlowData(): log.Printf("Print Local FlowData!\n") drymartini.PrintLocalFlowData(dm) return true case dmInst.IsGeneratePath(): log.Printf("Generate Path\n") drymartini.GeneratePath(dm, dmInst.minNodes, dmInst.maxNodes) return true case dmInst.IsBarCrawl(): log.Printf("Bar Crawl (negotiating symmkeys with nodes)") drymartini.BarCrawl(dm, dmInst.request, dmInst.minNodes, dmInst.maxNodes) case dmInst.IsFindValue(): log.Printf("Find Value") var sucess bool //var nodes[]kademlia.FoundNode var value []byte sucess, _, value, err = kademlia.IterativeFind(dm.KademliaInst, dmInst.Key, 2) if err != nil { log.Printf("IterativeFind: error %s\n", err) } if sucess { if value != nil { log.Printf("IterativeFindValue err: success = true. value is nil\n") } } case dmInst.IsSend(): log.Printf("Send %d %s\n", dmInst.FlowIndex, dmInst.request) drymartini.SendData(dm, dmInst.FlowIndex, dmInst.request) case dmInst.IsMakeSwarm(): log.Printf("Making swarm: numNodes:%d\n", dmInst.minNodes) var swarm []*drymartini.DryMartini = drymartini.MakeSwarm(dmInst.minNodes, dmInst.maxNodes, time.Now().UnixNano()) drymartini.WarmSwarm(dm, swarm, rand.New(rand.NewSource(time.Now().UnixNano()))) case dmInst.IsRunTests(): log.Printf("Running tests: numNodes:%d\n", dmInst.minNodes) drymartini.RunTests(dm, dmInst.minNodes, dmInst.maxNodes, time.Now().UnixNano(), 4, 4) case dmInst.IsSleep(): log.Printf("Sleeping %d ms\n", dmInst.minNodes) time.Sleep(time.Millisecond * time.Duration(dmInst.minNodes)) case dmInst.IsBlock(): fmt.Printf("Blocking comm on node\n") log.Printf("Blocking comm on this node\n") dm.KademliaInst.KListener.Close() case dmInst.IsOpen(): fmt.Printf("Accepting comm on node again\n") log.Printf("Accepting comms again\n") go http.Serve(dm.KademliaInst.KListener, nil) case dmInst.IsBCAndSend(): log.Printf("bc and send\n") success, index := drymartini.FindGoodPath(dm) if !success { success, index = drymartini.BarCrawl(dm, dmInst.request, dmInst.minNodes, dmInst.maxNodes) if !success { log.Printf("Error: main. bcandsend; bc failed\n") return } } drymartini.SendData(dm, index, dmInst.request) } return false }