00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _PURPLE_MEDIA_H_
00028 #define _PURPLE_MEDIA_H_
00029
00030 #include <glib.h>
00031 #include <glib-object.h>
00032
00033 G_BEGIN_DECLS
00034
00035 #define PURPLE_TYPE_MEDIA_CANDIDATE (purple_media_candidate_get_type())
00036 #define PURPLE_MEDIA_CANDIDATE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate))
00037 #define PURPLE_MEDIA_CANDIDATE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate))
00038 #define PURPLE_IS_MEDIA_CANDIDATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_CANDIDATE))
00039 #define PURPLE_IS_MEDIA_CANDIDATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_CANDIDATE))
00040 #define PURPLE_MEDIA_CANDIDATE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_CANDIDATE, PurpleMediaCandidate))
00041
00042 #define PURPLE_TYPE_MEDIA_CODEC (purple_media_codec_get_type())
00043 #define PURPLE_MEDIA_CODEC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec))
00044 #define PURPLE_MEDIA_CODEC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec))
00045 #define PURPLE_IS_MEDIA_CODEC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA_CODEC))
00046 #define PURPLE_IS_MEDIA_CODEC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA_CODEC))
00047 #define PURPLE_MEDIA_CODEC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodec))
00048
00049 #define PURPLE_TYPE_MEDIA_SESSION_TYPE (purple_media_session_type_get_type())
00050 #define PURPLE_TYPE_MEDIA (purple_media_get_type())
00051 #define PURPLE_MEDIA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_MEDIA, PurpleMedia))
00052 #define PURPLE_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MEDIA, PurpleMediaClass))
00053 #define PURPLE_IS_MEDIA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_MEDIA))
00054 #define PURPLE_IS_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MEDIA))
00055 #define PURPLE_MEDIA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MEDIA, PurpleMediaClass))
00056
00057 #define PURPLE_TYPE_MEDIA_CANDIDATE_TYPE (purple_media_candidate_type_get_type())
00058 #define PURPLE_TYPE_MEDIA_NETWORK_PROTOCOL (purple_media_network_protocol_get_type())
00059 #define PURPLE_MEDIA_TYPE_STATE (purple_media_state_changed_get_type())
00060 #define PURPLE_MEDIA_TYPE_INFO_TYPE (purple_media_info_type_get_type())
00061
00063 typedef struct _PurpleMedia PurpleMedia;
00065 typedef struct _PurpleMediaCandidate PurpleMediaCandidate;
00067 typedef struct _PurpleMediaCodec PurpleMediaCodec;
00068
00070 typedef enum {
00071 PURPLE_MEDIA_CAPS_NONE = 0,
00072 PURPLE_MEDIA_CAPS_AUDIO = 1,
00073 PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION = 1 << 1,
00074 PURPLE_MEDIA_CAPS_VIDEO = 1 << 2,
00075 PURPLE_MEDIA_CAPS_VIDEO_SINGLE_DIRECTION = 1 << 3,
00076 PURPLE_MEDIA_CAPS_AUDIO_VIDEO = 1 << 4,
00077 PURPLE_MEDIA_CAPS_MODIFY_SESSION = 1 << 5,
00078 PURPLE_MEDIA_CAPS_CHANGE_DIRECTION = 1 << 6,
00079 } PurpleMediaCaps;
00080
00082 typedef enum {
00083 PURPLE_MEDIA_NONE = 0,
00084 PURPLE_MEDIA_RECV_AUDIO = 1 << 0,
00085 PURPLE_MEDIA_SEND_AUDIO = 1 << 1,
00086 PURPLE_MEDIA_RECV_VIDEO = 1 << 2,
00087 PURPLE_MEDIA_SEND_VIDEO = 1 << 3,
00088 PURPLE_MEDIA_AUDIO = PURPLE_MEDIA_RECV_AUDIO | PURPLE_MEDIA_SEND_AUDIO,
00089 PURPLE_MEDIA_VIDEO = PURPLE_MEDIA_RECV_VIDEO | PURPLE_MEDIA_SEND_VIDEO
00090 } PurpleMediaSessionType;
00091
00093 typedef enum {
00094 PURPLE_MEDIA_STATE_NEW = 0,
00095 PURPLE_MEDIA_STATE_CONNECTED,
00096 PURPLE_MEDIA_STATE_END,
00097 } PurpleMediaState;
00098
00100 typedef enum {
00101 PURPLE_MEDIA_INFO_HANGUP = 0,
00102 PURPLE_MEDIA_INFO_ACCEPT,
00103 PURPLE_MEDIA_INFO_REJECT,
00104 PURPLE_MEDIA_INFO_MUTE,
00105 PURPLE_MEDIA_INFO_UNMUTE,
00106 PURPLE_MEDIA_INFO_PAUSE,
00107 PURPLE_MEDIA_INFO_UNPAUSE,
00108 PURPLE_MEDIA_INFO_HOLD,
00109 PURPLE_MEDIA_INFO_UNHOLD,
00110 } PurpleMediaInfoType;
00111
00112 typedef enum {
00113 PURPLE_MEDIA_CANDIDATE_TYPE_HOST,
00114 PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX,
00115 PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX,
00116 PURPLE_MEDIA_CANDIDATE_TYPE_RELAY,
00117 PURPLE_MEDIA_CANDIDATE_TYPE_MULTICAST,
00118 } PurpleMediaCandidateType;
00119
00120 typedef enum {
00121 PURPLE_MEDIA_COMPONENT_NONE = 0,
00122 PURPLE_MEDIA_COMPONENT_RTP = 1,
00123 PURPLE_MEDIA_COMPONENT_RTCP = 2,
00124 } PurpleMediaComponentType;
00125
00126 typedef enum {
00127 PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
00128 PURPLE_MEDIA_NETWORK_PROTOCOL_TCP,
00129 } PurpleMediaNetworkProtocol;
00130
00131 #include "signals.h"
00132 #include "util.h"
00133
00134 #ifdef __cplusplus
00135 extern "C" {
00136 #endif
00137
00145 GType purple_media_session_type_get_type(void);
00146
00154 GType purple_media_candidate_type_get_type(void);
00155
00163 GType purple_media_network_protocol_get_type(void);
00164
00172 GType purple_media_get_type(void);
00173
00181 GType purple_media_state_changed_get_type(void);
00182
00190 GType purple_media_info_type_get_type(void);
00191
00199 GType purple_media_candidate_get_type(void);
00200
00215 PurpleMediaCandidate *purple_media_candidate_new(
00216 const gchar *foundation, guint component_id,
00217 PurpleMediaCandidateType type,
00218 PurpleMediaNetworkProtocol proto,
00219 const gchar *ip, guint port);
00220
00230 GList *purple_media_candidate_list_copy(GList *candidates);
00231
00239 void purple_media_candidate_list_free(GList *candidates);
00240
00241 gchar *purple_media_candidate_get_foundation(PurpleMediaCandidate *candidate);
00242 guint purple_media_candidate_get_component_id(PurpleMediaCandidate *candidate);
00243 gchar *purple_media_candidate_get_ip(PurpleMediaCandidate *candidate);
00244 guint16 purple_media_candidate_get_port(PurpleMediaCandidate *candidate);
00245 gchar *purple_media_candidate_get_base_ip(PurpleMediaCandidate *candidate);
00246 guint16 purple_media_candidate_get_base_port(PurpleMediaCandidate *candidate);
00247 PurpleMediaNetworkProtocol purple_media_candidate_get_protocol(
00248 PurpleMediaCandidate *candidate);
00249 guint32 purple_media_candidate_get_priority(PurpleMediaCandidate *candidate);
00250 PurpleMediaCandidateType purple_media_candidate_get_candidate_type(
00251 PurpleMediaCandidate *candidate);
00252 gchar *purple_media_candidate_get_username(PurpleMediaCandidate *candidate);
00253 gchar *purple_media_candidate_get_password(PurpleMediaCandidate *candidate);
00254 guint purple_media_candidate_get_ttl(PurpleMediaCandidate *candidate);
00255
00263 GType purple_media_codec_get_type(void);
00264
00277 PurpleMediaCodec *purple_media_codec_new(int id, const char *encoding_name,
00278 PurpleMediaSessionType media_type, guint clock_rate);
00279
00280 guint purple_media_codec_get_id(PurpleMediaCodec *codec);
00281 gchar *purple_media_codec_get_encoding_name(PurpleMediaCodec *codec);
00282 guint purple_media_codec_get_clock_rate(PurpleMediaCodec *codec);
00283 guint purple_media_codec_get_channels(PurpleMediaCodec *codec);
00284 GList *purple_media_codec_get_optional_parameters(PurpleMediaCodec *codec);
00285
00295 gchar *purple_media_codec_to_string(const PurpleMediaCodec *codec);
00296
00306 void purple_media_codec_add_optional_parameter(PurpleMediaCodec *codec,
00307 const gchar *name, const gchar *value);
00308
00317 void purple_media_codec_remove_optional_parameter(PurpleMediaCodec *codec,
00318 PurpleKeyValuePair *param);
00319
00331 PurpleKeyValuePair *purple_media_codec_get_optional_parameter(
00332 PurpleMediaCodec *codec, const gchar *name,
00333 const gchar *value);
00334
00344 GList *purple_media_codec_list_copy(GList *codecs);
00345
00353 void purple_media_codec_list_free(GList *codecs);
00354
00364 GList *purple_media_get_session_ids(PurpleMedia *media);
00365
00375 PurpleAccount *purple_media_get_account(PurpleMedia *media);
00376
00386 gpointer purple_media_get_prpl_data(PurpleMedia *media);
00387
00396 void purple_media_set_prpl_data(PurpleMedia *media, gpointer prpl_data);
00397
00407 void purple_media_error(PurpleMedia *media, const gchar *error, ...);
00408
00418 void purple_media_end(PurpleMedia *media, const gchar *session_id,
00419 const gchar *participant);
00420
00432 void purple_media_stream_info(PurpleMedia *media, PurpleMediaInfoType type,
00433 const gchar *session_id, const gchar *participant,
00434 gboolean local);
00435
00455 gboolean purple_media_add_stream(PurpleMedia *media, const gchar *sess_id,
00456 const gchar *who, PurpleMediaSessionType type,
00457 gboolean initiator, const gchar *transmitter,
00458 guint num_params, GParameter *params);
00459
00470 PurpleMediaSessionType purple_media_get_session_type(PurpleMedia *media, const gchar *sess_id);
00471
00481 struct _PurpleMediaManager *purple_media_get_manager(PurpleMedia *media);
00482
00493 GList *purple_media_get_codecs(PurpleMedia *media, const gchar *sess_id);
00494
00505 void purple_media_add_remote_candidates(PurpleMedia *media,
00506 const gchar *sess_id,
00507 const gchar *participant,
00508 GList *remote_candidates);
00509
00519 GList *purple_media_get_local_candidates(PurpleMedia *media,
00520 const gchar *sess_id,
00521 const gchar *participant);
00522
00523 #if 0
00524
00525
00526
00527
00528
00539 GList *purple_media_get_active_local_candidates(PurpleMedia *media,
00540 const gchar *sess_id, const gchar *participant);
00541
00552 GList *purple_media_get_active_remote_candidates(PurpleMedia *media,
00553 const gchar *sess_id, const gchar *participant);
00554 #endif
00555
00568 gboolean purple_media_set_remote_codecs(PurpleMedia *media, const gchar *sess_id,
00569 const gchar *participant, GList *codecs);
00570
00582 gboolean purple_media_candidates_prepared(PurpleMedia *media,
00583 const gchar *session_id, const gchar *participant);
00584
00596 gboolean purple_media_set_send_codec(PurpleMedia *media, const gchar *sess_id, PurpleMediaCodec *codec);
00597
00608 gboolean purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id);
00609
00621 gboolean purple_media_is_initiator(PurpleMedia *media,
00622 const gchar *sess_id, const gchar *participant);
00623
00635 gboolean purple_media_accepted(PurpleMedia *media, const gchar *sess_id,
00636 const gchar *participant);
00637
00647 void purple_media_set_input_volume(PurpleMedia *media, const gchar *session_id, double level);
00648
00659 void purple_media_set_output_volume(PurpleMedia *media, const gchar *session_id,
00660 const gchar *participant, double level);
00661
00674 gulong purple_media_set_output_window(PurpleMedia *media,
00675 const gchar *session_id, const gchar *participant,
00676 gulong window_id);
00677
00685 void purple_media_remove_output_windows(PurpleMedia *media);
00686
00687 #ifdef __cplusplus
00688 }
00689 #endif
00690
00691 G_END_DECLS
00692
00693 #endif