📄 py_pjsua.c
字号:
if (PyTuple_Check(tuple))
{
hname.ptr = PyString_AsString(PyTuple_GetItem(tuple,0));
hname.slen = strlen(PyString_AsString
(PyTuple_GetItem(tuple,0)));
hvalue.ptr = PyString_AsString(PyTuple_GetItem(tuple,1));
hvalue.slen = strlen(PyString_AsString
(PyTuple_GetItem(tuple,1)));
} else {
hname.ptr = "";
hname.slen = 0;
hvalue.ptr = "";
hvalue.slen = 0;
}
new_hdr = pjsip_generic_string_hdr_create(pool, &hname, &hvalue);
pj_list_push_back((pj_list_type *)hdr, (pj_list_type *)new_hdr);
}
}
}
/*
* translate_hdr_rev
* internal function
* translate from pjsip_generic_string_hdr to hdr_list
*/
void translate_hdr_rev(pjsip_generic_string_hdr *hdr, PyObject *py_hdr_list)
{
int i;
int len;
pjsip_generic_string_hdr * p_hdr;
len = pj_list_size(hdr);
if (len > 0)
{
p_hdr = hdr;
Py_XDECREF(py_hdr_list);
py_hdr_list = PyList_New(len);
for (i = 0; i < len && p_hdr != NULL; i++)
{
PyObject * tuple;
PyObject * str;
tuple = PyTuple_New(2);
str = PyString_FromStringAndSize(p_hdr->name.ptr, p_hdr->name.slen);
PyTuple_SetItem(tuple, 0, str);
str = PyString_FromStringAndSize
(hdr->hvalue.ptr, p_hdr->hvalue.slen);
PyTuple_SetItem(tuple, 1, str);
PyList_SetItem(py_hdr_list, i, tuple);
p_hdr = p_hdr->next;
}
}
}
/*
* pj_pool_Object
*/
typedef struct
{
PyObject_HEAD
/* Type-specific fields go here. */
pj_pool_t * pool;
} pj_pool_Object;
/*
* pj_pool_Type
*/
static PyTypeObject pj_pool_Type =
{
PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
"py_pjsua.PJ_Pool", /*tp_name*/
sizeof(pj_pool_Object), /*tp_basicsize*/
0, /*tp_itemsize*/
0, /*tp_dealloc*/
0, /*tp_print*/
0, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash */
0, /*tp_call*/
0, /*tp_str*/
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT, /*tp_flags*/
"pj_pool_t objects", /* tp_doc */
};
/*
* pjsip_endpoint_Object
*/
typedef struct
{
PyObject_HEAD
/* Type-specific fields go here. */
pjsip_endpoint * endpt;
} pjsip_endpoint_Object;
/*
* pjsip_endpoint_Type
*/
static PyTypeObject pjsip_endpoint_Type =
{
PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
"py_pjsua.PJSIP_Endpoint", /*tp_name*/
sizeof(pjsip_endpoint_Object),/*tp_basicsize*/
0, /*tp_itemsize*/
0, /*tp_dealloc*/
0, /*tp_print*/
0, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash */
0, /*tp_call*/
0, /*tp_str*/
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT, /*tp_flags*/
"pjsip_endpoint objects", /* tp_doc */
};
/*
* pjmedia_endpt_Object
*/
typedef struct
{
PyObject_HEAD
/* Type-specific fields go here. */
pjmedia_endpt * endpt;
} pjmedia_endpt_Object;
/*
* pjmedia_endpt_Type
*/
static PyTypeObject pjmedia_endpt_Type =
{
PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
"py_pjsua.PJMedia_Endpt", /*tp_name*/
sizeof(pjmedia_endpt_Object), /*tp_basicsize*/
0, /*tp_itemsize*/
0, /*tp_dealloc*/
0, /*tp_print*/
0, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash */
0, /*tp_call*/
0, /*tp_str*/
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT, /*tp_flags*/
"pjmedia_endpt objects", /* tp_doc */
};
/*
* pj_pool_factory_Object
*/
typedef struct
{
PyObject_HEAD
/* Type-specific fields go here. */
pj_pool_factory * pool_fact;
} pj_pool_factory_Object;
/*
* pj_pool_factory_Type
*/
static PyTypeObject pj_pool_factory_Type =
{
PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
"py_pjsua.PJ_Pool_Factory",/*tp_name*/
sizeof(pj_pool_factory_Object), /*tp_basicsize*/
0, /*tp_itemsize*/
0, /*tp_dealloc*/
0, /*tp_print*/
0, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash */
0, /*tp_call*/
0, /*tp_str*/
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT, /*tp_flags*/
"pj_pool_factory objects", /* tp_doc */
};
/*
* pjsip_cred_info_Object
*/
typedef struct
{
PyObject_HEAD
/* Type-specific fields go here. */
PyObject * realm;
PyObject * scheme;
PyObject * username;
int data_type;
PyObject * data;
} pjsip_cred_info_Object;
/*
* cred_info_dealloc
* deletes a cred info from memory
*/
static void pjsip_cred_info_dealloc(pjsip_cred_info_Object* self)
{
Py_XDECREF(self->realm);
Py_XDECREF(self->scheme);
Py_XDECREF(self->username);
Py_XDECREF(self->data);
self->ob_type->tp_free((PyObject*)self);
}
/*
* cred_info_new
* constructor for cred_info object
*/
static PyObject * pjsip_cred_info_new(PyTypeObject *type, PyObject *args,
PyObject *kwds)
{
pjsip_cred_info_Object *self;
self = (pjsip_cred_info_Object *)type->tp_alloc(type, 0);
if (self != NULL)
{
self->realm = PyString_FromString("");
if (self->realm == NULL)
{
Py_DECREF(self);
return NULL;
}
self->scheme = PyString_FromString("");
if (self->scheme == NULL)
{
Py_DECREF(self);
return NULL;
}
self->username = PyString_FromString("");
if (self->username == NULL)
{
Py_DECREF(self);
return NULL;
}
self->data = PyString_FromString("");
if (self->data == NULL)
{
Py_DECREF(self);
return NULL;
}
}
return (PyObject *)self;
}
/*
* pjsip_cred_info_members
*/
static PyMemberDef pjsip_cred_info_members[] =
{
{
"realm", T_OBJECT_EX,
offsetof(pjsip_cred_info_Object, realm), 0,
"Realm"
},
{
"scheme", T_OBJECT_EX,
offsetof(pjsip_cred_info_Object, scheme), 0,
"Scheme"
},
{
"username", T_OBJECT_EX,
offsetof(pjsip_cred_info_Object, username), 0,
"User name"
},
{
"data", T_OBJECT_EX,
offsetof(pjsip_cred_info_Object, data), 0,
"The data, which can be a plaintext password or a hashed digest. "
},
{
"data_type", T_INT, offsetof(pjsip_cred_info_Object, data_type), 0,
"Type of data"
},
{NULL} /* Sentinel */
};
/*
* pjsip_cred_info_Type
*/
static PyTypeObject pjsip_cred_info_Type =
{
PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
"py_pjsua.PJSIP_Cred_Info", /*tp_name*/
sizeof(pjsip_cred_info_Object), /*tp_basicsize*/
0, /*tp_itemsize*/
(destructor)pjsip_cred_info_dealloc,/*tp_dealloc*/
0, /*tp_print*/
0, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash */
0, /*tp_call*/
0, /*tp_str*/
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT, /*tp_flags*/
"PJSIP Cred Info objects", /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
0, /* tp_methods */
pjsip_cred_info_members, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
pjsip_cred_info_new, /* tp_new */
};
/*
* py_pjsua_thread_register
* !added @ 061206
*/
static PyObject *py_pjsua_thread_register(PyObject *pSelf, PyObject
*pArgs)
{
pj_status_t status;
const char *name;
PyObject *py_desc;
pj_thread_t *thread;
void *thread_desc;
#if 0
int size;
int i;
int *td;
#endif
if (!PyArg_ParseTuple(pArgs, "sO", &name, &py_desc))
{
return NULL;
}
#if 0
size = PyList_Size(py_desc);
td = (int *)malloc(size * sizeof(int));
for (i = 0; i < size; i++)
{
if (!PyArg_Parse(PyList_GetItem(py_desc,i),"i", td[i]))
{
return NULL;
}
}
thread_desc = td;
#else
thread_desc = malloc(sizeof(pj_thread_desc));
#endif
status = pj_thread_register(name, thread_desc, &thread);
if (status == PJ_SUCCESS)
status = pj_thread_local_set(thread_id, (void*)1);
return Py_BuildValue("i",status);
}
/*
* py_pjsua_logging_config_default
* !modified @ 051206
*/
static PyObject *py_pjsua_logging_config_default(PyObject *pSelf,
PyObject *pArgs)
{
logging_config_Object *obj;
pjsua_logging_config cfg;
if (!PyArg_ParseTuple(pArgs, ""))
{
return NULL;
}
pjsua_logging_config_default(&cfg);
obj = (logging_config_Object *) logging_config_new
(&logging_config_Type,NULL,NULL);
obj->msg_logging = cfg.msg_logging;
obj->level = cfg.level;
obj->console_level = cfg.console_level;
obj->decor = cfg.decor;
return (PyObject *)obj;
}
/*
* py_pjsua_config_default
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -