blob: 9e51a8f49a33fbf69a43cac92d8bb357c722bfdb [file] [log] [blame]
Benny Prijono8e4a1132013-04-03 22:41:23 +00001/* $Id$ */
2/*
3 * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
Riza Sulistyobc9c6772013-04-05 03:02:19 +000019#ifndef __PJSUA_COMMON_H__
20#define __PJSUA_COMMON_H__
Benny Prijono8e4a1132013-04-03 22:41:23 +000021
22#include <pjsua-lib/pjsua.h>
23
24PJ_BEGIN_DECL
25
26#define current_acc pjsua_acc_get_default()
27
Riza Sulistyo0c5d8f72013-04-19 06:05:06 +000028#define PJSUA_APP_NO_LIMIT_DURATION (int)0x7FFFFFFF
29#define PJSUA_APP_MAX_AVI 4
30#define PJSUA_APP_NO_NB -2
Benny Prijono8e4a1132013-04-03 22:41:23 +000031
32typedef struct input_result
33{
34 int nb_result;
35 char *uri_result;
36} input_result;
37
38/* Call specific data */
Riza Sulistyobc9c6772013-04-05 03:02:19 +000039typedef struct app_call_data
Benny Prijono8e4a1132013-04-03 22:41:23 +000040{
41 pj_timer_entry timer;
42 pj_bool_t ringback_on;
43 pj_bool_t ring_on;
Riza Sulistyobc9c6772013-04-05 03:02:19 +000044} app_call_data;
Benny Prijono8e4a1132013-04-03 22:41:23 +000045
46/* Video settings */
47typedef struct app_vid
48{
49 unsigned vid_cnt;
50 int vcapture_dev;
51 int vrender_dev;
52 pj_bool_t in_auto_show;
53 pj_bool_t out_auto_transmit;
54} app_vid;
55
Riza Sulistyo0c5d8f72013-04-19 06:05:06 +000056/* Enumeration of CLI frontends */
57typedef enum {
58 CLI_FE_CONSOLE = 1,
59 CLI_FE_TELNET = 2
60} CLI_FE;
61
62/** CLI config **/
63typedef struct cli_cfg_t
64{
65 /** Bitmask of CLI_FE **/
66 int cli_fe;
67 pj_cli_cfg cfg;
68 pj_cli_telnet_cfg telnet_cfg;
69 pj_cli_console_cfg console_cfg;
70} cli_cfg_t;
71
Benny Prijono8e4a1132013-04-03 22:41:23 +000072/* Pjsua application data */
73typedef struct pjsua_app_config
74{
75 pjsua_config cfg;
76 pjsua_logging_config log_cfg;
77 pjsua_media_config media_cfg;
78 pj_bool_t no_refersub;
79 pj_bool_t ipv6;
80 pj_bool_t enable_qos;
81 pj_bool_t no_tcp;
82 pj_bool_t no_udp;
83 pj_bool_t use_tls;
84 pjsua_transport_config udp_cfg;
85 pjsua_transport_config rtp_cfg;
86 pjsip_redirect_op redir_op;
87
88 unsigned acc_cnt;
89 pjsua_acc_config acc_cfg[PJSUA_MAX_ACC];
90
91 unsigned buddy_cnt;
92 pjsua_buddy_config buddy_cfg[PJSUA_MAX_BUDDIES];
93
Riza Sulistyobc9c6772013-04-05 03:02:19 +000094 app_call_data call_data[PJSUA_MAX_CALLS];
Benny Prijono8e4a1132013-04-03 22:41:23 +000095
96 pj_pool_t *pool;
97 /* Compatibility with older pjsua */
98
99 unsigned codec_cnt;
100 pj_str_t codec_arg[32];
101 unsigned codec_dis_cnt;
102 pj_str_t codec_dis[32];
103 pj_bool_t null_audio;
104 unsigned wav_count;
105 pj_str_t wav_files[32];
106 unsigned tone_count;
107 pjmedia_tone_desc tones[32];
108 pjsua_conf_port_id tone_slots[32];
109 pjsua_player_id wav_id;
110 pjsua_conf_port_id wav_port;
111 pj_bool_t auto_play;
112 pj_bool_t auto_play_hangup;
113 pj_timer_entry auto_hangup_timer;
114 pj_bool_t auto_loop;
115 pj_bool_t auto_conf;
116 pj_str_t rec_file;
117 pj_bool_t auto_rec;
118 pjsua_recorder_id rec_id;
119 pjsua_conf_port_id rec_port;
120 unsigned auto_answer;
121 unsigned duration;
122
123#ifdef STEREO_DEMO
124 pjmedia_snd_port *snd;
125 pjmedia_port *sc, *sc_ch1;
126 pjsua_conf_port_id sc_ch1_slot;
127#endif
128
129 float mic_level,
130 speaker_level;
131
132 int capture_dev, playback_dev;
133 unsigned capture_lat, playback_lat;
134
135 pj_bool_t no_tones;
136 int ringback_slot;
137 int ringback_cnt;
138 pjmedia_port *ringback_port;
139 int ring_slot;
140 int ring_cnt;
141 pjmedia_port *ring_port;
142
143 app_vid vid;
144 unsigned aud_cnt;
145
146 /* AVI to play */
147 unsigned avi_cnt;
148 struct {
149 pj_str_t path;
150 pjmedia_vid_dev_index dev_id;
151 pjsua_conf_port_id slot;
Riza Sulistyo0c5d8f72013-04-19 06:05:06 +0000152 } avi[PJSUA_APP_MAX_AVI];
Benny Prijono8e4a1132013-04-03 22:41:23 +0000153 pj_bool_t avi_auto_play;
154 int avi_def_idx;
155
156 /* CLI setting */
157 pj_bool_t use_cli;
Riza Sulistyo0c5d8f72013-04-19 06:05:06 +0000158 cli_cfg_t cli_cfg;
Benny Prijono8e4a1132013-04-03 22:41:23 +0000159} pjsua_app_config;
160
161/** Extern variable declaration **/
162extern pjsua_call_id current_call;
163extern pjsua_app_config app_config;
164extern int stdout_refresh;
165extern pj_bool_t stdout_refresh_quit;
Riza Sulistyobc9c6772013-04-05 03:02:19 +0000166extern pjsua_call_setting call_opt;
167extern pjsua_msg_data msg_data;
Riza Sulistyo0c5d8f72013-04-19 06:05:06 +0000168extern pj_bool_t app_running;
Benny Prijono8e4a1132013-04-03 22:41:23 +0000169
170PJ_DECL(int) my_atoi(const char *cs);
171PJ_DECL(pj_bool_t) find_next_call();
172PJ_DECL(pj_bool_t) find_prev_call();
173PJ_DECL(void) send_request(char *cstr_method, const pj_str_t *dst_uri);
174PJ_DECL(void) log_call_dump(int call_id);
175PJ_DECL(int) write_settings(pjsua_app_config *cfg, char *buf, pj_size_t max);
176PJ_DECL(void) app_config_init_video(pjsua_acc_config *acc_cfg);
177PJ_DECL(void) arrange_window(pjsua_vid_win_id wid);
178
Riza Sulistyobc9c6772013-04-05 03:02:19 +0000179/** Defined in pjsua_cli_cmd.c **/
180PJ_DECL(pj_bool_t) is_cli_inited();
181
Riza Sulistyobc9c6772013-04-05 03:02:19 +0000182/** Defined in pjsua_config.c **/
Riza Sulistyobc9c6772013-04-05 03:02:19 +0000183/** This is to load the configuration **/
Riza Sulistyo0c5d8f72013-04-19 06:05:06 +0000184PJ_DECL(pj_status_t) load_config(int argc,
185 char **argv,
186 pj_str_t *uri_arg);
187
188/** Pjsua app callback **/
189/** This callback is called when CLI is started. **/
190PJ_DECL(void) cli_on_started(pj_status_t status);
191
192/** This callback is called when "shutdown"/"restart" command is invoked **/
193PJ_DECL(pj_bool_t) cli_on_stopped(pj_bool_t restart, int argc, char **argv);
194
195/** This callback is called when "quit"/"restart" command is invoked **/
196PJ_DECL(pj_bool_t) legacy_on_stopped(pj_bool_t restart);
197
198/** Pjsua cli method **/
199PJ_DECL(pj_status_t) cli_init();
200PJ_DECL(pj_status_t) cli_main(pj_bool_t wait_telnet_cli);
201PJ_DECL(void) cli_destroy();
202PJ_DECL(void) cli_get_info(char *info, pj_size_t size);
203
204/** Legacy method **/
205PJ_DECL(void) legacy_main();
Riza Sulistyobc9c6772013-04-05 03:02:19 +0000206
Benny Prijono8e4a1132013-04-03 22:41:23 +0000207#if PJSUA_HAS_VIDEO
Riza Sulistyobc9c6772013-04-05 03:02:19 +0000208PJ_DECL(void) vid_print_dev(int id, const pjmedia_vid_dev_info *vdi,
209 const char *title);
Benny Prijono8e4a1132013-04-03 22:41:23 +0000210PJ_DECL(void) vid_list_devs();
Riza Sulistyobc9c6772013-04-05 03:02:19 +0000211PJ_DECL(void) app_config_show_video(int acc_id,
212 const pjsua_acc_config *acc_cfg);
Benny Prijono8e4a1132013-04-03 22:41:23 +0000213#endif
214
215#ifdef HAVE_MULTIPART_TEST
216 /*
217 * Enable multipart in msg_data and add a dummy body into the
218 * multipart bodies.
219 */
220 PJ_DECL(void) add_multipart(pjsua_msg_data *msg_data);
221# define TEST_MULTIPART(msg_data) add_multipart(msg_data)
222#else
223# define TEST_MULTIPART(msg_data)
224#endif
225
Riza Sulistyobc9c6772013-04-05 03:02:19 +0000226
227PJ_END_DECL
228
Riza Sulistyo0c5d8f72013-04-19 06:05:06 +0000229#endif /* __PJSUA_COMMON_H__ */
Benny Prijono8e4a1132013-04-03 22:41:23 +0000230