Esempio n. 1
0
static void rest_of_message(struct fix_message *self, struct buffer *buffer)
{
	int tag = 0;
	const char *tag_ptr = NULL;
	unsigned long nr_fields = 0;

	self->nr_fields = 0;

retry:
	if (!(tag_ptr = parse_field_promisc(buffer, &tag)))
		return;

	switch (tag) {
	case CheckSum:
		break;
	case BeginSeqNo:
	case EndSeqNo:
		self->fields[nr_fields++] = FIX_INT_FIELD(tag, strtol(tag_ptr, NULL, 10));
		goto retry;
	case MsgSeqNum:
		self->msg_seq_num = strtol(tag_ptr, NULL, 10);
		goto retry;
	default:
		goto retry;
	};

	self->nr_fields = nr_fields;
}
Esempio n. 2
0
static void rest_of_message(struct fix_message *self, struct buffer *buffer)
{
	int tag = 0;
	const char *tag_ptr = NULL;
	unsigned long nr_fields = 0;
	enum fix_type type;

	self->nr_fields = 0;

retry:
	if (parse_field_promisc(buffer, &tag, &tag_ptr))
		return;

	type = fix_tag_type(tag);

	switch (type) {
	case FIX_TYPE_INT:
		self->fields[nr_fields++] = FIX_INT_FIELD(tag, strtol(tag_ptr, NULL, 10));
		goto retry;
	case FIX_TYPE_FLOAT:
		self->fields[nr_fields++] = FIX_FLOAT_FIELD(tag, strtod(tag_ptr, NULL));
		goto retry;
	case FIX_TYPE_CHAR:
		goto retry;
	case FIX_TYPE_STRING:
		self->fields[nr_fields++] = FIX_STRING_FIELD(tag, tag_ptr);
		goto retry;
	case FIX_TYPE_CHECKSUM:
		break;
	case FIX_TYPE_MSGSEQNUM:
		self->msg_seq_num = strtol(tag_ptr, NULL, 10);
		goto retry;
	default:
		goto retry;
	}

	self->nr_fields = nr_fields;
}