MCPcopy Create free account
hub / github.com/defold/defold / HandleBrowserRecord

Function HandleBrowserRecord

engine/dlib/src/dlib/mdns.cpp:1883–2090  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1881 }
1882
1883 static void HandleBrowserRecord(Browser* browser, const uint8_t* data, uint32_t size, uint32_t* offset)
1884 {
1885 char name[256];
1886 uint16_t type = 0;
1887 uint16_t klass = 0;
1888 uint32_t ttl = 0;
1889 uint16_t rdlength = 0;
1890
1891 if (!ReadName(data, size, offset, name, sizeof(name))
1892 || !ReadU16(data, size, offset, &type)
1893 || !ReadU16(data, size, offset, &klass)
1894 || !ReadU32(data, size, offset, &ttl)
1895 || !ReadU16(data, size, offset, &rdlength))
1896 {
1897 *offset = size;
1898 return;
1899 }
1900
1901 (void) klass;
1902
1903 if (*offset + rdlength > size)
1904 {
1905 *offset = size;
1906 return;
1907 }
1908
1909 uint32_t rdata_offset = *offset;
1910 *offset += rdlength;
1911
1912 if (type == DNS_TYPE_PTR && NameEquals(name, browser->m_ServiceTypeLocal))
1913 {
1914 uint32_t name_offset = rdata_offset;
1915 char full_service_name[256];
1916 if (!ReadName(data, size, &name_offset, full_service_name, sizeof(full_service_name)))
1917 return;
1918
1919 int32_t service_index = FindBrowserService(browser->m_Services, full_service_name);
1920 bool created = false;
1921 if (service_index < 0)
1922 {
1923 if (browser->m_Services.Full())
1924 browser->m_Services.OffsetCapacity(8);
1925
1926 BrowserService service;
1927 dmStrlCpy(service.m_FullServiceName, full_service_name, sizeof(service.m_FullServiceName));
1928 dmStrlCpy(service.m_ServiceTypeLocal, browser->m_ServiceTypeLocal, sizeof(service.m_ServiceTypeLocal));
1929 BuildInstanceName(service.m_FullServiceName, service.m_ServiceTypeLocal, service.m_InstanceName, sizeof(service.m_InstanceName));
1930 browser->m_Services.Push(service);
1931 service_index = (int32_t) (browser->m_Services.Size() - 1);
1932 created = true;
1933 }
1934
1935 BrowserService& service = browser->m_Services[(uint32_t) service_index];
1936
1937 if (ttl == 0)
1938 {
1939 EmitBrowserRemoved(browser, &service);
1940 browser->m_Services.EraseSwap((uint32_t) service_index);

Callers 1

HandleBrowserResponsesFunction · 0.85

Calls 15

NameEqualsFunction · 0.85
FindBrowserServiceFunction · 0.85
dmStrlCpyFunction · 0.85
BuildInstanceNameFunction · 0.85
EmitBrowserRemovedFunction · 0.85
GetNowFunction · 0.85
SecondsToMicroSecondsFunction · 0.85
EmitBrowserEventFunction · 0.85
TryResolveServiceFunction · 0.85
ParseTxtRDataFunction · 0.85
FindBrowserHostFunction · 0.85

Tested by

no test coverage detected