libpurple/dnssrv.h

Thu, 13 Feb 2014 20:11:13 +0100

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Thu, 13 Feb 2014 20:11:13 +0100
changeset 35559
061c2ae3679c
parent 35487
494f09f7f331
child 35572
5c4846317f2f
child 37094
84873ce721dc
permissions
-rw-r--r--

Fix the build again

/* purple
 *
 * Copyright (C) 2005, Thomas Butter <butter@uni-mannheim.de>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
 */

#ifndef _PURPLE_DNSSRV_H
#define _PURPLE_DNSSRV_H
/**
 * SECTION:dnssrv
 * @section_id: libpurple-dnssrv
 * @short_description: <filename>dnssrv.h</filename>
 * @title: DNS SRV Utilities
 */

typedef struct _PurpleSrvTxtQueryData PurpleSrvTxtQueryData;
typedef struct _PurpleSrvResponse PurpleSrvResponse;
typedef struct _PurpleTxtResponse PurpleTxtResponse;
typedef struct _PurpleSrvTxtQueryUiOps PurpleSrvTxtQueryUiOps;

#include <glib.h>

enum PurpleDnsType {
	PurpleDnsTypeTxt = 16,
	PurpleDnsTypeSrv = 33
};

struct _PurpleSrvResponse {
	char hostname[256];
	int port;
	int weight;
	int pref;
};

struct _PurpleTxtResponse {
	char *content;
};

typedef void  (*PurpleSrvTxtQueryResolvedCallback) (PurpleSrvTxtQueryData *query_data, GList *records);
typedef void  (*PurpleSrvTxtQueryFailedCallback) (PurpleSrvTxtQueryData *query_data, const gchar *error_message);

/**
 * PurpleSrvTxtQueryUiOps:
 * @resolve: implemented, return %TRUE if the UI takes responsibility for SRV
 *           queries. When returning %FALSE, the standard implementation is
 *           used. These callbacks <emphasis>MUST</emphasis> be called
 *           asynchronously.
 * @destroy: Called just before @query_data is freed; this should cancel any
 *           further use of @query_data the UI would make. Unneeded if @resolve
 *           is not implemented.
 *
 * SRV Request UI operations;  UIs should implement this if they want to do SRV
 * lookups themselves, rather than relying on the core.
 *
 * See <link linkend="chapter-ui-ops">List of <literal>UiOps</literal> Structures</link>
 */
struct _PurpleSrvTxtQueryUiOps
{
	gboolean (*resolve)(PurpleSrvTxtQueryData *query_data,
	                    PurpleSrvTxtQueryResolvedCallback resolved_cb,
	                    PurpleSrvTxtQueryFailedCallback failed_cb);

	void (*destroy)(PurpleSrvTxtQueryData *query_data);

	/*< private >*/
	void (*_purple_reserved1)(void);
	void (*_purple_reserved2)(void);
	void (*_purple_reserved3)(void);
	void (*_purple_reserved4)(void);
};

/**
 * PurpleSrvCallback:
 * @resp: An array of PurpleSrvResponse of size results.  The array
 *        is sorted based on the order described in the DNS SRV RFC.
 *        Users of this API should try each record in resp in order,
 *        starting at the beginning.
 */
typedef void (*PurpleSrvCallback)(PurpleSrvResponse *resp, int results, gpointer data);

/**
 * PurpleTxtCallback:
 * @responses:   A GList of PurpleTxtResponse objects.
 * @data:        The extra data passed to purple_txt_resolve.
 *
 * Callback that returns the data retrieved from a DNS TXT lookup.
 */
typedef void (*PurpleTxtCallback)(GList *responses, gpointer data);

G_BEGIN_DECLS

/**
 * purple_srv_resolve:
 * @account:   The account that the query is being done for (or NULL)
 * @protocol:  Name of the protocol (e.g. "sip")
 * @transport: Name of the transport ("tcp" or "udp")
 * @domain:    Domain name to query (e.g. "blubb.com")
 * @cb:        A callback which will be called with the results
 * @extradata: Extra data to be passed to the callback
 *
 * Queries an SRV record.
 *
 * Returns: NULL if there was an error, otherwise return a reference to
 *         a data structure that can be used to cancel the pending
 *         DNS query, if needed.
 */
PurpleSrvTxtQueryData *purple_srv_resolve(PurpleAccount *account, const char *protocol, const char *transport, const char *domain, PurpleSrvCallback cb, gpointer extradata);

/**
 * purple_txt_resolve:
 * @account:   The account that the query is being done for (or NULL)
 * @owner:     Name of the protocol (e.g. "_xmppconnect")
 * @domain:    Domain name to query (e.g. "blubb.com")
 * @cb:        A callback which will be called with the results
 * @extradata: Extra data to be passed to the callback
 *
 * Queries an TXT record.
 *
 * Returns: NULL if there was an error, otherwise return a reference to
 *         a data structure that can be used to cancel the pending
 *         DNS query, if needed.
 */
PurpleSrvTxtQueryData *purple_txt_resolve(PurpleAccount *account, const char *owner, const char *domain, PurpleTxtCallback cb, gpointer extradata);

/**
 * purple_txt_response_get_content:
 * @response:  The TXT response record
 *
 * Get the value of the current TXT record.
 *
 * Returns: The value of the current TXT record.
 */
const gchar *purple_txt_response_get_content(PurpleTxtResponse *response);

/**
 * purple_txt_response_destroy:
 * @response: The PurpleTxtResponse to destroy.
 *
 * Destroy a TXT DNS response object.
 */
void purple_txt_response_destroy(PurpleTxtResponse *response);

/**
 * purple_srv_txt_query_destroy:
 * @query_data: The SRV/TXT query to cancel.  This data structure
 *        is freed by this function.
 *
 * Cancel a SRV/TXT query and destroy the associated data structure.
 */
void purple_srv_txt_query_destroy(PurpleSrvTxtQueryData *query_data);

/**
 * purple_srv_txt_query_set_ui_ops:
 * @ops: The UI operations structure.
 *
 * Sets the UI operations structure to be used when doing a SRV/TXT
 * resolve.  The UI operations need only be set if the UI wants to
 * handle the resolve itself; otherwise, leave it as NULL.
 */
void purple_srv_txt_query_set_ui_ops(PurpleSrvTxtQueryUiOps *ops);

/**
 * purple_srv_txt_query_get_ui_ops:
 *
 * Returns the UI operations structure to be used when doing a SRV/TXT
 * resolve.
 *
 * Returns: The UI operations structure.
 */
PurpleSrvTxtQueryUiOps *purple_srv_txt_query_get_ui_ops(void);

/**
 * purple_srv_txt_query_get_query:
 * @query_data: The SRV/TXT query
 *
 * Get the query from a PurpleSrvTxtQueryData
 *
 * Returns: The query.
 */
char *purple_srv_txt_query_get_query(PurpleSrvTxtQueryData *query_data);

/**
 * purple_srv_txt_query_get_query_type:
 * @query_data: The query
 *
 * Get the type from a PurpleSrvTxtQueryData (TXT or SRV)
 *
 * Returns: The query type.
 */
int purple_srv_txt_query_get_query_type(PurpleSrvTxtQueryData *query_data);

G_END_DECLS

#endif /* _PURPLE_DNSSRV_H */

mercurial