Mercurial > pidgin
changeset 29146:f46979436c78
Skeleton of the Farsight 2 media backend.
I want to keep the backend-fs2.h internal to libpurple for now. It shouldn't
be made public API yet (if ever). The separation is largely for organization.
Nothing outside of libpurple should need to access it directly.
author | maiku@pidgin.im |
---|---|
date | Thu, 22 Oct 2009 21:30:30 +0000 |
parents | 0ae9306de1f6 |
children | d1955da88264 |
files | libpurple/Makefile.am libpurple/Makefile.mingw libpurple/media/backend-fs2.c libpurple/media/backend-fs2.h |
diffstat | 4 files changed, 271 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/Makefile.am Thu Oct 22 21:09:36 2009 +0000 +++ b/libpurple/Makefile.am Thu Oct 22 21:30:30 2009 +0000 @@ -53,6 +53,8 @@ idle.c \ imgstore.c \ log.c \ + media/backend-fs2.c \ + media/backend-fs2.h \ media/backend-iface.c \ media/candidate.c \ media/codec.c \
--- a/libpurple/Makefile.mingw Thu Oct 22 21:09:36 2009 +0000 +++ b/libpurple/Makefile.mingw Thu Oct 22 21:30:30 2009 +0000 @@ -48,6 +48,7 @@ idle.c \ imgstore.c \ log.c \ + media/backend-fs2.c \ media/backend-iface.c \ media/candidate.c \ media/codec.c \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/media/backend-fs2.c Thu Oct 22 21:30:30 2009 +0000 @@ -0,0 +1,208 @@ +/** + * @file backend-fs2.c Farsight 2 backend for media API + * @ingroup core + */ + +/* purple + * + * 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 + */ + +#include "backend-fs2.h" + +#include "backend-iface.h" + +/** @copydoc _PurpleMediaBackendFs2Class */ +typedef struct _PurpleMediaBackendFs2Class PurpleMediaBackendFs2Class; +/** @copydoc _PurpleMediaBackendFs2Private */ +typedef struct _PurpleMediaBackendFs2Private PurpleMediaBackendFs2Private; + +#define PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), \ + PURPLE_TYPE_MEDIA_BACKEND_FS2, PurpleMediaBackendFs2Private)) + +static void purple_media_backend_iface_init(PurpleMediaBackendIface *iface); + +static gboolean purple_media_backend_fs2_add_stream(PurpleMediaBackend *self, + const gchar *sess_id, const gchar *who, + PurpleMediaSessionType type, gboolean initiator, + const gchar *transmitter, + guint num_params, GParameter *params); +static void purple_media_backend_fs2_add_remote_candidates( + PurpleMediaBackend *self, + const gchar *sess_id, const gchar *participant, + GList *remote_candidates); +static GList *purple_media_backend_fs2_get_codecs(PurpleMediaBackend *self, + const gchar *sess_id); +static GList *purple_media_backend_fs2_get_local_candidates( + PurpleMediaBackend *self, + const gchar *sess_id, const gchar *participant); +static void purple_media_backend_fs2_set_remote_codecs( + PurpleMediaBackend *self, + const gchar *sess_id, const gchar *participant, + GList *codecs); +static void purple_media_backend_fs2_set_send_codec(PurpleMediaBackend *self, + const gchar *sess_id, PurpleMediaCodec *codec); + +struct _PurpleMediaBackendFs2Class +{ + GObjectClass parent_class; +}; + +struct _PurpleMediaBackendFs2 +{ + GObject parent; +}; + +G_DEFINE_TYPE_WITH_CODE(PurpleMediaBackendFs2, purple_media_backend_fs2, + G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE( + PURPLE_TYPE_MEDIA_BACKEND, purple_media_backend_iface_init)); + +struct _PurpleMediaBackendFs2Private +{ + PurpleMedia *media; +}; + +enum { + PROP_0, + PROP_MEDIA, +}; + +static void +purple_media_backend_fs2_init(PurpleMediaBackendFs2 *self) +{ +} + +static void +purple_media_backend_fs2_finalize(GObject *obj) +{ +} + +static void +purple_media_backend_fs2_set_property(GObject *object, guint prop_id, + const GValue *value, GParamSpec *pspec) +{ + PurpleMediaBackendFs2Private *priv; + g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(object)); + + priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(object); + + switch (prop_id) { + case PROP_MEDIA: + priv->media = g_value_dup_object(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID( + object, prop_id, pspec); + break; + } +} + +static void +purple_media_backend_fs2_get_property(GObject *object, guint prop_id, + GValue *value, GParamSpec *pspec) +{ + PurpleMediaBackendFs2Private *priv; + g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(object)); + + priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(object); + + switch (prop_id) { + case PROP_MEDIA: + g_value_set_object(value, priv->media); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID( + object, prop_id, pspec); + break; + } +} + +static void +purple_media_backend_fs2_class_init(PurpleMediaBackendFs2Class *klass) +{ + + GObjectClass *gobject_class = (GObjectClass*)klass; + + gobject_class->finalize = purple_media_backend_fs2_finalize; + gobject_class->set_property = purple_media_backend_fs2_set_property; + gobject_class->get_property = purple_media_backend_fs2_get_property; + + g_object_class_override_property(gobject_class, PROP_MEDIA, "media"); + + g_type_class_add_private(klass, sizeof(PurpleMediaBackendFs2Private)); +} + +static void +purple_media_backend_iface_init(PurpleMediaBackendIface *iface) +{ + iface->add_stream = purple_media_backend_fs2_add_stream; + iface->add_remote_candidates = + purple_media_backend_fs2_add_remote_candidates; + iface->get_codecs = purple_media_backend_fs2_get_codecs; + iface->get_local_candidates = + purple_media_backend_fs2_get_local_candidates; + iface->set_remote_codecs = purple_media_backend_fs2_set_remote_codecs; + iface->set_send_codec = purple_media_backend_fs2_set_send_codec; +} + +static gboolean +purple_media_backend_fs2_add_stream(PurpleMediaBackend *self, + const gchar *sess_id, const gchar *who, + PurpleMediaSessionType type, gboolean initiator, + const gchar *transmitter, + guint num_params, GParameter *params) +{ + return FALSE; +} + +static void +purple_media_backend_fs2_add_remote_candidates(PurpleMediaBackend *self, + const gchar *sess_id, const gchar *participant, + GList *remote_candidates) +{ +} + +static GList * +purple_media_backend_fs2_get_codecs(PurpleMediaBackend *self, + const gchar *sess_id) +{ + return NULL; +} + +static GList * +purple_media_backend_fs2_get_local_candidates(PurpleMediaBackend *self, + const gchar *sess_id, const gchar *participant) +{ + return NULL; +} + +static void +purple_media_backend_fs2_set_remote_codecs(PurpleMediaBackend *self, + const gchar *sess_id, const gchar *participant, + GList *codecs) +{ +} + +static void +purple_media_backend_fs2_set_send_codec(PurpleMediaBackend *self, + const gchar *sess_id, PurpleMediaCodec *codec) +{ +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/media/backend-fs2.h Thu Oct 22 21:30:30 2009 +0000 @@ -0,0 +1,60 @@ +/** + * @file backend-fs2.h Farsight 2 backend for media API + * @ingroup core + */ + +/* purple + * + * 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 + */ + +/* + * This file should not yet be part of libpurple's API. + * It should remain internal only for now. + */ + +#ifndef _MEDIA_BACKEND_FS2_H_ +#define _MEDIA_BACKEND_FS2_H_ + +#include <glib-object.h> + +G_BEGIN_DECLS + +#define PURPLE_TYPE_MEDIA_BACKEND_FS2 (purple_media_backend_fs2_get_type()) +#define PURPLE_IS_MEDIA_BACKEND_FS2(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_BACKEND_FS2)) +#define PURPLE_IS_MEDIA_BACKEND_FS2_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_BACKEND_FS2)) +#define PURPLE_MEDIA_BACKEND_FS2(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_BACKEND_FS2, PurpleMediaBackendFs2)) +#define PURPLE_MEDIA_BACKEND_FS2_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_BACKEND_FS2, PurpleMediaBackendFs2)) +#define PURPLE_MEDIA_BACKEND_FS2_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_BACKEND_FS2, PurpleMediaBackendFs2)) + +/** An opaque structure representing the Farsight 2 media backend. */ +typedef struct _PurpleMediaBackendFs2 PurpleMediaBackendFs2; + +/** + * Gets the type of the Farsight 2 media backend object. + * + * @return The Farsight 2 media backend's GType + * + * @since 2.7.0 + */ +GType purple_media_backend_fs2_get_type(void); + +G_END_DECLS + +#endif /* _MEDIA_BACKEND_FS2_H_ */