📄 py_pjsua.c
字号:
* !modified @ 051206
*/
static PyObject *py_pjsua_config_default(PyObject *pSelf, PyObject *pArgs)
{
config_Object *obj;
pjsua_config cfg;
if (!PyArg_ParseTuple(pArgs, ""))
{
return NULL;
}
pjsua_config_default(&cfg);
obj = (config_Object *) config_new(&config_Type, NULL, NULL);
obj->max_calls = cfg.max_calls;
obj->thread_cnt = cfg.thread_cnt;
return (PyObject *)obj;
}
/*
* py_pjsua_media_config_default
* !modified @ 051206
*/
static PyObject * py_pjsua_media_config_default(PyObject *pSelf,
PyObject *pArgs)
{
media_config_Object *obj;
pjsua_media_config cfg;
if (!PyArg_ParseTuple(pArgs, ""))
{
return NULL;
}
pjsua_media_config_default(&cfg);
obj = (media_config_Object *)PyType_GenericNew
(&media_config_Type, NULL, NULL);
obj->clock_rate = cfg.clock_rate;
obj->ec_options = cfg.ec_options;
obj->ec_tail_len = cfg.ec_tail_len;
obj->has_ioqueue = cfg.has_ioqueue;
obj->ilbc_mode = cfg.ilbc_mode;
obj->max_media_ports = cfg.max_media_ports;
obj->no_vad = cfg.no_vad;
obj->ptime = cfg.ptime;
obj->quality = cfg.quality;
obj->rx_drop_pct = cfg.rx_drop_pct;
obj->thread_cnt = cfg.thread_cnt;
obj->tx_drop_pct = cfg.tx_drop_pct;
return (PyObject *)obj;
}
/*
* py_pjsua_msg_data_init
* !modified @ 051206
*/
static PyObject *py_pjsua_msg_data_init(PyObject *pSelf, PyObject *pArgs)
{
msg_data_Object *obj;
pjsua_msg_data msg;
if (!PyArg_ParseTuple(pArgs, ""))
{
return NULL;
}
pjsua_msg_data_init(&msg);
obj = (msg_data_Object *)msg_data_new(&msg_data_Type, NULL, NULL);
Py_XDECREF(obj->content_type);
obj->content_type = PyString_FromStringAndSize(
msg.content_type.ptr, msg.content_type.slen
);
Py_XDECREF(obj->msg_body);
obj->msg_body = PyString_FromStringAndSize(
msg.msg_body.ptr, msg.msg_body.slen
);
translate_hdr_rev((pjsip_generic_string_hdr *)&msg.hdr_list,obj->hdr_list);
return (PyObject *)obj;
}
/*
* py_pjsua_reconfigure_logging
*/
static PyObject *py_pjsua_reconfigure_logging(PyObject *pSelf, PyObject *pArgs)
{
PyObject * logObj;
logging_config_Object *log;
pjsua_logging_config cfg;
pj_status_t status;
if (!PyArg_ParseTuple(pArgs, "O", &logObj))
{
return NULL;
}
if (logObj != Py_None)
{
log = (logging_config_Object *)logObj;
cfg.msg_logging = log->msg_logging;
cfg.level = log->level;
cfg.console_level = log->console_level;
cfg.decor = log->decor;
cfg.log_filename.ptr = PyString_AsString(log->log_filename);
cfg.log_filename.slen = strlen(cfg.log_filename.ptr);
Py_XDECREF(obj_log_cb);
obj_log_cb = log->cb;
Py_INCREF(obj_log_cb);
cfg.cb = &cb_log_cb;
status = pjsua_reconfigure_logging(&cfg);
} else {
status = pjsua_reconfigure_logging(NULL);
}
return Py_BuildValue("i",status);
}
/*
* py_pjsua_pool_create
*/
static PyObject *py_pjsua_pool_create(PyObject *pSelf, PyObject *pArgs)
{
pj_size_t init_size;
pj_size_t increment;
const char * name;
pj_pool_t *p;
pj_pool_Object *pool;
if (!PyArg_ParseTuple(pArgs, "sII", &name, &init_size, &increment))
{
return NULL;
}
p = pjsua_pool_create(name, init_size, increment);
pool = (pj_pool_Object *)PyType_GenericNew(&pj_pool_Type, NULL, NULL);
pool->pool = p;
return (PyObject *)pool;
}
/*
* py_pjsua_get_pjsip_endpt
*/
static PyObject *py_pjsua_get_pjsip_endpt(PyObject *pSelf, PyObject *pArgs)
{
pjsip_endpoint_Object *endpt;
pjsip_endpoint *e;
if (!PyArg_ParseTuple(pArgs, ""))
{
return NULL;
}
e = pjsua_get_pjsip_endpt();
endpt = (pjsip_endpoint_Object *)PyType_GenericNew(
&pjsip_endpoint_Type, NULL, NULL
);
endpt->endpt = e;
return (PyObject *)endpt;
}
/*
* py_pjsua_get_pjmedia_endpt
*/
static PyObject *py_pjsua_get_pjmedia_endpt(PyObject *pSelf, PyObject *pArgs)
{
pjmedia_endpt_Object *endpt;
pjmedia_endpt *e;
if (!PyArg_ParseTuple(pArgs, ""))
{
return NULL;
}
e = pjsua_get_pjmedia_endpt();
endpt = (pjmedia_endpt_Object *)PyType_GenericNew(
&pjmedia_endpt_Type, NULL, NULL
);
endpt->endpt = e;
return (PyObject *)endpt;
}
/*
* py_pjsua_get_pool_factory
*/
static PyObject *py_pjsua_get_pool_factory(PyObject *pSelf, PyObject *pArgs)
{
pj_pool_factory_Object *pool;
pj_pool_factory *p;
if (!PyArg_ParseTuple(pArgs, ""))
{
return NULL;
}
p = pjsua_get_pool_factory();
pool = (pj_pool_factory_Object *)PyType_GenericNew(
&pj_pool_factory_Type, NULL, NULL
);
pool->pool_fact = p;
return (PyObject *)pool;
}
/*
* py_pjsua_perror
*/
static PyObject *py_pjsua_perror(PyObject *pSelf, PyObject *pArgs)
{
const char *sender;
const char *title;
pj_status_t status;
if (!PyArg_ParseTuple(pArgs, "ssi", &sender, &title, &status))
{
return NULL;
}
pjsua_perror(sender, title, status);
Py_INCREF(Py_None);
return Py_None;
}
/*
* py_pjsua_create
*/
static PyObject *py_pjsua_create(PyObject *pSelf, PyObject *pArgs)
{
pj_status_t status;
if (!PyArg_ParseTuple(pArgs, ""))
{
return NULL;
}
status = pjsua_create();
if (status == PJ_SUCCESS)
{
status = pj_thread_local_alloc(&thread_id);
if (status == PJ_SUCCESS)
status = pj_thread_local_set(thread_id, (void*)1);
}
return Py_BuildValue("i",status);
}
/*
* py_pjsua_init
*/
static PyObject *py_pjsua_init(PyObject *pSelf, PyObject *pArgs)
{
pj_status_t status;
PyObject * ua_cfgObj;
config_Object * ua_cfg;
PyObject * log_cfgObj;
logging_config_Object * log_cfg;
PyObject * media_cfgObj;
media_config_Object * media_cfg;
pjsua_config cfg_ua;
pjsua_config * p_cfg_ua;
pjsua_logging_config cfg_log;
pjsua_logging_config * p_cfg_log;
pjsua_media_config cfg_media;
pjsua_media_config * p_cfg_media;
unsigned i;
if (!PyArg_ParseTuple(pArgs, "OOO", &ua_cfgObj, &log_cfgObj,&media_cfgObj))
{
return NULL;
}
pjsua_config_default(&cfg_ua);
pjsua_logging_config_default(&cfg_log);
pjsua_media_config_default(&cfg_media);
if (ua_cfgObj != Py_None)
{
ua_cfg = (config_Object *)ua_cfgObj;
cfg_ua.cred_count = ua_cfg->cred_count;
for (i = 0; i < 4; i++)
{
cfg_ua.cred_info[i] = ua_cfg->cred_info[i];
}
cfg_ua.max_calls = ua_cfg->max_calls;
for (i = 0; i < PJSUA_ACC_MAX_PROXIES; i++)
{
cfg_ua.outbound_proxy[i] = ua_cfg->outbound_proxy[i];
}
g_obj_callback = ua_cfg->cb;
Py_INCREF(g_obj_callback);
cfg_ua.cb.on_call_state = &cb_on_call_state;
cfg_ua.cb.on_incoming_call = &cb_on_incoming_call;
cfg_ua.cb.on_call_media_state = &cb_on_call_media_state;
cfg_ua.cb.on_call_transfer_request = &cb_on_call_transfer_request;
cfg_ua.cb.on_call_transfer_status = &cb_on_call_transfer_status;
cfg_ua.cb.on_call_replace_request = &cb_on_call_replace_request;
cfg_ua.cb.on_call_replaced = &cb_on_call_replaced;
cfg_ua.cb.on_reg_state = &cb_on_reg_state;
cfg_ua.cb.on_buddy_state = &cb_on_buddy_state;
cfg_ua.cb.on_pager = &cb_on_pager;
cfg_ua.cb.on_pager_status = &cb_on_pager_status;
cfg_ua.cb.on_typing = &cb_on_typing;
cfg_ua.outbound_proxy_cnt = ua_cfg->outbound_proxy_cnt;
cfg_ua.thread_cnt = ua_cfg->thread_cnt;
cfg_ua.user_agent.ptr = PyString_AsString(ua_cfg->user_agent);
cfg_ua.user_agent.slen = strlen(cfg_ua.user_agent.ptr);
p_cfg_ua = &cfg_ua;
} else {
p_cfg_ua = NULL;
}
if (log_cfgObj != Py_None)
{
log_cfg = (logging_config_Object *)log_cfgObj;
cfg_log.msg_logging = log_cfg->msg_logging;
cfg_log.level = log_cfg->level;
cfg_log.console_level = log_cfg->console_level;
cfg_log.decor = log_cfg->decor;
cfg_log.log_filename.ptr = PyString_AsString(log_cfg->log_filename);
cfg_log.log_filename.slen = strlen(cfg_log.log_filename.ptr);
Py_XDECREF(obj_log_cb);
obj_log_cb = log_cfg->cb;
Py_INCREF(obj_log_cb);
cfg_log.cb = &cb_log_cb;
p_cfg_log = &cfg_log;
} else {
p_cfg_log = NULL;
}
if (media_cfgObj != Py_None)
{
media_cfg = (media_config_Object *)media_cfgObj;
cfg_media.clock_rate = media_cfg->clock_rate;
cfg_media.ec_options = media_cfg->ec_options;
cfg_media.ec_tail_len = media_cfg->ec_tail_len;
cfg_media.has_ioqueue = media_cfg->has_ioqueue;
cfg_media.ilbc_mode = media_cfg->ilbc_mode;
cfg_media.max_media_ports = media_cfg->max_media_ports;
cfg_media.no_vad = media_cfg->no_vad;
cfg_media.ptime = media_cfg->ptime;
cfg_media.quality = media_cfg->quality;
cfg_media.rx_drop_pct = media_cfg->rx_drop_pct;
cfg_media.thread_cnt = media_cfg->thread_cnt;
cfg_media.tx_drop_pct = media_cfg->tx_drop_pct;
p_cfg_media = &cfg_media;
} else {
p_cfg_media = NULL;
}
status = pjsua_init(p_cfg_ua, p_cfg_log, p_cfg_media);
return Py_BuildValue("i",status);
}
/*
* py_pjsua_start
*/
static PyObject *py_pjsua_start(PyObject *pSelf, PyObject *pArgs)
{
pj_status_t status;
if (!PyArg_ParseTuple(pArgs, ""))
{
return NULL;
}
status = pjsua_start();
return Py_BuildValue("i",status);
}
/*
* py_pjsua_destroy
*/
static PyObject *py_pjsua_destroy(PyObject *pSelf, PyObject *pArgs)
{
pj_status_t status;
if (!PyArg_ParseTuple(pArgs, ""))
{
return NULL;
}
status = pjsua_destroy();
return Py_BuildValue("i",status);
}
/*
* py_pjsua_handle_events
*/
static PyObject *py_pjsua_handle_events(PyObject *pSelf, PyObject *pArgs)
{
int ret;
unsigned msec;
if (!PyArg_ParseTuple(pArgs, "i", &msec))
{
return NULL;
}
/* Since handle_events() will block, we must wrap it with ALLOW_THREADS
* construct, or otherwise many Python blocking functions (such as
* time.sleep(), readline(), etc.) may hang/block indefinitely.
* See http://www.python.org/doc/current/api/threads.html for more info.
*/
Py_BEGIN_ALLOW_THREADS
ret = pjsua_handle_events(msec);
Py_END_ALLOW_THREADS
return Py_BuildValue("i",ret);
}
/*
* py_pjsua_verify_sip_url
*/
static PyObject *py_pjsua_verify_sip_url(PyObject *pSelf, PyObject *pArgs)
{
pj_status_t status;
const char *url;
if (!PyArg_ParseTuple(pArgs, "s", &url))
{
return NULL;
}
status = pjsua_verify_sip_url(url);
return Py_BuildValue("i",status);
}
/*
* function doc
*/
static char pjsua_thread_register_doc[] =
"int py_pjsua.thread_register(string name, int[] desc)";
static char pjsua_perror_doc[] =
"void py_pjsua.perror (string sender, string title, int status) "
"Display error message for the specified error code. Parameters: "
"sender: The log sender field; "
"title: Message title for the error; "
"status: Status code.";
static char pjsua_create_doc[] =
"int py_pjsua.create (void) "
"Instantiate pjsua application. Application "
"must call this function before calling any other
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -