Ejemplo n.º 1
0
/** Check if a sequence of three accounts violates the no ripple constrains
    [first] -> [second] -> [third]
    Disallowed if 'second' set no ripple on [first]->[second] and [second]->[third]
*/
void PathState::checkNoRipple (
    uint160 const& firstAccount,
    uint160 const& secondAccount,  // This is the account whose constraints we are checking
    uint160 const& thirdAccount,
    uint160 const& currency)
{
    // fetch the ripple lines into and out of this node
    SLE::pointer sleIn = lesEntries.entryCache (ltRIPPLE_STATE,
        Ledger::getRippleStateIndex (firstAccount, secondAccount, currency));
    SLE::pointer sleOut = lesEntries.entryCache (ltRIPPLE_STATE,
        Ledger::getRippleStateIndex (secondAccount, thirdAccount, currency));

    if (!sleIn || !sleOut)
    {
        terStatus = terNO_LINE;
    }
    else if (
        is_bit_set (sleIn->getFieldU32 (sfFlags),
            (secondAccount > firstAccount) ? lsfHighNoRipple : lsfLowNoRipple) &&
        is_bit_set (sleOut->getFieldU32 (sfFlags),
            (secondAccount > thirdAccount) ? lsfHighNoRipple : lsfLowNoRipple))
    {
        WriteLog (lsINFO, RippleCalc) << "Path violates noRipple constraint between " <<
            RippleAddress::createHumanAccountID (firstAccount) << ", " <<
            RippleAddress::createHumanAccountID (secondAccount) << " and " <<
            RippleAddress::createHumanAccountID (thirdAccount);

        terStatus = terNO_RIPPLE;
    }
}
Ejemplo n.º 2
0
static int serial_device_init(unsigned int ttys, long baud)
{
	unsigned long serialaddr;
	unsigned long devid;
	serial_fifo_t *serf;

	/* hardware serial device number */
	if( ttys >= 16 ) {
		return -ENODEV;
	}

	if( baud < 0) 
		return -EINVAL;

	devid = XM_2_DEV(Console_MINOR, Console_MAJOR);
	
	suspend_domain(devid, XMDEV_IO_OPEN);
	serialaddr = event_handling->serialaddr;
	serf = (serial_fifo_t *)serialaddr;
	
	/* register serial device */
	if( !is_bit_set(serf->flag, RT_SERIAL_dev_INIT) )
	       return -EPIPE;

	if( is_bit_set(serf->flag, RT_SERIAL_dom_USED) )
		return -EBUSY;	
	
	set_bit(serf->flag, RT_SERIAL_dom_USED);
	
	/* register serial device */
	
	rt_serial.in.serf = (serial_fifo_t *)serialaddr;
	rt_serial.in.addr = (char *)(serialaddr + sizeof(serial_fifo_t));
	serialaddr += PAGE_SIZE;
	rt_serial.out.serf = (serial_fifo_t *)serialaddr;
	rt_serial.out.addr = (char *)(serialaddr + sizeof(serial_fifo_t));

	serf->baud = baud;
	serf->prio = Console_MINOR;
	serf->flag |= (ttys << 24) & RT_SERIAL_dom_DEST_MASK; /* Destination Console Device */
	
	serf = rt_serial.out.serf;
	
	set_bit(serf->flag, RT_SERIAL_dom_USED);
	
	serf->baud = baud;
	serf->prio = Console_MINOR;
	serf->flag |= (ttys << 24) & RT_SERIAL_dom_DEST_MASK; /* Destination Console Device */

	return 0;
}
Ejemplo n.º 3
0
int oxygen_pci_resume(struct pci_dev *pci)
{
	struct snd_card *card = pci_get_drvdata(pci);
	struct oxygen *chip = card->private_data;
	unsigned int i;

	pci_set_power_state(pci, PCI_D0);
	pci_restore_state(pci);
	if (pci_enable_device(pci) < 0) {
		snd_printk(KERN_ERR "cannot reenable device");
		snd_card_disconnect(card);
		return -EIO;
	}
	pci_set_master(pci);

	oxygen_write16(chip, OXYGEN_DMA_STATUS, 0);
	oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, 0);
	for (i = 0; i < OXYGEN_IO_SIZE; ++i)
		if (is_bit_set(registers_to_restore, i))
			oxygen_write8(chip, i, chip->saved_registers._8[i]);
	if (chip->has_ac97_0)
		oxygen_restore_ac97(chip, 0);
	if (chip->has_ac97_1)
		oxygen_restore_ac97(chip, 1);

	if (chip->model.resume)
		chip->model.resume(chip);

	oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, chip->interrupt_mask);

	snd_power_change_state(card, SNDRV_CTL_POWER_D0);
	return 0;
}
Ejemplo n.º 4
0
// check stuff before you bother to lock the ledger
TER Transactor::preCheck ()
{
    mTxnAccountID   = mTxn.getSourceAccount ().getAccountID ();

    if (!mTxnAccountID)
    {
        m_journal.warning << "apply: bad transaction source id";
        return temBAD_SRC_ACCOUNT;
    }

    // Extract signing key
    // Transactions contain a signing key.  This allows us to trivially verify a transaction has at least been properly signed
    // without going to disk.  Each transaction also notes a source account id.  This is used to verify that the signing key is
    // associated with the account.
    // XXX This could be a lot cleaner to prevent unnecessary copying.
    mSigningPubKey  = RippleAddress::createAccountPublic (mTxn.getSigningPubKey ());

    // Consistency: really signed.
    if (!mTxn.isKnownGood ())
    {
        if (mTxn.isKnownBad () || (!is_bit_set (mParams, tapNO_CHECK_SIGN) && !mTxn.checkSign (mSigningPubKey)))
        {
            mTxn.setBad ();
            m_journal.warning << "apply: Invalid transaction (bad signature)";
            return temINVALID;
        }

        mTxn.setGood ();
    }

    return tesSUCCESS;
}
Ejemplo n.º 5
0
static int linux_uart_write(struct file *fp,
	const char __user *buff, size_t size, loff_t *off)
{
	int wsize;

	if(buff == NULL) return 0;
	
	if(fp->private_data == NULL) return -EPERM;

	if( !is_bit_set(serial.out.serf->flag, RT_SERIAL_dom_WRITE)) {
		return -EPERM;
	}

	down_interruptible(&wsem);
	
	wsize = rt_serial_user_write(&serial.out, buff, size);

	up(&wsem);

	if(wsize > 0) {
		outb(0xB, UART_IER(uart));
		outb(0x9, UART_MCR(uart));
	}

	return wsize;	
}
Ejemplo n.º 6
0
void Effect::updateFreeflyCamera(double time, double delta) {

  if (!_useFreeflyCamera)
    return;

  double orgDelta = delta;
  if (is_bit_set(GetAsyncKeyState(VK_SHIFT), 15))
    delta /= 10;

  if (_keystate['W'])
    _freefly_camera.move(FreeflyCamera::kForward, (float)(100 * delta));
  if (_keystate['S'])
    _freefly_camera.move(FreeflyCamera::kForward, (float)(-100 * delta));
  if (_keystate['A'])
    _freefly_camera.move(FreeflyCamera::kRight, (float)(-100 * delta));
  if (_keystate['D'])
    _freefly_camera.move(FreeflyCamera::kRight, (float)(100 * delta));
  if (_keystate['Q'])
    _freefly_camera.move(FreeflyCamera::kUp, (float)(100 * delta));
  if (_keystate['E'])
    _freefly_camera.move(FreeflyCamera::kUp, (float)(-100 * delta));

  if (_mouse_lbutton) {
    float dx = (float)(100 * orgDelta) * _mouse_horiz / 200.0f;
    float dy = (float)(100 * orgDelta) * _mouse_vert / 200.0f;
    _freefly_camera.rotate(FreeflyCamera::kXAxis, dx);
    _freefly_camera.rotate(FreeflyCamera::kYAxis, dy);
  }
}
Ejemplo n.º 7
0
void
pair_ports(void)
{
    uint8_t i, j;

    /* Pair ports with their "closest neighbour" in the portmask */
    for (i = 0; i < RTE_MAX_ETHPORTS; i++)
        if (is_bit_set(i, portmask))
            for (j = (uint8_t) (i + 1); j < RTE_MAX_ETHPORTS; j++)
                if (is_bit_set(j, portmask)) {
                    port_pairs[i] = j;
                    port_pairs[j] = i;
                    i = j;
                    break;
                }
}
Ejemplo n.º 8
0
int next_piece(int previous_piece, struct peer_state *peer) {
    /*
    for(int i=0;i<get_total_pieces_available();i++){
        if(piece_occurence_value[i] >0 && piece_status[i] == PIECE_EMPTY && 
            is_bit_set(peer->bitfield,i)){
            if(next_piece != -2 && piece_occurence_value[i] <= piece_occurence_value[next_piece])
                next_piece = i;
        }
    }
    */
   //printf("Insice next piece\n");
   fflush(stdout);
   if(previous_piece!=-1){
        piece_status[previous_piece]=PIECE_FINISHED;
    }
    draw_state();
    int next_piece=-2;
    //using the bitfield count and checking next rare piece
    for(int i=0;i<get_total_pieces_available();i++){
        if(piece_occurence_value[i] >0 && piece_status[i] == PIECE_EMPTY && 
            is_bit_set(peer->bitfield,i)){
            if(next_piece == -2) 
                next_piece = i;  
            if(next_piece != -2 && piece_occurence_value[i] <= piece_occurence_value[next_piece])
                next_piece = i;
        }
    }
    piece_status[next_piece]=PIECE_PENDING;           
    return next_piece;
}
Ejemplo n.º 9
0
int dom_serial_fifo_write(dom_fifo_t *df, const char *src, int size)
{
	serial_fifo_t *ff;
	long top, offset;
	int wsize;

	if (df == NULL || src == NULL || size < 0)
		return -EINVAL;

	ff = df->serf;

	if (!is_bit_set(ff->flag, RT_SERIAL_dom_WRITE))
		return -EPERM;

        wsize = (ff->bom + ff->size - ff->top - 1) % ff->size;

	
        if (wsize < size) return -ENOMEM;

	wsize = size;

    	top = ff->top;

        if ( (ff->bom <= top) && (ff->size - top < wsize)) {
		offset = ff->size - top;
		memcpy(df->addr + top, src, offset);
		memcpy(df->addr, src+offset, wsize-offset);
	} else {
		memcpy(df->addr + top, src, wsize);
        }

	ff->top = (ff->top + wsize) % ff->size;
        
	return wsize;
}
Ejemplo n.º 10
0
static void rt_isr_event_entry(void* parameter)
{
	rt_err_t err;
	rt_uint32_t e;

	printf_syn("rt_isr_event_entry()\n");
	say_thread_start();

	while (1) {
		err = rt_event_recv(&isr_event_set
				, EVENT_BIT_NEED_RUN_TIM2_IRQ | EVENT_BIT_NEED_RUN_TIM4_IRQ | EVENT_BIT_NEED_RUN_SI4432_MAC_EXTI_IRQ
				, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, &e);

		if (RT_EOK != err) {
			printf_syn("recv isr event error(%d)", err);
		} else {
#if RT_USING_SI4432_MAC
			if (is_bit_set(isr_event_var_flag, EVENT_BIT_NEED_RUN_SI4432_MAC_EXTI_IRQ)) {
				clr_bit(isr_event_var_flag, EVENT_BIT_NEED_RUN_SI4432_MAC_EXTI_IRQ);
				si4432_mac_exti_isr();
			}
#endif
#if RT_USING_ADE7880
			if (is_bit_set(isr_event_var_flag, EVENT_BIT_NEED_RUN_TIM4_IRQ)) {
				clr_bit(isr_event_var_flag, EVENT_BIT_NEED_RUN_TIM4_IRQ);
#if 0 == ADE7880_USE_I2C_HSDC
 				tim4_isr();
#endif
			}
#endif
#if RT_USING_SI4432_MAC
			if (is_bit_set(isr_event_var_flag, EVENT_BIT_NEED_RUN_SI4432_MAC_EXTI_IRQ)) {
				clr_bit(isr_event_var_flag, EVENT_BIT_NEED_RUN_SI4432_MAC_EXTI_IRQ);
				si4432_mac_exti_isr();
			}

			if (is_bit_set(isr_event_var_flag, EVENT_BIT_NEED_RUN_TIM2_IRQ)) {
				clr_bit(isr_event_var_flag, EVENT_BIT_NEED_RUN_TIM2_IRQ);
				tim2_isr();
			}
#endif
		}
	}

	return;
}
Ejemplo n.º 11
0
void append_to_buffer(byte_buffer *b, code *c) {
    int i, byte, pos;
    for (i = 0; i < c->num_bits; ++i) {
        byte = i / 8;
        pos = i % 8;
        append_bit_to_buffer(b, is_bit_set(c->memory[byte], pos));
    }
}
Ejemplo n.º 12
0
// software reset for mmci
void mmci_software_reset (void) {

	// perform a Software reset for mmci_cmd line.
	address sd_system_control = (address) MMCHS_SYSCTL_MMCHS1;
	set_bit(sd_system_control, 25);
	while (!is_bit_set(sd_system_control, 25))
		;
}
Ejemplo n.º 13
0
int view_spatial_filter(const sized_buf *k, const sized_buf *v,
                        const bitmap_t *bm)
{
    uint16_t partition = 0;
    (void) k;

    partition = decode_raw16(*((raw_16 *) v->buf));
    return is_bit_set(bm, partition);
}
Ejemplo n.º 14
0
void main ()
{
    int a = 2;
    int b = 2;
    if (is_bit_set (a, b)) {
    printf ("\n: bit is set = ");
    } else {
    printf ("\n: bit is not set = ");
    }
}
Ejemplo n.º 15
0
static void oxygen_restore_ac97(struct oxygen *chip, unsigned int codec)
{
	unsigned int i;

	oxygen_write_ac97(chip, codec, AC97_RESET, 0);
	msleep(1);
	for (i = 1; i < 0x40; ++i)
		if (is_bit_set(ac97_registers_to_restore[codec], i))
			oxygen_write_ac97(chip, codec, i * 2,
					  chip->saved_ac97_registers[codec][i]);
}
Ejemplo n.º 16
0
void print_buffer(byte_buffer *b) {
    int i, k;
    for (i = 0; i <= b->current_byte; ++i) {
        if (i == b->current_byte) {
            for (k = 0; k < b->current_bit; ++k) {
                printf("%d", is_bit_set(b->buffer[i], k));
            }
        } else {
            for (k = 0; k < 8; ++k) {
                printf("%d", is_bit_set(b->buffer[i], k));
            }
            if ((i+1)%4 == 0) {
                printf("\n");
            } else {
                printf("  ");
            }
        }
    }
    printf("\n");
}
Ejemplo n.º 17
0
SDCARD_RC SDCARD_inserted (void) {

	address sd_status = (address) MMCHS_STAT_MMCHS1;

	// Reset the MMC card
	sendCMD0 ();

	// check if we have a SDIO card
	int counter = 0;
	sendCMD5 ();
	if (is_bit_set (sd_status, 0))
		return SDCARD_SDIO;
	while ((is_bit_set (sd_status, 16) == FALSE) & (counter < 5)) {
		if (is_bit_set (sd_status, 0))
			return SDCARD_SDIO;
		counter++;
	}

	// card is version 2.0
	mmci_software_reset ();
	sendCMD8 ();
	if (is_bit_set (sd_status, 0))
		return SDCARD_VERSION2;
	counter = 0;
	while ((is_bit_set (sd_status, 16) == FALSE) & (counter < 5)) {
		if (is_bit_set (sd_status, 0))
			return SDCARD_VERSION2;
		counter ++;
	}
	mmci_software_reset ();

	// check if we have a 1 card
	sendCMD55 ();
	sendACMD41 ();
	if (is_bit_set (sd_status, 0))
		return SDCARD_VERSION1;
	counter = 0;
	while ((is_bit_set (sd_status, 16) == FALSE) & (counter < 5)) {
		if (is_bit_set (sd_status, 0))
			return SDCARD_VERSION1;
		counter ++;
	}

	// we do not care for other cards so just send an error
	return SDCARD_UNKNOWN;
}
Ejemplo n.º 18
0
enum Signal Gpio_get_signal(struct Gpio * self)
{
    enum Signal signal = Signal_Undefined;
    if(Direction_Input == self->direction) {
        if(is_bit_set(self->input, self->pin)) {
            signal = Signal_High;
        } else {
            signal = Signal_Low;
        }
    }
    return signal;
}
Ejemplo n.º 19
0
void write_length(byte_buffer *b, int length, ushort bits) {
    // Check endianess -- might need to reverse direction
    int i, k, num_bytes = (int)ceil((double)bits/8.0);
    uchar *bytes = (uchar *)(&length);

    for (i = 0; i < num_bytes; ++i) {
        for (k = 0; k < 8 && bits > 0; ++k) {
            append_bit_to_buffer(b, is_bit_set(bytes[i], k));
            bits--;
        }
    }
}
Ejemplo n.º 20
0
uchar get_next_bit(byte_buffer *b) {
    if (b->current_byte > b->capacity) return -1;

    uchar bit = is_bit_set(b->buffer[b->current_byte], b->current_bit);
    b->current_bit++;

    if (b->current_bit > 7) {
        b->current_byte++;
        b->current_bit = 0;
    }
    return bit;
}
Ejemplo n.º 21
0
static int view_purgekv_action(bitmap_t *bm, uint16_t part_id,
                                             uint64_t valcount,
                                             view_purger_ctx_t *ctx)
{
    int action = PURGE_KEEP;
    if (is_bit_set(bm, part_id)) {
        ctx->count += valcount;
        action = PURGE_ITEM;
    }

    return action;
}
Ejemplo n.º 22
0
BOOLEAN module_initialation (void) {

	// Step 2: controller software reset
	address SD_controller_config = (address) MMCHS_SYSCONFIG_MMCHS1;
	set_bit (SD_controller_config, 1);  // reset module

	// controller initialisation. ARM TRM Page 3143 / 3147
	// Step 1: nfigure interface and functional clock
	address interface_clock = (address) CM_ICLKEN1_CORE;
	set_bit(interface_clock, 24);      // MMC SCIO 1 interface clock is enabled
	set_bit(interface_clock, 25);      // MMC SCIO 2 interface clock is enabled

	address functional_clock = (address) CM_FCLKEN1_CORE;
	set_bit (functional_clock, 24);
	set_bit (functional_clock, 25);

	// now check if the reset is finished
	int counter = 0;
	address SD_controller_reset = (address) MMCHS_SYSSTATUS_MMCHS1;
	while ((!is_bit_set(SD_controller_reset, 0)) & (counter < 5))
		counter++; // wait

	// configure controller
	address SD_host_controller_power;
	SD_host_controller_power = (address) MMCHS_HCTL_MMCHS1;
	set_bit (SD_controller_config, 2);   	 		// Wake-up capability is enabled. TRM 3173
	set_bit (SD_host_controller_power, 24);  		// Wake-up event enable on SD card interrupt.  TRM 3193

	// module init
	address configuration = (address) MMCHS_CON_MMCHS1;
	set_bit(configuration, 1);						// Send initialization stream (All cards). TRM 3182

	address command = (address) MMCHS_CMD_MMCHS1;
	*command = 0x0;

	// now wait 1 ms???? TRM 3147 TODO:
	volatile int i;
	for (i = 0; i <= 100000; i++)
		;

	address command_complete = (address) MMCHS_STAT_MMCHS1; 	// Command complete.
	set_bit (command_complete, 0);					// Send initialization stream (All cards). TRM 3182
	clear_bit (configuration, 1);					// End initialization stream (All cards). TRM 3147
	*command_complete = 0xFFFFFFFF;					// clear register

	// change frequecy to fit protocoll

	return TRUE;

}
Ejemplo n.º 23
0
Archivo: init.c Proyecto: apurvam/Nodes
void init_mm (u32_t magic, u32_t addr)
{
    multiboot_info_t *mbi = (multiboot_info_t *) addr;

    u32_t up_mem_kb = 0;

    if ( is_bit_set (mbi->flags, 0) ) up_mem_kb = mbi->mem_upper;

    init_paging (up_mem_kb, phys_addr ( (u32_t) __kernel_img_end) );

    _mbi = mbi;

    init_page_alloc (up_mem_kb, phys_addr ( (u32_t) __kernel_img_end));
}
Ejemplo n.º 24
0
byte_buffer *rl_compress(char *data, long size) {
    byte_buffer *buff = new_buffer((3 * size)/4);
    long i;
    int k;

    // 1. Determine the longest sequence of 1s or 0s.
    int longest_seq = 1, current_seq = 0;
    uchar current = is_bit_set(data[0], 0);
    for (i = 0; i < size; i++) {
        for (k = 0; k < 8; ++k) {
            if (is_bit_set(data[i], k) == current) {
                current_seq++;
            } else {
                if (current_seq > longest_seq)
                    longest_seq = current_seq;
                current_seq = 1;
                current = (current == 0)? 1 : 0;
            }
        }
    }

    // 2. Determine number of bits required to represent that sequence.
    const ushort NUM_BITS = (const ushort)ceil(log((double)longest_seq)/log(2.0));

    // 3. First 16 bits used to store length of the run lengths in bits.
    uchar *byte_representation = (uchar *)(&NUM_BITS);
    for (i = 0; i < sizeof(NUM_BITS); ++i) {
        append_byte_to_buffer(buff, byte_representation[i]);
    }

    // 4. Start with 0s, write length, then write 1s length, etc.
    if (is_bit_set(data[0], 0)) {
        write_length(buff, 0, NUM_BITS);
    }

    current_seq = 0;
    current = is_bit_set(data[0], 0);
    for (i = 0; i < size; i++) {
        for (k = 0; k < 8; ++k) {
            if (is_bit_set(data[i], k) == current) {
                current_seq++;
            } else {
                write_length(buff, current_seq, NUM_BITS);
                current_seq = 1;
                current = is_bit_set(data[i], k);
            }
        }
    }

    if (current_seq > 0) {
        write_length(buff, current_seq, NUM_BITS);
    }

    return buff;
}
Ejemplo n.º 25
0
static int linux_uart_read(struct file *fp, 
	char __user *buff, size_t size, loff_t *off)
{
	int rsize;

	if(buff == NULL) return 0;
	
	if(fp->private_data == NULL) return -EPERM;

	if( !is_bit_set(serial.out.serf->flag, RT_SERIAL_dom_READ)) {
		return -EPERM;
	}

	rsize = rt_serial_user_read(&serial.in, buff, size);

	return rsize;	
		
}
Ejemplo n.º 26
0
static int linux_uart_open(struct inode *np, struct file *fp)
{
	int min = MINOR(np->i_rdev);

	if (min != 0 || serial.in.addr == NULL) {
		return -ENODEV;
	}
	
	if( !is_bit_set(serial.in.serf->flag, RT_SERIAL_dev_INIT) )
		return -EPIPE;

	if(fp->private_data == &serial) return 0;

	clients ++;
	fp->private_data = &serial;	

	return 0;
}
Ejemplo n.º 27
0
void broadcast_have_msg(int piece)
{  
    //printf("Inside broadcase msg function\n");
    fflush(stdout);
    char *havemsg =  malloc(9);
    memset(havemsg,0,9);
    havemsg[3] =5;
    havemsg[4]=4;
    *(int*)(havemsg+5) = htonl(piece);   
    struct peer_state *peer = peers;

    while(peer){
            if(peer->connected && !is_bit_set(peer->bitfield, piece) && !peer->not_interested){
                push_into_msg_outgoing_buf(peer, havemsg, 9);
            }
        peer = peer->next;
    }
    //printf("Exit broadcast msg function\n");
}
Ejemplo n.º 28
0
int view_btree_filter(const sized_buf *k, const sized_buf *v,
                                          const bitmap_t *bm)
{
    int ret = 0;
    couchstore_error_t errcode = COUCHSTORE_SUCCESS;
    view_btree_value_t *val = NULL;
    (void) k;

    errcode = decode_view_btree_value(v->buf, v->size, &val);
    if (errcode != COUCHSTORE_SUCCESS) {
        ret = (int) errcode;
        goto cleanup;
    }

    ret = is_bit_set(bm, val->partition);

cleanup:
    free_view_btree_value(val);
    return ret;
}
Ejemplo n.º 29
0
// This is for debugging not end users. Output names can be changed without warning.
Json::Value PathState::Node::getJson () const
{
    Json::Value jvNode (Json::objectValue);
    Json::Value jvFlags (Json::arrayValue);

    jvNode["type"]  = uFlags;

    if (is_bit_set (uFlags, STPathElement::typeAccount) || !!uAccountID)
        jvFlags.append (!!is_bit_set (uFlags, STPathElement::typeAccount) == !!uAccountID ? "account" : "-account");

    if (is_bit_set (uFlags, STPathElement::typeCurrency) || !!uCurrencyID)
        jvFlags.append (!!is_bit_set (uFlags, STPathElement::typeCurrency) == !!uCurrencyID ? "currency" : "-currency");

    if (is_bit_set (uFlags, STPathElement::typeIssuer) || !!uIssuerID)
        jvFlags.append (!!is_bit_set (uFlags, STPathElement::typeIssuer) == !!uIssuerID ? "issuer" : "-issuer");

    jvNode["flags"] = jvFlags;

    if (!!uAccountID)
        jvNode["account"]   = RippleAddress::createHumanAccountID (uAccountID);

    if (!!uCurrencyID)
        jvNode["currency"]  = STAmount::createHumanCurrency (uCurrencyID);

    if (!!uIssuerID)
        jvNode["issuer"]    = RippleAddress::createHumanAccountID (uIssuerID);

    if (saRevRedeem)
        jvNode["rev_redeem"]    = saRevRedeem.getFullText ();

    if (saRevIssue)
        jvNode["rev_issue"]     = saRevIssue.getFullText ();

    if (saRevDeliver)
        jvNode["rev_deliver"]   = saRevDeliver.getFullText ();

    if (saFwdRedeem)
        jvNode["fwd_redeem"]    = saFwdRedeem.getFullText ();

    if (saFwdIssue)
        jvNode["fwd_issue"]     = saFwdIssue.getFullText ();

    if (saFwdDeliver)
        jvNode["fwd_deliver"]   = saFwdDeliver.getFullText ();

    return jvNode;
}
Ejemplo n.º 30
0
TER Transactor::payFee ()
{
    STAmount saPaid = mTxn.getTransactionFee ();

    if (!saPaid.isLegalNet ())
        return temBAD_AMOUNT;

    // Only check fee is sufficient when the ledger is open.
	if (is_bit_set(mParams, tapOPEN_LEDGER) &&
		saPaid < mFeeDue)
    {
        m_journal.trace << "Insufficient fee paid: " <<
            saPaid.getText () << "/" << mFeeDue.getText ();

        return telINSUF_FEE_P;
    }

    if (saPaid < zero || !saPaid.isNative ())
        return temBAD_FEE;

    if (!saPaid) return tesSUCCESS;

    // Deduct the fee, so it's not available during the transaction.
    // Will only write the account back, if the transaction succeeds.
    if (mSourceBalance < saPaid)
    {
        m_journal.trace << "Insufficient balance:" <<
            " balance=" << mSourceBalance.getText () <<
            " paid=" << saPaid.getText ();

        return terINSUF_FEE_B;
    }

    mSourceBalance -= saPaid;
    mTxnAccount->setFieldAmount (sfBalance, mSourceBalance);

    return tesSUCCESS;
}