Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека Разработчика iOS

Разработчик

Ссылка открытия C службы DNS

Опции
Развертывание Target:

На этой странице

Ссылка открытия C службы DNS

Наследование


Не применимый

Соответствует


Не применимый

Оператор импорта


Не применимый не применимый

Включенные заголовки

  • <sys/types.h>

  • <sys/types.h>

  • "Tiano.h"

  • <windows.h>

  • <stdint.h>

  • <dispatch/dispatch.h>

Функции

  • Отображает исходный порт локального сокета UDP, открытого для отправки запроса DNS процессу ID приложения, инициировавшего разрешение DNS.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceGetPID ( uint16_t srcport, int32_t *pid );

    Параметры

    srcport

    Исходный порт (в сетевом порядке байтов) сокета UDP, создававшегося mDNSResponder для отправки запроса DNS на проводе.

    pid

    Обработайте ID приложения, запустившего определение имен, инициировавшее mDNSResponder для отправки запроса на проводе. Если srcport не может быть отображен, значение может быть-1.

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе, или kDNSServiceErr_ServiceNotRunning если не работает демон. Если возвращаемое значение имеет ошибку, значение изодромного с предварением не определено.

  • Получает указанное свойство службы.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceGetProperty ( const char *property, /* Requested property (e.g. {@ link kDNSServiceProperty_DaemonVersion}) */ void *result, /* Pointer to place to store result */ uint32_t *size /* size of result location */ );

    Параметры

    property

    Требуемое свойство. В настоящее время единственное определенное свойство kDNSServiceProperty_DaemonVersion.

    result

    Поместите для хранения результата. Для получения DaemonVersion это должно быть адресом uint32_t.

    size

    Указатель на uint32_t, содержащий размер расположения результата. Для получения DaemonVersion это должно быть sizeof (uint32_t). По возврату uint32_t обновляется к размеру возвращенных данных. Для DaemonVersion возвращенный размер всегда sizeof (uint32_t), но будущие свойства могли быть определены который результаты размера возвращаемой переменной.

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе, или kDNSServiceErr_ServiceNotRunning если не работает демон (или «системная служба» на Windows).

  • Читает ответ от демона, вызывая надлежащий обратный вызов приложения.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceProcessResult ( DNSServiceRef sdRef );

    Параметры

    sdRef

    DNSServiceRef, инициализированный любым из вызовов DNSService, берущих параметр обратного вызова.

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе, иначе возвращает код ошибки, указывающий произошедший определенный отказ.

    Обсуждение

    Этот вызов блоки до ответа демона принимается. Использовать DNSServiceRefSockFD в сочетании с циклом выполнения или выбором () для определения присутствия ответа от сервера прежде, чем вызвать эту функцию для обработки ответа без блокирования. Вызовите эту функцию в любой точке, если приемлемо блокировать, пока ответ демона не наступает. Обратите внимание на то, что клиент ответственен за обеспечение этого DNSServiceProcessResult вызывается каждый раз, когда существует ответ от демона - демон может завершить его соединение с клиентом, не обрабатывающим ответы демона.

  • Завершает соединение с демоном и освобождает память, связанную с DNSServiceRef.

    Объявление

    Objective C

    void DNSServiceRefDeallocate ( DNSServiceRef sdRef );

    Параметры

    sdRef

    DNSServiceRef инициализируется любым из вызовов DNSService.

    Обсуждение

    Любые службы или записи, зарегистрированные в этом DNSServiceRef, будут вычеркнуты из списка. Любой Обзор, Решение или операции Query, вызванные с этой ссылкой, будут завершены.

    Примечание: Если базовый сокет ссылки используется в цикле выполнения или выборе () вызов, это должен быть удаленный BEFORE DNSServiceRefDeallocate вызывается, поскольку эта функция закрывает сокет ссылки.

    Примечание: Если ссылка была инициализирована с DNSServiceCreateConnection, любой DNSRecordRefs, создаваемый через эту ссылку, будет лишен законной силы этим вызовом - ресурсные записи вычеркнуты из списка, и их DNSRecordRefs не может использоваться в последующих функциях. Точно так же, если ссылка была инициализирована с DNSServiceRegister, и дополнительная ресурсная запись была добавлена к службе через DNSServiceAddRecord, DNSRecordRef, создаваемый добавить вызовом, лишен законной силы, когда эта функция вызвана - DNSRecordRef не может использоваться в последующих функциях.

    Примечание: Этот вызов должен использоваться только с DNSServiceRef, определенным этим API.

  • Доступы, лежащие в основе домена Unix, снабжают сокетом для инициализированного DNSServiceRef.

    Объявление

    Objective C

    int DNSServiceRefSockFD ( DNSServiceRef sdRef );

    Параметры

    sdRef

    DNSServiceRef инициализируется любым из вызовов DNSService.

    Возвращаемое значение

    Базовый дескриптор сокета DNSServiceRef, или-1 на ошибке.

    Обсуждение

    Реализация Открытия Службы DNS использует этот сокет для передачи между клиентом и mDNSResponder демоном. Приложение не ДОЛЖНО непосредственно читать из или писать в этот сокет. Доступ к сокету предоставлен так, чтобы это могло использоваться в качестве kqueue источника события, источника события CFRunLoop, в выборе () цикл, и т.д. Когда базовая подсистема управления событиями (kqueue/select/CFRunLoop и т.д.) указывает клиенту, что данные доступны для чтения на сокете, клиент должен вызвать DNSServiceProcessResult, который извлечет ответ демона из сокета и передаст его надлежащему обратному вызову приложения. При помощи цикла выполнения или выбора (), следует из демона, может быть обработан асинхронно. Также клиент может принять решение разветвить поток и иметь его вызов цикла «DNSServiceProcessResult (касательно)»; Если DNSServiceProcessResult вызывается, когда никакие данные не будут доступны для чтения на сокете, оно блокирует, пока данные действительно не становятся доступными, и затем обрабатывают данные и возвращаются к вызывающей стороне. Когда данные поступают в сокет, клиент ответственен за вызов DNSServiceProcessResult (касательно) своевременно - если клиент позволяет большой задолженности данных расти, демон может завершить соединение.

  • Запросы для IP-адреса имени хоста или при помощи Многоадресной передачи или при помощи Одноадресной передачи DNS.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceGetAddrInfo ( DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceProtocol protocol, const char *hostname, DNSServiceGetAddrInfoReply callBack, void *context /* may be NULL */ );

    Параметры

    sdRef

    Указатель на неинициализированный DNSServiceRef. Если вызов успешно выполняется тогда, он инициализирует DNSServiceRef, возвраты kDNSServiceErr_NoError, и запрос начинается и продлится неопределенно, пока клиент не завершает запрос путем передачи этого DNSServiceRef DNSServiceRefDeallocate.

    flags

    kDNSServiceFlagsForceMulticast или kDNSServiceFlagsLongLivedQuery. Передача kDNSServiceFlagsLongLivedQuery создать «долгосрочный» одноадресный запрос к одноадресной передаче сервер DNS, реализующий протокол. Этот флаг не имеет никакого эффекта на локальные для ссылки многоадресные запросы.

    interfaceIndex

    Интерфейс, по которому можно выпустить запрос. Передача 0 причин запрос, который будет отправлен во всех активных интерфейсах через Многоадресную передачу или основном интерфейсе через Одноадресную передачу.

    protocol

    Передача в kDNSServiceProtocol_IPv4 искать адреса IPv4, или kDNSServiceProtocol_IPv6 искать адреса IPv6 или обоих для поиска обоих видов. Если никакой флаг не будет установлен, то система применит интеллектуальную эвристику, которая (в настоящее время) является, что это попытается искать обоих, кроме:

    *, Если «имя хоста» является глобальной одноадресной передачей имя хоста DNS (т.е. не «.local». имя), но этот узел не имеет никакого routable адреса IPv6, тогда вызов не попытается искать адреса IPv6 для «имени хоста», так как любые адреса, которые это нашло, вряд ли будут иметь любое применение так или иначе. Точно так же, если этот узел не будет иметь никакого routable адреса IPv4, то вызов не попытается искать адреса IPv4 для «имени хоста».

    hostname

    Полностью определенное доменное имя узла, который будет запрошен для.

    callBack

    Функция, которую вызовут, когда запрос успешно выполняется или перестал работать асинхронно.

    context

    Указатель контекста приложения, передающийся функции обратного вызова (может быть NULL).

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе (любые последующие, асинхронные ошибки поставлены обратному вызову), иначе возвращает код ошибки, указывающий произошедшую ошибку.

Типичная вызывающая последовательность для парсинга записи TXT - что-то как:

Получите данные записи TXT в DNSServiceResolve обратный вызов

  • if (TXTRecordContainsKey(txtLen, txtRecord, "key")) then do something
  • val1ptr = TXTRecordGetValuePtr(txtLen, txtRecord, "key1", &len1);
  • val2ptr = TXTRecordGetValuePtr(txtLen, txtRecord, "key2", &len2);
  • ...
  • memcpy(myval1, val1ptr, len1);
  • memcpy(myval2, val2ptr, len2);
  • ...
  • return;

Если Вы хотите сохранить значения после возврата из DNSServiceResolve обратный вызов, тогда необходимо скопировать данные в собственное хранение с помощью memcpy () или подобный, как показано в примере выше.

Если по некоторым причинам необходимо проанализировать запись TXT, Вы создали себя с помощью функций конструкции записи TXT выше, то можно сделать то использование вызовы TXTRecordGetBytesPtr и TXTRecordGetLength: TXTRecordGetValue (TXTRecordGetLength (x), TXTRecordGetBytesPtr (x), ключ, &len);

Большинство приложений только выбирает ключи, о которых они знают от TXT, записывают и игнорируют остальных. Однако некоторые средства отладки хотят выбрать и вывести на экран все ключи. Чтобы сделать это, используйте TXTRecordGetCount () и TXTRecordGetItemAtIndex () вызовы.

  • Создайте соединение делегата с демоном, позволяющим эффективную регистрацию многократных отдельных записей.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceCreateDelegateConnection ( DNSServiceRef *sdRef, int32_t pid, uuid_t uuid );

    Параметры

    sdRef

    Указатель на неинициализированный DNSServiceRef. Освобождение ссылки (через DNSServiceRefDeallocate ()) разъединяет соединение и вычеркивает из списка все записи, зарегистрированные на этом соединении.

    pid

    Обработайте ID делегата

    uuid

    UUID делегата

    Обратите внимание на то, что только один из этих двух параметров (изодромный с предварением или uuid) может быть указан. Если изодромный с предварением нуль, uuid, как будет предполагаться, будет допустимым значением; иначе изодромный с предварением будет использоваться.

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе, иначе возвращает код ошибки, указывающий определенный отказ, произошедший (когда DNSServiceRef не инициализируется). kDNSServiceErr_NotAuth возвращается, чтобы указать, что обработка вызовов не имеет прав для использования этого API.

  • Позволяет Вам планировать DNSServiceRef на последовательную очередь отгрузки для получения асинхронных обратных вызовов.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceSetDispatchQueue ( DNSServiceRef service, dispatch_queue_t queue );

    Параметры

    service

    DNSServiceRef, выделенный и возвратившийся к приложению, когда приложение вызывает один из API DNSService.

    queue

    очередь отгрузки, где будет запланирован обратный вызов приложения

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе. Возвраты kDNSServiceErr_NoMemory если это не может создать источник отгрузки Возвраты kDNSServiceErr_BadParam если параметрический усилитель службы недопустим, или параметрический усилитель очереди недопустим

    Обсуждение

    Это - ответственность клиента гарантировать, что работает предоставленная очередь отгрузки.

    Типовое приложение, использующее CFRunLoopRun или dispatch_main на его основном потоке, будет обычно планировать DNSServiceRefs на свою основную очередь (который всегда является последовательной очередью), использование «DNSServiceSetDispatchQueue (sdref, dispatch_get_main_queue ())»;

    Если будет ошибка во время обработки событий, то обратный вызов приложения вызовут с кодом ошибки. Для общих соединений каждый подчиненный DNSServiceRef получит свой собственный ошибочный обратный вызов. В настоящее время эти ошибочные обратные вызовы только происходят, если mDNSResponder демон вручную завершается или отказывает, и код ошибки в этом случае kDNSServiceErr_ServiceNotRunning. Приложение должно вызвать DNSServiceRefDeallocate для освобождения DNSServiceRef, когда это получает такой код ошибки. Эти ошибочные обратные вызовы редки и не должны обычно происходить на машинах клиента, но код приложения должен быть записан защитно для обработки таких ошибочных обратных вызовов корректно, если они происходят.

    После использования DNSServiceSetDispatchQueue на DNSServiceRef, вызывая DNSServiceProcessResult на том же DNSServiceRef приведет к неопределенному поведению и должен избежаться.

    Как только приложение успешно планирует DNSServiceRef на последовательное использование очереди отгрузки DNSServiceSetDispatchQueue, оно не может удалить DNSServiceRef из очереди отгрузки или использовать DNSServiceSetDispatchQueue во второй раз для планирования DNSServiceRef на различную последовательную очередь отгрузки. После того, как запланированный на очередь отгрузки DNSServiceRef поставит события той очереди, пока приложение больше не потребует, чтобы работа и завершила его использование DNSServiceRefDeallocate.

  • Позволяет Вам определять, содержит ли данная Запись TXT указанный ключ.

    Объявление

    Objective C

    int TXTRecordContainsKey ( uint16_t txtLen, const void *txtRecord, const char *key );

    Параметры

    txtLen

    Размер полученной Записи TXT.

    txtRecord

    Указатель на полученные байты Записи TXT.

    key

    Завершенная нулем строка ASCII, содержащая ключевое имя.

    Возвращаемое значение

    Возвраты 1, если Запись TXT содержит указанный ключ. Иначе, это возвращается 0.

  • Возвращает число ключей, сохраненных в Записи TXT.

    Объявление

    Objective C

    uint16_t TXTRecordGetCount ( uint16_t txtLen, const void *txtRecord );

    Параметры

    txtLen

    Размер полученной Записи TXT.

    txtRecord

    Указатель на полученные байты Записи TXT.

    Возвращаемое значение

    Возвращает общее количество ключей в Записи TXT.

    Обсуждение

    Количество может использоваться с TXTRecordGetItemAtIndex () для итерации через ключи.

  • Позволяет Вам получать ключевое имя и указатель значения, учитывая индекс в Запись TXT.

    Объявление

    Objective C

    DNSServiceErrorType TXTRecordGetItemAtIndex ( uint16_t txtLen, const void *txtRecord, uint16_t itemIndex, uint16_t keyBufLen, char *key, uint8_t *valueLen, const void **value );

    Параметры

    txtLen

    Размер полученной Записи TXT.

    txtRecord

    Указатель на полученные байты Записи TXT.

    itemIndex

    Индекс в Запись TXT.

    keyBufLen

    Размер строкового предоставляемого буфера.

    key

    Строковый буфер раньше хранил ключевое имя. По возврату буфер содержит завершенную нулем струну до, дающую ключевое имя. Ключи DNS-SD TXT обычно являются 9 символами или меньше. Для содержания максимального возможного ключевого имени буфер должен быть 256 байтов длиной.

    valueLen

    На выводе, будет установлен в размер данных «значения».

    value

    На выводе *значение установлено указать на расположение в байтах Записи TXT, содержащее данные значения.

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе. Возвраты kDNSServiceErr_NoMemory если keyBufLen слишком короток. Возвраты kDNSServiceErr_Invalid если индекс больше, чем TXTRecordGetCount ()-1.

    Обсуждение

    Юридический индекс оценивает диапазон от нуля до TXTRecordGetCount ()-1. Также возможно выполнить итерации через ключи в записи TXT путем простого вызова TXTRecordGetItemAtIndex () неоднократно, начала с индексного нуля и увеличения до TXTRecordGetItemAtIndex () возвраты kDNSServiceErr_Invalid.

    По возврату:

    Для ключей без значения *устанавливается в NULL значение, и *valueLen является нулем.

    Для ключей с пустым значением *значением является не-NULL, и *valueLen является нулем.

    Для ключей с непустым значением *значением является не-NULL, и *valueLen является ненулевым.

  • Позволяет Вам получать значение для данного ключа от Записи TXT.

    Объявление

    Objective C

    const void * TXTRecordGetValuePtr ( uint16_t txtLen, const void *txtRecord, const char *key, uint8_t *valueLen );

    Параметры

    txtLen

    Размер полученной Записи TXT

    txtRecord

    Указатель на полученные байты Записи TXT.

    key

    Завершенная нулем строка ASCII, содержащая ключевое имя.

    valueLen

    На выводе, будет установлен в размер данных «значения».

    Возвращаемое значение

    Возвраты NULL, если ключ не существует в этой записи TXT или существует без значения (для дифференциации между этими двумя случаями используют TXTRecordContainsKey ()). Указатель возвратов на расположение в байтах Записи TXT, если ключ существует с пустым или непустым значением. Для пустого значения valueLen будет нулем. Для непустого значения valueLen будет длиной данных значения.

  • Создает новый пустой TXTRecordRef, ссылающийся на указанное хранение.

    Объявление

    Objective C

    void TXTRecordCreate ( TXTRecordRef *txtRecord, uint16_t bufferLen, void *buffer );

    Параметры

    txtRecord

    Указатель на неинициализированный TXTRecordRef.

    bufferLen

    Размер хранения обеспечил в «буферном» параметре.

    buffer

    Дополнительное предоставленное вызывающую сторону хранение раньше содержало данные TXTRecord. Это хранение должно остаться допустимым столько, сколько TXTRecordRef.

    Обсуждение

    Если буферным параметром будет NULL, или указанный размер ресурса хранения не является достаточно большим для удержания клавиши впоследствии добавленное использование TXTRecordSetValue (), то дополнительная память будет добавлена по мере необходимости с помощью malloc ().

    На некоторых платформах, когда память является низкой, malloc () может перестать работать. В этом случае TXTRecordSetValue () возвратится kDNSServiceErr_NoMemory, и это состояние ошибки должно будет быть обработано как надлежащее вызывающей стороной.

    Можно избежать потребности обработать это состояние ошибки, если Вы гарантируете, что хранение, которое Вы первоначально обеспечиваете, является достаточно большим для содержания всех пар ключ/значение, которые должны быть добавлены к записи. Вызывающая сторона может предварительно вычислить точную длину, требуемую для всех пар ключ/значение быть добавленной, или просто обеспечить буфер фиксированного размера, который, как известно заранее, был достаточно большим.

    Ключ (только для ключа) без значений требует (1 + длина ключа) байтов.

    Ключ с пустым значением требует (1 + длина ключа + 1) байтов.

    Ключ с непустым значением требует (1 + длина ключа + 1 + длина значения).

    Для большинства приложений DNS-SD записи TXT обычно - меньше чем 100 байтов, таким образом, в большинстве случаев простой 256-байтовый буфер фиксированного размера будет более, чем достаточен.

    Рекомендуемые пределы размера для DNS-SD Записи TXT обсуждены в dns-sd.org

    Примечание: Когда передающие параметры к и от этих TXT записывают APIs, ключевое имя не включает '=' символ. '=' символ является разделителем между ключом и значением в на-проводном формате пакета; это не часть или ключа или значения.

  • Высвобождает средства, связанные с записью TXT.

    Объявление

    Objective C

    void TXTRecordDeallocate ( TXTRecordRef *txtRecord );

    Параметры

    txtRecord

    TXTRecordRef, инициализированный путем вызова TXTRecordCreate ().

    Обсуждение

    Высвобождает любые средства, выделенные в ходе подготовки Записи TXT использование TXTRecordCreate ()/TXTRecordSetValue ()/TXTRecordRemoveValue (). Владение буфера, предоставленного в TXTRecordCreate (), возвращается к клиенту.

  • Позволяет Вам получать указатель на необработанные байты в TXTRecordRef.

    Объявление

    Objective C

    const void * TXTRecordGetBytesPtr ( const TXTRecordRef *txtRecord );

    Параметры

    txtRecord

    TXTRecordRef, инициализированный путем вызова TXTRecordCreate ().

    Возвращаемое значение

    Возвращает указатель на необработанные байты в TXTRecordRef, которому можно передать непосредственно DNSServiceRegister или к DNSServiceUpdateRecord.

  • Позволяет Вам определять длину необработанных байтов в TXTRecordRef.

    Объявление

    Objective C

    uint16_t TXTRecordGetLength ( const TXTRecordRef *txtRecord );

    Параметры

    txtRecord

    TXTRecordRef, инициализированный путем вызова TXTRecordCreate ().

    Возвращаемое значение

    Возвращает размер необработанных байтов в TXTRecordRef, которому можно передать непосредственно DNSServiceRegister или к DNSServiceUpdateRecord. Возвраты 0, если TXTRecordRef пуст.

  • Удаляет ключ из TXTRecordRef.

    Объявление

    Objective C

    DNSServiceErrorType TXTRecordRemoveValue ( TXTRecordRef *txtRecord, const char *key );

    Параметры

    txtRecord

    TXTRecordRef, инициализированный путем вызова TXTRecordCreate ().

    key

    Ключевое имя. Это значение должно быть строкой ASCII, существующей в TXTRecordRef.

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе. Возвраты kDNSServiceErr_NoSuchKey если «ключ» не существует в TXTRecordRef.

  • Добавляет ключ (дополнительно со значением) к TXTRecordRef.

    Объявление

    Objective C

    DNSServiceErrorType TXTRecordSetValue ( TXTRecordRef *txtRecord, const char *key, uint8_t valueSize, /* may be zero */ const void *value /* may be NULL */ );

    Параметры

    txtRecord

    TXTRecordRef, инициализированный путем вызова TXTRecordCreate ().

    key

    Завершенная нулем строка, только содержащая печатаемые значения ASCII (0x20-0x7E), исключая '=' (0x3D). Ключи должны быть 9 символами или меньше (не подсчет завершающегося нуля).

    valueSize

    Размер значения.

    value

    Любое двоичное значение. Для значений, представляющих текстовые данные, UTF-8 является рекомендуемый STRONGLY. Для значений, представляющих текстовые данные, valueSize не должен включать завершающийся нуль (если таковые имеются) в конце строки. ЕСЛИ НОЛЬ, тогда «ключ» будет добавлен без значения. Если не-NULL, но valueSize будет нулем, то «ключ =» будет добавлен с пустым значением.

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе. Возвраты kDNSServiceErr_Invalid если «ключевая» строка содержит запрещенные символы. Возвраты kDNSServiceErr_NoMemory если добавление этого ключа превысило бы доступное хранение.

    Обсуждение

    Если «ключ» уже будет существовать в TXTRecordRef, то текущая стоимость будет заменена новым значением. Ключи могут существовать в четырех состояниях относительно данной записи TXT: - отсутствующий (ключ не появляется вообще) - Настоящее без значения («ключ» кажется одним) - Дарят пустое значение («ключ =», появляется в записи TXT) - Дарят непустое значение («key=value», появляется в записи TXT), для получения дополнительной информации отсылают к «Синтаксису данных для DNS-SD Записи TXT» в dns-sd.org

DNSServiceCreateConnection, DNSServiceRegisterRecord, DNSServiceReconfirmRecord (большинство приложений не будет использовать их),

  • Создает соединение с демоном, позволяя эффективную регистрацию многократных отдельных записей.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceCreateConnection ( DNSServiceRef *sdRef );

    Параметры

    sdRef

    Указатель на неинициализированный DNSServiceRef. Освобождение ссылки (через DNSServiceRefDeallocate) разъединяет соединение и вычеркивает из списка все записи, зарегистрированные на этом соединении.

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе, иначе возвращает код ошибки, указывающий определенный отказ, произошедший (когда DNSServiceRef не инициализируется).

  • Дает демону команду проверять законность ресурсной записи, которая, кажется, устарела (например, потому что соединение TCP к отказавшей цели службы).

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceReconfirmRecord ( DNSServiceFlags flags, uint32_t interfaceIndex, const char *fullname, uint16_t rrtype, uint16_t rrclass, uint16_t rdlen, const void *rdata );

    Параметры

    flags

    Не в настоящее время используемый.

    interfaceIndex

    Указывает интерфейс рассматриваемой записи. Вызывающая сторона должна указать интерфейс. Этот API (проектом) вызывает увеличенный сетевой трафик, таким образом, это требует, чтобы вызывающая сторона была точна, о котором должна быть подтверждена запись. Не возможно передать нуль для интерфейсного индекса для выполнения «подстановочного» подтверждения, где *все* подтверждено соответствие записей.

    fullname

    Полное доменное имя ресурсной записи.

    rrtype

    Тип ресурсной записи (например. kDNSServiceType_PTR, kDNSServiceType_SRV, и т.д.).

    rrclass

    Класс ресурсной записи (обычно kDNSServiceClass_IN).

    rdlen

    Длина, в байтах, ресурсной записи rdata.

    rdata

    Сырые данные rdata ресурсной записи.

    Обсуждение

    Заставляет запись быть сброшенной от кэша демона (а также кэши всех других демонов в сети), если запись полна решимости быть недопустимой.

  • Регистрирует отдельную ресурсную запись на связанном DNSServiceRef.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceRegisterRecord ( DNSServiceRef sdRef, DNSRecordRef *RecordRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *fullname, uint16_t rrtype, uint16_t rrclass, uint16_t rdlen, const void *rdata, uint32_t ttl, DNSServiceRegisterRecordReply callBack, void *context /* may be NULL */ );

    Параметры

    sdRef

    DNSServiceRef, инициализированный DNSServiceCreateConnection.

    RecordRef

    Указатель на неинициализированный DNSRecordRef. После succesfull завершения этого вызова это касательно может быть передано DNSServiceUpdateRecord или DNSServiceRemoveRecord. (Чтобы вычеркнуть из списка записи ALL, зарегистрированные на единственном связанном DNSServiceRef и освободить каждый из их соответствующих DNSServiceRecordRefs, вызвать DNSServiceRefDeallocate).

    flags

    Возможные значения kDNSServiceFlagsShared или kDNSServiceFlagsUnique (см. определения типа флага для подробных данных).

    interfaceIndex

    Если ненулевой, указывает интерфейс, в котором можно зарегистрировать запись (индекс для данного интерфейса определяется через if_nametoindex () семья вызовов.) Передача 0 причин запись, которая будет зарегистрирована во всех интерфейсах. См. «Константы для указания интерфейсного индекса» для большего количества подробных данных.

    fullname

    Полное доменное имя ресурсной записи.

    rrtype

    Числовой тип ресурсной записи (например. kDNSServiceType_PTR, kDNSServiceType_SRV, и т.д.).

    rrclass

    Класс ресурсной записи (обычно kDNSServiceClass_IN)

    rdlen

    Длина, в байтах, rdata.

    rdata

    Указатель на сырые данные rdata, как это должно появиться в записи DNS.

    ttl

    Время жизни ресурсной записи, в секундах. Большинство клиентов должно передать 0, чтобы указать, что система должна выбрать разумное значение по умолчанию.

    callBack

    Функция, которую вызовут, когда результат найден, или если вызов асинхронно перестал работать (например, из-за конфликта имен.)

    context

    Указатель контекста приложения, передающийся функции обратного вызова (может быть NULL).

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе (любые последующие, асинхронные ошибки поставлены обратному вызову), иначе возвращает код ошибки, указывающий ошибку, произошедшую (обратный вызов никогда не вызывается, и DNSRecordRef не инициализируется).

    Обсуждение

    Обратите внимание на то, что конфликты имен, происходящие для записей, зарегистрированных через этот вызов, должны быть обработаны клиентом в обратном вызове.

  • Выпуски ресурсы соединений P2P связались с экземпляром службы.

    Объявление

    Objective C

    DNSServiceErrorType PeerConnectionRelease ( DNSServiceFlags flags, const char *name, const char *regtype, const char *domain );

    Обсуждение

    Когда служба разрешена по интерфейсу P2P, соединение принесено до коллеги, распространяющей экземпляр службы. Этот вызов освободит ресурсы, связанные с тем соединением. В то время как обзор для типа службы все еще работает, Обратите внимание на то, что ссылка на экземпляр службы будет только сохраняться mDNSResponder демоном. Таким образом последовательность вызовов для обнаружения решите, и затем завершитесь, соединение, связанное с приведенным примером службы P2P, было бы:

    DNSServiceRef BrowseRef, ResolveRef; DNSServiceBrowse (&BrowseRef...)//обзор для всех экземпляров службы DNSServiceResolve (&ResolveRef...)//разрешение экземпляра службы создает//соединение с удаленным устройством, распространяя ту службу DNSServiceRefDeallocate (ResolveRef)//Остановка решение, не закрывающее одноранговое подключение

    //Свяжитесь с равноправным приложением.

    PeerConnectionRelease ()//выпускают соединение с удаленным устройством для указанного экземпляра службы

    DNSServiceRefDeallocate (BrowseRef)//останавливают обзор//, Дальнейшие вызовы к PeerConnectionRelease () не будут иметь никакого влияния начиная с//, экземпляр службы к отношению однорангового подключения только сохраняется//mDNSResponder демон, в то время как работает обзор.

    флаги: Не в настоящее время используемый.

    имя: имя экземпляра службы, который будет разрешен, как сообщается DNSServiceBrowseReply обратный вызов.

    regtype: тип экземпляра службы, который будет разрешен, как сообщается DNSServiceBrowseReply обратный вызов.

    домен: домен экземпляра службы, который будет разрешен, как сообщается DNSServiceBrowseReply обратный вызов.

    возвращаемое значение: Возвраты kDNSServiceErr_NoError на произошедшей успехе или ошибке.

  • Добавляет запись на зарегистрированную службу.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceAddRecord ( DNSServiceRef sdRef, DNSRecordRef *RecordRef, DNSServiceFlags flags, uint16_t rrtype, uint16_t rdlen, const void *rdata, uint32_t ttl );

    Параметры

    sdRef

    DNSServiceRef, инициализированный DNSServiceRegister.

    RecordRef

    Указатель на неинициализированный DNSRecordRef. После succesfull завершения этого вызова это касательно может быть передано DNSServiceUpdateRecord или DNSServiceRemoveRecord. Если вышеупомянутый DNSServiceRef передается DNSServiceRefDeallocate, RecordRef также лишен законной силы и не может использоваться далее.

    flags

    В настоящее время игнорируемый, зарезервированный для будущего использования.

    rrtype

    Тип записи (например. kDNSServiceType_TXT, kDNSServiceType_SRV, и т.д.).

    rdlen

    Длина, в байтах, rdata.

    rdata

    Сырые данные rdata, чтобы содержаться в добавленной ресурсной записи.

    ttl

    Время жизни ресурсной записи, в секундах. Большинство клиентов должно передать 0, чтобы указать, что система должна выбрать разумное значение по умолчанию.

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе, иначе возвращает код ошибки, указывающий ошибку, произошедшую (RecordRef не инициализируется).

    Обсуждение

    Имя записи совпадет с именем зарегистрированной службы. Запись может позже быть обновлена или вычеркнута из списка путем передачи RecordRef, инициализированного этой функцией к DNSServiceUpdateRecord или DNSServiceRemoveRecord.

    Обратите внимание на то, что DNSServiceAddRecord/UpdateRecord/RemoveRecord *НЕ* ориентированы на многопотоковое исполнение относительно единственного DNSServiceRef. Если Вы планируете иметь многократные потоки в своей программе, одновременно добавляют, обновляют или удаляют записи из того же DNSServiceRef, то это - ответственность вызывающей стороны использовать блокировку mutext или принять подобные надлежащие меры предосторожности для сериализации тех вызовов.

  • Регистрирует службу.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceRegister ( DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *name, /* may be NULL */ const char *regtype, const char *domain, /* may be NULL */ const char *host, /* may be NULL */ uint16_t port, /* In network byte order */ uint16_t txtLen, const void *txtRecord, /* may be NULL */ DNSServiceRegisterReply callBack, /* may be NULL */ void *context /* may be NULL */ );

    Параметры

    sdRef

    Указатель на неинициализированный DNSServiceRef. Если вызов успешно выполняется тогда, он инициализирует DNSServiceRef, возвраты kDNSServiceErr_NoError, и регистрация останется активной неопределенно, пока клиент не завершит ее путем передачи этого DNSServiceRef DNSServiceRefDeallocate.

    interfaceIndex

    Если ненулевой, указывает интерфейс, на который можно зарегистрировать службу (индекс для данного интерфейса определяется через if_nametoindex () семья вызовов.) Большинство приложений передаст 0 для регистрации во всех доступных интерфейсах. См. «Константы для указания интерфейсного индекса» для большего количества подробных данных.

    flags

    Указывает поведение переименования на конфликте имен (большинство приложений передаст 0). См. определения флага выше для подробных данных.

    name

    Если не-NULL, указывает имя службы, которое будет зарегистрировано. Большинство приложений не укажет имя, когда имя компьютера используется (это имя передается клиенту через обратный вызов). Если имя указано, это должны быть 1-63 байта текста UTF-8. Если имя будет более длинным, чем 63 байта, то это будет автоматически усеченным к юридической длине, если флаг NoAutoRename не будет установлен, когда kDNSServiceErr_BadParam будет возвращен.

    regtype

    Тип службы, сопровождаемый протоколом, разделенным точкой (например, «_ftp. _ tcp»). Тип службы должен быть подчеркиванием, сопровождаемым 1-15 символами, которые могут быть буквами, цифрами или дефисами. Транспортный протокол должен быть «_tcp» или «_udp». Новые типы службы должны быть зарегистрированы в http://www .dns-sd.org/ServiceTypes.html.

    Дополнительные подтипы основного типа службы (где тип службы определил подтипы) следуют за основным типом службы в списке разделенных запятой значений без дополнительных пробелов, например, «_primarytype. _ tcp, _subtype1, _subtype2, _subtype3» Подтипы обеспечивают механизм для отфильтрованного просмотра: клиент, просматривающий для «_primarytype. _ tcp» обнаружит все экземпляры этого типа; клиент, просматривающий для «_primarytype. _ tcp, _subtype2» обнаружит только те экземпляры, зарегистрированные в «_subtype2» в их списке зарегистрированных подтипов.

    Механизм подтипа может быть проиллюстрирован с некоторыми примерами с помощью dns-sd инструмента командной строки:

    % dns-sd-R Простой _test. _ tcp «» 1001 и % dns-sd-R Лучше _test. _ tcp, HasFeatureA «» 1002 и % dns-sd-R Лучший _test. _ tcp, HasFeatureA, HasFeatureB «» 1003 и

    Теперь: % dns-sd-B _test. _ tcp # найдет все три % служб dns-sd-B _test. _ tcp, HasFeatureA # находит «Лучше» и «Лучший» % dns-sd-B _test. _ tcp, HasFeatureB # находит только «Лучше всего»

    Метки подтипа могут быть 63 байта длиной, и могут содержать любые восемь - разрядные значения байта, включая нулевые байты. Однако вследствие природы использования Струны до базировал API, стандартный выход DNS должен использоваться для точек ('. '), запятые ('',), наклонные черты влево (' \') и нулевые байты, как показано ниже:

    % dns-sd-R Тест '_test. _ tcp, s\.one, s \, два, s \\три, s\000four' локальные 123

    Когда служба будет зарегистрирована, все клиенты, просматривающие для зарегистрированного типа («regtype»), обнаружат его. Если открытие должно быть ограничено меньшей группой известных коллег, служба может быть зарегистрирована в дополнительных данных (идентификатор группы), который известен только меньшей группе коллег. Идентификатор группы должен следовать за основным типом службы с помощью двоеточия (»: «) как разделитель. Если подтипы также присутствуют, это должно быть дано перед подтипом как показано ниже.

    % dns-sd-R _test1 _http. _ tcp:mygroup1 локальный 1 001%-й dns-sd-R _test2 _http. _ tcp:mygroup2 локальный 1 001%-й dns-sd-R _test3 _http. _ tcp:mygroup3, HasFeatureA локальные 1001

    Теперь: % dns-sd-B _http. _ tcp: «mygroup1» # обнаружит только test1% dns-sd-B _http. _ tcp: «mygroup2» # обнаружит только test2% dns-sd-B _http. _ tcp: «mygroup3», HasFeatureA # обнаружит только test3

    Путем указания информации о группе только обнаружены элементы той группы.

    Сам идентификатор группы не представляется ясный. Только хеш идентификатора группы отправляется, и клиенты обнаруживают их анонимно. Идентификатор группы может быть 256 байтов длиной и может содержать любые восемь битовых значений кроме запятой, которой нужно оставить.

    domain

    Если не-NULL, указывает домен, на который можно распространить службу. Большинство приложений не укажет домен, вместо этого автоматически регистрирующийся в домене (ах) по умолчанию.

    host

    Если не-NULL, указывает имя целевого узла SRV. Большинство приложений не укажет узел, вместо этого автоматически с помощью имени (ен) хоста машины по умолчанию. Обратите внимание на то, что указание узла не-NULL НЕ создает запись адреса для того узла - приложение ответственно за обеспечение, что надлежащая запись адреса существует, или создание его через DNSServiceRegisterRecord.

    port

    Порт, в сетевом порядке байтов, на котором служба принимает соединения. Передайте 0 для службы «заполнителя» (т.е. служба, которая не будет обнаружена путем просмотра, но вызовет конфликт имен, если другой клиент попытается зарегистрировать то же самое имя). Большинство клиентов не будет использовать службы заполнителя.

    txtLen

    Длина txtRecord, в байтах. Если txtRecord является NULL, должен быть нуль.

    txtRecord

    TXT записывают rdata. Не-NULL txtRecord MUST быть должным образом отформатированным DNS запись TXT, т.е. <байт длины> <данные> <байт длины> <данные>... Передача NULL для txtRecord позволяется как синоним для txtLen=1, txtRecord = «», т.е. это создает запись TXT длины один содержащий единственную пустую строку. RFC 1035 не позволяет записи TXT содержать *нуль* строки, таким образом, единственной пустой строкой является самый маленький юридический DNS запись TXT. Как с другими параметрами, вызов DNSServiceRegister копирует txtRecord данные; например, если Вы выделили хранение для txtRecord параметра с malloc () тогда, можно безопасно освободить ту память прямо после возвратов вызова DNSServiceRegister.

    callBack

    Функция, которую вызовут, когда регистрация завершается или асинхронно перестала работать. Клиент MAY передает NULL для обратного вызова - клиент, НЕ будет уведомлен относительно значений по умолчанию, выбранных от своего лица, и клиент НЕ будет уведомлен относительно никаких асинхронных ошибок (например, из ошибок памяти, и т.д.), который может предотвратить регистрацию службы. Если обратным вызовом является NULL, клиент может НЕ передать флаг NoAutoRename. Клиент может все еще вычеркнуть из списка службу в любое время через DNSServiceRefDeallocate.

    context

    Указатель контекста приложения, передающийся функции обратного вызова (может быть NULL).

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе (любые последующие, асинхронные ошибки поставлены обратному вызову), иначе возвращает код ошибки, указывающий ошибку, произошедшую (обратный вызов никогда не вызывается, и DNSServiceRef не инициализируется).

  • Удаляет запись, ранее добавленную к набору служебной книжки через DNSServiceAddRecord, или вычеркните из списка запись, зарегистрированную индивидуально через DNSServiceRegisterRecord.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceRemoveRecord ( DNSServiceRef sdRef, DNSRecordRef RecordRef, DNSServiceFlags flags );

    Параметры

    sdRef

    DNSServiceRef, инициализированный DNSServiceRegister (если удаляемая запись была зарегистрирована через DNSServiceAddRecord) или DNSServiceCreateConnection (если удаляемая запись была зарегистрирована через DNSServiceRegisterRecord).

    RecordRef

    DNSRecordRef, инициализированный успешным вызовом к DNSServiceAddRecord или DNSServiceRegisterRecord.

    flags

    В настоящее время игнорируемый, зарезервированный для будущего использования.

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе, иначе возвращает код ошибки, указывающий произошедшую ошибку.

  • Обновляет зарегистрированную ресурсную запись.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceUpdateRecord ( DNSServiceRef sdRef, DNSRecordRef RecordRef, /* may be NULL */ DNSServiceFlags flags, uint16_t rdlen, const void *rdata, uint32_t ttl );

    Параметры

    sdRef

    DNSServiceRef, инициализированный DNSServiceRegister или DNSServiceCreateConnection.

    RecordRef

    DNSRecordRef, инициализированный DNSServiceAddRecord, или NULL для обновления основной записи txt службы.

    flags

    В настоящее время игнорируемый, зарезервированный для будущего использования.

    rdlen

    Длина, в байтах, нового rdata.

    rdata

    Новый rdata, который будет содержаться в обновленной ресурсной записи.

    ttl

    Время жизни обновленной ресурсной записи, в секундах. Большинство клиентов должно передать 0, чтобы указать, что система должна выбрать разумное значение по умолчанию.

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе, иначе возвращает код ошибки, указывающий произошедшую ошибку.

    Обсуждение

    Запись должна или быть:

    - Основная txt запись службы зарегистрировалась через DNSServiceRegister

    - Запись добавила к зарегистрированной службе через DNSServiceAddRecord

    - Отдельная запись, зарегистрированная DNSServiceRegisterRecord

  • Обзоры для доступных служб.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceBrowse ( DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *regtype, const char *domain, /* may be NULL */ DNSServiceBrowseReply callBack, void *context /* may be NULL */ );

    Параметры

    sdRef

    Указатель на неинициализированный DNSServiceRef. Если вызов успешно выполняется тогда, он инициализирует DNSServiceRef, возвраты kDNSServiceErr_NoError, и работа обзора будет работать неопределенно, пока клиент не завершит ее путем передачи этого DNSServiceRef DNSServiceRefDeallocate.

    flags

    В настоящее время игнорируемый, зарезервированный для будущего использования.

    interfaceIndex

    Если ненулевой, указывает интерфейс, в котором можно просмотреть для служб (индекс для данного интерфейса определяется через if_nametoindex () семья вызовов.) Большинство приложений передаст 0 для просмотра во всех доступных интерфейсах. См. «Константы для указания интерфейсного индекса» для большего количества подробных данных.

    regtype

    Тип службы, просматриваемый для сопровождаемого протоколом, разделенным точкой (например, «_ftp. _ tcp»). Транспортный протокол должен быть «_tcp» или «_udp». Клиент может дополнительно указать единственный подтип для выполнения отфильтрованного просмотра: например, просмотр для «_primarytype. _ tcp, _subtype» обнаружит только те экземпляры «_primarytype. _ tcp», которые были зарегистрированы, указав «_subtype» в их списке зарегистрированных подтипов. Кроме того, идентификатор группы может также быть указан перед подтипом, например, _primarytype. _ tcp:GroupID, который обнаружит только элементы, регистрирующие службу в GroupID. Дополнительную информацию см. в DNSServiceRegister.

    domain

    Если не-NULL, указывает домен, на котором можно просмотреть для служб. Большинство приложений не укажет домен, вместо этого просматривающий на домене (ах) по умолчанию.

    callBack

    Функция, которую вызовут, когда экземпляр службы, просматриваемой для, найден, или если вызов асинхронно перестал работать.

    context

    Указатель контекста приложения, передающийся функции обратного вызова (может быть NULL).

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе (любые последующие, асинхронные ошибки поставлены обратному вызову), иначе возвращает код ошибки, указывающий ошибку, произошедшую (обратный вызов не вызывается, и DNSServiceRef не инициализируется).

  • Объявление

    Objective C

    DNSServiceErrorType DNSServiceResolve ( DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *name, const char *regtype, const char *domain, DNSServiceResolveReply callBack, void *context /* may be NULL */ );

    Параметры

    sdRef

    Указатель на неинициализированный DNSServiceRef. Если вызов успешно выполняется тогда, он инициализирует DNSServiceRef, возвраты kDNSServiceErr_NoError, и работа решения будет работать неопределенно, пока клиент не завершит ее путем передачи этого DNSServiceRef DNSServiceRefDeallocate.

    flags

    Указание kDNSServiceFlagsForceMulticast заставит запрос выполняться с локальным для ссылки запросом mDNS, даже если имя будет очевидно нелокальным именем (т.е. имя, не заканчивающееся в «.local».)

    interfaceIndex

    Интерфейс, на который можно разрешить службу. Если этот вызов решения в результате в настоящее время активного DNSServiceBrowse работа, тогда interfaceIndex должен быть индексом, сообщил в обратном вызове DNSServiceBrowseReply. Если этот вызов решения использует информацию, ранее сохраненную (например, в предпочтительном файле) для более позднего использования, то используйте interfaceIndex 0, потому что желаемая служба может теперь быть достижимой через различный физический интерфейс. См. «Константы для указания интерфейсного индекса» для большего количества подробных данных.

    name

    Имя экземпляра службы, который будет разрешен, как сообщается DNSServiceBrowseReply обратный вызов.

    regtype

    Тип экземпляра службы, который будет разрешен, как сообщается DNSServiceBrowseReply обратный вызов.

    domain

    Домен экземпляра службы, который будет разрешен, как сообщается DNSServiceBrowseReply обратный вызов.

    callBack

    Функция, которую вызовут, когда результат найден, или если вызов асинхронно перестал работать.

    context

    Указатель контекста приложения, передающийся функции обратного вызова (может быть NULL).

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе (любые последующие, асинхронные ошибки поставлены обратному вызову), иначе возвращает код ошибки, указывающий ошибку, произошедшую (обратный вызов никогда не вызывается, и DNSServiceRef не инициализируется).

  • Запрос для произвольной записи DNS.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceQueryRecord ( DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *fullname, uint16_t rrtype, uint16_t rrclass, DNSServiceQueryRecordReply callBack, void *context /* may be NULL */ );

    Параметры

    sdRef

    Указатель на неинициализированный DNSServiceRef. Если вызов успешно выполняется тогда, он инициализирует DNSServiceRef, возвраты kDNSServiceErr_NoError, и работа запроса будет работать неопределенно, пока клиент не завершит ее путем передачи этого DNSServiceRef DNSServiceRefDeallocate.

    flags

    kDNSServiceFlagsForceMulticast или kDNSServiceFlagsLongLivedQuery. Передача kDNSServiceFlagsLongLivedQuery создать «долгосрочный» одноадресный запрос к одноадресной передаче сервер DNS, реализующий протокол. Этот флаг не имеет никакого эффекта на локальные для ссылки многоадресные запросы.

    interfaceIndex

    Если ненулевой, указывает интерфейс, по которому можно выпустить запрос (индекс для данного интерфейса определяется через if_nametoindex () семья вызовов.) Передача 0 причин имя, которое будет запрошено для во всех интерфейсах. См. «Константы для указания интерфейсного индекса» для большего количества подробных данных.

    fullname

    Полное доменное имя ресурсной записи, которая будет запрошена для.

    rrtype

    Числовой тип ресурсной записи, которая будет запрошена для (например. kDNSServiceType_PTR, kDNSServiceType_SRV, и т.д.).

    rrclass

    Класс ресурсной записи (обычно kDNSServiceClass_IN).

    callBack

    Функция, которую вызовут, когда результат найден, или если вызов асинхронно перестал работать.

    context

    Указатель контекста приложения, передающийся функции обратного вызова (может быть NULL).

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе (любые последующие, асинхронные ошибки поставлены обратному вызову), иначе возвращает код ошибки, указывающий ошибку, произошедшую (обратный вызов никогда не вызывается, и DNSServiceRef не инициализируется).

  • Запрашивает порт, отображающийся в шлюзе NAT, отображающем порт на локальной машине к внешнему порту на NAT.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceNATPortMappingCreate ( DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceProtocol protocol, /* TCP and/or UDP */ uint16_t internalPort, /* network byte order */ uint16_t externalPort, /* network byte order */ uint32_t ttl, /* time to live in seconds */ DNSServiceNATPortMappingReply callBack, void *context /* may be NULL */ );

    Параметры

    sdRef

    Указатель на неинициализированный DNSServiceRef. Если вызов успешно выполняется тогда, он инициализирует DNSServiceRef, возвраты kDNSServiceErr_NoError, и туземное отображение порта продлится неопределенно, пока клиент не завершит запрос отображения порта путем передачи этого DNSServiceRef DNSServiceRefDeallocate.

    flags

    В настоящее время игнорируемый, зарезервированный для будущего использования.

    interfaceIndex

    Интерфейс, в котором можно создать отображения порта в шлюзе NAT. Передача 0 причин запрос отображения порта, который будет отправлен в основном интерфейсе.

    protocol

    Для запроса отображения порта передайте в kDNSServiceProtocol_UDP, или kDNSServiceProtocol_TCP, или (kDNSServiceProtocol_UDP | kDNSServiceProtocol_TCP) для отображения обоих. Локальный номер порта прослушивания должен также быть указан в internalPort параметре. Чтобы просто обнаружить внешний IP-адрес шлюза NAT передайте нуль для протокола, internalPort, externalPort и ttl.

    internalPort

    Номер порта в сетевом порядке байтов на локальной машине, прислушивающейся к пакетам.

    externalPort

    Требуемый внешний порт в сетевом порядке байтов в шлюзе NAT, который требуется отобразить на внутренний порт. Передайте 0, если Вы не заботитесь, какой внешний порт выбран для Вас.

    ttl

    Требуемый период восстановления отображения порта NAT, в секундах. Если клиентская машина разрушит, перенесет сбой питания, будет разъединена от сети или перенесет некоторую другую неудачную сдачу в аренду, заставляющую его неожиданно исчезнуть, явно не удаляя ее отображения порта NAT, то шлюз NAT соберет «мусор» старые устаревшие отображения порта NAT, когда истечет их время жизни. Запрос короткого TTL заставляет такие осиротевшие отображения быть собранными «мусор» более быстро, но использует системные ресурсы и сетевую пропускную способность с частыми пакетами возобновления, чтобы препятствовать отображению истекать. Запрос длинного TTL более эффективен в сети, но в случае клиента, исчезающего, устаревшие отображения порта NAT не будут собраны «мусор» как быстро. Большинство клиентов должно передать 0 для использования значения по умолчанию в масштабе всей системы.

    callBack

    Функция, которую вызовут, когда запрос отображения порта успешно выполняется или перестал работать асинхронно.

    context

    Указатель контекста приложения, передающийся функции обратного вызова (может быть NULL).

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе (любые последующие, асинхронные ошибки поставлены обратному вызову), иначе возвращает код ошибки, указывающий произошедшую ошибку.

    Если Вы фактически не хотите порт, отображенный, и просто вызываете API, потому что Вы хотите узнать NAT's, внешний IP-адрес (например, для дисплея UI) тогда передает нуль для протокола, internalPort, externalPort и ttl.

    Обсуждение

    NAT должен поддерживать или NAT-PMP или UPnP IGD для этого API для создания успешного отображения. Обратите внимание на то, что этот API в настоящее время поддерживает адреса/отображения IPv4 только. Если шлюз NAT поддерживает PCP и возвращает адрес IPv6 (неправильно, так как этот API в частности запрашивает адреса IPv4), обратный вызов DNSServiceNATPortMappingReply вызывается с errorCode kDNSServiceErr_NATPortMappingUnsupported.

    Отображение порта будет возобновлено неопределенно до выходов клиентского процесса, или явно завершает запрос отображения порта путем вызова DNSServiceRefDeallocate. Клиентский обратный вызов будет вызван, сообщая клиенту внешнего IP-адреса шлюза NAT и внешнего порта, выделенного для этого клиента. Клиент должен тогда записать этот внешний IP-адрес и порт с помощью любого механизма службы каталогов, который это использует, чтобы позволить коллегам соединиться с ним. (Клиентские рекламные услуги с помощью Глобального DNS-SD не должны использовать этот API; когда клиент вызывает DNSServiceRegister Отображения NAT автоматически создаются, и внешний IP-адрес и порт для службы зарегистрированы в глобальном DNS. Только клиенты, использующие некоторый механизм каталога кроме Глобального DNS-SD, должны использовать этот API для явного отображения их собственных портов.)

    Возможно, что клиентский обратный вызов можно было вызвать многократно, например если IP-адрес шлюза NAT изменяется, или если изменение конфигурации приводит к различному внешнему порту, отображаемому для этого клиента. Во время жизни любого долгосрочного отображения порта клиент должен быть подготовлен обработать эти уведомления об изменениях в среде и должен обновить ее зарегистрированный адрес и/или порт как надлежащие.

    Примечание: Существует два необычных аспекта того, как DNSServiceNATPortMappingCreate API работает, которые были преднамеренно разработаны, чтобы помочь упростить клиентский код:

    1. Когда машина не находится позади шлюза NAT, это не ошибка запросить отображение NAT. В другом NAT, отображающем APIs, если Вы запрашиваете, отображение NAT и машина не находятся позади шлюза NAT, тогда API возвращает код ошибки - это не может получить Вас отображение NAT, если нет никакого шлюза NAT. DNSServiceNATPortMappingCreate API придерживается другого мнения. Разработка, нужно ли Вам отображение NAT, может быть хитрой и неочевидной, особенно на машине с многократными интерфейсами активной сети. Вместо того, чтобы заставлять каждый клиент воссоздать эту логику для решения, требуется ли отображение NAT, PortMapping API выполняет ту работу для Вас. Если клиент вызывает PortMapping API, когда машина уже имеет routable общедоступный IP-адрес, то вместо того, чтобы жаловаться на это и дать ошибку, PortMapping API просто вызывает Ваш обратный вызов, давая общедоступный адрес машины и Ваш собственный номер порта. Это означает, что Вы не должны писать код, чтобы выяснить, должен ли Ваш клиент вызвать PortMapping API - просто вызывают его так или иначе, и если это не было необходимо, никакой вред не причинен: - если машина уже будет иметь routable общедоступный IP-адрес, то Ваш обратный вызов будет просто вызван, давая Ваш собственный адрес и порт.

    - Если отображение NAT будет требоваться и получаться, то Ваш обратный вызов будет вызван, давая Вам внешний адрес и порт.

    - Если отображение NAT будет требоваться, но не получаться из локального шлюза NAT, или машина не имеет никакого сетевого соединения, то Ваш обратный вызов будет вызван, давая нулевой адрес и порт.

    2. В другом NAT, отображающем APIs, если портативный компьютер помещен в сон и разбужен в новой сети, это - задание клиента, чтобы заметить это и выяснить, требуется ли отображение NAT в новой сети, и выполните новый запрос отображения NAT при необходимости. DNSServiceNATPortMappingCreate API делает это для Вас, автоматически. Клиент просто должен выполнить один вызов к PortMapping API, и его обратный вызов будет вызван любое время отображающиеся изменения состояния. Эта точка дополнений свойства (1) выше. Если бы клиент не выполнял запрос отображения NAT просто, потому что он решил, что каждый не требовался в тот определенный момент своевременно, то клиент должен будет тогда контролировать для изменений состояния сети, чтобы определить, стал ли порт NAT, отображающийся позже, необходимым. Путем безусловной подачи с просьбой отображения NAT, даже когда отображение NAT, чтобы не быть необходимым, PortMapping API тогда начнет наблюдать изменения состояния сети от имени клиента, и если NAT, отображающийся позже, становится необходимым, это автоматически создаст отображение NAT и сообщит клиенту с новым обратным вызовом, дающим новую адресную информацию и информацию порта.

  • Связывает трехчастное доменное имя (как возвращено вышеупомянутыми обратными вызовами) в должным образом оставленное полное доменное имя.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceConstructFullName ( char *const fullName, const char *const service, /* may be NULL */ const char *const regtype, const char *const domain );

    Параметры

    fullName

    Указатель на буфер это, где должно быть написано получающееся полное доменное имя. Буфер должен быть kDNSServiceMaxDomainName (1009) байты в длине для размещения самого долгого юридического доменного имени без переполнения буфера.

    service

    Имя службы - любых точек или наклонных черт влево нельзя оставить. Может быть NULL (для построения имени записи PTR, например, «_ftp._tcp.apple.com».).

    regtype

    Тип службы, сопровождаемый протоколом, разделенным точкой (например, «_ftp. _ tcp»).

    domain

    Доменное имя, например, «apple.com».. Литеральных точек или наклонных черт влево, если таковые имеются, нужно оставить, например, «1st\. Floor.apple.com».

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError (0) на успехе, kDNSServiceErr_BadParam на ошибке.

    Обсуждение

    Обратите внимание на то, что обратные вызовы в вышеупомянутых функциях ALREADY ESCAPE представляют в виде строки в случае необходимости.

  • Перечисляет домены, рекомендующиеся для регистрации и просмотра.

    Объявление

    Objective C

    DNSServiceErrorType DNSServiceEnumerateDomains ( DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceDomainEnumReply callBack, void *context /* may be NULL */ );

    Параметры

    sdRef

    Указатель на неинициализированный DNSServiceRef. Если вызов успешно выполняется тогда, он инициализирует DNSServiceRef, возвраты kDNSServiceErr_NoError, и работа перечисления будет работать неопределенно, пока клиент не завершит ее путем передачи этого DNSServiceRef DNSServiceRefDeallocate.

    flags

    Возможные значения: kDNSServiceFlagsBrowseDomains перечислить домены, рекомендуемые для просмотра. kDNSServiceFlagsRegistrationDomains перечислить домены, рекомендуемые для регистрации.

    interfaceIndex

    Если ненулевой, указывает интерфейс, в котором можно искать домены. (индекс для данного интерфейса определяется через if_nametoindex () семья вызовов.) Большинство приложений передаст 0 для перечисления доменов во всех интерфейсах. См. «Константы для указания интерфейсного индекса» для большего количества подробных данных.

    callBack

    Функция, которую вызовут, когда домен найден или вызов асинхронно, перестала работать.

    context

    Указатель контекста приложения, передающийся функции обратного вызова (может быть NULL).

    Возвращаемое значение

    Возвраты kDNSServiceErr_NoError на успехе (любые последующие, асинхронные ошибки поставлены обратному вызову), иначе возвращает код ошибки, указывающий ошибку, произошедшую (обратный вызов не вызывается, и DNSServiceRef не инициализируется).

    Обсуждение

    Перечисление MUST быть отмененным через DNSServiceRefDeallocate когда не должно быть найдено больше доменов.

    Обратите внимание на то, что имена возвратились, (как весь DNS-SD) строки UTF-8 и оставлены с помощью стандартных правил выхода DNS. (См. «Примечания по Имени DNS, Выходящему» ранее в этом файле для большего количества подробных данных.) Графический браузер, выводящий на экран иерархическое представление с древовидной структурой, должен сократить имена в пустых точках, чтобы привести к отдельным меткам, затем de-escape каждая метка согласно правилам выхода, и затем вывести на экран получающийся текст UTF-8.

Обратные вызовы

  • Обратный вызов для обработки результатов предыдущего вызова к DNSServiceGetAddrInfo.

    Объявление

    Objective C

    typedef void ( *DNSServiceGetAddrInfoReply) ( DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *hostname, const struct sockaddr *address, uint32_t ttl, void *context );

    Параметры

    sdRef

    DNSServiceRef, инициализированный DNSServiceGetAddrInfo.

    flags

    Возможные значения kDNSServiceFlagsMoreComing и kDNSServiceFlagsAdd.

    interfaceIndex

    Интерфейс, которому принадлежат ответы.

    errorCode

    Будет kDNSServiceErr_NoError на успехе, иначе укажет произошедший отказ. Если errorCode является ненулевым, другие параметры не определены.

    hostname

    Полностью определенное доменное имя узла, который будет запрошен для.

    address

    IPv4 или адрес IPv6.

    ttl

    Если клиент хочет кэшировать результат по причинам производительности, TTL указывает, сколько времени клиент может законно содержать на этот результат в секундах. После того, как TTL истекает, клиент должен считать результат больше не действительным, и если он требует этих данных снова, он должен быть повторно выбран с новым запросом. Конечно, это только применяется к клиентам, отменяющим асинхронную работу, когда они получают результат. Клиенты, оставляющие асинхронное выполнение работы, могут безопасно предположить, что данные остаются допустимыми, пока они не получают другой обратный вызов, говоря им иначе.

    context

    Указатель контекста, переданный выноске.

DNSServiceCreateConnection, DNSServiceRegisterRecord, DNSServiceReconfirmRecord (большинство приложений не будет использовать их),

  • Обратный вызов для обработки результатов предыдущего вызова к DNSServiceRegisterRecord.

    Объявление

    Objective C

    typedef void ( *DNSServiceRegisterRecordReply) ( DNSServiceRef sdRef, DNSRecordRef RecordRef, DNSServiceFlags flags, DNSServiceErrorType errorCode, void *context );

    Параметры

    sdRef

    Связанный DNSServiceRef, инициализированный DNSServiceCreateConnection.

    RecordRef

    DNSRecordRef, инициализированный DNSServiceRegisterRecord. Если вышеупомянутый DNSServiceRef передается DNSServiceRefDeallocate, этот DNSRecordRef лишен законной силы и не может использоваться далее.

    flags

    В настоящее время неиспользованный, зарезервированный для будущего использования.

    errorCode

    Будет kDNSServiceErr_NoError на успехе, иначе укажет отказ, произошедший (включая конфликты имен.) Если errorCode является ненулевым, другие параметры не определены.

    context

    Указатель контекста, переданный выноске.

  • Обработчик для результатов предыдущего вызова к DNSServiceRegister.

    Объявление

    Objective C

    typedef void ( *DNSServiceRegisterReply) ( DNSServiceRef sdRef, DNSServiceFlags flags, DNSServiceErrorType errorCode, const char *name, const char *regtype, const char *domain, void *context );

    Параметры

    sdRef

    DNSServiceRef, инициализированный DNSServiceRegister.

    flags

    Когда имя будет успешно зарегистрировано, обратный вызов будет вызван с kDNSServiceFlagsAdd флаг установлен. Когда Глобальный DNS-SD используется, для единственной службы возможно получить больше чем один обратный вызов успеха (например, один в «локальном» многоадресном домене DNS и другом в глобальном одноадресном домене DNS). Если успешно зарегистрированное имя позже перенесет конфликт имен или подобную проблему и должно будет быть вычеркнуто из списка, то обратный вызов будет вызван с kDNSServiceFlagsAdd флаг не набор. Обратный вызов *не* вызван в случае, где вызывающая сторона явно завершает регистрацию службы путем вызова DNSServiceRefDeallocate (касательно);

    errorCode

    Будет kDNSServiceErr_NoError на успехе, иначе укажет отказ, произошедший (включая конфликты имен, если kDNSServiceFlagsNoAutoRename флаг использовался при регистрации.) Если errorCode является ненулевым, другие параметры не определены.

    name

    Если приложение не указывало имя в, имя службы зарегистрировалось ( DNSServiceRegister, это указывает, какое имя было автоматически выбрано).

    regtype

    Тип службы зарегистрировался, когда это было передано выноске.

    domain

    Домен, на котором была зарегистрирована служба (если приложение не указывало домен в DNSServiceRegister, это указывает домен по умолчанию, на котором служба была зарегистрирована).

    context

    Указатель контекста, переданный выноске.

  • Обратный вызов для обработки результатов предыдущих вызовов к DNSServiceBrowse.

    Объявление

    Objective C

    typedef void ( *DNSServiceBrowseReply) ( DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *serviceName, const char *regtype, const char *replyDomain, void *context );

    Параметры

    sdRef

    DNSServiceRef, инициализированный DNSServiceBrowse.

    flags

    Возможные значения kDNSServiceFlagsMoreComing и kDNSServiceFlagsAdd. См. определения флага для подробных данных.

    interfaceIndex

    Интерфейс, в котором распространена служба. Этот индекс должен быть передан DNSServiceResolve при разрешении службы.

    errorCode

    Будет kDNSServiceErr_NoError (0) на успехе, иначе укажет произошедший отказ. Если errorCode является ненулевым, другие параметры не определены.

    serviceName

    Обнаруженное имя службы. Это имя должно быть выведено на экран пользователю и сохранено для последующего использования в DNSServiceResolve вызвать.

    regtype

    Тип службы, который обычно является (но не всегда) тем же, когда был передан DNSServiceBrowse. Один случай, где обнаруженный тип службы может не совпасть с требуемым типом службы, при использовании подтипов: клиент может хотеть просмотреть для только тех ftp-серверов, позволяющих анонимные соединения. Клиент передаст строку «_ftp. _ tcp, _anon» к DNSServiceBrowse, но тип службы, это обнаружено, просто «_ftp. _ tcp». regtype для каждого обнаруженного экземпляра службы должен быть сохранен вместе с именем, так, чтобы это могло быть передано DNSServiceResolve когда позже разрешена служба.

    replyDomain

    Домен обнаруженного экземпляра службы. Это может или может не совпасть с доменом, переданным DNSServiceBrowse. Домен для каждого обнаруженного экземпляра службы должен быть сохранен вместе с именем, так, чтобы это могло быть передано DNSServiceResolve когда позже разрешена служба.

    context

    Указатель контекста, переданный выноске.

  • Объявление

    Objective C

    typedef void ( *DNSServiceResolveReply) ( DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *fullname, const char *hosttarget, uint16_t port, /* In network byte order */ uint16_t txtLen, const unsigned char *txtRecord, void *context );

    Параметры

    sdRef

    DNSServiceRef, инициализированный DNSServiceResolve.

    flags

    Возможные значения: kDNSServiceFlagsMoreComing

    interfaceIndex

    Интерфейс, в котором была разрешена служба.

    errorCode

    Будет kDNSServiceErr_NoError (0) на успехе, иначе укажет произошедший отказ. Если errorCode является ненулевым, другие параметры не определены.

    fullname

    Доменное имя полного сервиса, в форме <servicename>. <протокол>. <домен>. (Этого имени оставляют, соблюдая стандартные правила DNS, делая его подходящим для передачи стандартной системе DNS APIs, такие как res_query (), или к функциям специального назначения включенный в этот API, берущий fullname параметры. См. «Примечания по Имени DNS, Выходящему» ранее в этом файле для большего количества подробных данных.)

    hosttarget

    Целевое имя хоста машины, предоставляющей услугу. Это имя может быть передано функциям как gethostbyname () для идентификации IP-адреса узла.

    port

    Порт, в сетевом порядке байтов, на котором соединения приняты для этой службы.

    txtLen

    Длина записи txt, в байтах.

    txtRecord

    Основная запись txt службы, в стандарте txt формат записи.

    context

    Указатель контекста, переданный выноске.

    Примечание: В более ранних версиях этого заголовочного файла txtRecord параметр был объявлен «символом константы *», Это неправильно, так как это содержит байты длины, которые являются значениями в диапазоне от 0 до 255, не-128 к +127. В зависимости от Ваших параметров компилятора это изменение может вызвать предупреждения несоответствия со знаком/без знака. Они должны быть фиксированы путем обновления собственного определения функции обратного вызова для соответствия исправленной функциональной подписи с помощью «константу символ без знака *txtRecord». Внесение этого изменения может также исправить непреднамеренные ошибки в Вашей функции обратного вызова, где это, возможно, неправильно интерпретировало байт длины со значением 250 как являющийся-6 вместо этого, с различными плохими последствиями в пределах от неправильной работы к катастрофическим отказам программного обеспечения. Если необходимо поддержать переносимый код, который скомпилирует чисто и со старыми и с новыми версиями этого заголовочного файла, необходимо обновить определение функции обратного вызова для использования корректного значения без знака, и затем в месте, куда Вы передаете свою функцию обратного вызова DNSServiceResolve, используйте бросок для устранения предупреждения компилятора, например:

    DNSServiceResolve (sd, флаги, индекс, имя, regtype, домен, (DNSServiceResolveReply) MyCallback, контекст);

    Это гарантирует, что Ваш код компилирует чисто без предупреждений (и что еще более важно, работает правильно), и со старым заголовком и с новой исправленной версией.

    Обсуждение

    Разрешите имя службы, обнаруженное через DNSServiceBrowse к имени целевого узла, номеру порта и записи txt.

    Примечание: Приложения не должны использовать DNSServiceResolve исключительно для записи txt, контролирующей - использование DNSServiceQueryRecord вместо этого, поскольку это более эффективно для этой задачи.

    Примечание: Когда желаемые результаты были возвращены, клиент, MUST завершает решение путем вызова DNSServiceRefDeallocate.

    Примечание: DNSServiceResolve ведет себя правильно для типичных служб, имеющих единственную запись SRV и единственную запись TXT. Разрешить нестандартные службы с многократным SRV или записями TXT, DNSServiceQueryRecord должен использоваться.

  • Обратный вызов для обработки результатов предыдущего вызова к DNSServiceQueryRecord.

    Объявление

    Objective C

    typedef void ( *DNSServiceQueryRecordReply) ( DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *fullname, uint16_t rrtype, uint16_t rrclass, uint16_t rdlen, const void *rdata, uint32_t ttl, void *context );

    Параметры

    sdRef

    DNSServiceRef, инициализированный DNSServiceQueryRecord.

    flags

    Возможные значения kDNSServiceFlagsMoreComing и kDNSServiceFlagsAdd. Флаг Add НЕ установлен для записей PTR с ttl 0, т.е. события «Remove».

    interfaceIndex

    Интерфейс, в котором был разрешен запрос (индекс для данного интерфейса определяется через if_nametoindex () семья вызовов). См. «Константы для указания интерфейсного индекса» для большего количества подробных данных.

    errorCode

    Будет kDNSServiceErr_NoError на успехе, иначе укажет произошедший отказ. Если errorCode является ненулевым, другие параметры не определены.

    fullname

    Полное доменное имя ресурсной записи.

    rrtype

    Тип ресурсной записи (например. kDNSServiceType_PTR, kDNSServiceType_SRV, и т.д.).

    rrclass

    Класс ресурсной записи (обычно kDNSServiceClass_IN).

    rdlen

    Длина, в байтах, ресурсной записи rdata.

    rdata

    Сырые данные rdata ресурсной записи.

    ttl

    Если клиент хочет кэшировать результат по причинам производительности, TTL указывает, сколько времени клиент может законно содержать на этот результат в секундах. После того, как TTL истекает, клиент должен считать результат больше не действительным, и если он требует этих данных снова, он должен быть повторно выбран с новым запросом. Конечно, это только применяется к клиентам, отменяющим асинхронную работу, когда они получают результат. Клиенты, оставляющие асинхронное выполнение работы, могут безопасно предположить, что данные остаются допустимыми, пока они не получают другой обратный вызов, говоря им иначе.

    context

    Указатель контекста, переданный выноске.

  • Обратный вызов для обработки ответа от предыдущего вызова до DNSServiceNATPortMappingReply.

    Объявление

    Objective C

    typedef void ( *DNSServiceNATPortMappingReply) ( DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, uint32_t externalAddress, /* four byte IPv4 address in network byte order */ DNSServiceProtocol protocol, uint16_t internalPort, /* In network byte order */ uint16_t externalPort, /* In network byte order and may be different than the requested port */ uint32_t ttl, /* may be different than the requested ttl */ void *context );

    Параметры

    sdRef

    DNSServiceRef, инициализированный DNSServiceNATPortMappingCreate.

    flags

    В настоящее время неиспользованный, зарезервированный для будущего использования.

    interfaceIndex

    Интерфейс, через который достигнут шлюз NAT.

    errorCode

    Будет kDNSServiceErr_NoError на успехе. Будет kDNSServiceErr_DoubleNAT когда шлюз NAT находится самостоятельно позади одного или более уровней NAT, когда другие параметры имеют определенные значения. Для других отказов, укажет отказ, произошедший, и другие параметры не определены.

    externalAddress

    Четырехбайтовый адрес IPv4 в сетевом порядке байтов.

    protocol

    Будет kDNSServiceProtocol_UDP или kDNSServiceProtocol_TCP или оба.

    internalPort

    Порт на отображенной локальной машине.

    externalPort

    Фактический внешний порт в отображенном шлюзе NAT. Это, вероятно, будет отличаться, чем требуемый внешний порт.

    ttl

    Время жизни отображения порта NAT создается на шлюзе. Это управляет, как быстро устаревшие отображения будут собраны «мусор», если клиентская машина разрушит, перенесет сбой питания, будет разъединена от сети или перенесет некоторую другую неудачную сдачу в аренду, заставляющую его исчезать, явно не удаляя ее отображение порта NAT. Возможно, что значение ttl будет отличаться от требуемого значения ttl.

    context

    Указатель контекста, переданный выноске.

    Обсуждение

    NAT должен поддерживать или NAT-PMP или протокол UPnP IGD для этого API для создания успешного отображения.

  • Обратный вызов для обработки результатов предыдущего вызова к DNSServiceEnumerateDomains.

    Объявление

    Objective C

    typedef void ( *DNSServiceDomainEnumReply) ( DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *replyDomain, void *context );

    Параметры

    sdRef

    DNSServiceRef, инициализированный DNSServiceEnumerateDomains.

    flags

    Возможные значения:

    kDNSServiceFlagsMoreComing

    kDNSServiceFlagsAdd

    kDNSServiceFlagsDefault

    interfaceIndex

    Указывает интерфейс, в котором существует домен. (Индекс для данного интерфейса определяется через if_nametoindex () семья вызовов.)

    errorCode

    Будет kDNSServiceErr_NoError (0) на успехе, иначе указывает отказ, произошедший (другие параметры не определены, если errorCode является ненулевым).

    replyDomain

    Имя домена.

    context

    Указатель контекста передал DNSServiceEnumerateDomains.

Типы данных

Посмотрите раздел Overview выше для документации уровня заголовка.

  • Объявление

    Objective C

    typedef int32_t DNSServiceErrorType;

    Обсуждение

    Описание типа для ошибочного типа Службы DNS.

    Оператор импорта

  • Объявление

    Objective C

    typedef uint32_t DNSServiceFlags;

    Обсуждение

    Описание типа для флагов Службы DNS.

    Оператор импорта

  • Объявление

    Objective C

    typedef uint32_t DNSServiceProtocol;

    Обсуждение

    Описание типа для протокола Службы DNS.

    Оператор импорта

  • Непрозрачный внутренний тип данных, представляющий DNS-SD запись TXT.

    Объявление

    Objective C

    typedef union _TXTRecordRef_t { char PrivateData[16]; char *ForceNaturalAlignment; } TXTRecordRef;

    Оператор импорта

Константы

Посмотрите раздел Overview выше для документации уровня заголовка.

  • Объявление

    Objective C

    #define kDNSServiceInterfaceIndexAny 0 #define kDNSServiceInterfaceIndexLocalOnly ((uint32_t)-1) #define kDNSServiceInterfaceIndexP2P ((uint32_t)-3) #define kDNSServiceInterfaceIndexUnicast ((uint32_t)-2)

    Константы

    • kDNSServiceInterfaceIndexAny

      Определенные интерфейсные индексы идентифицируются через 32-разрядное целое без знака, возвращенное if_nametoindex () семья вызовов.

      Если клиент передает 0 для интерфейсного индекса, означающего, «делают правильную вещь», (в настоящее время) означающую, «если имя находится в mDNS локальном многоадресном домене (например, 'локальный'. '254.169.in-addr.arpa'. '{8,9, A, B}.E.F.ip6.arpa'.) тогда многоадресно переданный во всех применимых интерфейсах, иначе отправьте через одноадресную передачу к надлежащему серверу DNS». Обычно, большинство клиентов будет использовать 0 для интерфейсного индекса для автоматического получения разумного поведения по умолчанию.

      Если клиент передает положительный интерфейсный индекс, то для многоадресных имен, который указывает, чтобы сделать работу только в том одном интерфейсе. Поскольку одноадресные имена, интерфейсный индекс проигнорирован, если также не установлен kDNSServiceFlagsForceMulticast.

      Если клиент передает kDNSServiceInterfaceIndexLocalOnly при регистрации службы тогда та служба будет найдена *только* другими локальными клиентами на той же машине, просматривающими использование kDNSServiceInterfaceIndexLocalOnly или kDNSServiceInterfaceIndexAny. Если у клиента есть 'частная' служба, доступная только для других процессов, работающих на той же машине, это позволяет клиенту распространять ту службу в пути, таким образом, что это непреднамеренно не появляется в обслуживании списки на всех других машинах в сети.

      Если клиент передает kDNSServiceInterfaceIndexLocalOnly когда просмотр тогда его найдет *все* записи зарегистрированный на той же самой локальной машине. Клиенты, явно желающие обнаружить *только*, службы LocalOnly могут выполнить, это путем проверки interfaceIndex каждой службы сообщило их DNSServiceBrowseReply функция обратного вызова и отбрасывание тех, где интерфейсный индекс не kDNSServiceInterfaceIndexLocalOnly.

      kDNSServiceInterfaceIndexP2P значимо только в Обзоре, QueryRecord, Регистре и операциях Resolve. Это не должно использоваться в другом APIs DNSService.

      - Если kDNSServiceInterfaceIndexP2P передается DNSServiceBrowse или DNSServiceQueryRecord, это ограничивает работу P2P.

      - Если kDNSServiceInterfaceIndexP2P передается DNSServiceRegister, он отображается внутренне на kDNSServiceInterfaceIndexAny с набором kDNSServiceFlagsIncludeP2P.

      - Если kDNSServiceInterfaceIndexP2P передается DNSServiceResolve, это отображается внутренне на kDNSServiceInterfaceIndexAny с kDNSServiceFlagsIncludeP2P набор, потому что разрешение службы P2P может создать и/или включить интерфейс, индекс которого не известен априорно. Обратный вызов решения укажет индекс интерфейса, через который можно получить доступ к службе.

      Если приложения передают kDNSServiceInterfaceIndexAny к DNSServiceBrowse или DNSServiceQueryRecord, они должны установить kDNSServiceFlagsIncludeP2P флаг для включения P2P. В этом случае, если экземпляр службы или запрашиваемая запись будут найдены по P2P, то укажет получающееся событие ADD kDNSServiceInterfaceIndexP2P как интерфейсный индекс.

    • kDNSServiceInterfaceIndexLocalOnly

      Определенные интерфейсные индексы идентифицируются через 32-разрядное целое без знака, возвращенное if_nametoindex () семья вызовов.

      Если клиент передает 0 для интерфейсного индекса, означающего, «делают правильную вещь», (в настоящее время) означающую, «если имя находится в mDNS локальном многоадресном домене (например, 'локальный'. '254.169.in-addr.arpa'. '{8,9, A, B}.E.F.ip6.arpa'.) тогда многоадресно переданный во всех применимых интерфейсах, иначе отправьте через одноадресную передачу к надлежащему серверу DNS». Обычно, большинство клиентов будет использовать 0 для интерфейсного индекса для автоматического получения разумного поведения по умолчанию.

      Если клиент передает положительный интерфейсный индекс, то для многоадресных имен, который указывает, чтобы сделать работу только в том одном интерфейсе. Поскольку одноадресные имена, интерфейсный индекс проигнорирован, если также не установлен kDNSServiceFlagsForceMulticast.

      Если клиент передает kDNSServiceInterfaceIndexLocalOnly при регистрации службы тогда та служба будет найдена *только* другими локальными клиентами на той же машине, просматривающими использование kDNSServiceInterfaceIndexLocalOnly или kDNSServiceInterfaceIndexAny. Если у клиента есть 'частная' служба, доступная только для других процессов, работающих на той же машине, это позволяет клиенту распространять ту службу в пути, таким образом, что это непреднамеренно не появляется в обслуживании списки на всех других машинах в сети.

      Если клиент передает kDNSServiceInterfaceIndexLocalOnly когда просмотр тогда его найдет *все* записи зарегистрированный на той же самой локальной машине. Клиенты, явно желающие обнаружить *только*, службы LocalOnly могут выполнить, это путем проверки interfaceIndex каждой службы сообщило их DNSServiceBrowseReply функция обратного вызова и отбрасывание тех, где интерфейсный индекс не kDNSServiceInterfaceIndexLocalOnly.

      kDNSServiceInterfaceIndexP2P значимо только в Обзоре, QueryRecord, Регистре и операциях Resolve. Это не должно использоваться в другом APIs DNSService.

      - Если kDNSServiceInterfaceIndexP2P передается DNSServiceBrowse или DNSServiceQueryRecord, это ограничивает работу P2P.

      - Если kDNSServiceInterfaceIndexP2P передается DNSServiceRegister, он отображается внутренне на kDNSServiceInterfaceIndexAny с набором kDNSServiceFlagsIncludeP2P.

      - Если kDNSServiceInterfaceIndexP2P передается DNSServiceResolve, это отображается внутренне на kDNSServiceInterfaceIndexAny с kDNSServiceFlagsIncludeP2P набор, потому что разрешение службы P2P может создать и/или включить интерфейс, индекс которого не известен априорно. Обратный вызов решения укажет индекс интерфейса, через который можно получить доступ к службе.

      Если приложения передают kDNSServiceInterfaceIndexAny к DNSServiceBrowse или DNSServiceQueryRecord, они должны установить kDNSServiceFlagsIncludeP2P флаг для включения P2P. В этом случае, если экземпляр службы или запрашиваемая запись будут найдены по P2P, то укажет получающееся событие ADD kDNSServiceInterfaceIndexP2P как интерфейсный индекс.

    • kDNSServiceInterfaceIndexP2P

      Определенные интерфейсные индексы идентифицируются через 32-разрядное целое без знака, возвращенное if_nametoindex () семья вызовов.

      Если клиент передает 0 для интерфейсного индекса, означающего, «делают правильную вещь», (в настоящее время) означающую, «если имя находится в mDNS локальном многоадресном домене (например, 'локальный'. '254.169.in-addr.arpa'. '{8,9, A, B}.E.F.ip6.arpa'.) тогда многоадресно переданный во всех применимых интерфейсах, иначе отправьте через одноадресную передачу к надлежащему серверу DNS». Обычно, большинство клиентов будет использовать 0 для интерфейсного индекса для автоматического получения разумного поведения по умолчанию.

      Если клиент передает положительный интерфейсный индекс, то для многоадресных имен, который указывает, чтобы сделать работу только в том одном интерфейсе. Поскольку одноадресные имена, интерфейсный индекс проигнорирован, если также не установлен kDNSServiceFlagsForceMulticast.

      Если клиент передает kDNSServiceInterfaceIndexLocalOnly при регистрации службы тогда та служба будет найдена *только* другими локальными клиентами на той же машине, просматривающими использование kDNSServiceInterfaceIndexLocalOnly или kDNSServiceInterfaceIndexAny. Если у клиента есть 'частная' служба, доступная только для других процессов, работающих на той же машине, это позволяет клиенту распространять ту службу в пути, таким образом, что это непреднамеренно не появляется в обслуживании списки на всех других машинах в сети.

      Если клиент передает kDNSServiceInterfaceIndexLocalOnly когда просмотр тогда его найдет *все* записи зарегистрированный на той же самой локальной машине. Клиенты, явно желающие обнаружить *только*, службы LocalOnly могут выполнить, это путем проверки interfaceIndex каждой службы сообщило их DNSServiceBrowseReply функция обратного вызова и отбрасывание тех, где интерфейсный индекс не kDNSServiceInterfaceIndexLocalOnly.

      kDNSServiceInterfaceIndexP2P значимо только в Обзоре, QueryRecord, Регистре и операциях Resolve. Это не должно использоваться в другом APIs DNSService.

      - Если kDNSServiceInterfaceIndexP2P передается DNSServiceBrowse или DNSServiceQueryRecord, это ограничивает работу P2P.

      - Если kDNSServiceInterfaceIndexP2P передается DNSServiceRegister, он отображается внутренне на kDNSServiceInterfaceIndexAny с набором kDNSServiceFlagsIncludeP2P.

      - Если kDNSServiceInterfaceIndexP2P передается DNSServiceResolve, это отображается внутренне на kDNSServiceInterfaceIndexAny с kDNSServiceFlagsIncludeP2P набор, потому что разрешение службы P2P может создать и/или включить интерфейс, индекс которого не известен априорно. Обратный вызов решения укажет индекс интерфейса, через который можно получить доступ к службе.

      Если приложения передают kDNSServiceInterfaceIndexAny к DNSServiceBrowse или DNSServiceQueryRecord, они должны установить kDNSServiceFlagsIncludeP2P флаг для включения P2P. В этом случае, если экземпляр службы или запрашиваемая запись будут найдены по P2P, то укажет получающееся событие ADD kDNSServiceInterfaceIndexP2P как интерфейсный индекс.

    • kDNSServiceInterfaceIndexUnicast

      Определенные интерфейсные индексы идентифицируются через 32-разрядное целое без знака, возвращенное if_nametoindex () семья вызовов.

      Если клиент передает 0 для интерфейсного индекса, означающего, «делают правильную вещь», (в настоящее время) означающую, «если имя находится в mDNS локальном многоадресном домене (например, 'локальный'. '254.169.in-addr.arpa'. '{8,9, A, B}.E.F.ip6.arpa'.) тогда многоадресно переданный во всех применимых интерфейсах, иначе отправьте через одноадресную передачу к надлежащему серверу DNS». Обычно, большинство клиентов будет использовать 0 для интерфейсного индекса для автоматического получения разумного поведения по умолчанию.

      Если клиент передает положительный интерфейсный индекс, то для многоадресных имен, который указывает, чтобы сделать работу только в том одном интерфейсе. Поскольку одноадресные имена, интерфейсный индекс проигнорирован, если также не установлен kDNSServiceFlagsForceMulticast.

      Если клиент передает kDNSServiceInterfaceIndexLocalOnly при регистрации службы тогда та служба будет найдена *только* другими локальными клиентами на той же машине, просматривающими использование kDNSServiceInterfaceIndexLocalOnly или kDNSServiceInterfaceIndexAny. Если у клиента есть 'частная' служба, доступная только для других процессов, работающих на той же машине, это позволяет клиенту распространять ту службу в пути, таким образом, что это непреднамеренно не появляется в обслуживании списки на всех других машинах в сети.

      Если клиент передает kDNSServiceInterfaceIndexLocalOnly когда просмотр тогда его найдет *все* записи зарегистрированный на той же самой локальной машине. Клиенты, явно желающие обнаружить *только*, службы LocalOnly могут выполнить, это путем проверки interfaceIndex каждой службы сообщило их DNSServiceBrowseReply функция обратного вызова и отбрасывание тех, где интерфейсный индекс не kDNSServiceInterfaceIndexLocalOnly.

      kDNSServiceInterfaceIndexP2P значимо только в Обзоре, QueryRecord, Регистре и операциях Resolve. Это не должно использоваться в другом APIs DNSService.

      - Если kDNSServiceInterfaceIndexP2P передается DNSServiceBrowse или DNSServiceQueryRecord, это ограничивает работу P2P.

      - Если kDNSServiceInterfaceIndexP2P передается DNSServiceRegister, он отображается внутренне на kDNSServiceInterfaceIndexAny с набором kDNSServiceFlagsIncludeP2P.

      - Если kDNSServiceInterfaceIndexP2P передается DNSServiceResolve, это отображается внутренне на kDNSServiceInterfaceIndexAny с kDNSServiceFlagsIncludeP2P набор, потому что разрешение службы P2P может создать и/или включить интерфейс, индекс которого не известен априорно. Обратный вызов решения укажет индекс интерфейса, через который можно получить доступ к службе.

      Если приложения передают kDNSServiceInterfaceIndexAny к DNSServiceBrowse или DNSServiceQueryRecord, они должны установить kDNSServiceFlagsIncludeP2P флаг для включения P2P. В этом случае, если экземпляр службы или запрашиваемая запись будут найдены по P2P, то укажет получающееся событие ADD kDNSServiceInterfaceIndexP2P как интерфейсный индекс.

    Обсуждение

    В этом разделе описываются функции, обратные вызовы и структуры данных, составляющие Открытие Службы DNS API.

    Открытие Службы DNS API является частью Добрый день, реализацией Apple нулевой конфигурации, объединяющей (ZEROCONF) в сеть.

    Добрый день позволяет Вам регистрировать сетевую службу, такую как сервер принтера или файловый сервер, так, чтобы это могло быть найдено по имени или просмотрено для типом службы и доменом. Используя Добрый день, приложения могут обнаружить, какие службы доступны в сети, вместе со всей информацией - такой как имя, IP-адрес и порт - необходимый для доступа к определенной службе.

    В действительности, Добрый день комбинирует функции локального сервера DNS и AppleTalk. Добрый день позволяет приложениям обеспечивать удобный для пользователя просмотр принтера и сервера, среди прочего, по стандартным сетям IP. Это поведение является результатом объединяющихся протоколов такой, как многоадресно передано и DNS для добавления новой функциональности к сети (такой как многоадресная передача DNS).

    Добрый день предоставляет легкий доступ приложений к службам по локальным сетям IP, не требуя, чтобы служба или приложение поддерживали AppleTalk или штабель Netbeui, и не требуя сервера DNS для локальной сети.

    Примечания по выходу имени DNS

    - или-

    «Почему kDNSServiceMaxDomainName 1009, когда максимальное юридическое доменное имя составляет 256 байтов?»

    Все строки, используемые в DNS-SD APIs, являются строками UTF-8. Кроме исключений, отмеченных ниже, APIs ожидает, что строки будут должным образом оставлены, с помощью стандартных правил выхода DNS:

    • '\\' представляет единственный литерал '\' на имя

    • '\'. представляет единственный литерал '.' на имя

    • '\ddd', где ddd является трехразрядным десятичным значением от 000 до 255, представляет единственный литеральный байт с тем значением.

    • Пустым незавершенным '.' является разделитель метки, отмечая границу между доменом и подобластью.

    Исключения, не использующие выход, являются подпрограммами, где полное имя DNS ресурса повреждается, для удобства, в servicename/regtype/domain. В этих подпрограммах НЕ оставляют «servicename». Это не должно быть, так как это - по определению, просто единственная литеральная строка. Любые символы в той строке представляют точно, каковы они. Части «regtype», с технической точки зрения, оставляют, но так как юридическим regtypes только позволяют содержать буквы, цифры и дефисы, нет ничего для выхода, таким образом, проблема спорна. «Доменной» части также оставляют, хотя большинство доменов в использовании в общедоступном Интернете сегодня, как regtypes, не содержит символов, которых нужно оставить. Поскольку DNS-SD становится более популярными доменами обогащенного текста для открытия службы, станет распространен, таким образом, программное обеспечение должно быть записано для разрешения с доменами с выходом.

    servicename может составить до 63 байтов текста UTF-8 (не считающий струну до, завершающую NULL в конце). regtype имеет форму _service. _ tcp или _service. _ udp, где часть «службы» является 1-15 символами, которые могут быть буквами, цифрами или дефисами. Доменная часть трехчастного имени может быть любым юридическим доменом, если это получающееся имя servicename+regtype+domain не превышает 256 байтов.

    Для большей части программного обеспечения эти проблемы прозрачны. При просмотре обнаруженный servicenames должен просто быть выведен на экран как есть. При разрешении обнаруженные servicename/regtype/domain просто передаются неизменные DNSServiceResolve. Когда a DNSServiceResolve успешно выполняется, возвращенный fullname уже находится в правильном формате для передачи стандартной системе DNS APIs, такой как res_query (). Для преобразования от servicename/regtype/domain до единственного должным образом оставленного полного имени DNS, функции помощника DNSServiceConstructFullName предоставлен.

    Следующий (высоко изобретенный) пример иллюстрирует процесс выхода. Предположим, что у Вас есть служба, вызванная «Доктор Smith\Dr. Джонсон», из типа «_ftp. _ tcp» в подобласти, «4-й. Этаж» подобласти «Создание 2» домена «apple.com». Полное (завершенное) имя DNS записи SRV этой службы было бы: Dr\.\032Smith \\Др\.\032джонсон. _ ftp. _ tcp.4th\.\032Floor. Building\0322.apple.com.

  • Объявление

    Objective C

    #define _DNS_SD_H 5220111 #define kDNSServiceMaxDomainName 1009 #define kDNSServiceMaxServiceName 64 #define kDNSServiceOutputFlags (kDNSServiceFlagsValidate | kDNSServiceFlagsValidateOptional | kDNSServiceFlagsMoreComing | kDNSServiceFlagsAdd | kDNSServiceFlagsDefault) #define kDNSServiceProperty_DaemonVersion "DaemonVersion"

    Константы

    • _DNS_SD_H

      Номер версии API.

      _DNS_SD_H содержит mDNSResponder номер версии для этого заголовочного файла, отформатированного следующим образом:

      Главная часть номера сборки * 10000 +

      незначительная часть номера сборки * 100

      Например, Mac OS X 10.4.9 имеет mDNSResponder-108.4, который был бы представлен как версия 1080400. Это позволяет коду C делать простой больше - чем и меньше сравнения: например, приложение, требующее DNSServiceGetProperty вызовите (новый в mDNSResponder-126), может проверить:

      • #if _DNS_SD_H+0 >= 1260000
      • ... some C code that calls DNSServiceGetProperty() ...
      • #endif

      Версия, определенная в этом символе заголовочного файла, позволяет время компиляции проверять, так, чтобы здание кода C с более ранними версиями заголовочного файла могло избежать ошибок компиляции, пытающихся использовать функции, даже не определяющиеся в тех более ранних версиях. Во время выполнения могут также быть выполнены подобные проверки:

      • слабое соединение - для предотвращения отказов канала, если выполнено с более ранней версией библиотеки это пропускает некоторый желаемый символ, или

      • DNSServiceGetProperty (DaemonVersion) - проверять, встречает ли рабочий демон («системная служба» на Windows) некоторый требуемый минимальный уровень функциональности.

    • kDNSServiceMaxDomainName

      Максимальная длина, в байтах, доменного имени, представленного как *, вышла* струна до включая заключительную запаздывающую точку и завершающийся NULL в конце.

    • kDNSServiceMaxServiceName

      Максимальная длина, в байтах, имени службы, представленного как литеральная струна до, включая завершающийся NULL в конце.

    • kDNSServiceOutputFlags

      Все выходные флаги, исключая флаги Состояния DNSSEC.

      Обычно используемый для проверки Состояния DNSSEC

    • kDNSServiceProperty_DaemonVersion

      Свойство версии демона.

      При запросе kDNSServiceProperty_DaemonVersion, указатель результата должен указать на 32-разрядное целое без знака, и параметр размера должен быть установлен на sizeof (uint32_t).

      По возврату 32-разрядное целое без знака содержит номер версии, отформатированный следующим образом:

      Главная часть номера сборки * 10000 +

      незначительная часть номера сборки * 100

      Например, Mac OS X 10.4.9 имеет mDNSResponder-108.4, который был бы представлен как версия 1080400. Это позволяет приложениям делать простой больше - чем и меньше сравнения: например, приложение, требующее, по крайней мере, mDNSResponder-108.4, может проверить:

      • if (version >= 1080400) ...

      Использование в качестве примера:

      • uint32_t version;
      • uint32_t size = sizeof(version);
      • DNSServiceErrorType err = DNSServiceGetProperty(kDNSServiceProperty_DaemonVersion, &version, &size);
      • if (!err) printf("Bonjour version is %d.%d\n", version / 10000, version / 100 % 100);
  • Объявление

    Objective C

    enum { kDNSServiceClass_IN = 1 /*! Internet */ };

    Константы

    • kDNSServiceClass_IN

      Интернет

    Обсуждение

    Значения для Классов DNS и Типов перечислены в RFC 1035 и доступны на каждом OS в его заголовочном файле DNS. К сожалению, каждый OS не имеет того же заголовочного файла, содержащего Класс DNS и константы Типа, и имена констант не являются непротиворечивыми. Например, BIND 8 использует «T_A», BIND 9 использует «ns_t_a», Windows использует «DNS_TYPE_A» и т.д. Поэтому эти константы также перечислены здесь, так, чтобы код с помощью DNS-SD, программирующего APIs, мог использовать эти константы, так, чтобы тот же код мог скомпилировать на всех наших поддерживаемых платформах.

  • Объявление

    Objective C

    enum { kDNSServiceErr_NoError = 0, /*! No error */ kDNSServiceErr_Unknown = -65537, /* 0xFFFE FFFF */ kDNSServiceErr_NoSuchName = -65538, kDNSServiceErr_NoMemory = -65539, /*! Out of memory. */ kDNSServiceErr_BadParam = -65540, /*! Bad parameter value passed to function. */ kDNSServiceErr_BadReference = -65541, kDNSServiceErr_BadState = -65542, kDNSServiceErr_BadFlags = -65543, kDNSServiceErr_Unsupported = -65544, kDNSServiceErr_NotInitialized = -65545, kDNSServiceErr_AlreadyRegistered = -65547, kDNSServiceErr_NameConflict = -65548, kDNSServiceErr_Invalid = -65549, /*! An invalid index or character was passed. */ kDNSServiceErr_Firewall = -65550, kDNSServiceErr_Incompatible = -65551, /*! Client library incompatible with daemon */ kDNSServiceErr_BadInterfaceIndex = -65552, kDNSServiceErr_Refused = -65553, kDNSServiceErr_NoSuchRecord = -65554, kDNSServiceErr_NoAuth = -65555, kDNSServiceErr_NoSuchKey = -65556, /*! The key does not exist in the TXT record. */ kDNSServiceErr_NATTraversal = -65557, kDNSServiceErr_DoubleNAT = -65558, /*! More than one NAT gateway between source and destionation. */ kDNSServiceErr_BadTime = -65559, /* Codes up to here existed in Tiger */ kDNSServiceErr_BadSig = -65560, kDNSServiceErr_BadKey = -65561, kDNSServiceErr_Transient = -65562, kDNSServiceErr_ServiceNotRunning = -65563, /*! Background daemon not running */ kDNSServiceErr_NATPortMappingUnsupported = -65564, /*! The NAT gateway doesn't support PCP, NAT-PMP or UPnP. */ kDNSServiceErr_NATPortMappingDisabled = -65565, /*! The NAT gateway supports PCP, NAT-PMP or UPnP, but support is disabled by the administrator. */ kDNSServiceErr_NoRouter = -65566, /*! No router is currently configured (probably no network connectivity ). */ kDNSServiceErr_PollingMode = -65567, kDNSServiceErr_Timeout = -65568 /*! A timeout occurred because the {@link kDNSServiceFlagsTimeout } */ /* mDNS Error codes are in the range */ };

    Константы

    • kDNSServiceErr_NoError

      Никакая ошибка

    • kDNSServiceErr_NoMemory

      Недостаточно памяти.

    • kDNSServiceErr_BadParam

      Плохое значение параметра передало функции.

    • kDNSServiceErr_Invalid

      Были переданы недопустимый индекс или символ.

    • kDNSServiceErr_Incompatible

      Библиотека Client, несовместимая с демоном

    • kDNSServiceErr_NoSuchKey

      Ключ не существует в записи TXT.

    • kDNSServiceErr_DoubleNAT

      Больше чем один шлюз NAT между источником и destionation.

    • kDNSServiceErr_ServiceNotRunning

      Фоновый демон, не работающий

    • kDNSServiceErr_NATPortMappingUnsupported

      Шлюз NAT не поддерживает PCP, NAT-PMP или UPnP.

    • kDNSServiceErr_NATPortMappingDisabled

      Шлюз NAT поддерживает PCP, NAT-PMP или UPnP, но поддержка отключена администратором.

    • kDNSServiceErr_NoRouter

      Никакой маршрутизатор в настоящее время не конфигурируется (вероятно, никакое сетевое соединение).

    • kDNSServiceErr_Timeout

      Тайм-аут произошел потому что kDNSServiceFlagsTimeout + флаг был передан.

    Обсуждение

    возможные значения кода ошибки

  • Объявление

    Objective C

    enum { kDNSServiceType_A = 1, /*! Host address. */ kDNSServiceType_NS = 2, /*! Authoritative server. */ kDNSServiceType_MD = 3, /*! Mail destination. */ kDNSServiceType_MF = 4, /*! Mail forwarder. */ kDNSServiceType_CNAME = 5, /*! Canonical name. */ kDNSServiceType_SOA = 6, /*! Start of authority zone. */ kDNSServiceType_MB = 7, /*! Mailbox domain name. */ kDNSServiceType_MG = 8, /*! Mail group member. */ kDNSServiceType_MR = 9, /*! Mail rename name. */ kDNSServiceType_NULL = 10, /*! Null resource record. */ kDNSServiceType_WKS = 11, /*! Well known service. */ kDNSServiceType_PTR = 12, /*! Domain name pointer. */ kDNSServiceType_HINFO = 13, /*! Host information. */ kDNSServiceType_MINFO = 14, /*! Mailbox information. */ kDNSServiceType_MX = 15, /*! Mail routing information. */ kDNSServiceType_TXT = 16, /*! One or more text strings (NOT "zero or more..."). */ kDNSServiceType_RP = 17, /*! Responsible person. */ kDNSServiceType_AFSDB = 18, /*! AFS cell database. */ kDNSServiceType_X25 = 19, /*! X_25 calling address. */ kDNSServiceType_ISDN = 20, /*! ISDN calling address. */ kDNSServiceType_RT = 21, /*! Router. */ kDNSServiceType_NSAP = 22, /*! NSAP address. */ kDNSServiceType_NSAP_PTR = 23, /*! Reverse NSAP lookup (deprecated ). */ kDNSServiceType_SIG = 24, /*! Security signature. */ kDNSServiceType_KEY = 25, /*! Security key. */ kDNSServiceType_PX = 26, /*! X.400 mail mapping. */ kDNSServiceType_GPOS = 27, /*! Geographical position (withdrawn ). */ kDNSServiceType_AAAA = 28, /*! IPv6 Address. */ kDNSServiceType_LOC = 29, /*! Location Information. */ kDNSServiceType_NXT = 30, /*! Next domain (security ). */ kDNSServiceType_EID = 31, /*! Endpoint identifier. */ kDNSServiceType_NIMLOC = 32, /*! Nimrod Locator. */ kDNSServiceType_SRV = 33, /*! Server Selection. */ kDNSServiceType_ATMA = 34, /*! ATM Address */ kDNSServiceType_NAPTR = 35, /*! Naming Authority PoinTeR */ kDNSServiceType_KX = 36, /*! Key Exchange */ kDNSServiceType_CERT = 37, /*! Certification record */ kDNSServiceType_A6 = 38, /*! IPv6 Address (deprecated ) */ kDNSServiceType_DNAME = 39, /*! Non-terminal DNAME (for IPv6 ) */ kDNSServiceType_SINK = 40, /*! Kitchen sink (experimental ) */ kDNSServiceType_OPT = 41, /*! EDNS0 option (meta-RR ) */ kDNSServiceType_APL = 42, /*! Address Prefix List */ kDNSServiceType_DS = 43, /*! Delegation Signer */ kDNSServiceType_SSHFP = 44, /*! SSH Key Fingerprint */ kDNSServiceType_IPSECKEY = 45, /*! IPSECKEY */ kDNSServiceType_RRSIG = 46, /*! RRSIG */ kDNSServiceType_NSEC = 47, /*! Denial of Existence */ kDNSServiceType_DNSKEY = 48, /*! DNSKEY */ kDNSServiceType_DHCID = 49, /*! DHCP Client Identifier */ kDNSServiceType_NSEC3 = 50, /*! Hashed Authenticated Denial of Existence */ kDNSServiceType_NSEC3PARAM = 51, /*! Hashed Authenticated Denial of Existence */ kDNSServiceType_HIP = 55, /*! Host Identity Protocol */ kDNSServiceType_SPF = 99, /*! Sender Policy Framework for E-Mail */ kDNSServiceType_UINFO = 100, /*! IANA-Reserved */ kDNSServiceType_UID = 101, /*! IANA-Reserved */ kDNSServiceType_GID = 102, /*! IANA-Reserved */ kDNSServiceType_UNSPEC = 103, /*! IANA-Reserved */ kDNSServiceType_TKEY = 249, /*! Transaction key */ kDNSServiceType_TSIG = 250, /*! Transaction signature. */ kDNSServiceType_IXFR = 251, /*! Incremental zone transfer. */ kDNSServiceType_AXFR = 252, /*! Transfer zone of authority. */ kDNSServiceType_MAILB = 253, /*! Transfer mailbox records. */ kDNSServiceType_MAILA = 254, /*! Transfer mail agent records. */ kDNSServiceType_ANY = 255 /*! Wildcard match. */ };

    Константы

    • kDNSServiceType_A

      Адрес узла.

    • kDNSServiceType_NS

      Авторитетный сервер.

    • kDNSServiceType_MD

      Почтовое место назначения.

    • kDNSServiceType_MF

      Почтовое средство передачи.

    • kDNSServiceType_CNAME

      Каноническое имя.

    • kDNSServiceType_SOA

      Запустите зоны полномочий.

    • kDNSServiceType_MB

      Доменное имя почтового ящика.

    • kDNSServiceType_MG

      Почтовый элемент группы.

    • kDNSServiceType_MR

      Почта переименовывает имя.

    • kDNSServiceType_NULL

      Нулевая ресурсная запись.

    • kDNSServiceType_WKS

      Известная служба.

    • kDNSServiceType_PTR

      Указатель доменного имени.

    • kDNSServiceType_HINFO

      Информация об узле.

    • kDNSServiceType_MINFO

      Информация о почтовых ящиках.

    • kDNSServiceType_MX

      Почтовая маршрутная информация.

    • kDNSServiceType_TXT

      Одна или более текстовых строк (НЕ «нуль или более...»).

    • kDNSServiceType_RP

      Ответственное лицо.

    • kDNSServiceType_AFSDB

      База данных ячейки AFS.

    • kDNSServiceType_X25

      Адрес вызова X_25.

    • kDNSServiceType_ISDN

      ISDN, вызывающий адрес.

    • kDNSServiceType_RT

      Маршрутизатор.

    • kDNSServiceType_NSAP

      Адрес NSAP.

    • kDNSServiceType_NSAP_PTR

      Инвертируйте (осуждаемый) поиск NSAP.

    • kDNSServiceType_SIG

      Подпись безопасности.

    • kDNSServiceType_KEY

      Ключ защиты.

    • kDNSServiceType_PX

      Почтовое отображение X.400.

    • kDNSServiceType_GPOS

      Географическая (изъятая) позиция.

    • kDNSServiceType_AAAA

      Адрес IPv6.

    • kDNSServiceType_LOC

      Информация о расположении.

    • kDNSServiceType_NXT

      Следующий домен (безопасность).

    • kDNSServiceType_EID

      Идентификатор конечной точки.

    • kDNSServiceType_NIMLOC

      Локатор Нимрода.

    • kDNSServiceType_SRV

      Выбор сервера.

    • kDNSServiceType_ATMA

      Адрес ATM

    • kDNSServiceType_NAPTR

      Именование полномочий PoinTeR

    • kDNSServiceType_KX

      Ключевой Exchange

    • kDNSServiceType_CERT

      Запись сертификации

    • kDNSServiceType_A6

      Адрес IPv6 (осужден)

    • kDNSServiceType_DNAME

      Нетерминальный DNAME (для IPv6)

    • kDNSServiceType_SINK

      (Экспериментальная) раковина

    • kDNSServiceType_OPT

      Опция EDNS0 (метаRR)

    • kDNSServiceType_APL

      Список префикса адреса

    • kDNSServiceType_DS

      Подписывающее лицо делегации

    • kDNSServiceType_SSHFP

      Ключевой цифровой отпечаток SSH

    • kDNSServiceType_IPSECKEY

      IPSECKEY

    • kDNSServiceType_RRSIG

      RRSIG

    • kDNSServiceType_NSEC

      Отказ существования

    • kDNSServiceType_DNSKEY

      DNSKEY

    • kDNSServiceType_DHCID

      Идентификатор клиента DHCP

    • kDNSServiceType_NSEC3

      Хешированный аутентифицируемый отказ существования

    • kDNSServiceType_NSEC3PARAM

      Хешированный аутентифицируемый отказ существования

    • kDNSServiceType_HIP

      Протокол идентификационных данных узла

    • kDNSServiceType_SPF

      Платформа политики отправителя для электронной почты

    • kDNSServiceType_UINFO

      ЗАРЕЗЕРВИРОВАННЫЙ IANA

    • kDNSServiceType_UID

      ЗАРЕЗЕРВИРОВАННЫЙ IANA

    • kDNSServiceType_GID

      ЗАРЕЗЕРВИРОВАННЫЙ IANA

    • kDNSServiceType_UNSPEC

      ЗАРЕЗЕРВИРОВАННЫЙ IANA

    • kDNSServiceType_TKEY

      Ключ Transaction

    • kDNSServiceType_TSIG

      Подпись транзакции.

    • kDNSServiceType_IXFR

      Инкрементная зональная передача.

    • kDNSServiceType_AXFR

      Зона передачи полномочий.

    • kDNSServiceType_MAILB

      Записи почтового ящика передачи.

    • kDNSServiceType_MAILA

      Почтовые записи агента передачи.

    • kDNSServiceType_ANY

      Подстановочное соответствие.

    Обсуждение

    Значения для Классов DNS и Типов перечислены в RFC 1035 и доступны на каждом OS в его заголовочном файле DNS. К сожалению, каждый OS не имеет того же заголовочного файла, содержащего Класс DNS и константы Типа, и имена констант не являются непротиворечивыми. Например, BIND 8 использует «T_A», BIND 9 использует «ns_t_a», Windows использует «DNS_TYPE_A» и т.д. Поэтому эти константы также перечислены здесь, так, чтобы код с помощью DNS-SD, программирующего APIs, мог использовать эти константы, так, чтобы тот же код мог скомпилировать на всех наших поддерживаемых платформах.

  • Осуждаемый.

    Объявление

    Objective C

    enum { /*! MoreComing indicates to a callback that at least one more result is */ kDNSServiceFlagsMoreComing = 0x1, /*! */ kDNSServiceFlagsAdd = 0x2, /*! */ kDNSServiceFlagsDefault = 0x4, /*! Flag for specifying renaming behavior on name conflict when registering */ kDNSServiceFlagsNoAutoRename = 0x8, /*! */ kDNSServiceFlagsShared = 0x10, /*! */ kDNSServiceFlagsUnique = 0x20, /*! */ kDNSServiceFlagsBrowseDomains = 0x40, /*! */ kDNSServiceFlagsRegistrationDomains = 0x80, /*! Flag for creating a long-lived unicast query for the DNSServiceQueryRecord call. */ kDNSServiceFlagsLongLivedQuery = 0x100, /*! Flag for creating a record for which we will answer remote queries */ kDNSServiceFlagsAllowRemoteQuery = 0x200, /*! Flag for signifying that a query or registration should be performed exclusively via multicast */ kDNSServiceFlagsForceMulticast = 0x400, /*! @abstract Deprecated. */ kDNSServiceFlagsForce = 0x800 , // This flag is deprecated. /*! */ kDNSServiceFlagsKnownUnique = 0x800, /*! Flag for returning intermediate results. */ kDNSServiceFlagsReturnIntermediates = 0x1000, /*! A service registered with the NonBrowsable flag set can be resolved using */ kDNSServiceFlagsNonBrowsable = 0x2000, /*! For efficiency, clients that perform many concurrent operations may want to use a */ kDNSServiceFlagsShareConnection = 0x4000, /*! */ kDNSServiceFlagsSuppressUnusable = 0x8000, /*! */ kDNSServiceFlagsTimeout = 0x10000, /*! */ kDNSServiceFlagsIncludeP2P = 0x20000, /*! */ kDNSServiceFlagsWakeOnResolve = 0x40000, /*! */ kDNSServiceFlagsBackgroundTrafficClass = 0x80000, /*! */ kDNSServiceFlagsIncludeAWDL = 0x100000, /*! */ kDNSServiceFlagsValidate = 0x200000, /*! */ kDNSServiceFlagsSecure = 0x200010, /*! */ kDNSServiceFlagsInsecure = 0x200020, /*! */ kDNSServiceFlagsBogus = 0x200040, /*! */ kDNSServiceFlagsIndeterminate = 0x200080, /*! */ kDNSServiceFlagsUnicastResponse = 0x400000, /*! */ kDNSServiceFlagsValidateOptional = 0x800000, /*! */ kDNSServiceFlagsWakeOnlyService = 0x1000000, /* * This flag is meaningful only in DNSServiceBrowse. When set, * the system will stop issuing browse queries on the network once the number * of answers returned is one or more. It will issue queries on the network * again if the number of answers drops to zero. * This flag is for Apple internal use only. Third party developers * should not rely on this behavior being supported in any given software release. */ kDNSServiceFlagsThresholdOne = 0x2000000, /* * This flag is meaningful only in DNSServiceBrowse. When set, * the system will stop issuing browse queries on the network once the number * of answers has reached the threshold set for Finder. * It will issue queries on the network again if the number of answers drops below * this threshold. * This flag is for Apple internal use only. Third party developers * should not rely on this behavior being supported in any given software release. */ kDNSServiceFlagsThresholdFinder = 0x4000000, /* * When this flag is set in the client callback add or remove event, * it indicates that the browse answer threshold has been reached and no * browse requests will be generated on the network until the number of answers falls * below the threshold value. Add and remove events can still occur based * on incoming Bonjour traffic observed by the system. * The set of services return to the client is not guaranteed to represent the * entire set of services present on the network once the threshold has been reached. * * Note, while kDNSServiceFlagsThresholdReached and kDNSServiceFlagsThresholdOne * have the same value, there isn't a conflict because kDNSServiceFlagsThresholdReached * is only set in the callbacks and kDNSServiceFlagsThresholdOne is only set on * input to a DNSServiceBrowse call. */ kDNSServiceFlagsThresholdReached = kDNSServiceFlagsThresholdOne, };

    Константы

    • kDNSServiceFlagsMoreComing

      MoreComing указывает к обратному вызову, что, по крайней мере, еще один результат ставится в очередь и будет поставлен следующий сразу после этого. Когда флаг MoreComing установлен, приложения не должны сразу обновлять свой UI, потому что это может привести к большому уродливому мерцанию на экране и может потратить впустую много процессорного времени, неоднократно обновляющего экран с содержанием, тогда сразу стирающимся, много раз. Приложения должны ожидать, пока MoreComing не установлен, и затем обновите их UI, когда больше изменений не неизбежно.

      Когда MoreComing не установлен, который не означает, что больше не будет ответов EVER, просто что больше нет ответов, сразу доступных прямо сейчас в сейчас же. Если больше ответов станет доступным в будущем, то они будут поставлены, как обычно.

    • kDNSServiceFlagsAdd

      Указывает, что недавно обнаружен домен. Если НЕ набор, указывает «Удалять», т.е. домен больше не действителен. Используемый в доменном перечислении и обзоре/запросе отвечают обратным вызовам.

    • kDNSServiceFlagsDefault

      Указывает, что этот домен должен быть выбран по умолчанию. Применяется только к перечислению и только допустим в сочетании с, «Добавляют».

    • kDNSServiceFlagsNoAutoRename

      Флаг для указания поведения переименования на конфликте имен, когда регистрация несовместно использовала записи. По умолчанию конфликты имен автоматически обрабатываются путем переименования службы. NoAutoRename переопределяет это поведение - с этим набором флага, конфликты имен приведут к обратному вызову. Флаг NoAutorename только допустим, если имя явно указано при регистрации службы (т.е. имя по умолчанию не используется.)

    • kDNSServiceFlagsShared

      Флаг для регистрации частного лица записывает на связанном DNSServiceRef. Совместно использованный указывает, что могут быть многократные записи с этим именем в сети (например, записи PTR).

    • kDNSServiceFlagsUnique

      Указывает, что имя записи должно быть уникальным в сети (например, записи SRV).

    • kDNSServiceFlagsBrowseDomains

      Перечисляет домены, рекомендуемые для просмотра. Используемый для указания доменного перечисления вводят в DNSServiceEnumerateDomains.

    • kDNSServiceFlagsRegistrationDomains

      Перечисляет домены, рекомендуемые для регистрации. Используемый для указания доменного перечисления вводят в DNSServiceEnumerateDomains.

    • kDNSServiceFlagsLongLivedQuery

      Флаг для создания долгосрочной одноадресной передачи запрашивает для вызова DNSServiceQueryRecord.

    • kDNSServiceFlagsAllowRemoteQuery

      Флаг для создания записи, для которой мы ответим на удаленные запросы (запросы от узлов больше чем один транзитный участок далеко; узлы, не непосредственно подключенные к локальной ссылке).

    • kDNSServiceFlagsForceMulticast

      Флаг для выражения, что запрос или регистрация должны быть выполнены исключительно через многоадресную передачу DNS, даже для имени в домене (например, foo.apple.com.), который обычно подразумевал бы одноадресную передачу DNS.

    • kDNSServiceFlagsKnownUnique

      Клиент гарантирует, что рекордные имена уникальны, таким образом, мы можем пропустить отсылку первоначальных тестовых сообщений. Если конфликт обнаружен, разрешение конфликтов стандартного имени все еще сделано. В настоящее время только допустимый для вызова DNSServiceRegister.

    • kDNSServiceFlagsReturnIntermediates

      Флаг для возврата промежуточных результатов. Например, если результаты запроса в авторитетном NXDomain (имя не существует), тогда, что результат возвращается клиенту. Однако, запрос неявно не отменяется - это остается активным и если ответ впоследствии изменяется (например, потому что туннель VPN впоследствии установлен), тогда, что положительный результат будет все еще возвращен клиенту. Точно так же, если результаты запроса в записи CNAME, то в дополнение к следующему рекомендация CNAME, промежуточный результат CNAME также возвращается клиенту. Когда этот флаг не установлен, ошибки NXDomain не возвращаются, и записи CNAME сопровождаются тихо, не сообщая клиенту промежуточных шагов. (В более ранних сборках этот флаг кратко вызвали kDNSServiceFlagsReturnCNAME.)

    • kDNSServiceFlagsNonBrowsable

      Служба, зарегистрированная в наборе флага NonBrowsable, может быть разрешена с помощью DNSServiceResolve, но не будет поддающееся обнаружению использование DNSServiceBrowse. Это для случаев, где именем является фактически GUID; это найдено другими средними значениями; нет никакого преимущества для конечных пользователей к просмотру для нахождения длинного списка непрозрачного GUIDs. Используя NonBrowsable флаг создает SRV+TXT без стоимости также распространения связанной записи PTR.

    • kDNSServiceFlagsShareConnection

      Для эффективности клиенты, выполняющие много параллельных операций, могут хотеть использовать единственное Сокетное соединение Домена Unix с фоновым демоном, вместо того, чтобы иметь отдельное соединение для каждой независимой работы. Для использования этого режима клиенты сначала вызывают DNSServiceCreateConnection (&MainRef) для инициализации основного DNSServiceRef. Для каждой последующей работы, которая должна совместно использовать то же самое соединение, клиент копирует MainRef, и затем передает адрес той копии, устанавливая флаг ShareConnection, чтобы сказать библиотеке, что этим DNSServiceRef не является типичный неинициализированный DNSServiceRef; это - копия существующего DNSServiceRef, информация о соединении которого должна быть снова использована.

      Например:

      • DNSServiceErrorType error;
      • DNSServiceRef MainRef;
      • error = DNSServiceCreateConnection(&MainRef);
      • if (error) ...
      • DNSServiceRef BrowseRef = MainRef; // Important: COPY the primary DNSServiceRef first...
      • error = DNSServiceBrowse(&BrowseRef, kDNSServiceFlagsShareConnection, ...); // then use the copy
      • if (error) ...
      • ...
      • DNSServiceRefDeallocate(BrowseRef); // Terminate the browse operation
      • DNSServiceRefDeallocate(MainRef); // Terminate the shared connection

      Примечания:

      1. Коллективный kDNSServiceFlagsMoreComing отметьте, Когда обратные вызовы будут вызваны с помощью совместно используемого DNSServiceRef, kDNSServiceFlagsMoreComing флаг применяется коллективно к *все* активные операции, совместно использующие тот же родительский DNSServiceRef. Если флаг MoreComing установлен, это означает, что существует больше результатов, поставленных в очередь на этом родительском DNSServiceRef, но не обязательно больше результатов для этой определенной функции обратного вызова. Импликация этого для клиентских программистов - то, что, когда обратный вызов вызывается с набором флага MoreComing, код должен обновить свои внутренние структуры данных с новым результатом и установить переменную, указывающую, что должен быть обновлен его UI. Затем позже когда обратный вызов в конечном счете вызывается с флагом MoreComing не набор, код должен обновить *, все* лишают новизны элементы UI, связанные с тем совместно используемым родительским DNSServiceRef, которым нужно обновление, не только элементы UI, связанные с определенным обратным вызовом, который, оказалось, был последним, который будет вызван.

      2. Отмена операций и kDNSServiceFlagsMoreComing Каждый раз, когда Вы отменяете любую работу, для которой Вы задержали обновления UI, ожидающие из-за a kDNSServiceFlagsMoreComing флаг, необходимо выполнить те задержанные обновления UI. Это вызвано тем, что, после отмены работы, Вы больше не можете ожидать обратного вызова *без* набор MoreComing, чтобы сказать о выполнении задержанных обновлений UI (работа была отменена, таким образом, больше не будет обратных вызовов). Импликация коллектива kDNSServiceFlagsMoreComing флаг для общих соединений - то, что эта инструкция применяется более широко - любое время, Вы отменяете работу на общем соединении, необходимо выполнить, все задержали обновления UI для всех операций, совместно использующих то соединение. Это вызвано тем, что флаг MoreComing, возможно, относился к событиям, прибывающим для работы, которую Вы отменили, который не будет теперь прибывать, потому что была отменена работа.

      3. Только совместно используйте DNSServiceRef, создаваемый с Вызовом DNSServiceCreateConnection, DNSServiceCreateConnection (&ref) создает специальный общий DNSServiceRef. DNSServiceRef, создаваемый другими вызовами как DNSServiceBrowse или DNSServiceResolve не может быть совместно использован путем копирования их и использования kDNSServiceFlagsShareConnection.

      4. Не Удваивайтесь - Освобождают Вызов, DNSServiceRefDeallocate (касательно) для DNSServiceRef определенной работы завершает просто ту работу. Вызов DNSServiceRefDeallocate (касательно) для основного совместно используемого DNSServiceRef (родительский DNSServiceRef, первоначально создаваемый DNSServiceCreateConnection (&ref)) автоматически, завершает общее соединение и все операции, все еще использовавшие его. После выполнения этого тогда не пытайтесь освободить любой остающийся подчиненный DNSServiceRef. Память, используемая теми подчиненными DNSServiceRef, была уже освобождена, таким образом, любая попытка сделать DNSServiceRefDeallocate (или любая другая работа) на них приведет к доступам к освобожденной памяти, приводя к катастрофическим отказам или другим одинаково нежелательным результатам.

      5. Потокобезопасность dns_sd.h API не предполагает определенной модели потоков, и следовательно не делает никакой собственной блокировки (который потребовал бы соединения некоторой определенной библиотеки поточной обработки). Если клиентский код вызывает подпрограммы API на том же DNSServiceRef одновременно от многократных потоков, это - ответственность клиента использовать блокировку mutext или принять подобные надлежащие меры предосторожности для сериализации тех вызовов.

    • kDNSServiceFlagsSuppressUnusable

      Этот флаг значим только в DNSServiceQueryRecord, подавляющем неприменимые запросы на проводе. Если «имя хоста» является глобальной одноадресной передачей имя хоста DNS (т.е. не «.local». имя), но этот узел не имеет никакого routable адреса IPv6, тогда вызов не попытается искать адреса IPv6 для «имени хоста», так как любые адреса, которые это нашло, вряд ли будут иметь любое применение так или иначе. Точно так же, если этот узел не будет иметь никакого routable адреса IPv4, то вызов не попытается искать адреса IPv4 для «имени хоста».

    • kDNSServiceFlagsTimeout

      Когда передано DNSServiceQueryRecord или DNSServiceGetAddrInfo, запрос останавливается после определенного числа секунд протекли. Время, в которое останавливается запрос, определяется системой и не может быть сконфигурировано пользователем. Запрос останавливается независимо от того, был ли ответ дан ранее или нет. Когда запрос останавливается, обратный вызов вызывают с кодом ошибки kDNSServiceErr_Timeout и NULL sockaddr возвращается для DNSServiceGetAddrInfo и нулевая длина rdata возвращается для DNSServiceQueryRecord.

    • kDNSServiceFlagsIncludeP2P

      Включайте интерфейсы P2P когда kDNSServiceInterfaceIndexAny указан. По умолчанию, указание kDNSServiceInterfaceIndexAny не включает интерфейсы P2P.

    • kDNSServiceFlagsWakeOnResolve

      Этот флаг значим только в DNSServiceResolve. Когда установлено, это пытается отправить волшебный пакет для пробуждения клиента.

    • kDNSServiceFlagsBackgroundTrafficClass

      Этот флаг значим в DNSServiceBrowse, DNSServiceGetAddrInfo, DNSServiceQueryRecord и DNSServiceResolve. Когда установлено, это использует класс фонового трафика для пакетов та служба запрос.

    • kDNSServiceFlagsIncludeAWDL

      Включайте интерфейс AWDL когда kDNSServiceInterfaceIndexAny указан.

    • kDNSServiceFlagsValidate

      Этот флаг значим в DNSServiceGetAddrInfo и DNSServiceQueryRecord. Это - флаг ONLY, который и допустим как ввод к APIs и также как вывод посредством обратных вызовов в APIs.

      Когда этот флаг передается DNSServiceQueryRecord и DNSServiceGetAddrInfo для разрешения одноадресных имен, ответ проверен с помощью DNSSEC. Результаты проверки поставлены с помощью поля флагов в обратном вызове и kDNSServiceFlagsValidate отмечен во флагах, чтобы указать, что состояние DNSSEC также доступно. Когда обратный вызов вызывают для поставки результатов запроса, результаты проверки могут или могут не быть доступными. Если это не поставлено вместе с результатами, состояние проверки поставлено, когда завершается проверка.

      Когда результаты проверки поставлены в обратном вызове, он обозначен путем маркировки флагов с kDNSServiceFlagsValidate и kDNSServiceFlagsAdd вместе с флагами состояния DNSSEC (описанный ниже) и NULL sockaddr возвращается для DNSServiceGetAddrInfo, и нулевая длина rdata возвращается для DNSServiceQueryRecord. Результаты проверки DNSSEC для целого RRSet и не только отдельных записей, поставленных в обратном вызове. Когда kDNSServiceFlagsAdd не установлен во флагах, приложения должны неявно предположить, что состояние DNSSEC RRSet, поставленного вплоть до той точки, не допустимо больше, пока с другим обратным вызовом не вызывают kDNSServiceFlagsAdd и kDNSServiceFlagsValidate.

      kDNSServiceFlagsValidate, kDNSServiceFlagsSecure, kDNSServiceFlagsInsecure, и kDNSServiceFlagsBogus флаги указывают состояние проверки DNSSEC и отмеченный в поле флагов обратного вызова. Когда любой из этих четырех флагов установлен, kDNSServiceFlagsValidate также установлен. Для проверки состояния проверки другие применимые выходные флаги должны быть замаскированы. Посмотрите kDNSServiceOutputFlags ниже.

    • kDNSServiceFlagsSecure

      Ответ был проверен путем проверки всего signaures в ответе и смог создать цепочку успешной аутентификации, запускающуюся с известной доверительной привязки.

    • kDNSServiceFlagsInsecure

      Цепочка доверия не может быть создана, запустившись с известного, доверяют привязку ответу.

    • kDNSServiceFlagsBogus

      Если ответ не может быть проверен, чтобы быть безопасным вследствие подписей с истекшим сроком, недостающих подписей, и т.д., то результаты считаются поддельными.

    • kDNSServiceFlagsIndeterminate

      Нет никакой допустимой доверительной привязки, которая может использоваться, чтобы определить, безопасен ли ответ или нет.

    • kDNSServiceFlagsUnicastResponse

      Запросите одноадресный ответ на запрос.

    • kDNSServiceFlagsValidateOptional

      Этот флаг идентичен kDNSServiceFlagsValidate за исключением случая, где не может быть проверен ответ. Если этот флаг будет установлен в DNSServiceQueryRecord или DNSServiceGetAddrInfo, то записи DNSSEC будут требовать на проверку. Если они не могут быть получены по некоторым причинам во время проверки (например, зона не подписывается, зона подписывается, но не может быть прослежена до корня, рекурсивный сервер не понимает DNSSEC и т.д.), то это отступает к поведению по умолчанию, где проверка не выполняется, и никакие результаты DNSSEC не предоставлены.

      Если зона подписывается и существует допустимый путь к известной доверительной привязке, сконфигурированной в системе, и приложение требует проверки DNSSEC независимо от осведомленности DNSSEC в текущей сети, то эта опция MUST не используется. Это только предназначается, чтобы использоваться во время переходного периода, где различные узлы, участвующие в разрешении DNS, могут не понять DNSSEC или управляемый должным образом (например, недостающая запись DS), но все еще хотеть быть в состоянии разрешить DNS успешно.

    • kDNSServiceFlagsWakeOnlyService

      Этот флаг значим только в DNSServiceRegister. Когда установлено, служба не регистрируется в прокси-сервере сна во время сна.

    Обсуждение

    Большинство API-функций DNS-SD и обратных вызовов включают параметр DNSServiceFlags. Как правило любой данный бит в 32-разрядном поле флагов имеет определенное фиксированное значение, независимо от функции или используемого обратного вызова. Для любой заданной функции или обратного вызова, обычно только подмножество возможных флагов значимо, и все другие должны быть нулем. Раздел обсуждения для каждого вызова API описывает, какие флаги допустимы для того вызова и обратного вызова. В некоторых случаях, для определенного вызова, может случиться так, что никакие флаги в настоящее время не определяются, когда параметр DNSServiceFlags существует просто для разрешения будущего расширения. Во всех случаях разработчики должны ожидать, что в будущих выпусках, возможно, что новые флаговые значения будут определены, и код записи с этим в памяти. Например, тестирующий код

    • if (flags == kDNSServiceFlagsAdd) ...

    если в будущем выпуске другой бит в 32-разрядном поле флагов будет также установлен, перестанет работать. Надежный способ протестировать, установлен ли определенный бит, не с тестом равенства, а с поразрядной маской:

    • if (flags & kDNSServiceFlagsAdd) ...

    За исключением kDNSServiceFlagsValidate, каждый флаг может быть допустимым (быть установленным) EITHER только как ввод к одному из DNSService* (), APIs OR только как вывод (обеспечьте состояние) посредством любого из используемых обратных вызовов. Например, kDNSServiceFlagsAdd может быть установлен только как вывод в обратном вызове, тогда как kDNSServiceFlagsIncludeP2P может быть установлен только как ввод к DNSService* () APIs. См. комментарии kDNSServiceFlagsValidate определенный в этом перечислении.

  • Возможные протоколы для DNSServiceNATPortMappingCreate.

    Объявление

    Objective C

    enum { /* for DNSServiceGetAddrInfo () */ kDNSServiceProtocol_IPv4 = 0x01, /*! IPv4 protocol. */ kDNSServiceProtocol_IPv6 = 0x02, /*! IPv6 protocol. */ /* 0x04 and x08 reserved for future internetwork protocols */ /* for DNSServiceNATPortMappingCreate () */ kDNSServiceProtocol_UDP = 0x10, /*! UDP protocol. */ kDNSServiceProtocol_TCP = 0x20 /*! TCP protocol. */ /* 0x40 and x80 reserved for future transport protocols, e.g. SCTP [RFC 2960] * or DCCP [RFC 4340]. If future NAT gateways are created that support port * mappings for these protocols, new constants will be defined here. */ };

    Константы

    • kDNSServiceProtocol_IPv4

      Протокол IPv4.

    • kDNSServiceProtocol_IPv6

      Протокол IPv6.

    • kDNSServiceProtocol_UDP

      Протокол UDP.

    • kDNSServiceProtocol_TCP

      Протокол TCP.