f_number_unsigned_t i = 0;
+ f_range_t ranges[] = {
+ f_range_t_initialize,
+ f_range_t_initialize,
+ f_range_t_initialize,
+ f_range_t_initialize,
+ f_range_t_initialize,
+ f_range_t_initialize,
+ f_range_t_initialize,
+ f_range_t_initialize,
+ f_range_t_initialize,
+ };
+
+ f_status_t status = set->status = F_okay;
+
{
uint8_t j = 0;
// Require Content to exist.
if (!set->contents_header.array[i].used) {
- if (set->abstruses.array[j].value.type == f_abstruse_dynamic_e) {
- }
-
set->abstruses.array[j].value.type = f_abstruse_none_e;
+ set->abstruses.array[j].value.is.a_unsigned = 0;
continue;
}
- // @todo All of these need to be stored in another location so that re-assignments doesn't cause problems with dynamic allocation. Allocate these and make them available.
- /*set->abstruses.array[i].value.type = f_abstruse_dynamic_e;
- set->abstruses.array[i].value.is.a_dynamic.used = 0;
-
- set->status = f_string_dynamic_partial_append(set->buffer, range, &set->abstruses.array[i].value.is.a_dynamic);
-
- if (F_status_is_error(set->status)) {
- kt_tacocat_print_error_on(&main->program.error, F_status_debug_source_d, direction, set->network, set->status, set->name);
-
- return;
- }*/
-
- set->abstruses.array[j].value.type = f_abstruse_range_e;
- set->abstruses.array[j].value.is.a_range = set->contents_header.array[i].array[0];
+ ranges[j] = set->contents_header.array[i].array[0];
}
} // for
} // for
// Convert the status code.
if (set->abstruses.array[0].value.type) {
- const f_number_unsigned_t length = set->abstruses.array[0].value.is.a_range.stop - set->abstruses.array[0].value.is.a_range.start + 1;
- char buffer[length];
- f_status_t status = F_false;
+ if (ranges[0].start > ranges[0].stop) {
+ kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, F_found_not, set->name, set->buffer, set->objects.array[at], ranges[0]);
- memcpy(buffer, set->buffer.string + set->abstruses.array[0].value.is.a_range.start, length);
-
- const f_string_static_t status_string = macro_f_string_static_t_initialize_1(buffer, 0, length);
-
- set->status = fl_status_string_from(status_string, &status);
+ set->abstruses.array[0].value.type = f_abstruse_none_e;
+ set->abstruses.array[0].value.is.a_unsigned = 0;
- if (set->status == F_okay) {
- set->abstruses.array[0].value.type = f_abstruse_unsigned_e;
- set->abstruses.array[0].value.is.a_unsigned = (f_number_unsigned_t) status;
+ set->status = F_status_set_error(F_packet);
}
else {
- kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, set->status, set->name, set->buffer, set->objects.array[at], set->abstruses.array[6].value.is.a_range);
+ const f_number_unsigned_t length = ranges[0].stop - ranges[0].start + 1;
+ char buffer[length];
+ f_status_t code = F_false;
- set->abstruses.array[0].value.type = f_abstruse_none_e;
- set->abstruses.array[0].value.is.a_unsigned = 0;
+ memcpy(buffer, set->buffer.string + ranges[0].start, length);
- set->status = F_status_set_error(F_packet);
+ const f_string_static_t status_string = macro_f_string_static_t_initialize_1(buffer, 0, length);
+
+ status = fl_status_string_from(status_string, &code);
+
+ if (code == F_okay) {
+ set->abstruses.array[0].value.type = f_abstruse_unsigned_e;
+ set->abstruses.array[0].value.is.a_unsigned = (f_number_unsigned_t) code;
+ }
+ else {
+ kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, F_status_is_error(status) ? status : F_found_not, set->name, set->buffer, set->objects.array[at], ranges[0]);
+
+ set->abstruses.array[0].value.type = f_abstruse_none_e;
+ set->abstruses.array[0].value.is.a_unsigned = 0;
+
+ set->status = F_status_set_error(F_packet);
+ }
}
}
// Convert the type.
if (set->abstruses.array[1].value.type) {
- if (f_compare_dynamic_partial_string(kt_tacocat_file_s.string, set->buffer, kt_tacocat_file_s.used, set->abstruses.array[1].value.is.a_range) == F_equal_to) {
- set->abstruses.array[1].value.type = f_abstruse_unsigned_e;
- set->abstruses.array[1].value.is.a_unsigned = (f_number_unsigned_t) kt_tacocat_packet_type_file_d;
+ if (ranges[1].start > ranges[1].stop) {
+
+ kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, F_packet, set->name, set->buffer, set->objects.array[at], ranges[1]);
+
+ set->abstruses.array[1].value.type = f_abstruse_none_e;
+ set->abstruses.array[1].value.is.a_unsigned = 0;
+
+ set->status = F_status_set_error(F_packet);
}
- else if (f_compare_dynamic_partial_string(kt_tacocat_done_s.string, set->buffer, kt_tacocat_done_s.used, set->abstruses.array[1].value.is.a_range) == F_equal_to) {
- set->abstruses.array[1].value.type = f_abstruse_unsigned_e;
- set->abstruses.array[1].value.is.a_unsigned = (f_number_unsigned_t) kt_tacocat_packet_type_done_d;
+ else {
+ if (f_compare_dynamic_partial_string(kt_tacocat_file_s.string, set->buffer, kt_tacocat_file_s.used, ranges[1]) == F_equal_to) {
+ set->abstruses.array[1].value.type = f_abstruse_unsigned_e;
+ set->abstruses.array[1].value.is.a_unsigned = (f_number_unsigned_t) kt_tacocat_packet_type_file_d;
+ }
+ else if (f_compare_dynamic_partial_string(kt_tacocat_done_s.string, set->buffer, kt_tacocat_done_s.used, ranges[1]) == F_equal_to) {
+ set->abstruses.array[1].value.type = f_abstruse_unsigned_e;
+ set->abstruses.array[1].value.is.a_unsigned = (f_number_unsigned_t) kt_tacocat_packet_type_done_d;
+ }
+ else if (f_compare_dynamic_partial_string(kt_tacocat_next_s.string, set->buffer, kt_tacocat_next_s.used, ranges[1]) == F_equal_to) {
+ set->abstruses.array[1].value.type = f_abstruse_unsigned_e;
+ set->abstruses.array[1].value.is.a_unsigned = (f_number_unsigned_t) kt_tacocat_packet_type_next_d;
+ }
+ else if (f_compare_dynamic_partial_string(kt_tacocat_resend_s.string, set->buffer, kt_tacocat_resend_s.used, ranges[1]) == F_equal_to) {
+ set->abstruses.array[1].value.type = f_abstruse_unsigned_e;
+ set->abstruses.array[1].value.is.a_unsigned = (f_number_unsigned_t) kt_tacocat_packet_type_resend_d;
+ }
+ else {
+ kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, F_found_not, set->name, set->buffer, set->objects.array[at], ranges[1]);
+
+ set->abstruses.array[1].value.type = f_abstruse_none_e;
+ set->abstruses.array[1].value.is.a_unsigned = 0;
+
+ set->status = F_status_set_error(F_packet);
+ }
}
- else if (f_compare_dynamic_partial_string(kt_tacocat_next_s.string, set->buffer, kt_tacocat_next_s.used, set->abstruses.array[1].value.is.a_range) == F_equal_to) {
- set->abstruses.array[1].value.type = f_abstruse_unsigned_e;
- set->abstruses.array[1].value.is.a_unsigned = (f_number_unsigned_t) kt_tacocat_packet_type_next_d;
+ }
+
+ // Convert the name.
+ if (set->abstruses.array[5].value.type) {
+ if (ranges[5].start > ranges[5].stop) {
+ kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, F_found_not, set->name, set->buffer, set->objects.array[at], ranges[5]);
+
+ set->abstruses.array[5].value.type = f_abstruse_none_e;
+ set->abstruses.array[5].value.is.a_unsigned = 0;
+
+ set->status = F_status_set_error(F_packet);
}
- else if (f_compare_dynamic_partial_string(kt_tacocat_resend_s.string, set->buffer, kt_tacocat_resend_s.used, set->abstruses.array[1].value.is.a_range) == F_equal_to) {
- set->abstruses.array[1].value.type = f_abstruse_unsigned_e;
- set->abstruses.array[1].value.is.a_unsigned = (f_number_unsigned_t) kt_tacocat_packet_type_resend_d;
+ else {
+ set->name.used = 0;
+
+ status = f_string_dynamic_partial_append(set->buffer, ranges[5], &set->name);
+
+ if (F_status_is_error(status)) {
+ kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, status, set->name, set->buffer, set->objects.array[at], ranges[5]);
+
+ set->abstruses.array[5].value.type = f_abstruse_none_e;
+ set->abstruses.array[5].value.is.a_unsigned = 0;
+
+ set->status = F_status_set_error(F_packet);
+ }
+ else {
+ set->abstruses.array[5].value.type = f_abstruse_dynamic_e;
+ set->abstruses.array[5].value.is.a_dynamic = set->name;
+ set->abstruses.array[5].value.is.a_dynamic.size = 0;
+ }
+ }
+ }
+
+ // Convert the id.
+ if (set->abstruses.array[7].value.type && ranges[7].start <= ranges[7].stop) {
+ if (ranges[7].start > ranges[7].stop) {
+ kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, F_found_not, set->name, set->buffer, set->objects.array[at], ranges[7]);
+
+ set->abstruses.array[7].value.type = f_abstruse_none_e;
+ set->abstruses.array[7].value.is.a_unsigned = 0;
+
+ set->status = F_status_set_error(F_packet);
}
else {
- set->status = F_status_set_error(F_found_not);
+ set->id.used = 0;
- kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, set->status, set->name, set->buffer, set->objects.array[at], set->abstruses.array[6].value.is.a_range);
+ status = f_string_dynamic_partial_append(set->buffer, ranges[7], &set->id);
- set->abstruses.array[1].value.type = f_abstruse_none_e;
- set->abstruses.array[1].value.is.a_unsigned = 0;
+ if (F_status_is_error(status)) {
+ kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, status, set->id, set->buffer, set->objects.array[at], ranges[7]);
+
+ set->abstruses.array[7].value.type = f_abstruse_none_e;
+ set->abstruses.array[7].value.is.a_unsigned = 0;
+
+ set->status = F_status_set_error(F_packet);
+ }
+ else {
+ set->abstruses.array[7].value.type = f_abstruse_dynamic_e;
+ set->abstruses.array[7].value.is.a_dynamic = set->id;
+ set->abstruses.array[7].value.is.a_dynamic.size = 0;
+ }
+ }
+ }
+
+ // Convert the time.
+ if (set->abstruses.array[8].value.type) {
+ if (ranges[8].start > ranges[8].stop) {
+ kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, F_found_not, set->name, set->buffer, set->objects.array[at], ranges[8]);
+
+ set->abstruses.array[8].value.type = f_abstruse_none_e;
+ set->abstruses.array[8].value.is.a_unsigned = 0;
set->status = F_status_set_error(F_packet);
+ }
+ else {
+ set->time.used = 0;
- return;
+ status = f_string_dynamic_partial_append(set->buffer, ranges[8], &set->time);
+
+ if (F_status_is_error(status)) {
+ kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, status, set->time, set->buffer, set->objects.array[at], ranges[8]);
+
+ set->abstruses.array[8].value.type = f_abstruse_none_e;
+ set->abstruses.array[8].value.is.a_unsigned = 0;
+
+ set->status = F_status_set_error(F_packet);
+ }
+ else {
+ set->abstruses.array[8].value.type = f_abstruse_dynamic_e;
+ set->abstruses.array[8].value.is.a_dynamic = set->time;
+ set->abstruses.array[8].value.is.a_dynamic.size = 0;
+ }
}
}
- // Convert the length, part, and total.
+ // Convert the length (2), part (3), total (4), and salt (6).
{
f_number_unsigned_t number = 0;
- for (i = 2; i < 5; ++i) {
+ for (i = 2; i < 7; ++i) {
- if (!set->abstruses.array[i].value.type) continue;
+ if (!set->abstruses.array[i].value.type || i == 5) continue;
- set->status = fl_conversion_dynamic_partial_to_unsigned(fl_conversion_data_base_10_c, set->buffer, set->abstruses.array[i].value.is.a_range, &number);
+ status = fl_conversion_dynamic_partial_to_unsigned(fl_conversion_data_base_10_c, set->buffer, ranges[i], &number);
- if (set->status == F_okay) {
+ if (status == F_okay) {
set->abstruses.array[i].value.type = f_abstruse_unsigned_e;
set->abstruses.array[i].value.is.a_unsigned = number;
}
else {
- kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, set->status, set->name, set->buffer, set->objects.array[at], set->abstruses.array[6].value.is.a_range);
+ kt_tacocat_print_error_on_packet_header_value_invalid(&main->program.error, direction, set->network, status, set->name, set->buffer, set->objects.array[at], ranges[i]);
set->abstruses.array[i].value.type = f_abstruse_none_e;
set->abstruses.array[i].value.is.a_unsigned = 0;
set->status = F_status_set_error(F_packet);
+
+ return;
}
} // for
}
set->abstruses.used = kt_tacocat_packet_headers_d;
- set->status = F_okay;
}
#endif // _di_kt_tacocat_packet_extract_header_