implemented sml_get_profile_pack_response

This commit is contained in:
Juri Glass 2011-09-27 18:55:26 +02:00
parent 17dcb0e993
commit 4bbe95db7c
2 changed files with 239 additions and 8 deletions

View file

@ -34,8 +34,8 @@ typedef struct {
sml_time *act_time; // specified by germans (current time was meant) ;)
u32 *reg_period;
sml_tree_path *parameter_tree_path;
sml_sequence *header_list;
sml_sequence *period_list;
sml_sequence *header_list; // list of sml_prof_obj_header_entry
sml_sequence *period_list; // list of sml_prof_obj_period_entry
octet_string *rawdata; // optional
sml_signature *profile_signature; // optional
@ -47,7 +47,6 @@ void sml_get_profile_pack_response_write(sml_get_profile_pack_response *msg, sml
void sml_get_profile_pack_response_free(sml_get_profile_pack_response *msg);
typedef struct {
octet_string *obj_name;
sml_unit *unit;
i8 *scaler;
@ -65,6 +64,21 @@ typedef struct {
sml_signature *period_signature;
} sml_prof_obj_period_entry;
sml_prof_obj_period_entry *sml_prof_obj_period_entry_init();
sml_prof_obj_period_entry *sml_prof_obj_period_entry_parse(sml_buffer *buf);
void sml_prof_obj_period_entry_write(sml_prof_obj_period_entry *entry, sml_buffer *buf);
void sml_prof_obj_period_entry_free(sml_prof_obj_period_entry *entry);
typedef struct {
sml_value *value;
sml_signature *value_signature;
} sml_value_entry;
sml_value_entry *sml_value_entry_init();
sml_value_entry *sml_value_entry_parse(sml_buffer *buf);
void sml_value_entry_write(sml_value_entry *entry, sml_buffer *buf);
void sml_value_entry_free(sml_value_entry *entry);
#ifdef __cplusplus
}
#endif

View file

@ -20,20 +20,237 @@
#include <sml/sml_get_profile_pack_response.h>
#include <stdio.h>
// sml_get_profile_pack_response
sml_get_profile_pack_response *sml_get_profile_pack_response_init() {
printf("NYI: %s\n", __FUNCTION__);
return 0;
sml_get_profile_pack_response *msg = (sml_get_profile_pack_response *) malloc(sizeof(sml_get_profile_pack_response));
memset(msg, 0, sizeof(sml_get_profile_pack_response));
return msg;
}
sml_get_profile_pack_response *sml_get_profile_pack_response_parse(sml_buffer *buf){
printf("NYI: %s\n", __FUNCTION__);
sml_get_profile_pack_response *msg = sml_get_profile_pack_response_init();
if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) {
buf->error = 1;
goto error;
}
if (sml_buf_get_next_length(buf) != 8) {
buf->error = 1;
goto error;
}
msg->server_id = sml_octet_string_parse(buf);
msg->act_time = sml_time_parse(buf);
msg->reg_period = sml_u32_parse(buf);
msg->parameter_tree_path = sml_tree_path_parse(buf);
msg->header_list = sml_sequence_parse(buf, (void *) &sml_prof_obj_header_entry_parse, (void (*)(void *)) &sml_prof_obj_header_entry_free);
msg->period_list = sml_sequence_parse(buf, (void *) &sml_prof_obj_period_entry_parse, (void (*)(void *)) &sml_prof_obj_period_entry_free);
msg->rawdata = sml_octet_string_parse(buf);
msg->profile_signature = sml_signature_parse(buf);
return msg;
error:
sml_get_profile_pack_response_free(msg);
return 0;
}
void sml_get_profile_pack_response_write(sml_get_profile_pack_response *msg, sml_buffer *buf) {
printf("NYI: %s\n", __FUNCTION__);
sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 8);
sml_octet_string_write(msg->server_id, buf);
sml_time_write(msg->act_time, buf);
sml_u32_write(msg->reg_period, buf);
sml_tree_path_write(msg->parameter_tree_path, buf);
sml_sequence_write(msg->header_list, buf, (void (*)(void *, sml_buffer *)) &sml_prof_obj_header_entry_write);
sml_sequence_write(msg->period_list, buf, (void (*)(void *, sml_buffer *)) &sml_prof_obj_period_entry_write);
sml_octet_string_write(msg->rawdata, buf);
sml_signature_write(msg->profile_signature, buf);
}
void sml_get_profile_pack_response_free(sml_get_profile_pack_response *msg){
printf("NYI: %s\n", __FUNCTION__);
if (msg) {
sml_octet_string_free(msg->server_id);
sml_time_free(msg->act_time);
sml_number_free(msg->reg_period);
sml_tree_path_parse(msg->parameter_tree_path);
sml_sequence_free(msg->header_list);
sml_sequence_free(msg->period_list);
sml_octet_string_free(msg->rawdata);
sml_signature_free(msg->profile_signature);
free(msg);
}
}
// sml_prof_obj_header_entry;
sml_prof_obj_header_entry *sml_prof_obj_header_entry_init() {
sml_prof_obj_header_entry *entry = (sml_prof_obj_header_entry *) malloc(sizeof(sml_prof_obj_header_entry));
memset(entry, 0, sizeof(sml_prof_obj_header_entry));
return entry;
}
sml_prof_obj_header_entry *sml_prof_obj_header_entry_parse(sml_buffer *buf) {
sml_prof_obj_header_entry *entry = sml_prof_obj_header_entry_init();
if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) {
buf->error = 1;
goto error;
}
if (sml_buf_get_next_length(buf) != 3) {
buf->error = 1;
goto error;
}
entry->obj_name = sml_octet_string_parse(buf);
if (sml_buf_has_errors(buf)) goto error;
entry->unit = sml_unit_parse(buf);
if (sml_buf_has_errors(buf)) goto error;
entry->scaler = sml_i8_parse(buf);
if (sml_buf_has_errors(buf)) goto error;
return entry;
error:
buf->error = 1;
sml_prof_obj_header_entry_free(entry);
return 0;
}
void sml_prof_obj_header_entry_write(sml_prof_obj_header_entry *entry, sml_buffer *buf) {
sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 3);
sml_octet_string_write(entry->obj_name, buf);
sml_unit_write(entry->unit, buf);
sml_i8_write(entry->scaler, buf);
}
void sml_prof_obj_header_entry_free(sml_prof_obj_header_entry *entry) {
if (entry) {
sml_octet_string_free(entry->obj_name);
sml_unit_free(entry->unit);
sml_number_free(entry->scaler);
free(entry);
}
}
// sml_prof_obj_period_entry;
sml_prof_obj_period_entry *sml_prof_obj_period_entry_init() {
sml_prof_obj_period_entry *entry = (sml_prof_obj_period_entry *) malloc(sizeof(sml_prof_obj_period_entry));
memset(entry, 0, sizeof(sml_prof_obj_period_entry));
return entry;
}
sml_prof_obj_period_entry *sml_prof_obj_period_entry_parse(sml_buffer *buf) {
sml_prof_obj_period_entry *entry = sml_prof_obj_period_entry_init();
if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) {
buf->error = 1;
goto error;
}
if (sml_buf_get_next_length(buf) != 4) {
buf->error = 1;
goto error;
}
entry->val_time = sml_time_parse(buf);
if (sml_buf_has_errors(buf)) goto error;
entry->status = sml_u64_parse(buf);
if (sml_buf_has_errors(buf)) goto error;
entry->value_list = sml_sequence_parse(buf, (void *) &sml_value_entry_parse, (void (*)()) &sml_value_entry_free);
if (sml_buf_has_errors(buf)) goto error;
entry->period_signature = sml_signature_parse(buf);
if (sml_buf_has_errors(buf)) goto error;
return entry;
error:
buf->error = 1;
sml_prof_obj_period_entry_free(entry);
return 0;
}
void sml_prof_obj_period_entry_write(sml_prof_obj_period_entry *entry, sml_buffer *buf) {
sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 4);
sml_time_write(entry->val_time, buf);
sml_u64_write(entry->status, buf);
sml_sequence_write(entry->value_list, buf, (void (*)(void *, sml_buffer *)) &sml_value_entry_write);
sml_signature_write(entry->period_signature, buf);
}
void sml_prof_obj_period_entry_free(sml_prof_obj_period_entry *entry) {
if (entry) {
sml_time_free(entry->val_time);
sml_number_free(entry->status);
sml_sequence_free(entry->value_list);
sml_signature_free(entry->period_signature);
free(entry);
}
}
// sml_value_entry;
sml_value_entry *sml_value_entry_init() {
sml_value_entry *entry = (sml_value_entry *) malloc(sizeof(sml_value_entry));
memset(entry, 0, sizeof(sml_value_entry));
return entry;
}
sml_value_entry *sml_value_entry_parse(sml_buffer *buf) {
sml_value_entry *entry = sml_value_entry_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;
}
entry->value = sml_value_parse(buf);
if (sml_buf_has_errors(buf)) goto error;
entry->value_signature = sml_signature_parse(buf);
if (sml_buf_has_errors(buf)) goto error;
return entry;
error:
buf->error = 1;
sml_value_entry_free(entry);
return 0;
}
void sml_value_entry_write(sml_value_entry *entry, sml_buffer *buf) {
sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 2);
sml_value_write(entry->value, buf);
sml_signature_write(entry->value_signature, buf);
}
void sml_value_entry_free(sml_value_entry *entry) {
if (entry) {
sml_value_free(entry->value);
sml_signature_free(entry->value_signature);
free(entry);
}
}