15 #define SSDP_CUSTOM_FIELD_SERIALNUMBER "serialNumber"
16 #define SSDP_CUSTOM_FIELD_FRIENDLYNAME "friendlyName"
17 #define ONELINE_ANSI_COLOR_GREEN "\x1b[1;32m"
18 #define ONELINE_ANSI_COLOR_GREEN_SIZE 10
19 #define ONELINE_ANSI_COLOR_RESET "\x1b[0m"
20 #define ONELINE_ANSI_COLOR_RESET_SIZE 7
23 unsigned int json_buffer_size) {
24 unsigned int used_buffer = 0;
27 ssdp_cache = ssdp_cache->
first;
30 used_buffer = snprintf(json_buffer, json_buffer_size,
"root {\n");
34 (json_buffer + used_buffer), (json_buffer_size - used_buffer));
35 ssdp_cache = ssdp_cache->
next;
37 used_buffer += snprintf((json_buffer + used_buffer),
38 (json_buffer_size - used_buffer),
"}\n");
44 unsigned int xml_buffer_size) {
45 unsigned int used_buffer = 0;
47 if(NULL == ssdp_cache) {
48 PRINT_ERROR(
"No valid SSDP cache given (NULL)");
53 ssdp_cache = ssdp_cache->
first;
56 used_buffer = snprintf(xml_buffer, xml_buffer_size,
57 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n");
60 PRINT_DEBUG(
"cache_to_xml(): buffer used: %d; left: %d", used_buffer,
61 xml_buffer_size - used_buffer);
64 (xml_buffer + used_buffer), (xml_buffer_size - used_buffer));
66 ssdp_cache = ssdp_cache->
next;
68 used_buffer += snprintf((xml_buffer + used_buffer),
69 (xml_buffer_size - used_buffer),
"</root>\n");
75 char *json_buffer,
int json_buffer_size) {
84 char *xml_buffer,
int xml_buffer_size) {
88 PRINT_ERROR(
"to_xml(): No XML message buffer specified");
90 }
else if (ssdp_message == NULL) {
91 PRINT_ERROR(
"to_xml(): No SSDP message specified");
95 memset(xml_buffer,
'\0',
sizeof(
char) * xml_buffer_size);
97 used_length = snprintf(xml_buffer, xml_buffer_size,
98 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n");
101 PRINT_DEBUG(
"Setting upnp xml-fields");
102 used_length += snprintf(xml_buffer + used_length,
103 xml_buffer_size - used_length,
"\t<message length=\"%d\">\n",
105 used_length += snprintf(xml_buffer + used_length,
106 xml_buffer_size - used_length,
"\t\t<mac>\n\t\t\t%s\n\t\t</mac>\n",
108 used_length += snprintf(xml_buffer + used_length,
109 xml_buffer_size - used_length,
"\t\t<ip>\n\t\t\t%s\n\t\t</ip>\n",
111 used_length += snprintf(xml_buffer + used_length, xml_buffer_size - used_length,
112 "\t\t<request protocol=\"%s\">\n\t\t\t%s\n\t\t</request>\n",
114 used_length += snprintf(xml_buffer + used_length,
115 xml_buffer_size - used_length,
116 "\t\t<datetime>\n\t\t\t%s\n\t\t</datetime>\n", ssdp_message->
datetime);
132 int needed_size = 48;
134 PRINT_DEBUG(
"Setting custom xml-fields");
139 needed_size += strlen(cf->
name) + strlen(cf->
contents) + 50;
141 PRINT_DEBUG(
"Done calculating buffer");
147 PRINT_DEBUG(
"to_xml(): XML custom fields buffer left: %d, buffer_needed: "
148 "%d", (xml_buffer_size - used_length), needed_size);
149 if ((xml_buffer_size - used_length) < needed_size) {
150 PRINT_ERROR(
"to_xml(): Not enought buffer space left to convert the "
151 "SSDP message custom fields to XML, skipping\n");
155 used_length += snprintf(xml_buffer + used_length, xml_buffer_size - used_length,
159 PRINT_DEBUG(
"Setting:");
160 PRINT_DEBUG(
"'%s'", cf->
name);
161 used_length += snprintf(xml_buffer + used_length,
162 xml_buffer_size - used_length,
163 "\t\t\t<custom_field name=\"%s\">\n\t\t\t\t%s\n\t\t\t</custom_field>\n",
167 PRINT_DEBUG(
"Done with this one");
171 used_length += snprintf(xml_buffer + used_length,
172 xml_buffer_size - used_length,
173 "\t\t</custom_fields>\n");
174 PRINT_DEBUG(
"to_xml(): XML custom-fields bytes used: %d",
175 (
int)strlen(xml_buffer));
196 int needed_size = 36;
211 PRINT_DEBUG(
"buffer left: %d, buffer needed: %d",
212 (xml_buffer_size - used_length), needed_size);
213 if ((xml_buffer_size - used_length) < needed_size) {
214 PRINT_ERROR(
"to_xml(): Not enought buffer space left to convert the "
215 "SSDP message headers to XML, skipping\n");
218 used_length += snprintf(xml_buffer + used_length,
219 xml_buffer_size - used_length,
"\t\t<headers count=\"%d\">\n",
223 used_length += snprintf(xml_buffer + used_length,
224 xml_buffer_size - used_length,
225 "\t\t\t<header typeInt=\"%d\" typeStr=\"%s\">\n", h->
type,
227 used_length += snprintf(xml_buffer + used_length,
228 xml_buffer_size - used_length,
"\t\t\t\t%s\n\t\t\t</header>\n",
234 used_length += snprintf(xml_buffer + used_length,
235 xml_buffer_size - used_length,
"\t\t</headers>\n");
240 used_length += snprintf(xml_buffer + used_length,
241 xml_buffer_size - used_length,
"\t</message>\n");
244 used_length += snprintf(xml_buffer + used_length,
245 xml_buffer_size - used_length,
"</root>\n");
254 char *oneline = NULL;
259 custom_field_id =
get_custom_field(message, SSDP_CUSTOM_FIELD_SERIALNUMBER);
262 custom_field_id ? strlen(custom_field_id->
contents) : 7;
265 int mac_size = message->
mac ? strlen(message->
mac) : 8;
268 SSDP_CUSTOM_FIELD_FRIENDLYNAME);
271 custom_field_model ? strlen(custom_field_model->
contents) : 10;
274 const char* start_color = monochrome ?
"" : ONELINE_ANSI_COLOR_GREEN;
275 const char* end_color = monochrome ?
"" : ONELINE_ANSI_COLOR_RESET;
276 int start_color_size = monochrome ? 0 : ONELINE_ANSI_COLOR_GREEN_SIZE;
277 int end_color_size = monochrome ? 0 : ONELINE_ANSI_COLOR_RESET_SIZE;
280 int oneline_size = start_color_size + id_size + end_color_size +
281 strlen(message->
ip) + mac_size + model_size + 10;
282 oneline = malloc(oneline_size + 1);
284 sprintf(oneline,
"%s%s%s - %s - %s - %s", start_color,
285 custom_field_id ? custom_field_id->
contents :
"(no ID)",
286 end_color, message->
ip, message->
mac ? message->
mac :
"(no MAC)",
287 custom_field_model ? custom_field_model->
contents :
const char * get_header_string(const unsigned int header_type, const ssdp_header_s *header)
ssdp_custom_field_s * get_custom_field(const ssdp_message_s *ssdp_message, const char *custom_field)
unsigned char header_count
struct ssdp_custom_field_struct * custom_fields
struct ssdp_header_struct * headers
struct ssdp_cache_struct * next
unsigned char custom_field_count
struct ssdp_custom_field_struct * first
struct ssdp_cache_struct * first
ssdp_message_s * ssdp_message
struct ssdp_custom_field_struct * next