pidgin/pidgin
Clone
Summary
Browse
Changes
Graph
Route GLib debug logging directly to the Finch debug window
2021-10-18, Elliott Sales de Andrade
1896a80ff8e3
Route GLib debug logging directly to the Finch debug window
Instead of flowing through purple debug, this merges some bits of the existing GLib log handler, and the purple debug printer.
Testing Done:
Open the Debug window an see some `GLib-*` outputs.
Reviewed at https://reviews.imfreedom.org/r/1057/
/*
* purple - Jabber Protocol Plugin
*
* Purple is the legal property of its developers, whose names are too numerous
* to list here. Please refer to the COPYRIGHT file distributed with this
* source distribution.
*
* 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_JABBER_CAPS_H
#define PURPLE_JABBER_CAPS_H
typedef
struct
_JabberCapsClientInfo
JabberCapsClientInfo
;
#include
"jabber.h"
/* Implementation of XEP-0115 - Entity Capabilities */
typedef
struct
_JabberCapsNodeExts
JabberCapsNodeExts
;
typedef
struct
{
const
char
*
node
;
const
char
*
ver
;
const
char
*
hash
;
}
JabberCapsTuple
;
struct
_JabberCapsClientInfo
{
GList
*
identities
;
/* JabberIdentity */
GList
*
features
;
/* char * */
GList
*
forms
;
/* PurpleXmlNode * */
JabberCapsNodeExts
*
exts
;
const
JabberCapsTuple
tuple
;
};
/*
* This stores a set of exts "known" for a specific node (which indicates
* a specific client -- for reference, Pidgin, Finch, Meebo, et al share one
* node.) In XEP-0115 v1.3, exts are used for features that may or may not be
* present at a given time (PEP things, buzz might be disabled, etc).
*
* This structure is shared among all JabberCapsClientInfo instances matching
* a specific node (if the capstable key->hash == NULL, which indicates that
* the ClientInfo is using v1.3 caps as opposed to v1.5 caps).
*
* It's only exposed so that jabber_resource_has_capability can use it.
* Everyone else, STAY AWAY!
*/
struct
_JabberCapsNodeExts
{
guint
ref
;
GHashTable
*
exts
;
/* char *ext_name -> GList *features */
};
typedef
void
(
*
jabber_caps_get_info_cb
)(
JabberCapsClientInfo
*
info
,
GList
*
exts
,
gpointer
user_data
);
void
jabber_caps_init
(
void
);
void
jabber_caps_uninit
(
void
);
/**
* Check whether all of the exts in a char* array are known to the given info.
*/
gboolean
jabber_caps_exts_known
(
const
JabberCapsClientInfo
*
info
,
char
**
exts
);
/**
* Main entity capabilities function to get the capabilities of a contact.
*
* The callback will be called synchronously if we already have the
* capabilities for the specified (node,ver,hash) (and, if exts are specified,
* if we know what each means)
*
* @param exts A g_strsplit'd (NULL-terminated) array of strings. This
* function is responsible for freeing it.
*/
void
jabber_caps_get_info
(
JabberStream
*
js
,
const
char
*
who
,
const
char
*
node
,
const
char
*
ver
,
const
char
*
hash
,
char
**
exts
,
jabber_caps_get_info_cb
cb
,
gpointer
user_data
);
/**
* Takes a JabberCapsClientInfo pointer and returns the caps hash according to
* XEP-0115 Version 1.5.
*
* @param info A JabberCapsClientInfo pointer.
* @param hash_type GChecksumType to be used. Either sha-1 or md5.
* @return The base64 encoded SHA-1 hash; must be freed by caller
*/
gchar
*
jabber_caps_calculate_hash
(
JabberCapsClientInfo
*
info
,
GChecksumType
hash_type
);
/**
* Calculate SHA1 hash for own featureset.
*/
void
jabber_caps_calculate_own_hash
(
JabberStream
*
js
);
/** Get the current caps hash.
* @ret hash
**/
const
gchar
*
jabber_caps_get_own_hash
(
JabberStream
*
js
);
/**
* Broadcast a new calculated hash using a <presence> stanza.
*/
void
jabber_caps_broadcast_change
(
void
);
/**
* Parse the <query/> element from an IQ stanza into a JabberCapsClientInfo
* struct.
*
* Exposed for tests
*
* @param query The 'query' element from an IQ reply stanza.
* @returns A JabberCapsClientInfo struct, or NULL on error
*/
JabberCapsClientInfo
*
jabber_caps_parse_client_info
(
PurpleXmlNode
*
query
);
#endif
/* PURPLE_JABBER_CAPS_H */