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); }
int local_broadcast_bond(tx_bond_t *bond) { sched_tx(bond, sizeof(tx_bond_t) + bond->ino_size); return (0); }
int local_broadcast_asset(tx_asset_t *asset) { sched_tx(asset, sizeof(tx_asset_t) + asset->ass_size); return (0); }