Example #1
0
/*------------------------------------------------------------------------------------------------------------------------*/
FIXErrCode fix_groups_to_string(FIXMsg* msg, FIXField const* field, FIXFieldDescr const* fdescr, char delimiter,
      char** buff, uint32_t* buffLen, int32_t* crc, FIXError** error)
{
   FIXErrCode res = int32_to_str(field->descr->type->tag, field->size, delimiter, 0, 0, buff, buffLen, error);
   (*crc) += (FIX_SOH - delimiter);
   for(uint32_t i = 0; i < field->size && res != FIX_FAILED; ++i)
   {
      FIXGroup* group = ((FIXGroups*)field->data)->group[i];
      for(uint32_t i = 0; i < fdescr->group_count && res == FIX_SUCCESS; ++i)
      {
         FIXFieldDescr* child_fdescr = &fdescr->group[i];
         FIXField* child_field = fix_field_get(msg, group, child_fdescr->type->tag);
         if ((msg->parser->flags & PARSER_FLAG_CHECK_REQUIRED) && !child_field && (child_fdescr->flags & FIELD_FLAG_REQUIRED))
         {
            *error = fix_error_create(FIX_ERROR_FIELD_NOT_FOUND, "Field '%d' is required", child_fdescr->type->tag);
            return FIX_FAILED;
         }
         else if (!child_field && i == 0)
         {
            *error = fix_error_create(FIX_ERROR_FIELD_NOT_FOUND, "Field '%d' must be first field in group", child_fdescr->type->tag);
            return FIX_FAILED;
         }
         else if (child_field && child_field->descr->category == FIXFieldCategory_Group)
         {
            res = fix_groups_to_string(msg, child_field, child_fdescr, delimiter, buff, buffLen, crc, error);
         }
         else if(child_field)
         {
            res = field_to_str(child_field, delimiter, buff, buffLen, error);
            (*crc) += (FIX_SOH - delimiter);
         }
      }
   }
   return FIX_SUCCESS;
}
Example #2
0
void print_rec(const uint8_t *data)
{
        size_t off = 0;
        static bool first_rec = true;
        static size_t col_width[LNF_FLD_TERM_];


        if (output_params.print_records != OUTPUT_ITEM_YES) {
                return;
        }

        if (first_rec) {
                first_item = first_item ? false : (putchar('\n'), false);

                for (size_t i = 0; i < fields_cnt; ++i) {
                        const char *header_str = field_get_name(fields[i].id);
                        const size_t header_str_len = strlen(header_str);
                        const size_t field_str_len = strlen(field_to_str(
                                                fields[i].id, data + off));

                        col_width[i] = header_str_len > field_str_len ?
                                header_str_len : field_str_len;
                        col_width[i] += COL_WIDTH_RESERVE;
                        off += fields[i].size;

                        print_field(header_str, col_width[i],
                                        PRETTY_PRINT_COL_WIDTH -
                                        COL_WIDTH_RESERVE,
                                        i == (fields_cnt - 1));
                }

                off = 0;
                first_rec = false;
        }

        /* Loop through the fields in one record. */
        for (size_t i = 0; i < fields_cnt; ++i) {
                print_field(field_to_str(fields[i].id, data + off),
                                col_width[i], PRETTY_PRINT_COL_WIDTH -
                                COL_WIDTH_RESERVE,
                                i == (fields_cnt - 1));
                off += fields[i].size;
        }
}
static char *arg_to_str(struct event_filter *filter, struct filter_arg *arg)
{
	char *str;

	switch (arg->type) {
	case FILTER_ARG_BOOLEAN:
		str = malloc_or_die(6);
		if (arg->boolean.value)
			strcpy(str, "TRUE");
		else
			strcpy(str, "FALSE");
		return str;

	case FILTER_ARG_OP:
		return op_to_str(filter, arg);

	case FILTER_ARG_NUM:
		return num_to_str(filter, arg);

	case FILTER_ARG_STR:
		return str_to_str(filter, arg);

	case FILTER_ARG_VALUE:
		return val_to_str(filter, arg);

	case FILTER_ARG_FIELD:
		return field_to_str(filter, arg);

	case FILTER_ARG_EXP:
		return exp_to_str(filter, arg);

	default:
		/* ?? */
		return NULL;
	}

}
Example #4
0
error_code_t print_mem(lnf_mem_t *mem, size_t limit)
{
        lnf_rec_t *rec; //record = line
        size_t rec_cntr = 0; //aka lines counter

        lnf_mem_cursor_t *cursor; //current record (line) cursor
        size_t fld_max_size = 0; //maximum data size length in bytes
        size_t data_max_strlen[LNF_FLD_TERM_] = {0}; //maximum data string len


        if (output_params.print_records != OUTPUT_ITEM_YES) {
                return E_OK;
        }
        first_item = first_item ? false : (putchar('\n'), false);

        secondary_errno = lnf_rec_init(&rec);
        if (secondary_errno != LNF_OK) {
                print_err(E_LNF, secondary_errno, "lnf_rec_init()");
                return E_LNF;
        }


        /*
         * Find out maximum data type size of present fields, length of headers
         * and last present field ID.
         */
        for (size_t i = 0; i < fields_cnt; ++i) {
                size_t header_str_len = strlen(field_get_name(fields[i].id));

                MAX_ASSIGN(fld_max_size, fields[i].size);
                MAX_ASSIGN(data_max_strlen[fields[i].id], header_str_len);
        }

        /* Find out max data length, converted to string. */
        lnf_mem_first_c(mem, &cursor);
        while (cursor != NULL) { //row loop
                char buff[fld_max_size];

                lnf_mem_read_c(mem, cursor, rec);

                for (size_t i = 0; i < fields_cnt; ++i) { //column loop
                        size_t data_str_len;

                        //XXX: lnf_rec_fget() may return LNF_ERR_UNKFLD even if
                        //field is present (e.g. if duration is zero).
                        lnf_rec_fget(rec, fields[i].id, buff);
                        data_str_len = strlen(field_to_str(fields[i].id, buff));
                        MAX_ASSIGN(data_max_strlen[fields[i].id], data_str_len);
                }

                if (++rec_cntr == limit) {
                        break;
                }

                lnf_mem_next_c(mem, &cursor);
        }
        rec_cntr = 0;


        /* Actual printing: header. */
        for (size_t i = 0; i < fields_cnt; ++i) { //column loop
                print_field(field_get_name(fields[i].id),
                                data_max_strlen[fields[i].id],
                                PRETTY_PRINT_COL_WIDTH, i == (fields_cnt - 1));
        }

        /* Actual printing: field data converted to string. */
        lnf_mem_first_c(mem, &cursor);
        while (cursor != NULL) { //row loop
                char buff[fld_max_size];

                lnf_mem_read_c(mem, cursor, rec);

                for (size_t i = 0; i < fields_cnt; ++i) { //column loop
                        //XXX: see above lnf_rec_fget()
                        lnf_rec_fget(rec, fields[i].id, buff);

                        print_field(field_to_str(fields[i].id, buff),
                                        data_max_strlen[fields[i].id],
                                        PRETTY_PRINT_COL_WIDTH,
                                        i == (fields_cnt - 1));
                }

                if (++rec_cntr == limit) {
                        break;
                }

                lnf_mem_next_c(mem, &cursor);
        }

        lnf_rec_free(rec);

        return E_OK;
}
Example #5
0
/** \brief Convert lnf_brec1_t structure to string.
 *
 * \param[in] brec lnf basic record 1.
 * \return String containing lnf_brec1_t representation. Static memory.
 */
static const char * mylnf_brec_to_str(const lnf_brec1_t *brec)
{
        static char res[MAX_STR_LEN];
        size_t off = 0;

        switch (output_params.format) {
        case OUTPUT_FORMAT_PRETTY:
                off += snprintf(res + off, MAX_STR_LEN - off, "%-27s",
                                field_to_str(LNF_FLD_FIRST, &brec->first));
                off += snprintf(res + off, MAX_STR_LEN - off, "%-27s",
                                field_to_str(LNF_FLD_LAST, &brec->last));

                off += snprintf(res + off, MAX_STR_LEN - off, "%-6s",
                                field_to_str(LNF_FLD_PROT, &brec->prot));

                off += snprintf(res + off, MAX_STR_LEN - off, "%17s:",
                                field_to_str(LNF_FLD_SRCADDR, &brec->srcaddr));
                off += snprintf(res + off, MAX_STR_LEN - off, "%-7s",
                                field_to_str(LNF_FLD_SRCPORT, &brec->srcport));

                off += snprintf(res + off, MAX_STR_LEN - off, "%17s:",
                                field_to_str(LNF_FLD_DSTADDR, &brec->dstaddr));
                off += snprintf(res + off, MAX_STR_LEN - off, "%-7s",
                                field_to_str(LNF_FLD_DSTPORT, &brec->dstport));


                off += snprintf(res + off, MAX_STR_LEN - off, "%13s",
                                field_to_str(LNF_FLD_DOCTETS, &brec->bytes));
                off += snprintf(res + off, MAX_STR_LEN - off, "%13s",
                                field_to_str(LNF_FLD_DPKTS, &brec->pkts));
                off += snprintf(res + off, MAX_STR_LEN - off, "%13s",
                                field_to_str(LNF_FLD_AGGR_FLOWS, &brec->flows));
                break;

        case OUTPUT_FORMAT_CSV:
                off += snprintf(res + off, MAX_STR_LEN - off, "%s%c",
                                field_to_str(LNF_FLD_FIRST, &brec->first),
                                CSV_SEP);
                off += snprintf(res + off, MAX_STR_LEN - off, "%s%c",
                                field_to_str(LNF_FLD_LAST, &brec->last),
                                CSV_SEP);

                off += snprintf(res + off, MAX_STR_LEN - off, "%s%c",
                                field_to_str(LNF_FLD_PROT, &brec->prot),
                                CSV_SEP);

                off += snprintf(res + off, MAX_STR_LEN - off, "%s%c",
                                field_to_str(LNF_FLD_SRCADDR, &brec->srcaddr),
                                CSV_SEP);
                off += snprintf(res + off, MAX_STR_LEN - off, "%s%c",
                                field_to_str(LNF_FLD_SRCPORT, &brec->srcport),
                                CSV_SEP);

                off += snprintf(res + off, MAX_STR_LEN - off, "%s%c",
                                field_to_str(LNF_FLD_DSTADDR, &brec->dstaddr),
                                CSV_SEP);
                off += snprintf(res + off, MAX_STR_LEN - off, "%s%c",
                                field_to_str(LNF_FLD_DSTPORT, &brec->dstport),
                                CSV_SEP);


                off += snprintf(res + off, MAX_STR_LEN - off, "%s%c",
                                field_to_str(LNF_FLD_DOCTETS, &brec->bytes),
                                CSV_SEP);
                off += snprintf(res + off, MAX_STR_LEN - off, "%s%c",
                                field_to_str(LNF_FLD_DPKTS, &brec->pkts),
                                CSV_SEP);
                off += snprintf(res + off, MAX_STR_LEN - off, "%s",
                                field_to_str(LNF_FLD_AGGR_FLOWS, &brec->flows));
                break;

        default:
                assert(!"unknown output format");
        }

        return res;
}