media.h

Go to the documentation of this file.
00001 
00006 /* purple
00007  *
00008  * Purple is the legal property of its developers, whose names are too numerous
00009  * to list here.  Please refer to the COPYRIGHT file distributed with this
00010  * source distribution.
00011  *
00012  * This program is free software; you can redistribute it and/or modify
00013  * it under the terms of the GNU General Public License as published by
00014  * the Free Software Foundation; either version 2 of the License, or
00015  * (at your option) any later version.
00016  *
00017  * This program is distributed in the hope that it will be useful,
00018  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020  * GNU General Public License for more details.
00021  *
00022  * You should have received a copy of the GNU General Public License
00023  * along with this program; if not, write to the Free Software
00024  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
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  * These two functions aren't being used and I'd rather not lock in the API
00526  * until they are needed. If they ever are.
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  /* _PURPLE_MEDIA_H_ */