?? resolver.h
字號:
* @param pf Pool factory where the memory pool will be created from.
* @param name Optional resolver name to identify the instance in
* the log.
* @param options Optional options, must be zero for now.
* @param timer Optional timer heap instance to be used by the resolver.
* If timer heap is not specified, an internal timer will be
* created, and application would need to poll the resolver
* periodically.
* @param ioqueue Optional I/O Queue instance to be used by the resolver.
* If ioqueue is not specified, an internal one will be
* created, and application would need to poll the resolver
* periodically.
* @param p_resolver Pointer to receive the resolver instance.
*
* @return PJ_SUCCESS on success, or the appropriate error code,
*/
PJ_DECL(pj_status_t) pj_dns_resolver_create(pj_pool_factory *pf,
const char *name,
unsigned options,
pj_timer_heap_t *timer,
pj_ioqueue_t *ioqueue,
pj_dns_resolver **p_resolver);
/**
* Update the name servers for the DNS resolver. The name servers MUST be
* configured before any resolution can be done. The order of nameservers
* specifies their priority; the first name server will be tried first
* before the next in the list.
*
* @param resolver The resolver instance.
* @param count Number of name servers in the array.
* @param servers Array of name server IP addresses or hostnames. If
* hostname is specified, the hostname must be resolvable
* with pj_gethostbyname().
* @param ports Optional array of ports. If this argument is NULL,
* the nameserver will use default port.
*
* @return PJ_SUCCESS on success, or the appropriate error code,
*/
PJ_DECL(pj_status_t) pj_dns_resolver_set_ns(pj_dns_resolver *resolver,
unsigned count,
const pj_str_t servers[],
const pj_uint16_t ports[]);
/**
* Get the resolver current settings.
*
* @param resolver The resolver instance.
* @param st Buffer to be filled up with resolver settings.
*
* @return The query timeout setting, in seconds.
*/
PJ_DECL(pj_status_t) pj_dns_resolver_get_settings(pj_dns_resolver *resolver,
pj_dns_settings *st);
/**
* Modify the resolver settings. Application should initialize the settings
* by retrieving current settings first before applying new settings, to
* ensure that all fields are initialized properly.
*
* @param resolver The resolver instance.
* @param st The resolver settings.
*
* @return PJ_SUCCESS on success, or the appropriate error code,
*/
PJ_DECL(pj_status_t) pj_dns_resolver_set_settings(pj_dns_resolver *resolver,
const pj_dns_settings *st);
/**
* Poll for events from the resolver. This function MUST be called
* periodically when the resolver is using it's own timer or ioqueue
* (in other words, when NULL is specified as either \a timer or
* \a ioqueue argument in #pj_dns_resolver_create()).
*
* @param resolver The resolver instance.
* @param timeout Maximum time to wait for event occurence. If this
* argument is NULL, this function will wait forever
* until events occur.
*/
PJ_DECL(void) pj_dns_resolver_handle_events(pj_dns_resolver *resolver,
const pj_time_val *timeout);
/**
* Destroy DNS resolver instance.
*
* @param resolver The resolver object to be destryed
* @param notify If non-zero, all pending asynchronous queries will be
* cancelled and its callback will be called. If FALSE,
* then no callback will be called.
*
* @return PJ_SUCCESS on success, or the appropriate error code,
*/
PJ_DECL(pj_status_t) pj_dns_resolver_destroy(pj_dns_resolver *resolver,
pj_bool_t notify);
/**
* Create and start asynchronous DNS query for a single resource. Depending
* on whether response cache is available, this function will either start
* an asynchronous DNS query or call the callback immediately.
*
* If response is not available in the cache, an asynchronous query will be
* started, and callback will be called at some time later when the query
* completes. If \a p_query argument is not NULL, it will be filled with
* the asynchronous query object.
*
* If response is available in the cache, the callback will be called
* immediately before this function returns. In this case, if \a p_query
* argument is not NULL, the value will be set to NULL since no new query
* is started.
*
* @param resolver The resolver object.
* @param name The name to be resolved.
* @param type The type of resource (see #pj_dns_type constants).
* @param options Optional options, must be zero for now.
* @param cb Callback to be called when the query completes,
* either successfully or with failure.
* @param user_data Arbitrary user data to be associated with the query,
* and which will be given back in the callback.
* @param p_query Optional pointer to receive the query object, if one
* was started. If this pointer is specified, a NULL may
* be returned if response cache is available immediately.
*
* @return PJ_SUCCESS if either an asynchronous query has been
* started successfully or response cache is available and
* the user callback has been called.
*/
PJ_DECL(pj_status_t) pj_dns_resolver_start_query(pj_dns_resolver *resolver,
const pj_str_t *name,
int type,
unsigned options,
pj_dns_callback *cb,
void *user_data,
pj_dns_async_query **p_query);
/**
* Cancel a pending query.
*
* @param query The pending asynchronous query to be cancelled.
* @param notify If non-zero, the callback will be called with failure
* status to notify that the query has been cancelled.
*
* @return PJ_SUCCESS on success, or the appropriate error code,
*/
PJ_DECL(pj_status_t) pj_dns_resolver_cancel_query(pj_dns_async_query *query,
pj_bool_t notify);
/**
* Put the specified DNS packet into DNS cache. This function is mainly used
* for testing the resolver, however it can also be used to inject entries
* into the resolver.
*
* The packet MUST contain either answer section or query section so that
* it can be indexed.
*
* @param resolver The resolver instance.
* @param pkt DNS packet to be added to the DNS cache. If the packet
* matches existing entry, it will update the entry.
* @param set_ttl If the value is PJ_FALSE, the entry will not expire
* (so use with care). Otherwise cache expiration will be
* calculated based on the TTL of the answeres.
*
* @return PJ_SUCCESS on success, or the appropriate error code.
*/
PJ_DECL(pj_status_t) pj_dns_resolver_add_entry(pj_dns_resolver *resolver,
const pj_dns_parsed_packet *pkt,
pj_bool_t set_ttl);
/**
* Get the total number of response in the response cache.
*
* @param resolver The resolver instance.
*
* @return Current number of entries being stored in the response
* cache.
*/
PJ_DECL(unsigned) pj_dns_resolver_get_cached_count(pj_dns_resolver *resolver);
/**
* Dump resolver state to the log.
*
* @param resolver The resolver instance.
* @param detail Will print detailed entries.
*/
PJ_DECL(void) pj_dns_resolver_dump(pj_dns_resolver *resolver,
pj_bool_t detail);
/**
* @}
*/
PJ_END_DECL
#endif /* __PJLIB_UTIL_RESOLVER_H__ */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -