Ignore:
Timestamp:
Jan 29, 2007 6:36:38 PM (17 years ago)
Author:
bennylp
Message:

Some simple call testing to py_pjsua and bug fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip-apps/src/py_pjsua/py_pjsua.c

    r915 r916  
    2727static PyObject* obj_reconfigure_logging; 
    2828static PyObject* obj_logging_init; 
     29static long thread_id; 
    2930 
    3031/* 
     
    5152static void cb_logging_init(int level, const char *data, pj_size_t len) 
    5253{ 
    53          
     54    /* Ignore if this callback is called from alien thread context, 
     55     * or otherwise it will crash Python. 
     56     */ 
     57    if (pj_thread_local_get(thread_id) == 0) 
     58        return; 
     59 
    5460    if (PyCallable_Check(obj_logging_init)) 
    5561    { 
     
    176182 * The global callback object. 
    177183 */ 
    178 static callback_Object * obj_callback; 
     184static callback_Object * g_obj_callback; 
    179185 
    180186 
     
    185191static void cb_on_call_state(pjsua_call_id call_id, pjsip_event *e) 
    186192{ 
    187  
    188         printf("on_call_state called\n"); 
    189     if (PyCallable_Check(obj_callback->on_call_state)) 
     193    if (PyCallable_Check(g_obj_callback->on_call_state)) 
    190194    {    
    191195        pjsip_event_Object * obj; 
     
    198202                 
    199203        PyObject_CallFunctionObjArgs( 
    200             obj_callback->on_call_state,Py_BuildValue("i",call_id),obj,NULL 
     204            g_obj_callback->on_call_state,Py_BuildValue("i",call_id),obj,NULL 
    201205        ); 
    202206                 
     
    212216                                pjsip_rx_data *rdata) 
    213217{ 
    214         printf("on_incoming_call called\n"); 
    215     if (PyCallable_Check(obj_callback->on_incoming_call)) 
     218    if (PyCallable_Check(g_obj_callback->on_incoming_call)) 
    216219    { 
    217220        pjsip_rx_data_Object * obj = (pjsip_rx_data_Object *) 
     
    221224 
    222225        PyObject_CallFunctionObjArgs( 
    223                 obj_callback->on_incoming_call, 
     226                g_obj_callback->on_incoming_call, 
    224227                Py_BuildValue("i",acc_id), 
    225228                Py_BuildValue("i",call_id), 
     
    237240static void cb_on_call_media_state(pjsua_call_id call_id) 
    238241{ 
    239         printf("on_call_media_state called\n"); 
    240     if (PyCallable_Check(obj_callback->on_call_media_state)) 
    241     { 
    242         PyObject_CallFunction(obj_callback->on_call_media_state,"i",call_id); 
     242    if (PyCallable_Check(g_obj_callback->on_call_media_state)) 
     243    { 
     244        PyObject_CallFunction(g_obj_callback->on_call_media_state,"i",call_id); 
    243245    } 
    244246} 
     
    255257    PyObject * ret; 
    256258    int cd; 
    257         printf("on_call_transfer_request called\n"); 
    258     if (PyCallable_Check(obj_callback->on_call_transfer_request)) 
     259    if (PyCallable_Check(g_obj_callback->on_call_transfer_request)) 
    259260    { 
    260261        ret = PyObject_CallFunctionObjArgs( 
    261             obj_callback->on_call_transfer_request, 
     262            g_obj_callback->on_call_transfer_request, 
    262263            Py_BuildValue("i",call_id), 
    263264            PyString_FromStringAndSize(dst->ptr, dst->slen), 
     
    291292    PyObject * ret; 
    292293    int cnt; 
    293         printf("on_call_transfer_status called\n"); 
    294     if (PyCallable_Check(obj_callback->on_call_transfer_status)) 
     294    if (PyCallable_Check(g_obj_callback->on_call_transfer_status)) 
    295295    { 
    296296        ret = PyObject_CallFunctionObjArgs( 
    297             obj_callback->on_call_transfer_status, 
     297            g_obj_callback->on_call_transfer_status, 
    298298            Py_BuildValue("i",call_id), 
    299299            Py_BuildValue("i",status_code), 
     
    327327    PyObject * txt; 
    328328    int cd; 
    329         printf("on_call_replace_request called\n"); 
    330     if (PyCallable_Check(obj_callback->on_call_replace_request)) 
     329    if (PyCallable_Check(g_obj_callback->on_call_replace_request)) 
    331330    { 
    332331        pjsip_rx_data_Object * obj = (pjsip_rx_data_Object *) 
     
    336335 
    337336        ret = PyObject_CallFunctionObjArgs( 
    338             obj_callback->on_call_replace_request, 
     337            g_obj_callback->on_call_replace_request, 
    339338            Py_BuildValue("i",call_id), 
    340339            obj, 
     
    364363                                pjsua_call_id new_call_id) 
    365364{ 
    366         printf("on_call_replaced\n"); 
    367     if (PyCallable_Check(obj_callback->on_call_replaced)) 
     365    if (PyCallable_Check(g_obj_callback->on_call_replaced)) 
    368366    { 
    369367        PyObject_CallFunctionObjArgs( 
    370             obj_callback->on_call_replaced, 
     368            g_obj_callback->on_call_replaced, 
    371369            Py_BuildValue("i",old_call_id), 
    372370            Py_BuildValue("i",old_call_id), 
     
    383381static void cb_on_reg_state(pjsua_acc_id acc_id) 
    384382{ 
    385         printf("on_reg_state\n"); 
    386     if (PyCallable_Check(obj_callback->on_reg_state)) 
    387     { 
    388         PyObject_CallFunction(obj_callback->on_reg_state,"i",acc_id); 
     383    if (PyCallable_Check(g_obj_callback->on_reg_state)) 
     384    { 
     385        PyObject_CallFunction(g_obj_callback->on_reg_state,"i",acc_id); 
    389386    } 
    390387} 
     
    397394static void cb_on_buddy_state(pjsua_buddy_id buddy_id) 
    398395{ 
    399         printf("on_buddy_state called\n"); 
    400     if (PyCallable_Check(obj_callback->on_buddy_state)) 
    401     { 
    402         PyObject_CallFunction(obj_callback->on_buddy_state,"i",buddy_id); 
     396    if (PyCallable_Check(g_obj_callback->on_buddy_state)) 
     397    { 
     398        PyObject_CallFunction(g_obj_callback->on_buddy_state,"i",buddy_id); 
    403399    } 
    404400} 
     
    412408                        const pj_str_t *mime_type, const pj_str_t *body) 
    413409{ 
    414         printf("on_pager called\n"); 
    415     if (PyCallable_Check(obj_callback->on_pager)) 
     410    if (PyCallable_Check(g_obj_callback->on_pager)) 
    416411    { 
    417412        PyObject_CallFunctionObjArgs( 
    418             obj_callback->on_pager,Py_BuildValue("i",call_id), 
     413            g_obj_callback->on_pager,Py_BuildValue("i",call_id), 
    419414            PyString_FromStringAndSize(from->ptr, from->slen), 
    420415            PyString_FromStringAndSize(to->ptr, to->slen), 
     
    438433         
    439434    PyObject * obj = PyType_GenericNew(user_data, NULL, NULL); 
    440         printf("on_pager_status called\n"); 
    441     if (PyCallable_Check(obj_callback->on_pager)) 
     435    if (PyCallable_Check(g_obj_callback->on_pager)) 
    442436    { 
    443437        PyObject_CallFunctionObjArgs( 
    444             obj_callback->on_pager,Py_BuildValue("i",call_id), 
     438            g_obj_callback->on_pager,Py_BuildValue("i",call_id), 
    445439            PyString_FromStringAndSize(to->ptr, to->slen), 
    446440            PyString_FromStringAndSize(body->ptr, body->slen),obj, 
     
    460454                            pj_bool_t is_typing) 
    461455{ 
    462         printf("on_typing called\n"); 
    463     if (PyCallable_Check(obj_callback->on_typing)) 
     456    if (PyCallable_Check(g_obj_callback->on_typing)) 
    464457    { 
    465458        PyObject_CallFunctionObjArgs( 
    466             obj_callback->on_typing,Py_BuildValue("i",call_id), 
     459            g_obj_callback->on_typing,Py_BuildValue("i",call_id), 
    467460            PyString_FromStringAndSize(from->ptr, from->slen), 
    468461            PyString_FromStringAndSize(to->ptr, to->slen), 
     
    17261719#endif 
    17271720    status = pj_thread_register(name, thread_desc, &thread); 
     1721 
     1722    if (status == PJ_SUCCESS) 
     1723        status = pj_thread_local_set(thread_id, (void*)1); 
    17281724    return Py_BuildValue("i",status); 
    17291725} 
     
    19921988    } 
    19931989    status = pjsua_create(); 
    1994     //printf("status %d\n",status); 
     1990     
     1991    if (status == PJ_SUCCESS) { 
     1992        status = pj_thread_local_alloc(&thread_id); 
     1993        if (status == PJ_SUCCESS) 
     1994            status = pj_thread_local_set(thread_id, (void*)1); 
     1995    } 
     1996 
    19951997    return Py_BuildValue("i",status); 
    19961998} 
     
    20282030 
    20292031    if (ua_cfgObj != Py_None) { 
    2030                 ua_cfg = (config_Object *)ua_cfgObj; 
     2032        ua_cfg = (config_Object *)ua_cfgObj; 
    20312033        cfg_ua.cred_count = ua_cfg->cred_count; 
    20322034        for (i = 0; i < 4; i++) 
    2033                 { 
     2035        { 
    20342036            cfg_ua.cred_info[i] = ua_cfg->cred_info[i]; 
    2035                 } 
     2037        } 
    20362038        cfg_ua.max_calls = ua_cfg->max_calls; 
    20372039        for (i = 0; i < PJSUA_ACC_MAX_PROXIES; i++) 
    2038                 { 
     2040        { 
    20392041            cfg_ua.outbound_proxy[i] = ua_cfg->outbound_proxy[i]; 
    2040                 } 
     2042        } 
     2043 
     2044        g_obj_callback = ua_cfg->cb; 
     2045        Py_INCREF(g_obj_callback); 
     2046 
     2047        cfg_ua.cb.on_call_state = &cb_on_call_state; 
     2048        cfg_ua.cb.on_incoming_call = &cb_on_incoming_call; 
     2049        cfg_ua.cb.on_call_media_state = &cb_on_call_media_state; 
     2050        cfg_ua.cb.on_call_transfer_request = &cb_on_call_transfer_request; 
     2051        cfg_ua.cb.on_call_transfer_status = &cb_on_call_transfer_status; 
     2052        cfg_ua.cb.on_call_replace_request = &cb_on_call_replace_request; 
     2053        cfg_ua.cb.on_call_replaced = &cb_on_call_replaced; 
     2054        cfg_ua.cb.on_reg_state = &cb_on_reg_state; 
     2055        cfg_ua.cb.on_buddy_state = &cb_on_buddy_state; 
     2056        cfg_ua.cb.on_pager = &cb_on_pager; 
     2057        cfg_ua.cb.on_pager_status = &cb_on_pager_status; 
     2058        cfg_ua.cb.on_typing = &cb_on_typing; 
    20412059 
    20422060        cfg_ua.outbound_proxy_cnt = ua_cfg->outbound_proxy_cnt; 
     
    20452063        cfg_ua.user_agent.slen = strlen(cfg_ua.user_agent.ptr); 
    20462064 
    2047         obj_callback = ua_cfg->cb; 
    2048         cfg_ua.cb.on_call_state = &cb_on_call_state; 
    2049         cfg_ua.cb.on_incoming_call = &cb_on_incoming_call; 
    2050         cfg_ua.cb.on_call_media_state = &cb_on_call_media_state; 
    2051         cfg_ua.cb.on_call_transfer_request = &cb_on_call_transfer_request; 
    2052         cfg_ua.cb.on_call_transfer_status = &cb_on_call_transfer_status; 
    2053         cfg_ua.cb.on_call_replace_request = &cb_on_call_replace_request; 
    2054         cfg_ua.cb.on_call_replaced = &cb_on_call_replaced; 
    2055         cfg_ua.cb.on_reg_state = &cb_on_reg_state; 
    2056         cfg_ua.cb.on_buddy_state = &cb_on_buddy_state; 
    2057         cfg_ua.cb.on_pager = &cb_on_pager; 
    2058         cfg_ua.cb.on_pager_status = &cb_on_pager_status; 
    2059         cfg_ua.cb.on_typing = &cb_on_typing; 
    20602065        p_cfg_ua = &cfg_ua; 
    20612066    } else { 
    20622067        p_cfg_ua = NULL; 
    2063         } 
     2068    } 
     2069 
    20642070    if (log_cfgObj != Py_None) { 
    20652071        log_cfg = (logging_config_Object *)log_cfgObj; 
     
    20772083    } else { 
    20782084        p_cfg_log = NULL; 
    2079         } 
     2085    } 
     2086 
    20802087    if (media_cfgObj != Py_None) { 
    20812088        media_cfg = (media_config_Object *)media_cfgObj; 
     
    20932100        cfg_media.tx_drop_pct = media_cfg->tx_drop_pct; 
    20942101            p_cfg_media = &cfg_media; 
    2095         } else { 
     2102    } else { 
    20962103        p_cfg_media = NULL; 
    2097         } 
     2104    } 
     2105 
    20982106    status = pjsua_init(p_cfg_ua, p_cfg_log, p_cfg_media); 
    20992107    return Py_BuildValue("i",status); 
     
    39603968        return NULL; 
    39613969    } 
     3970 
     3971    pjsua_acc_config_default(&cfg); 
    39623972    if (acObj != Py_None) 
    39633973        { 
     
    39653975        cfg.cred_count = ac->cred_count; 
    39663976        for (i = 0; i < 8; i++)  
    3967                 { 
     3977        { 
    39683978            /*cfg.cred_info[i] = ac->cred_info[i];*/ 
    39693979                pjsip_cred_info_Object * ci = (pjsip_cred_info_Object *) 
     
    39803990                                (PyString_AsString(ci->username)); 
    39813991                cfg.cred_info[i].data_type = ci->data_type; 
    3982                 } 
     3992        } 
    39833993        cfg.force_contact.ptr = PyString_AsString(ac->force_contact); 
    39843994        cfg.force_contact.slen = strlen(PyString_AsString(ac->force_contact)); 
     
    39904000                cfg.proxy[i].ptr = PyString_AsString 
    39914001                                (PyList_GetItem((PyObject *)ac->proxy,i)); 
    3992                 } 
     4002        } 
    39934003        cfg.proxy_cnt = ac->proxy_cnt; 
    39944004        cfg.publish_enabled = ac->publish_enabled; 
     
    71637173    dst_uri.slen = strlen(PyString_AsString(sd)); 
    71647174    if (omdObj != Py_None) { 
    7165                 omd = (msg_data_Object *)omdObj; 
     7175        omd = (msg_data_Object *)omdObj; 
    71667176        msg_data.content_type.ptr = PyString_AsString(omd->content_type); 
    71677177        msg_data.content_type.slen = strlen 
     
    71747184                        options, &user_data, &msg_data, &call_id);       
    71757185        pj_pool_release(pool); 
    7176         } else { 
     7186    } else { 
    71777187        status = pjsua_call_make_call(acc_id, &dst_uri,  
    71787188                        options, &user_data, NULL, &call_id);    
    7179         } 
     7189    } 
     7190 
    71807191    return Py_BuildValue("ii",status, call_id); 
    71817192} 
     
    72547265    call_info_Object * oi; 
    72557266    pjsua_call_info info; 
    7256     int i; 
    72577267     
    72587268 
     
    72687278        oi = (call_info_Object *)call_info_new(&call_info_Type, NULL, NULL); 
    72697279        oi->acc_id = info.acc_id; 
    7270         for (i = 0; i < 128; i++) 
    7271         { 
    7272             oi->buf_.call_id[i] = info.buf_.call_id[i]; 
    7273             oi->buf_.last_status_text[i] = info.buf_.last_status_text[i]; 
    7274             oi->buf_.local_contact[i] = info.buf_.local_contact[i]; 
    7275             oi->buf_.local_info[i] = info.buf_.local_info[i]; 
    7276             oi->buf_.remote_contact[i] = info.buf_.remote_contact[i]; 
    7277             oi->buf_.remote_info[i] = info.buf_.remote_info[i]; 
    7278         } 
     7280        pj_ansi_snprintf(oi->buf_.call_id, sizeof(oi->buf_.call_id), 
     7281                         "%.*s", (int)info.call_id.slen, info.call_id.ptr); 
     7282        pj_ansi_snprintf(oi->buf_.last_status_text, sizeof(oi->buf_.last_status_text), 
     7283                         "%.*s", (int)info.last_status_text.slen, info.last_status_text.ptr); 
     7284        pj_ansi_snprintf(oi->buf_.local_contact, sizeof(oi->buf_.local_contact), 
     7285                         "%.*s", (int)info.local_contact.slen, info.local_contact.ptr); 
     7286        pj_ansi_snprintf(oi->buf_.local_info, sizeof(oi->buf_.local_info), 
     7287                         "%.*s", (int)info.local_info.slen, info.local_info.ptr); 
     7288        pj_ansi_snprintf(oi->buf_.remote_contact, sizeof(oi->buf_.remote_contact), 
     7289                         "%.*s", (int)info.remote_contact.slen, info.remote_contact.ptr); 
     7290        pj_ansi_snprintf(oi->buf_.remote_info, sizeof(oi->buf_.remote_info), 
     7291                         "%.*s", (int)info.remote_info.slen, info.remote_info.ptr); 
     7292 
    72797293        oi->call_id = PyString_FromStringAndSize(info.call_id.ptr,  
    72807294            info.call_id.slen); 
     
    73727386        return NULL; 
    73737387    } 
    7374          
     7388 
    73757389    reason.ptr = PyString_AsString(sr); 
    73767390    reason.slen = strlen(PyString_AsString(sr)); 
     
    74097423        PyObject * omdObj; 
    74107424    msg_data_Object * omd;     
    7411     pj_pool_t * pool; 
     7425    pj_pool_t * pool = NULL; 
    74127426 
    74137427    if (!PyArg_ParseTuple(pArgs, "iIOO", &call_id, &code, &sr, &omdObj)) 
     
    74297443        status = pjsua_call_hangup(call_id, code, &reason, &msg_data);   
    74307444        pj_pool_release(pool); 
    7431         } else { 
     7445    } else { 
    74327446        status = pjsua_call_hangup(call_id, code, &reason, NULL);        
    7433         } 
     7447    } 
    74347448    return Py_BuildValue("i",status); 
    74357449} 
Note: See TracChangeset for help on using the changeset viewer.