| 369 | } |
| 370 | |
| 371 | static void BuildInstanceName(const char* full_name, const char* service_type_local, char* out, uint32_t out_size) |
| 372 | { |
| 373 | uint32_t full_name_len = (uint32_t) strlen(full_name); |
| 374 | uint32_t service_type_len = (uint32_t) strlen(service_type_local); |
| 375 | |
| 376 | if (full_name_len > service_type_len + 1) |
| 377 | { |
| 378 | const char* suffix = full_name + full_name_len - service_type_len; |
| 379 | if (dmStrCaseCmp(suffix, service_type_local) == 0 && *(suffix - 1) == '.') |
| 380 | { |
| 381 | uint32_t instance_len = (uint32_t) (suffix - full_name - 1); |
| 382 | char escaped_instance[256]; |
| 383 | if (instance_len >= out_size) |
| 384 | instance_len = out_size - 1; |
| 385 | memcpy(escaped_instance, full_name, instance_len); |
| 386 | escaped_instance[instance_len] = 0; |
| 387 | UnescapeDnsText(escaped_instance, out, out_size); |
| 388 | return; |
| 389 | } |
| 390 | } |
| 391 | |
| 392 | UnescapeDnsText(full_name, out, out_size); |
| 393 | } |
| 394 | |
| 395 | static bool ContainsAddress(const dmArray<dmSocket::Address>& addresses, dmSocket::Address address) |
| 396 | { |
no test coverage detected