Frameworks/libpurple.framework/Versions/0.6.2/Headers/media.h
author Zachary West <zacw@adium.im>
Fri Aug 21 13:25:11 2009 -0700 (2009-08-21)
changeset 2592 e8d15275025e
parent 2069 Frameworks/libpurple.framework/Versions/0.6.0/Headers/media.h@1346acdb9a2b
permissions -rw-r--r--
im.pidgin.adium.1-4 at 267c6165e02e34318a1823960bd04c0639952f73
zacw@1759
     1
/**
zacw@1759
     2
 * @file media.h Media API
zacw@1759
     3
 * @ingroup core
zacw@1759
     4
 */
zacw@1759
     5
zacw@1759
     6
/* purple
zacw@1759
     7
 *
zacw@1759
     8
 * Purple is the legal property of its developers, whose names are too numerous
zacw@1759
     9
 * to list here.  Please refer to the COPYRIGHT file distributed with this
zacw@1759
    10
 * source distribution.
zacw@1759
    11
 *
zacw@1759
    12
 * This program is free software; you can redistribute it and/or modify
zacw@1759
    13
 * it under the terms of the GNU General Public License as published by
zacw@1759
    14
 * the Free Software Foundation; either version 2 of the License, or
zacw@1759
    15
 * (at your option) any later version.
zacw@1759
    16
 *
zacw@1759
    17
 * This program is distributed in the hope that it will be useful,
zacw@1759
    18
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
zacw@1759
    19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
zacw@1759
    20
 * GNU General Public License for more details.
zacw@1759
    21
 *
zacw@1759
    22
 * You should have received a copy of the GNU General Public License
zacw@1759
    23
 * along with this program; if not, write to the Free Software
zacw@1759
    24
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
zacw@1759
    25
 */
zacw@1759
    26
zacw@1759
    27
#ifndef _PURPLE_MEDIA_H_
zacw@1759
    28
#define _PURPLE_MEDIA_H_
zacw@1759
    29
zacw@1759
    30
#include <glib.h>
zacw@1759
    31
#include <glib-object.h>
zacw@1759
    32
zacw@1759
    33
G_BEGIN_DECLS
zacw@1759
    34
zacw@1759
    35
#define PURPLE_TYPE_MEDIA_CANDIDATE           (purple_media_candidate_get_type())
zacw@1759
    36
#define PURPLE_MEDIA_CANDIDATE(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate))
zacw@1759
    37
#define PURPLE_MEDIA_CANDIDATE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate))
zacw@1759
    38
#define PURPLE_IS_MEDIA_CANDIDATE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_CANDIDATE))
zacw@1759
    39
#define PURPLE_IS_MEDIA_CANDIDATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_CANDIDATE))
zacw@1759
    40
#define PURPLE_MEDIA_CANDIDATE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate))
zacw@1759
    41
zacw@1759
    42
#define PURPLE_TYPE_MEDIA_CODEC           (purple_media_codec_get_type())
zacw@1759
    43
#define PURPLE_MEDIA_CODEC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec))
zacw@1759
    44
#define PURPLE_MEDIA_CODEC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec))
zacw@1759
    45
#define PURPLE_IS_MEDIA_CODEC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_CODEC))
zacw@1759
    46
#define PURPLE_IS_MEDIA_CODEC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_CODEC))
zacw@1759
    47
#define PURPLE_MEDIA_CODEC_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec))
zacw@1759
    48
zacw@1759
    49
#define PURPLE_TYPE_MEDIA_SESSION_TYPE (purple_media_session_type_get_type())
zacw@1759
    50
#define PURPLE_TYPE_MEDIA            (purple_media_get_type())
zacw@1759
    51
#define PURPLE_MEDIA(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA, PurpleMedia))
zacw@1759
    52
#define PURPLE_MEDIA_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA, PurpleMediaClass))
zacw@1759
    53
#define PURPLE_IS_MEDIA(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA))
zacw@1759
    54
#define PURPLE_IS_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA))
zacw@1759
    55
#define PURPLE_MEDIA_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA, PurpleMediaClass))
zacw@1759
    56
zacw@1759
    57
#define PURPLE_TYPE_MEDIA_CANDIDATE_TYPE (purple_media_candidate_type_get_type())
zacw@1759
    58
#define PURPLE_TYPE_MEDIA_NETWORK_PROTOCOL (purple_media_network_protocol_get_type())
zacw@1759
    59
#define PURPLE_MEDIA_TYPE_STATE      (purple_media_state_changed_get_type())
zacw@1759
    60
#define PURPLE_MEDIA_TYPE_INFO_TYPE	(purple_media_info_type_get_type())
zacw@1759
    61
zacw@1759
    62
/** @copydoc _PurpleMedia */
zacw@1759
    63
typedef struct _PurpleMedia PurpleMedia;
zacw@1759
    64
/** @copydoc _PurpleMediaCandidate */
zacw@1759
    65
typedef struct _PurpleMediaCandidate PurpleMediaCandidate;
zacw@1759
    66
/** @copydoc _PurpleMediaCodec */
zacw@1759
    67
typedef struct _PurpleMediaCodec PurpleMediaCodec;
zacw@1759
    68
zacw@1759
    69
/** Media caps */
zacw@1759
    70
typedef enum {
zacw@1759
    71
	PURPLE_MEDIA_CAPS_NONE = 0,
zacw@1759
    72
	PURPLE_MEDIA_CAPS_AUDIO = 1,
zacw@1759
    73
	PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION = 1 << 1,
zacw@1759
    74
	PURPLE_MEDIA_CAPS_VIDEO = 1 << 2,
zacw@1759
    75
	PURPLE_MEDIA_CAPS_VIDEO_SINGLE_DIRECTION = 1 << 3,
zacw@1759
    76
	PURPLE_MEDIA_CAPS_AUDIO_VIDEO = 1 << 4,
zacw@1759
    77
	PURPLE_MEDIA_CAPS_MODIFY_SESSION = 1 << 5,
zacw@1759
    78
	PURPLE_MEDIA_CAPS_CHANGE_DIRECTION = 1 << 6,
zacw@1759
    79
} PurpleMediaCaps;
zacw@1759
    80
zacw@1759
    81
/** Media session types */
zacw@1759
    82
typedef enum {
zacw@1759
    83
	PURPLE_MEDIA_NONE	= 0,
zacw@1759
    84
	PURPLE_MEDIA_RECV_AUDIO = 1 << 0,
zacw@1759
    85
	PURPLE_MEDIA_SEND_AUDIO = 1 << 1,
zacw@1759
    86
	PURPLE_MEDIA_RECV_VIDEO = 1 << 2,
zacw@1759
    87
	PURPLE_MEDIA_SEND_VIDEO = 1 << 3,
zacw@1759
    88
	PURPLE_MEDIA_AUDIO = PURPLE_MEDIA_RECV_AUDIO | PURPLE_MEDIA_SEND_AUDIO,
zacw@1759
    89
	PURPLE_MEDIA_VIDEO = PURPLE_MEDIA_RECV_VIDEO | PURPLE_MEDIA_SEND_VIDEO
zacw@1759
    90
} PurpleMediaSessionType;
zacw@1759
    91
zacw@1759
    92
/** Media state-changed types */
zacw@1759
    93
typedef enum {
zacw@1759
    94
	PURPLE_MEDIA_STATE_NEW = 0,
zacw@1759
    95
	PURPLE_MEDIA_STATE_CONNECTED,
zacw@1759
    96
	PURPLE_MEDIA_STATE_END,
zacw@1759
    97
} PurpleMediaState;
zacw@1759
    98
zacw@1759
    99
/** Media info types */
zacw@1759
   100
typedef enum {
zacw@1759
   101
	PURPLE_MEDIA_INFO_HANGUP = 0,
zacw@1759
   102
	PURPLE_MEDIA_INFO_ACCEPT,
zacw@1759
   103
	PURPLE_MEDIA_INFO_REJECT,
zacw@1759
   104
	PURPLE_MEDIA_INFO_MUTE,
zacw@1759
   105
	PURPLE_MEDIA_INFO_UNMUTE,
zacw@2592
   106
	PURPLE_MEDIA_INFO_PAUSE,
zacw@2592
   107
	PURPLE_MEDIA_INFO_UNPAUSE,
zacw@1759
   108
	PURPLE_MEDIA_INFO_HOLD,
zacw@1759
   109
	PURPLE_MEDIA_INFO_UNHOLD,
zacw@1759
   110
} PurpleMediaInfoType;
zacw@1759
   111
zacw@1759
   112
typedef enum {
zacw@1759
   113
	PURPLE_MEDIA_CANDIDATE_TYPE_HOST,
zacw@1759
   114
	PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX,
zacw@1759
   115
	PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX,
zacw@1759
   116
	PURPLE_MEDIA_CANDIDATE_TYPE_RELAY,
zacw@1759
   117
	PURPLE_MEDIA_CANDIDATE_TYPE_MULTICAST,
zacw@1759
   118
} PurpleMediaCandidateType;
zacw@1759
   119
zacw@1759
   120
typedef enum {
zacw@1759
   121
	PURPLE_MEDIA_COMPONENT_NONE = 0,
zacw@1759
   122
	PURPLE_MEDIA_COMPONENT_RTP = 1,
zacw@1759
   123
	PURPLE_MEDIA_COMPONENT_RTCP = 2,
zacw@1759
   124
} PurpleMediaComponentType;
zacw@1759
   125
zacw@1759
   126
typedef enum {
zacw@1759
   127
	PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
zacw@1759
   128
	PURPLE_MEDIA_NETWORK_PROTOCOL_TCP,
zacw@1759
   129
} PurpleMediaNetworkProtocol;
zacw@1759
   130
zacw@1759
   131
#include "signals.h"
zacw@1759
   132
#include "util.h"
zacw@1759
   133
zacw@1759
   134
#ifdef __cplusplus
zacw@1759
   135
extern "C" {
zacw@1759
   136
#endif
zacw@1759
   137
zacw@1759
   138
/**
zacw@1759
   139
 * Gets the media session type's GType
zacw@1759
   140
 *
zacw@1759
   141
 * @return The media session type's GType.
zacw@1759
   142
 *
zacw@1759
   143
 * @since 2.6.0
zacw@1759
   144
 */
zacw@1759
   145
GType purple_media_session_type_get_type(void);
zacw@1759
   146
zacw@1759
   147
/**
zacw@1759
   148
 * Gets the media candidate type's GType
zacw@1759
   149
 *
zacw@1759
   150
 * @return The media candidate type's GType.
zacw@1759
   151
 *
zacw@1759
   152
 * @since 2.6.0
zacw@1759
   153
 */
zacw@1759
   154
GType purple_media_candidate_type_get_type(void);
zacw@1759
   155
zacw@1759
   156
/**
zacw@1759
   157
 * Gets the media network protocol's GType
zacw@1759
   158
 *
zacw@1759
   159
 * @return The media network protocol's GType.
zacw@1759
   160
 *
zacw@1759
   161
 * @since 2.6.0
zacw@1759
   162
 */
zacw@1759
   163
GType purple_media_network_protocol_get_type(void);
zacw@1759
   164
zacw@1759
   165
/**
zacw@1759
   166
 * Gets the media class's GType
zacw@1759
   167
 *
zacw@1759
   168
 * @return The media class's GType.
zacw@1759
   169
 *
zacw@1759
   170
 * @since 2.6.0
zacw@1759
   171
 */
zacw@1759
   172
GType purple_media_get_type(void);
zacw@1759
   173
zacw@1759
   174
/**
zacw@1759
   175
 * Gets the type of the state-changed enum
zacw@1759
   176
 *
zacw@1759
   177
 * @return The state-changed enum's GType
zacw@1759
   178
 *
zacw@1759
   179
 * @since 2.6.0
zacw@1759
   180
 */
zacw@1759
   181
GType purple_media_state_changed_get_type(void);
zacw@1759
   182
zacw@1759
   183
/**
zacw@1759
   184
 * Gets the type of the info type enum
zacw@1759
   185
 *
zacw@1759
   186
 * @return The info type enum's GType
zacw@1759
   187
 *
zacw@1759
   188
 * @since 2.6.0
zacw@1759
   189
 */
zacw@1759
   190
GType purple_media_info_type_get_type(void);
zacw@1759
   191
zacw@1759
   192
/**
zacw@1759
   193
 * Gets the type of the media candidate structure.
zacw@1759
   194
 *
zacw@1759
   195
 * @return The media canditate's GType
zacw@1759
   196
 *
zacw@1759
   197
 * @since 2.6.0
zacw@1759
   198
 */
zacw@1759
   199
GType purple_media_candidate_get_type(void);
zacw@1759
   200
zacw@1759
   201
/**
zacw@1759
   202
 * Creates a PurpleMediaCandidate instance.
zacw@1759
   203
 *
zacw@1759
   204
 * @param foundation The foundation of the candidate.
zacw@1759
   205
 * @param component_id The component this candidate is for.
zacw@1759
   206
 * @param type The type of candidate.
zacw@1759
   207
 * @param proto The protocol this component is for.
zacw@1759
   208
 * @param ip The IP address of this component.
zacw@1759
   209
 * @param port The network port.
zacw@1759
   210
 *
zacw@1759
   211
 * @return The newly created PurpleMediaCandidate instance.
zacw@1759
   212
 *
zacw@1759
   213
 * @since 2.6.0
zacw@1759
   214
 */
zacw@1759
   215
PurpleMediaCandidate *purple_media_candidate_new(
zacw@1759
   216
		const gchar *foundation, guint component_id,
zacw@1759
   217
		PurpleMediaCandidateType type,
zacw@1759
   218
		PurpleMediaNetworkProtocol proto,
zacw@1759
   219
		const gchar *ip, guint port);
zacw@1759
   220
zacw@1759
   221
/**
zacw@1759
   222
 * Copies a GList of PurpleMediaCandidate and its contents.
zacw@1759
   223
 *
zacw@1759
   224
 * @param candidates The list of candidates to be copied.
zacw@1759
   225
 *
zacw@1759
   226
 * @return The copy of the GList.
zacw@1759
   227
 *
zacw@1759
   228
 * @since 2.6.0
zacw@1759
   229
 */
zacw@1759
   230
GList *purple_media_candidate_list_copy(GList *candidates);
zacw@1759
   231
zacw@1759
   232
/**
zacw@1759
   233
 * Frees a GList of PurpleMediaCandidate and its contents.
zacw@1759
   234
 *
zacw@1759
   235
 * @param candidates The list of candidates to be freed.
zacw@1759
   236
 *
zacw@1759
   237
 * @since 2.6.0
zacw@1759
   238
 */
zacw@1759
   239
void purple_media_candidate_list_free(GList *candidates);
zacw@1759
   240
zacw@1759
   241
gchar *purple_media_candidate_get_foundation(PurpleMediaCandidate *candidate);
zacw@1759
   242
guint purple_media_candidate_get_component_id(PurpleMediaCandidate *candidate);
zacw@1759
   243
gchar *purple_media_candidate_get_ip(PurpleMediaCandidate *candidate);
zacw@1759
   244
guint16 purple_media_candidate_get_port(PurpleMediaCandidate *candidate);
zacw@1759
   245
gchar *purple_media_candidate_get_base_ip(PurpleMediaCandidate *candidate);
zacw@1759
   246
guint16 purple_media_candidate_get_base_port(PurpleMediaCandidate *candidate);
zacw@1759
   247
PurpleMediaNetworkProtocol purple_media_candidate_get_protocol(
zacw@1759
   248
		PurpleMediaCandidate *candidate);
zacw@1759
   249
guint32 purple_media_candidate_get_priority(PurpleMediaCandidate *candidate);
zacw@1759
   250
PurpleMediaCandidateType purple_media_candidate_get_candidate_type(
zacw@1759
   251
		PurpleMediaCandidate *candidate);
zacw@1759
   252
gchar *purple_media_candidate_get_username(PurpleMediaCandidate *candidate);
zacw@1759
   253
gchar *purple_media_candidate_get_password(PurpleMediaCandidate *candidate);
zacw@1759
   254
guint purple_media_candidate_get_ttl(PurpleMediaCandidate *candidate);
zacw@1759
   255
zacw@1759
   256
/**
zacw@1759
   257
 * Gets the type of the media codec structure.
zacw@1759
   258
 *
zacw@1759
   259
 * @return The media codec's GType
zacw@1759
   260
 *
zacw@1759
   261
 * @since 2.6.0
zacw@1759
   262
 */
zacw@1759
   263
GType purple_media_codec_get_type(void);
zacw@1759
   264
zacw@1759
   265
/**
zacw@1759
   266
 * Creates a new PurpleMediaCodec instance.
zacw@1759
   267
 *
zacw@1759
   268
 * @param id Codec identifier.
zacw@1759
   269
 * @param encoding_name Name of the media type this encodes.
zacw@1759
   270
 * @param media_type PurpleMediaSessionType of this codec.
zacw@1759
   271
 * @param clock_rate The clock rate this codec encodes at, if applicable.
zacw@1759
   272
 *
zacw@1759
   273
 * @return The newly created PurpleMediaCodec.
zacw@1759
   274
 *
zacw@1759
   275
 * @since 2.6.0
zacw@1759
   276
 */
zacw@1759
   277
PurpleMediaCodec *purple_media_codec_new(int id, const char *encoding_name,
zacw@1759
   278
		PurpleMediaSessionType media_type, guint clock_rate);
zacw@1759
   279
zacw@1759
   280
guint purple_media_codec_get_id(PurpleMediaCodec *codec);
zacw@1759
   281
gchar *purple_media_codec_get_encoding_name(PurpleMediaCodec *codec);
zacw@1759
   282
guint purple_media_codec_get_clock_rate(PurpleMediaCodec *codec);
zacw@1759
   283
guint purple_media_codec_get_channels(PurpleMediaCodec *codec);
zacw@1759
   284
GList *purple_media_codec_get_optional_parameters(PurpleMediaCodec *codec);
zacw@1759
   285
zacw@1759
   286
/**
zacw@1759
   287
 * Creates a string representation of the codec.
zacw@1759
   288
 *
zacw@1759
   289
 * @param codec The codec to create the string of.
zacw@1759
   290
 *
zacw@1759
   291
 * @return The new string representation.
zacw@1759
   292
 *
zacw@1759
   293
 * @since 2.6.0
zacw@1759
   294
 */
zacw@1759
   295
gchar *purple_media_codec_to_string(const PurpleMediaCodec *codec);
zacw@1759
   296
zacw@1759
   297
/**
zacw@1759
   298
 * Adds an optional parameter to the codec.
zacw@1759
   299
 *
zacw@1759
   300
 * @param codec The codec to add the parameter to.
zacw@1759
   301
 * @param name The name of the parameter to add.
zacw@1759
   302
 * @param value The value of the parameter to add.
zacw@1759
   303
 *
zacw@1759
   304
 * @since 2.6.0
zacw@1759
   305
 */
zacw@1759
   306
void purple_media_codec_add_optional_parameter(PurpleMediaCodec *codec,
zacw@1759
   307
		const gchar *name, const gchar *value);
zacw@1759
   308
zacw@1759
   309
/**
zacw@1759
   310
 * Removes an optional parameter from the codec.
zacw@1759
   311
 *
zacw@1759
   312
 * @param codec The codec to remove the parameter from.
zacw@1759
   313
 * @param param A pointer to the parameter to remove.
zacw@1759
   314
 *
zacw@1759
   315
 * @since 2.6.0
zacw@1759
   316
 */
zacw@1759
   317
void purple_media_codec_remove_optional_parameter(PurpleMediaCodec *codec,
zacw@1759
   318
		PurpleKeyValuePair *param);
zacw@1759
   319
zacw@1759
   320
/**
zacw@1759
   321
 * Gets an optional parameter based on the values given.
zacw@1759
   322
 *
zacw@1759
   323
 * @param codec The codec to find the parameter in.
zacw@1759
   324
 * @param name The name of the parameter to search for.
zacw@1759
   325
 * @param value The value to search for or NULL.
zacw@1759
   326
 *
zacw@1759
   327
 * @return The value found or NULL.
zacw@1759
   328
 *
zacw@1759
   329
 * @since 2.6.0
zacw@1759
   330
 */
zacw@1759
   331
PurpleKeyValuePair *purple_media_codec_get_optional_parameter(
zacw@1759
   332
		PurpleMediaCodec *codec, const gchar *name,
zacw@1759
   333
		const gchar *value);
zacw@1759
   334
zacw@1759
   335
/**
zacw@1759
   336
 * Copies a GList of PurpleMediaCodec and its contents.
zacw@1759
   337
 *
zacw@1759
   338
 * @param codecs The list of codecs to be copied.
zacw@1759
   339
 *
zacw@1759
   340
 * @return The copy of the GList.
zacw@1759
   341
 *
zacw@1759
   342
 * @since 2.6.0
zacw@1759
   343
 */
zacw@1759
   344
GList *purple_media_codec_list_copy(GList *codecs);
zacw@1759
   345
zacw@1759
   346
/**
zacw@1759
   347
 * Frees a GList of PurpleMediaCodec and its contents.
zacw@1759
   348
 *
zacw@1759
   349
 * @param codecs The list of codecs to be freed.
zacw@1759
   350
 *
zacw@1759
   351
 * @since 2.6.0
zacw@1759
   352
 */
zacw@1759
   353
void purple_media_codec_list_free(GList *codecs);
zacw@1759
   354
zacw@1759
   355
/**
zacw@2069
   356
 * Gets a list of session IDs.
zacw@1759
   357
 *
zacw@2069
   358
 * @param media The media session from which to retrieve session IDs.
zacw@1759
   359
 *
zacw@2069
   360
 * @return GList of session IDs. The caller must free the list.
zacw@1759
   361
 *
zacw@1759
   362
 * @since 2.6.0
zacw@1759
   363
 */
zacw@2069
   364
GList *purple_media_get_session_ids(PurpleMedia *media);
zacw@1759
   365
zacw@1759
   366
/**
zacw@1759
   367
 * Gets the PurpleAccount this media session is on.
zacw@1759
   368
 *
zacw@1759
   369
 * @param media The media session to retrieve the account from.
zacw@1759
   370
 *
zacw@1759
   371
 * @return The account retrieved.
zacw@1759
   372
 *
zacw@1759
   373
 * @since 2.6.0
zacw@1759
   374
 */
zacw@1759
   375
PurpleAccount *purple_media_get_account(PurpleMedia *media);
zacw@1759
   376
zacw@1759
   377
/**
zacw@1759
   378
 * Gets the prpl data from the media session.
zacw@1759
   379
 *
zacw@1759
   380
 * @param media The media session to retrieve the prpl data from.
zacw@1759
   381
 *
zacw@1759
   382
 * @return The prpl data retrieved.
zacw@1759
   383
 *
zacw@1759
   384
 * @since 2.6.0
zacw@1759
   385
 */
zacw@1759
   386
gpointer purple_media_get_prpl_data(PurpleMedia *media);
zacw@1759
   387
zacw@1759
   388
/**
zacw@1759
   389
 * Sets the prpl data on the media session.
zacw@1759
   390
 *
zacw@1759
   391
 * @param media The media session to set the prpl data on.
zacw@1759
   392
 * @param prpl_data The data to set on the media session.
zacw@1759
   393
 *
zacw@1759
   394
 * @since 2.6.0
zacw@1759
   395
 */
zacw@1759
   396
void purple_media_set_prpl_data(PurpleMedia *media, gpointer prpl_data);
zacw@1759
   397
zacw@1759
   398
/**
zacw@1759
   399
 * Signals an error in the media session.
zacw@1759
   400
 *
zacw@1759
   401
 * @param media The media object to set the state on.
zacw@1759
   402
 * @param error The format of the error message to send in the signal.
zacw@1759
   403
 * @param ... The arguments to plug into the format.
zacw@1759
   404
 *
zacw@1759
   405
 * @since 2.6.0
zacw@1759
   406
 */
zacw@1759
   407
void purple_media_error(PurpleMedia *media, const gchar *error, ...);
zacw@1759
   408
zacw@1759
   409
/**
zacw@1759
   410
 * Ends all streams that match the given parameters
zacw@1759
   411
 *
zacw@1759
   412
 * @param media The media object with which to end streams.
zacw@1759
   413
 * @param session_id The session to end streams on.
zacw@1759
   414
 * @param participant The participant to end streams with.
zacw@1759
   415
 *
zacw@1759
   416
 * @since 2.6.0
zacw@1759
   417
 */
zacw@1759
   418
void purple_media_end(PurpleMedia *media, const gchar *session_id,
zacw@1759
   419
		const gchar *participant);
zacw@1759
   420
zacw@1759
   421
/**
zacw@1759
   422
 * Signals different information about the given stream.
zacw@1759
   423
 *
zacw@1759
   424
 * @param media The media instance to containing the stream to signal.
zacw@1759
   425
 * @param type The type of info being signaled.
zacw@1759
   426
 * @param session_id The id of the session of the stream being signaled.
zacw@1759
   427
 * @param participant The participant of the stream being signaled.
zacw@1759
   428
 * @param local TRUE if the info originated locally, FALSE if on the remote end.
zacw@1759
   429
 *
zacw@1759
   430
 * @since 2.6.0
zacw@1759
   431
 */
zacw@1759
   432
void purple_media_stream_info(PurpleMedia *media, PurpleMediaInfoType type,
zacw@1759
   433
		const gchar *session_id, const gchar *participant,
zacw@1759
   434
		gboolean local);
zacw@1759
   435
zacw@1759
   436
/**
zacw@1759
   437
 * Adds a stream to a session.
zacw@1759
   438
 *
zacw@1759
   439
 * It only adds a stream to one audio session or video session as
zacw@1759
   440
 * the @c sess_id must be unique between sessions.
zacw@1759
   441
 *
zacw@1759
   442
 * @param media The media object to find the session in.
zacw@1759
   443
 * @param sess_id The session id of the session to add the stream to.
zacw@1759
   444
 * @param who The name of the remote user to add the stream for.
zacw@1759
   445
 * @param type The type of stream to create.
zacw@1759
   446
 * @param initiator Whether or not the local user initiated the stream.
zacw@1759
   447
 * @param transmitter The transmitter to use for the stream.
zacw@1759
   448
 * @param num_params The number of parameters to pass to Farsight.
zacw@1759
   449
 * @param params The parameters to pass to Farsight.
zacw@1759
   450
 *
zacw@1759
   451
 * @return @c TRUE The stream was added successfully, @c FALSE otherwise.
zacw@1759
   452
 *
zacw@1759
   453
 * @since 2.6.0
zacw@1759
   454
 */
zacw@1759
   455
gboolean purple_media_add_stream(PurpleMedia *media, const gchar *sess_id,
zacw@1759
   456
		const gchar *who, PurpleMediaSessionType type,
zacw@1759
   457
		gboolean initiator, const gchar *transmitter,
zacw@1759
   458
		guint num_params, GParameter *params);
zacw@1759
   459
zacw@1759
   460
/**
zacw@1759
   461
 * Gets the session type from a session
zacw@1759
   462
 *
zacw@1759
   463
 * @param media The media object to find the session in.
zacw@1759
   464
 * @param sess_id The session id of the session to get the type from.
zacw@1759
   465
 *
zacw@1759
   466
 * @return The retreived session type.
zacw@1759
   467
 *
zacw@1759
   468
 * @since 2.6.0
zacw@1759
   469
 */
zacw@1759
   470
PurpleMediaSessionType purple_media_get_session_type(PurpleMedia *media, const gchar *sess_id);
zacw@1759
   471
zacw@1759
   472
/**
zacw@1759
   473
 * Gets the PurpleMediaManager this media session is a part of.
zacw@1759
   474
 *
zacw@1759
   475
 * @param media The media object to get the manager instance from.
zacw@1759
   476
 *
zacw@1759
   477
 * @return The PurpleMediaManager instance retrieved.
zacw@1759
   478
 *
zacw@1759
   479
 * @since 2.6.0
zacw@1759
   480
 */
zacw@1759
   481
struct _PurpleMediaManager *purple_media_get_manager(PurpleMedia *media);
zacw@1759
   482
zacw@1759
   483
/**
zacw@1759
   484
 * Gets the codecs from a session.
zacw@1759
   485
 *
zacw@1759
   486
 * @param media The media object to find the session in.
zacw@1759
   487
 * @param sess_id The session id of the session to get the codecs from.
zacw@1759
   488
 *
zacw@1759
   489
 * @return The retreieved codecs.
zacw@1759
   490
 *
zacw@1759
   491
 * @since 2.6.0
zacw@1759
   492
 */
zacw@1759
   493
GList *purple_media_get_codecs(PurpleMedia *media, const gchar *sess_id);
zacw@1759
   494
zacw@1759
   495
/**
zacw@1759
   496
 * Adds remote candidates to the stream.
zacw@1759
   497
 *
zacw@1759
   498
 * @param media The media object to find the session in.
zacw@1759
   499
 * @param sess_id The session id of the session find the stream in.
zacw@2069
   500
 * @param participant The name of the remote user to add the candidates for.
zacw@1759
   501
 * @param remote_candidates The remote candidates to add.
zacw@1759
   502
 *
zacw@1759
   503
 * @since 2.6.0
zacw@1759
   504
 */
zacw@1759
   505
void purple_media_add_remote_candidates(PurpleMedia *media,
zacw@1759
   506
					const gchar *sess_id,
zacw@2069
   507
					const gchar *participant,
zacw@1759
   508
					GList *remote_candidates);
zacw@1759
   509
zacw@1759
   510
/**
zacw@1759
   511
 * Gets the local candidates from a stream.
zacw@1759
   512
 *
zacw@1759
   513
 * @param media The media object to find the session in.
zacw@1759
   514
 * @param sess_id The session id of the session to find the stream in.
zacw@2069
   515
 * @param participant The name of the remote user to get the candidates from.
zacw@1759
   516
 *
zacw@1759
   517
 * @since 2.6.0
zacw@1759
   518
 */
zacw@1759
   519
GList *purple_media_get_local_candidates(PurpleMedia *media,
zacw@1759
   520
					 const gchar *sess_id,
zacw@2069
   521
					 const gchar *participant);
zacw@1759
   522
zacw@1759
   523
#if 0
zacw@1759
   524
/*
zacw@1759
   525
 * These two functions aren't being used and I'd rather not lock in the API
zacw@1759
   526
 * until they are needed. If they ever are.
zacw@1759
   527
 */
zacw@1759
   528
zacw@1759
   529
/**
zacw@1759
   530
 * Gets the active local candidates for the stream.
zacw@1759
   531
 *
zacw@1759
   532
 * @param media The media object to find the session in.
zacw@1759
   533
 * @param sess_id The session id of the session to find the stream in.
zacw@2069
   534
 * @param participant The name of the remote user to get the active candidate
zacw@2069
   535
 *                    from.
zacw@1759
   536
 *
zacw@1759
   537
 * @return The active candidates retrieved.
zacw@1759
   538
 */
zacw@1759
   539
GList *purple_media_get_active_local_candidates(PurpleMedia *media,
zacw@2069
   540
		const gchar *sess_id, const gchar *participant);
zacw@1759
   541
zacw@1759
   542
/**
zacw@1759
   543
 * Gets the active remote candidates for the stream.
zacw@1759
   544
 *
zacw@1759
   545
 * @param media The media object to find the session in.
zacw@1759
   546
 * @param sess_id The session id of the session to find the stream in.
zacw@2069
   547
 * @param participant The name of the remote user to get the remote candidate
zacw@2069
   548
 *                    from.
zacw@1759
   549
 *
zacw@1759
   550
 * @return The remote candidates retrieved.
zacw@1759
   551
 */
zacw@1759
   552
GList *purple_media_get_active_remote_candidates(PurpleMedia *media,
zacw@2069
   553
		const gchar *sess_id, const gchar *participant);
zacw@1759
   554
#endif
zacw@1759
   555
zacw@1759
   556
/**
zacw@1759
   557
 * Sets remote candidates from the stream.
zacw@1759
   558
 *
zacw@1759
   559
 * @param media The media object to find the session in.
zacw@1759
   560
 * @param sess_id The session id of the session find the stream in.
zacw@2069
   561
 * @param participant The name of the remote user to set the candidates from.
zacw@1759
   562
 *
zacw@1759
   563
 * @return @c TRUE The codecs were set successfully, or @c FALSE otherwise.
zacw@1759
   564
 *
zacw@1759
   565
 * @since 2.6.0
zacw@1759
   566
 */
zacw@1759
   567
gboolean purple_media_set_remote_codecs(PurpleMedia *media, const gchar *sess_id,
zacw@2069
   568
					const gchar *participant, GList *codecs);
zacw@1759
   569
zacw@1759
   570
/**
zacw@1759
   571
 * Returns whether or not the candidates for set of streams are prepared
zacw@1759
   572
 *
zacw@1759
   573
 * @param media The media object to find the remote user in.
zacw@1759
   574
 * @param session_id The session id of the session to check.
zacw@1759
   575
 * @param participant The remote user to check for.
zacw@1759
   576
 *
zacw@1759
   577
 * @return @c TRUE All streams for the given session_id/participant combination have candidates prepared, @c FALSE otherwise.
zacw@1759
   578
 *
zacw@1759
   579
 * @since 2.6.0
zacw@1759
   580
 */
zacw@1759
   581
gboolean purple_media_candidates_prepared(PurpleMedia *media,
zacw@1759
   582
		const gchar *session_id, const gchar *participant);
zacw@1759
   583
zacw@1759
   584
/**
zacw@1759
   585
 * Sets the send codec for the a session.
zacw@1759
   586
 *
zacw@1759
   587
 * @param media The media object to find the session in.
zacw@1759
   588
 * @param sess_id The session id of the session to set the codec for.
zacw@1759
   589
 * @param codec The codec to set the session to stream.
zacw@1759
   590
 *
zacw@1759
   591
 * @return @c TRUE The codec was successfully changed, or @c FALSE otherwise.
zacw@1759
   592
 *
zacw@1759
   593
 * @since 2.6.0
zacw@1759
   594
 */
zacw@1759
   595
gboolean purple_media_set_send_codec(PurpleMedia *media, const gchar *sess_id, PurpleMediaCodec *codec);
zacw@1759
   596
zacw@1759
   597
/**
zacw@1759
   598
 * Gets whether a session's codecs are ready to be used.
zacw@1759
   599
 *
zacw@1759
   600
 * @param media The media object to find the session in.
zacw@1759
   601
 * @param sess_id The session id of the session to check.
zacw@1759
   602
 *
zacw@1759
   603
 * @return @c TRUE The codecs are ready, or @c FALSE otherwise.
zacw@1759
   604
 *
zacw@1759
   605
 * @since 2.6.0
zacw@1759
   606
 */
zacw@1759
   607
gboolean purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id);
zacw@1759
   608
zacw@1759
   609
/**
zacw@1759
   610
 * Gets whether the local user is the conference/session/stream's initiator.
zacw@1759
   611
 *
zacw@1759
   612
 * @param media The media instance to find the session in.
zacw@1759
   613
 * @param sess_id The session id of the session to check.
zacw@1759
   614
 * @param participant The participant of the stream to check.
zacw@1759
   615
 *
zacw@1759
   616
 * @return TRUE if the local user is the stream's initator, else FALSE.
zacw@1759
   617
 *
zacw@1759
   618
 * @since 2.6.0
zacw@1759
   619
 */
zacw@1759
   620
gboolean purple_media_is_initiator(PurpleMedia *media,
zacw@1759
   621
		const gchar *sess_id, const gchar *participant);
zacw@1759
   622
zacw@1759
   623
/**
zacw@1759
   624
 * Gets whether a streams selected have been accepted.
zacw@1759
   625
 *
zacw@1759
   626
 * @param media The media object to find the session in.
zacw@1759
   627
 * @param sess_id The session id of the session to check.
zacw@1759
   628
 * @param participant The participant to check.
zacw@1759
   629
 *
zacw@1759
   630
 * @return @c TRUE The selected streams have been accepted, or @c FALSE otherwise.
zacw@1759
   631
 *
zacw@1759
   632
 * @since 2.6.0
zacw@1759
   633
 */
zacw@1759
   634
gboolean purple_media_accepted(PurpleMedia *media, const gchar *sess_id,
zacw@1759
   635
		const gchar *participant);
zacw@1759
   636
zacw@1759
   637
/**
zacw@1759
   638
 * Sets the input volume of all the selected sessions.
zacw@1759
   639
 *
zacw@1759
   640
 * @param media The media object the sessions are in.
zacw@1759
   641
 * @param session_id The session to select (if any).
zacw@1759
   642
 * @param level The level to set the volume to.
zacw@1759
   643
 *
zacw@1759
   644
 * @since 2.6.0
zacw@1759
   645
 */
zacw@1759
   646
void purple_media_set_input_volume(PurpleMedia *media, const gchar *session_id, double level);
zacw@1759
   647
zacw@1759
   648
/**
zacw@1759
   649
 * Sets the output volume of all the selected streams.
zacw@1759
   650
 *
zacw@1759
   651
 * @param media The media object the streams are in.
zacw@1759
   652
 * @param session_id The session to limit the streams to (if any).
zacw@1759
   653
 * @param participant The participant to limit the streams to (if any).
zacw@1759
   654
 * @param level The level to set the volume to.
zacw@1759
   655
 *
zacw@1759
   656
 * @since 2.6.0
zacw@1759
   657
 */
zacw@1759
   658
void purple_media_set_output_volume(PurpleMedia *media, const gchar *session_id,
zacw@1759
   659
		const gchar *participant, double level);
zacw@1759
   660
zacw@1759
   661
/**
zacw@1759
   662
 * Sets a video output window for the given session/stream.
zacw@1759
   663
 *
zacw@1759
   664
 * @param media The media instance to set the output window on.
zacw@1759
   665
 * @param session_id The session to set the output window on.
zacw@1759
   666
 * @param participant Optionally, the participant to set the output window on.
zacw@1759
   667
 * @param window_id The window id use for embedding the video in.
zacw@1759
   668
 *
zacw@1759
   669
 * @return An id to reference the output window.
zacw@1759
   670
 *
zacw@1759
   671
 * @since 2.6.0
zacw@1759
   672
 */
zacw@1759
   673
gulong purple_media_set_output_window(PurpleMedia *media,
zacw@1759
   674
		const gchar *session_id, const gchar *participant,
zacw@1759
   675
		gulong window_id);
zacw@1759
   676
zacw@1759
   677
/**
zacw@1759
   678
 * Removes all output windows from a given media session.
zacw@1759
   679
 *
zacw@1759
   680
 * @param media The instance to remove all output windows from.
zacw@1759
   681
 *
zacw@1759
   682
 * @since 2.6.0
zacw@1759
   683
 */
zacw@1759
   684
void purple_media_remove_output_windows(PurpleMedia *media);
zacw@1759
   685
zacw@1759
   686
#ifdef __cplusplus
zacw@1759
   687
}
zacw@1759
   688
#endif
zacw@1759
   689
zacw@1759
   690
G_END_DECLS
zacw@1759
   691
zacw@1759
   692
#endif  /* _PURPLE_MEDIA_H_ */