| 58 | } |
| 59 | |
| 60 | HDiscoveryService DiscoveryServiceNew(const char* service_id, const char* instance_name, uint16_t port, const DiscoveryTxtEntry* txt_entries, uint32_t txt_count) |
| 61 | { |
| 62 | if (service_id == 0 || instance_name == 0 || port == 0 || txt_entries == 0) |
| 63 | return 0; |
| 64 | |
| 65 | dmMDNS::TxtEntry mdns_txt_entries[DISCOVERY_MAX_TXT_ENTRIES]; |
| 66 | const uint32_t mdns_txt_entries_count = DM_ARRAY_SIZE(mdns_txt_entries); |
| 67 | if (txt_count > mdns_txt_entries_count) |
| 68 | { |
| 69 | dmLogWarning("Unable to register mDNS service, too many TXT entries (%u)", txt_count); |
| 70 | return 0; |
| 71 | } |
| 72 | |
| 73 | for (uint32_t i = 0; i < txt_count; ++i) |
| 74 | { |
| 75 | mdns_txt_entries[i].m_Key = txt_entries[i].m_Key; |
| 76 | mdns_txt_entries[i].m_Value = txt_entries[i].m_Value; |
| 77 | } |
| 78 | |
| 79 | dmMDNS::Params mdns_params; |
| 80 | mdns_params.m_AnnounceInterval = DISCOVERY_ANNOUNCE_INTERVAL; |
| 81 | mdns_params.m_Ttl = DISCOVERY_TTL; |
| 82 | |
| 83 | dmMDNS::HMDNS mdns = 0; |
| 84 | dmMDNS::Result mr = dmMDNS::New(&mdns_params, &mdns); |
| 85 | if (mr != dmMDNS::RESULT_OK) |
| 86 | { |
| 87 | dmLogWarning("Unable to create mDNS service (%d)", mr); |
| 88 | return 0; |
| 89 | } |
| 90 | |
| 91 | dmMDNS::ServiceDesc mdns_desc; |
| 92 | memset(&mdns_desc, 0, sizeof(mdns_desc)); |
| 93 | char host_name[64]; |
| 94 | BuildDiscoveryHostName(service_id, host_name, sizeof(host_name)); |
| 95 | |
| 96 | mdns_desc.m_Id = service_id; |
| 97 | mdns_desc.m_InstanceName = instance_name; |
| 98 | mdns_desc.m_ServiceType = DISCOVERY_SERVICE_TYPE; |
| 99 | mdns_desc.m_Host = host_name; |
| 100 | mdns_desc.m_Port = port; |
| 101 | mdns_desc.m_Txt = mdns_txt_entries; |
| 102 | mdns_desc.m_TxtCount = txt_count; |
| 103 | mdns_desc.m_Ttl = mdns_params.m_Ttl; |
| 104 | |
| 105 | mr = dmMDNS::RegisterService(mdns, &mdns_desc); |
| 106 | if (mr != dmMDNS::RESULT_OK) |
| 107 | { |
| 108 | dmMDNS::Delete(mdns); |
| 109 | dmLogWarning("Unable to register mDNS service (%d)", mr); |
| 110 | return 0; |
| 111 | } |
| 112 | |
| 113 | DiscoveryService* discovery_service = new DiscoveryService(); |
| 114 | discovery_service->m_MDNS = mdns; |
| 115 | dmStrlCpy(discovery_service->m_ServiceId, service_id, sizeof(discovery_service->m_ServiceId)); |
| 116 | return discovery_service; |
| 117 | } |
no test coverage detected