* 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
* 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
* An opaque structure representing a network candidate (IP Address and port
struct _PurpleMediaCandidate
PurpleMediaNetworkProtocol proto;
PurpleMediaCandidateType type;
} PurpleMediaCandidatePrivate;
G_DEFINE_TYPE_WITH_PRIVATE(PurpleMediaCandidate, purple_media_candidate,
purple_media_candidate_init(PurpleMediaCandidate *info)
PurpleMediaCandidatePrivate *priv =
purple_media_candidate_get_instance_private(info);
priv->proto = PURPLE_MEDIA_NETWORK_PROTOCOL_UDP;
priv->type = PURPLE_MEDIA_CANDIDATE_TYPE_HOST;
purple_media_candidate_finalize(GObject *info)
PurpleMediaCandidatePrivate *priv =
purple_media_candidate_get_instance_private(
PURPLE_MEDIA_CANDIDATE(info));
g_free(priv->foundation);
G_OBJECT_CLASS(purple_media_candidate_parent_class)->finalize(info);
purple_media_candidate_set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
PurpleMediaCandidatePrivate *priv;
g_return_if_fail(PURPLE_IS_MEDIA_CANDIDATE(object));
priv = purple_media_candidate_get_instance_private(
PURPLE_MEDIA_CANDIDATE(object));
g_free(priv->foundation);
priv->foundation = g_value_dup_string(value);
priv->component_id = g_value_get_uint(value);
priv->ip = g_value_dup_string(value);
priv->port = g_value_get_uint(value);
priv->base_ip = g_value_dup_string(value);
priv->base_port = g_value_get_uint(value);
priv->proto = g_value_get_enum(value);
priv->priority = g_value_get_uint(value);
priv->type = g_value_get_enum(value);
priv->username = g_value_dup_string(value);
priv->password = g_value_dup_string(value);
priv->ttl = g_value_get_uint(value);
G_OBJECT_WARN_INVALID_PROPERTY_ID(
purple_media_candidate_get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
PurpleMediaCandidatePrivate *priv;
g_return_if_fail(PURPLE_IS_MEDIA_CANDIDATE(object));
priv = purple_media_candidate_get_instance_private(
PURPLE_MEDIA_CANDIDATE(object));
g_value_set_string(value, priv->foundation);
g_value_set_uint(value, priv->component_id);
g_value_set_string(value, priv->ip);
g_value_set_uint(value, priv->port);
g_value_set_string(value, priv->base_ip);
g_value_set_uint(value, priv->base_port);
g_value_set_enum(value, priv->proto);
g_value_set_uint(value, priv->priority);
g_value_set_enum(value, priv->type);
g_value_set_string(value, priv->username);
g_value_set_string(value, priv->password);
g_value_set_uint(value, priv->ttl);
G_OBJECT_WARN_INVALID_PROPERTY_ID(
purple_media_candidate_class_init(PurpleMediaCandidateClass *klass)
GObjectClass *gobject_class = (GObjectClass*)klass;
gobject_class->finalize = purple_media_candidate_finalize;
gobject_class->set_property = purple_media_candidate_set_property;
gobject_class->get_property = purple_media_candidate_get_property;
g_object_class_install_property(gobject_class, PROP_FOUNDATION,
g_param_spec_string("foundation",
"The foundation of the candidate.",
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_COMPONENT_ID,
g_param_spec_uint("component-id",
"The component id of the candidate.",
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_IP,
g_param_spec_string("ip",
"The IP address of the candidate.",
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_PORT,
g_param_spec_uint("port",
"The port of the candidate.",
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_BASE_IP,
g_param_spec_string("base-ip",
"The internal IP address of the candidate.",
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_BASE_PORT,
g_param_spec_uint("base-port",
"The internal port of the candidate.",
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_PROTOCOL,
g_param_spec_enum("protocol",
"The protocol of the candidate.",
PURPLE_TYPE_MEDIA_NETWORK_PROTOCOL,
PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_PRIORITY,
g_param_spec_uint("priority",
"The priority of the candidate.",
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_TYPE,
g_param_spec_enum("type",
"The type of the candidate.",
PURPLE_TYPE_MEDIA_CANDIDATE_TYPE,
PURPLE_MEDIA_CANDIDATE_TYPE_HOST,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_USERNAME,
g_param_spec_string("username",
"The username used to connect to the candidate.",
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_PASSWORD,
g_param_spec_string("password",
"The password use to connect to the candidate.",
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property(gobject_class, PROP_TTL,
"The TTL of the candidate.",
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
purple_media_candidate_new(const gchar *foundation, guint component_id,
PurpleMediaCandidateType type,
PurpleMediaNetworkProtocol proto,
const gchar *ip, guint port)
return g_object_new(PURPLE_TYPE_MEDIA_CANDIDATE,
"foundation", foundation,
"component-id", component_id,
purple_media_candidate_copy(PurpleMediaCandidate *candidate)
PurpleMediaCandidatePrivate *priv;
PurpleMediaCandidate *new_candidate;
priv = purple_media_candidate_get_instance_private(candidate);
new_candidate = purple_media_candidate_new(priv->foundation,
priv->component_id, priv->type, priv->proto,
g_object_set(new_candidate,
"base-ip", priv->base_ip,
"base-port", priv->base_port,
"priority", priv->priority,
"username", priv->username,
"password", priv->password,
purple_media_candidate_list_copy(GList *candidates)
for (; candidates; candidates = g_list_next(candidates)) {
new_list = g_list_prepend(new_list,
purple_media_candidate_copy(candidates->data));
new_list = g_list_reverse(new_list);
purple_media_candidate_list_free(GList *candidates)
g_list_free_full(candidates, g_object_unref);
purple_media_candidate_get_foundation(PurpleMediaCandidate *candidate)
g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
g_object_get(candidate, "foundation", &foundation, NULL);
purple_media_candidate_get_component_id(PurpleMediaCandidate *candidate)
g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
g_object_get(candidate, "component-id", &component_id, NULL);
purple_media_candidate_get_ip(PurpleMediaCandidate *candidate)
g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
g_object_get(candidate, "ip", &ip, NULL);
purple_media_candidate_get_port(PurpleMediaCandidate *candidate)
g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
g_object_get(candidate, "port", &port, NULL);
purple_media_candidate_get_base_ip(PurpleMediaCandidate *candidate)
g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
g_object_get(candidate, "base-ip", &base_ip, NULL);
purple_media_candidate_get_base_port(PurpleMediaCandidate *candidate)
g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
g_object_get(candidate, "base_port", &base_port, NULL);
PurpleMediaNetworkProtocol
purple_media_candidate_get_protocol(PurpleMediaCandidate *candidate)
PurpleMediaNetworkProtocol protocol;
g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate),
PURPLE_MEDIA_NETWORK_PROTOCOL_UDP);
g_object_get(candidate, "protocol", &protocol, NULL);
purple_media_candidate_get_priority(PurpleMediaCandidate *candidate)
g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
g_object_get(candidate, "priority", &priority, NULL);
purple_media_candidate_get_candidate_type(PurpleMediaCandidate *candidate)
PurpleMediaCandidateType type;
g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate),
PURPLE_MEDIA_CANDIDATE_TYPE_HOST);
g_object_get(candidate, "type", &type, NULL);
purple_media_candidate_get_username(PurpleMediaCandidate *candidate)
g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
g_object_get(candidate, "username", &username, NULL);
purple_media_candidate_get_password(PurpleMediaCandidate *candidate)
g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), NULL);
g_object_get(candidate, "password", &password, NULL);
purple_media_candidate_get_ttl(PurpleMediaCandidate *candidate)
g_return_val_if_fail(PURPLE_IS_MEDIA_CANDIDATE(candidate), 0);
g_object_get(candidate, "ttl", &ttl, NULL);