int pstore_save_tx(tx_t *tx) { unsigned char *data = (unsigned char *)tx; size_t data_len; data_len = get_tx_size(tx); if (!data_len) return (SHERR_INVAL); return (pstore_save(data, data_len)); }
int tx_save(void *raw_tx) { tx_t *tx = (tx_t *)raw_tx; int err; if (!is_tx_stored(tx->tx_op)) return (0); err = pstore_save(raw_tx, get_tx_size(tx)); if (err) return (err); return (0); }
int tx_send(shpeer_t *cli_peer, tx_t *tx) { unsigned char *data = (unsigned char *)tx; size_t data_len; tx_ledger_t *l; int err; txop_t *op; if (!data) return (SHERR_INVAL); data_len = get_tx_size(tx); if (!data_len) return (0); op = get_tx_op(tx->tx_op); if (!op) return (SHERR_INVAL); if (op->op_send) { err = op->op_send(cli_peer, data); if (err) { if (err == SHERR_OPNOTSUPP) return (0); return (err); } } if (is_tx_stored(tx->tx_op)) { l = ledger_load(shpeer_kpriv(sharedaemon_peer()), shtime()); if (l) { ledger_tx_add(l, (tx_t *)data); ledger_close(l); } } #if 0 /* encapsulate for network transfer. */ tx_wrap(shpeer_kpriv(cli_peer), (tx_t *)tx); #endif if (cli_peer) { sched_tx_sink(shpeer_kpriv(cli_peer), data, data_len); } else { sched_tx(data, data_len); } return (0); }