aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mds-colour.c43
1 files changed, 39 insertions, 4 deletions
diff --git a/src/mds-colour.c b/src/mds-colour.c
index 2c3d6da..2813d64 100644
--- a/src/mds-colour.c
+++ b/src/mds-colour.c
@@ -517,6 +517,10 @@ int handle_list_colours(const char* recv_client_id, const char* recv_message_id,
const char* recv_include_values)
{
int include_values = 0;
+ char* payload;
+ size_t payload_length;
+ size_t length;
+ char* temp;
if (strequals(recv_client_id, "0:0"))
return eprint("got a query from an anonymous client, ignoring."), 0;
@@ -530,13 +534,44 @@ int handle_list_colours(const char* recv_client_id, const char* recv_message_id,
return 0;
}
- if ((colour_list_buffer_without_values == NULL) && !include_values)
- fail_if (create_colour_list_buffer_without_values());
- else if ((colour_list_buffer_with_values == NULL) && include_values)
+ if ((colour_list_buffer_with_values == NULL) && include_values)
fail_if (create_colour_list_buffer_with_values());
+ else if ((colour_list_buffer_without_values == NULL) && !include_values)
+ fail_if (create_colour_list_buffer_without_values());
+
+ payload = include_values
+ ? colour_list_buffer_with_values
+ : colour_list_buffer_without_values;
+
+ payload_length = include_values
+ ? colour_list_buffer_with_values_length
+ : colour_list_buffer_without_values_length;
- /* TODO send list */
+ length = sizeof("To: \n"
+ "In response to: \n"
+ "Message ID: \n"
+ "Origin command: list-colours\n"
+ "\n") / sizeof(char);
+ length += strlen(recv_client_id) + strlen(recv_message_id) + 10 + payload_length;
+ if (length > send_buffer_size)
+ {
+ fail_if (yrealloc(temp, send_buffer, length, char));
+ send_buffer_size = length;
+ }
+
+ sprintf(send_buffer,
+ "To: %s\n"
+ "In response to: %s\n"
+ "Message ID: %"PRIu32"\n"
+ "Origin command: list-colours\n"
+ "\n%zn",
+ recv_client_id, recv_message_id, message_id,
+ (ssize_t*)&length);
+ memcpy(send_buffer + length, payload, payload_length * sizeof(char));
+ length += payload_length;
+
+ fail_if (full_send(send_buffer, length));
return 0;
fail:
return -1;