⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 py_pjsua.c

📁 一个开源SIP协议栈
💻 C
📖 第 1 页 / 共 5 页
字号:
            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 + -