Beispiel #1
0
void sml_proc_par_value_write(sml_proc_par_value *value, sml_buffer *buf) {
	if (value == 0) {
		sml_buf_optional_write(buf);
		return;
	}

	sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 2);
	sml_u8_write(value->tag, buf);

	switch (*(value->tag)) {
		case SML_PROC_PAR_VALUE_TAG_VALUE:
			sml_value_write(value->data.value, buf);
			break;
		case SML_PROC_PAR_VALUE_TAG_PERIOD_ENTRY:
			sml_period_entry_write(value->data.period_entry, buf);
			break;
		case SML_PROC_PAR_VALUE_TAG_TUPEL_ENTRY:
			sml_tupel_entry_write(value->data.tupel_entry, buf);
			break;
		case SML_PROC_PAR_VALUE_TAG_TIME:
			sml_time_write(value->data.time, buf);
			break;
		default:
			printf("error: unknown tag in %s\n", __FUNCTION__);
	}
}
Beispiel #2
0
void sml_message_write(sml_message *msg, sml_buffer *buf) {
	int msg_start = buf->cursor;
	
	sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 6);
	sml_octet_string_write(msg->transaction_id, buf);
	sml_u8_write(msg->group_id, buf);
	sml_u8_write(msg->abort_on_error, buf);
	sml_message_body_write(msg->message_body, buf);

	msg->crc = sml_u16_init(sml_crc16_calculate(&(buf->buffer[msg_start]), buf->cursor - msg_start));
	sml_u16_write(msg->crc, buf);

	// end of message
	buf->buffer[buf->cursor] = 0x0;
	buf->cursor++;
}
Beispiel #3
0
sml_time *sml_time_init() {
	sml_time *t = (sml_time *) malloc(sizeof(sml_time));
	*t = ( sml_time ) {
		.tag = NULL,
		.data.sec_index = NULL
	};
	return t;
}

sml_time *sml_time_parse(sml_buffer *buf) {
	if (sml_buf_optional_is_skipped(buf)) {
		return 0;
	}

	sml_time *tme = sml_time_init();

	if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) {
		buf->error = 1;
		goto error;
	}

	if (sml_buf_get_next_length(buf) != 2) {
		buf->error = 1;
		goto error;
	}

	tme->tag = sml_u8_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	tme->data.timestamp = sml_u32_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	return tme;

error:
	sml_time_free(tme);
	return 0;
}

void sml_time_write(sml_time *t, sml_buffer *buf) {
	if (t == 0) {
		sml_buf_optional_write(buf);
		return;
	}

	sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 2);
	sml_u8_write(t->tag, buf);
	sml_u32_write(t->data.timestamp, buf);
}

void sml_time_free(sml_time *tme) {
    if (tme) {
		sml_number_free(tme->tag);
		sml_number_free(tme->data.timestamp);
        free(tme);
    }
}
Beispiel #4
0
void sml_time_write(sml_time *t, sml_buffer *buf) {
	if (t == 0) {
		sml_buf_optional_write(buf);
		return;
	}

	sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 2);
	sml_u8_write(t->tag, buf);
	sml_u32_write(t->data.timestamp, buf);
}
Beispiel #5
0
void sml_open_response_write(sml_open_response *msg, sml_buffer *buf) {
	sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 6);

	sml_octet_string_write(msg->codepage, buf);
	sml_octet_string_write(msg->client_id, buf);
	sml_octet_string_write(msg->req_file_id, buf);
	sml_octet_string_write(msg->server_id, buf);
	sml_time_write(msg->ref_time, buf);
	sml_u8_write(msg->sml_version, buf);
}
void sml_open_request_write(sml_open_request *msg, sml_buffer *buf) {
	sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 7);

	sml_octet_string_write(msg->codepage, buf);
	sml_octet_string_write(msg->client_id, buf);
	sml_octet_string_write(msg->req_file_id, buf);
	sml_octet_string_write(msg->server_id, buf);
	sml_octet_string_write(msg->username,buf);
	sml_octet_string_write(msg->password,buf);
	sml_u8_write(msg->sml_version, buf);
}
Beispiel #7
0
TEST(sml_number, write_unsigned8) {
	u8 *n = sml_u8_init(1);
	sml_u8_write(n, buf);
	expected_buf(buf, "6201", 2);
	sml_u8_free( n );
}