func send1_tx(par string) { txid := btc.NewUint256FromString(par) if txid == nil { fmt.Println("You must specify a valid transaction ID for this command.") list_txs("") return } network.TxMutex.Lock() if ptx, ok := network.TransactionsToSend[txid.Hash]; ok { network.TxMutex.Unlock() usif.SendInvToRandomPeer(1, txid) ptx.Invsentcnt++ fmt.Println("INV for TxID", txid.String(), "sent to a random node") fmt.Println("If it does not appear in the chain, you may want to redo it.") } else { network.TxMutex.Unlock() fmt.Println("No such transaction ID in the memory pool.") list_txs("") } }
func xmp_txs2s(w http.ResponseWriter, r *http.Request) { if !ipchecker(r) { return } r.ParseForm() if checksid(r) { if len(r.Form["del"]) > 0 { tid := btc.NewUint256FromString(r.Form["del"][0]) if tid != nil { network.TxMutex.Lock() delete(network.TransactionsToSend, tid.Hash) network.TxMutex.Unlock() } } if len(r.Form["send"]) > 0 { tid := btc.NewUint256FromString(r.Form["send"][0]) if tid != nil { network.TxMutex.Lock() if ptx, ok := network.TransactionsToSend[tid.Hash]; ok { network.TxMutex.Unlock() cnt := network.NetRouteInv(1, tid, nil) ptx.Invsentcnt += cnt } } } if len(r.Form["sendone"]) > 0 { tid := btc.NewUint256FromString(r.Form["sendone"][0]) if tid != nil { network.TxMutex.Lock() if ptx, ok := network.TransactionsToSend[tid.Hash]; ok { network.TxMutex.Unlock() usif.SendInvToRandomPeer(1, tid) ptx.Invsentcnt++ } } } } w.Header()["Content-Type"] = []string{"text/xml"} if len(r.Form["id"]) > 0 { output_tx_xml(w, r.Form["id"][0]) return } w.Write([]byte("<txpool>")) network.TxMutex.Lock() for k, v := range network.TransactionsToSend { w.Write([]byte("<tx>")) fmt.Fprint(w, "<id>", btc.NewUint256(k[:]).String(), "</id>") fmt.Fprint(w, "<time>", v.Firstseen.Unix(), "</time>") fmt.Fprint(w, "<len>", len(v.Data), "</len>") fmt.Fprint(w, "<own>", v.Own, "</own>") fmt.Fprint(w, "<firstseen>", v.Firstseen.Unix(), "</firstseen>") fmt.Fprint(w, "<invsentcnt>", v.Invsentcnt, "</invsentcnt>") fmt.Fprint(w, "<sentcnt>", v.SentCnt, "</sentcnt>") fmt.Fprint(w, "<sentlast>", v.Lastsent.Unix(), "</sentlast>") fmt.Fprint(w, "<volume>", v.Volume, "</volume>") fmt.Fprint(w, "<fee>", v.Fee, "</fee>") fmt.Fprint(w, "<blocked>", v.Blocked, "</blocked>") w.Write([]byte("</tx>")) } network.TxMutex.Unlock() w.Write([]byte("</txpool>")) }
func xml_txs2s(w http.ResponseWriter, r *http.Request) { if !ipchecker(r) { return } w.Header()["Content-Type"] = []string{"text/xml"} if len(r.Form["minedid"]) > 0 && len(r.Form["minedat"]) > 0 { output_utxo_tx_xml(w, r.Form["minedid"][0], r.Form["minedat"][0]) return } if len(r.Form["id"]) > 0 { txid := btc.NewUint256FromString(r.Form["id"][0]) if txid == nil { return } network.TxMutex.Lock() defer network.TxMutex.Unlock() if t2s, ok := network.TransactionsToSend[txid.BIdx()]; ok { tx_xml(w, t2s, true) } else { w.Write([]byte("<tx>")) fmt.Fprint(w, "<id>", txid.String(), "</id>") w.Write([]byte("<status>Not found</status>")) w.Write([]byte("</tx>")) } return } if checksid(r) { if len(r.Form["del"]) > 0 { tid := btc.NewUint256FromString(r.Form["del"][0]) if tid != nil { network.TxMutex.Lock() if tts, ok := network.TransactionsToSend[tid.BIdx()]; ok { network.DeleteToSend(tts) } network.TxMutex.Unlock() } } if len(r.Form["send"]) > 0 { tid := btc.NewUint256FromString(r.Form["send"][0]) if tid != nil { network.TxMutex.Lock() if ptx, ok := network.TransactionsToSend[tid.BIdx()]; ok { network.TxMutex.Unlock() cnt := network.NetRouteInv(1, tid, nil) if cnt == 0 { usif.SendInvToRandomPeer(1, tid) } else { ptx.Invsentcnt += cnt } } else { network.TxMutex.Unlock() } } } if len(r.Form["sendone"]) > 0 { tid := btc.NewUint256FromString(r.Form["sendone"][0]) if tid != nil { network.TxMutex.Lock() if ptx, ok := network.TransactionsToSend[tid.BIdx()]; ok { network.TxMutex.Unlock() usif.SendInvToRandomPeer(1, tid) ptx.Invsentcnt++ } else { network.TxMutex.Unlock() } } } if len(r.Form["cnt"]) > 0 { u, e := strconv.ParseUint(r.Form["cnt"][0], 10, 32) if e == nil && u > 0 && u < 10e3 { txs2s_count = int(u) } } if len(r.Form["sort"]) > 0 && len(r.Form["sort"][0]) == 3 { txs2s_sort = r.Form["sort"][0] } txs2s_sort_desc = len(r.Form["descending"]) > 0 } network.TxMutex.Lock() defer network.TxMutex.Unlock() sorted := make(sortedTxList, len(network.TransactionsToSend)) var cnt int for _, v := range network.TransactionsToSend { if len(r.Form["ownonly"]) > 0 && v.Own == 0 { continue } sorted[cnt] = v cnt++ } sorted = sorted[:cnt] sort.Sort(sorted) w.Write([]byte("<txpool>")) for cnt = 0; cnt < len(sorted) && cnt < txs2s_count; cnt++ { v := sorted[cnt] tx_xml(w, v, false) } w.Write([]byte("</txpool>")) }