示例#1
0
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));
}
示例#2
0
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);
}
示例#3
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);
}