Changeset 1246


Ignore:
Timestamp:
May 3, 2007 1:31:21 PM (17 years ago)
Author:
bennylp
Message:

Implemented ticket #246, #247, #261, #268, #250 for Symbian

Location:
pjproject/trunk
Files:
3 added
14 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/build.symbian/pjlib.mmp

    r1244 r1246  
    3131SOURCE          rand.c 
    3232SOURCE          rbtree.c 
    33 SOURCE          timer.c 
    3433SOURCE          types.c 
    3534 
     
    3837// Platform dependent source 
    3938// 
     39SOURCE          compat\string_compat.c 
    4040SOURCE          addr_resolv_symbian.cpp 
    4141SOURCE          exception_symbian.cpp 
     
    4343SOURCE          file_io_ansi.c 
    4444SOURCE          guid_simple.c 
     45SOURCE          ioqueue_symbian.cpp 
    4546SOURCE          ip_helper_generic.c 
    4647SOURCE          log_writer_symbian_console.cpp 
     
    5152SOURCE          os_timestamp_posix.c 
    5253SOURCE          pool_policy_new.cpp 
    53 SOURCE          compat\string_compat.c 
    5454SOURCE          sock_symbian.cpp 
    5555SOURCE          sock_select_symbian.cpp 
    56 SOURCE          ioqueue_symbian.cpp 
     56SOURCE          timer_symbian.cpp 
    5757SOURCE          unicode_symbian.cpp 
    5858 
  • pjproject/trunk/build.symbian/pjlib_util.mmp

    r1244 r1246  
    5858SYSTEMINCLUDE   \epoc32\include\libc 
    5959 
    60 LIBRARY         pjlib.lib  
    6160CAPABILITY      None 
    6261 
  • pjproject/trunk/build.symbian/pjproject.cww

    r1244 r1246  
    165165        <SESSION>-1</SESSION> 
    166166        <EDOCTYPE>0</EDOCTYPE> 
     167        <PATH USERELATIVEPATHS = "true">pjsip_ua.mcp</PATH> 
     168        <FRAMELOC> 
     169            <X>548</X> 
     170            <Y>123</Y> 
     171        </FRAMELOC> 
     172        <FRAMESIZE> 
     173            <W>400</W> 
     174            <H>372</H> 
     175        </FRAMESIZE> 
     176        <DOCKINFO> 
     177            <STATUS>1</STATUS> 
     178            <ROW>0</ROW> 
     179            <COLUMN>0</COLUMN> 
     180            <DOCKBARID>59420</DOCKBARID> 
     181            <PCTWIDTH>1.000000</PCTWIDTH> 
     182            <HGT>294</HGT> 
     183            <GROUPID> 
     184                <GIDHIGHPART>4294967294</GIDHIGHPART> 
     185                <GIDLOWPART>4294967294</GIDLOWPART> 
     186            </GROUPID> 
     187        </DOCKINFO> 
     188    </WINDOW> 
     189    <WINDOW> 
     190        <SESSION>-1</SESSION> 
     191        <EDOCTYPE>0</EDOCTYPE> 
     192        <PATH USERELATIVEPATHS = "true">pjsip_simple.mcp</PATH> 
     193        <FRAMELOC> 
     194            <X>0</X> 
     195            <Y>0</Y> 
     196        </FRAMELOC> 
     197        <FRAMESIZE> 
     198            <W>347</W> 
     199            <H>128</H> 
     200        </FRAMESIZE> 
     201        <DOCKINFO> 
     202            <STATUS>1</STATUS> 
     203            <ROW>0</ROW> 
     204            <COLUMN>0</COLUMN> 
     205            <DOCKBARID>59420</DOCKBARID> 
     206            <PCTWIDTH>1.000000</PCTWIDTH> 
     207            <HGT>294</HGT> 
     208            <GROUPID> 
     209                <GIDHIGHPART>4294967294</GIDHIGHPART> 
     210                <GIDLOWPART>4294967294</GIDLOWPART> 
     211            </GROUPID> 
     212        </DOCKINFO> 
     213    </WINDOW> 
     214    <WINDOW> 
     215        <SESSION>-1</SESSION> 
     216        <EDOCTYPE>0</EDOCTYPE> 
    167217        <PATH USERELATIVEPATHS = "true">pjsua_lib.mcp</PATH> 
    168218        <FRAMELOC> 
     
    215265        <SESSION>-1</SESSION> 
    216266        <EDOCTYPE>1</EDOCTYPE> 
    217         <PATH USERELATIVEPATHS = "true">..\pjlib\src\pj\sock_symbian.cpp</PATH> 
    218         <FRAMELOC> 
    219             <X>8</X> 
    220             <Y>27</Y> 
    221         </FRAMELOC> 
    222         <FRAMESIZE> 
    223             <W>646</W> 
    224             <H>464</H> 
     267        <PATH USERELATIVEPATHS = "true">..\pjsip-apps\src\symbian_ua\ua.cpp</PATH> 
     268        <MAXIMIZED>true</MAXIMIZED> 
     269        <FRAMELOC> 
     270            <X>4</X> 
     271            <Y>4</Y> 
     272        </FRAMELOC> 
     273        <FRAMESIZE> 
     274            <W>605</W> 
     275            <H>778</H> 
    225276        </FRAMESIZE> 
    226277        <DOCKINFO> 
     
    238289    </WINDOW> 
    239290    <WINDOW> 
    240         <SESSION>-1</SESSION> 
    241         <EDOCTYPE>1</EDOCTYPE> 
    242         <PATH USERELATIVEPATHS = "true">..\pjsip-apps\src\symbian_ua\main_symbian.cpp</PATH> 
    243         <FRAMELOC> 
    244             <X>8</X> 
    245             <Y>27</Y> 
    246         </FRAMELOC> 
    247         <FRAMESIZE> 
    248             <W>638</W> 
    249             <H>437</H> 
     291        <SESSION>-2147483648</SESSION> 
     292        <EDOCTYPE>36</EDOCTYPE> 
     293        <DEFAULT>true</DEFAULT> 
     294        <FRAMELOC> 
     295            <X>4</X> 
     296            <Y>23</Y> 
     297        </FRAMELOC> 
     298        <FRAMESIZE> 
     299            <W>470</W> 
     300            <H>705</H> 
    250301        </FRAMESIZE> 
    251302        <DOCKINFO> 
     
    263314    </WINDOW> 
    264315    <WINDOW> 
    265         <SESSION>-1</SESSION> 
    266         <EDOCTYPE>1</EDOCTYPE> 
    267         <PATH USERELATIVEPATHS = "true">..\pjsip-apps\src\symbian_ua\ua.cpp</PATH> 
     316        <SESSION>-2147483648</SESSION> 
     317        <EDOCTYPE>20</EDOCTYPE> 
     318        <DEFAULT>true</DEFAULT> 
    268319        <FRAMELOC> 
    269320            <X>4</X> 
     
    271322        </FRAMELOC> 
    272323        <FRAMESIZE> 
    273             <W>565</W> 
    274             <H>643</H> 
     324            <W>904</W> 
     325            <H>1791</H> 
    275326        </FRAMESIZE> 
    276327        <DOCKINFO> 
     
    288339    </WINDOW> 
    289340    <WINDOW> 
    290         <SESSION>-1</SESSION> 
    291         <EDOCTYPE>1</EDOCTYPE> 
    292         <PATH USERELATIVEPATHS = "true">..\pjlib\src\pj\ioqueue_symbian.cpp</PATH> 
    293         <FRAMELOC> 
    294             <X>10</X> 
    295             <Y>40</Y> 
    296         </FRAMELOC> 
    297         <FRAMESIZE> 
    298             <W>630</W> 
    299             <H>410</H> 
     341        <SESSION>-2147483648</SESSION> 
     342        <EDOCTYPE>23</EDOCTYPE> 
     343        <MAXIMIZED>true</MAXIMIZED> 
     344        <FRAMELOC> 
     345            <X>6</X> 
     346            <Y>81</Y> 
     347        </FRAMELOC> 
     348        <FRAMESIZE> 
     349            <W>566</W> 
     350            <H>477</H> 
    300351        </FRAMESIZE> 
    301352        <DOCKINFO> 
     
    312363        </DOCKINFO> 
    313364    </WINDOW> 
    314     <WINDOW> 
    315         <SESSION>-1</SESSION> 
    316         <EDOCTYPE>1</EDOCTYPE> 
    317         <PATH USERELATIVEPATHS = "true">..\pjlib\src\pj\os_core_symbian.cpp</PATH> 
    318         <FRAMELOC> 
    319             <X>6</X> 
    320             <Y>23</Y> 
    321         </FRAMELOC> 
    322         <FRAMESIZE> 
    323             <W>638</W> 
    324             <H>437</H> 
    325         </FRAMESIZE> 
    326         <DOCKINFO> 
    327             <STATUS>0</STATUS> 
    328             <ROW></ROW> 
    329             <COLUMN></COLUMN> 
    330             <DOCKBARID></DOCKBARID> 
    331             <PCTWIDTH></PCTWIDTH> 
    332             <HGT></HGT> 
    333             <GROUPID> 
    334                 <GIDHIGHPART></GIDHIGHPART> 
    335                 <GIDLOWPART></GIDLOWPART> 
    336             </GROUPID> 
    337         </DOCKINFO> 
    338     </WINDOW> 
    339     <WINDOW> 
    340         <SESSION>-1</SESSION> 
    341         <EDOCTYPE>1</EDOCTYPE> 
    342         <PATH USERELATIVEPATHS = "true">..\pjlib\src\pj\os_error_symbian.cpp</PATH> 
    343         <FRAMELOC> 
    344             <X>8</X> 
    345             <Y>27</Y> 
    346         </FRAMELOC> 
    347         <FRAMESIZE> 
    348             <W>638</W> 
    349             <H>437</H> 
    350         </FRAMESIZE> 
    351         <DOCKINFO> 
    352             <STATUS>0</STATUS> 
    353             <ROW></ROW> 
    354             <COLUMN></COLUMN> 
    355             <DOCKBARID></DOCKBARID> 
    356             <PCTWIDTH></PCTWIDTH> 
    357             <HGT></HGT> 
    358             <GROUPID> 
    359                 <GIDHIGHPART></GIDHIGHPART> 
    360                 <GIDLOWPART></GIDLOWPART> 
    361             </GROUPID> 
    362         </DOCKINFO> 
    363     </WINDOW> 
    364     <WINDOW> 
    365         <SESSION>-1</SESSION> 
    366         <EDOCTYPE>1</EDOCTYPE> 
    367         <PATH USERELATIVEPATHS = "true">..\pjlib\src\pj\errno.c</PATH> 
    368         <FRAMELOC> 
    369             <X>4</X> 
    370             <Y>23</Y> 
    371         </FRAMELOC> 
    372         <FRAMESIZE> 
    373             <W>646</W> 
    374             <H>464</H> 
    375         </FRAMESIZE> 
    376         <DOCKINFO> 
    377             <STATUS>0</STATUS> 
    378             <ROW></ROW> 
    379             <COLUMN></COLUMN> 
    380             <DOCKBARID></DOCKBARID> 
    381             <PCTWIDTH></PCTWIDTH> 
    382             <HGT></HGT> 
    383             <GROUPID> 
    384                 <GIDHIGHPART></GIDHIGHPART> 
    385                 <GIDLOWPART></GIDLOWPART> 
    386             </GROUPID> 
    387         </DOCKINFO> 
    388     </WINDOW> 
    389     <WINDOW> 
    390         <SESSION>-1</SESSION> 
    391         <EDOCTYPE>20</EDOCTYPE> 
    392         <MAXIMIZED>true</MAXIMIZED> 
    393         <FRAMELOC> 
    394             <X>0</X> 
    395             <Y>0</Y> 
    396         </FRAMELOC> 
    397         <FRAMESIZE> 
    398             <W>824</W> 
    399             <H>1521</H> 
    400         </FRAMESIZE> 
    401         <DOCKINFO> 
    402             <STATUS>0</STATUS> 
    403             <ROW></ROW> 
    404             <COLUMN></COLUMN> 
    405             <DOCKBARID></DOCKBARID> 
    406             <PCTWIDTH></PCTWIDTH> 
    407             <HGT></HGT> 
    408             <GROUPID> 
    409                 <GIDHIGHPART></GIDHIGHPART> 
    410                 <GIDLOWPART></GIDLOWPART> 
    411             </GROUPID> 
    412         </DOCKINFO> 
    413             <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\Symbian\9.1\S60_3rd_MR_2\EPOC32\RELEASE\WINSCW\UDEB\euser.dll" MACHINENAME = "Local Windows PC"/> 
    414             <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\Symbian\9.1\S60_3rd_MR_2\EPOC32\RELEASE\WINSCW\UDEB\ekern.exe" MACHINENAME = "Local Windows PC"/> 
    415             <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\WINNT\system32\ntdll.dll" MACHINENAME = "Local Windows PC"/> 
    416             <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\Symbian\9.1\S60_3rd_MR_2\EPOC32\RELEASE\WINSCW\UDEB\econs.dll" MACHINENAME = "Local Windows PC"/> 
    417     </WINDOW> 
    418     <WINDOW> 
    419         <SESSION>-2147483648</SESSION> 
    420         <EDOCTYPE>36</EDOCTYPE> 
    421         <DEFAULT>true</DEFAULT> 
    422         <FRAMELOC> 
    423             <X>4</X> 
    424             <Y>23</Y> 
    425         </FRAMELOC> 
    426         <FRAMESIZE> 
    427             <W>390</W> 
    428             <H>435</H> 
    429         </FRAMESIZE> 
    430         <DOCKINFO> 
    431             <STATUS>0</STATUS> 
    432             <ROW></ROW> 
    433             <COLUMN></COLUMN> 
    434             <DOCKBARID></DOCKBARID> 
    435             <PCTWIDTH></PCTWIDTH> 
    436             <HGT></HGT> 
    437             <GROUPID> 
    438                 <GIDHIGHPART></GIDHIGHPART> 
    439                 <GIDLOWPART></GIDLOWPART> 
    440             </GROUPID> 
    441         </DOCKINFO> 
    442     </WINDOW> 
    443     <WINDOW> 
    444         <SESSION>-2147483648</SESSION> 
    445         <EDOCTYPE>20</EDOCTYPE> 
    446         <DEFAULT>true</DEFAULT> 
    447         <FRAMELOC> 
    448             <X>4</X> 
    449             <Y>23</Y> 
    450         </FRAMELOC> 
    451         <FRAMESIZE> 
    452             <W>816</W> 
    453             <H>1494</H> 
    454         </FRAMESIZE> 
    455         <DOCKINFO> 
    456             <STATUS>0</STATUS> 
    457             <ROW></ROW> 
    458             <COLUMN></COLUMN> 
    459             <DOCKBARID></DOCKBARID> 
    460             <PCTWIDTH></PCTWIDTH> 
    461             <HGT></HGT> 
    462             <GROUPID> 
    463                 <GIDHIGHPART></GIDHIGHPART> 
    464                 <GIDLOWPART></GIDLOWPART> 
    465             </GROUPID> 
    466         </DOCKINFO> 
    467             <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\Symbian\9.1\S60_3rd_MR_2\EPOC32\RELEASE\WINSCW\UDEB\euser.dll" MACHINENAME = "Local Windows PC"/> 
    468             <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\Symbian\9.1\S60_3rd_MR_2\EPOC32\RELEASE\WINSCW\UDEB\ekern.exe" MACHINENAME = "Local Windows PC"/> 
    469             <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\WINNT\system32\ntdll.dll" MACHINENAME = "Local Windows PC"/> 
    470             <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\Symbian\9.1\S60_3rd_MR_2\EPOC32\RELEASE\WINSCW\UDEB\econs.dll" MACHINENAME = "Local Windows PC"/> 
    471     </WINDOW> 
    472     <WINDOW> 
    473         <SESSION>-2147483648</SESSION> 
    474         <EDOCTYPE>23</EDOCTYPE> 
    475         <DEFAULT>true</DEFAULT> 
    476         <FRAMELOC> 
    477             <X>6</X> 
    478             <Y>81</Y> 
    479         </FRAMELOC> 
    480         <FRAMESIZE> 
    481             <W>566</W> 
    482             <H>477</H> 
    483         </FRAMESIZE> 
    484         <DOCKINFO> 
    485             <STATUS>0</STATUS> 
    486             <ROW></ROW> 
    487             <COLUMN></COLUMN> 
    488             <DOCKBARID></DOCKBARID> 
    489             <PCTWIDTH></PCTWIDTH> 
    490             <HGT></HGT> 
    491             <GROUPID> 
    492                 <GIDHIGHPART></GIDHIGHPART> 
    493                 <GIDLOWPART></GIDLOWPART> 
    494             </GROUPID> 
    495         </DOCKINFO> 
    496     </WINDOW> 
    497365</MWIDEWORKSPACE> 
  • pjproject/trunk/build.symbian/symbian_ua.mmp

    r1242 r1246  
    2525SYSTEMINCLUDE   \epoc32\include\libc 
    2626 
    27 LIBRARY         pjsua_lib.lib pjsip_ua.lib pjsip_simple.lib pjsip.lib pjsdp.lib pjmedia.lib pjnath.lib pjlib_util.lib pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib eexe.lib 
    28 STATICLIBRARY   ecrt0.lib 
     27LIBRARY         esock.lib insock.lib charconv.lib euser.lib estlib.lib eexe.lib 
     28STATICLIBRARY   pjsua_lib.lib pjsip_ua.lib pjsip_simple.lib pjsip.lib pjsdp.lib pjmedia.lib pjnath.lib pjlib_util.lib pjlib.lib ecrt0.lib 
    2929CAPABILITY      None 
    3030 
  • pjproject/trunk/pjlib/include/pj/config.h

    r1244 r1246  
    3636#elif defined(__MWERKS__) 
    3737#  include <pj/compat/cc_codew.h> 
     38#elif defined(__GCCE__) 
     39#  include <pj/compat/cc_gcce.h> 
     40#elif defined(__ARMCC__) 
     41#  include <pj/compat/cc_armcc.h> 
    3842#else 
    3943#  error "Unknown compiler." 
  • pjproject/trunk/pjlib/include/pj/timer.h

    r669 r1246  
    6565 * The type for internal timer ID. 
    6666 */ 
     67#if defined(PJ_SYMBIAN) && PJ_SYMBIAN!=0 
     68typedef void *pj_timer_id_t; 
     69#else 
    6770typedef int pj_timer_id_t; 
     71#endif 
    6872 
    6973/**  
  • pjproject/trunk/pjlib/src/pj/guid_simple.c

    r974 r1246  
    5858 
    5959    strcpy(str->ptr, str_pid); 
    60     sprintf(str->ptr+4, "%04x", clock_seq++); 
    61     pj_memcpy(str->ptr+8, str_mac_addr, 12); 
     60    sprintf(str->ptr+4, "%08x", clock_seq++); 
     61    pj_memcpy(str->ptr+12, str_mac_addr, 8); 
    6262    str->slen = 20; 
    6363 
  • pjproject/trunk/pjlib/src/pj/ioqueue_symbian.cpp

    r1244 r1246  
    3535{ 
    3636    int              eventCount; 
    37     CPjTimeoutTimer *timeoutTimer; 
    3837}; 
    3938 
     
    439438    PJ_UNUSED_ARG(max_fd); 
    440439 
    441     ioq = (pj_ioqueue_t*) pj_pool_zalloc(pool, sizeof(pj_ioqueue_t)); 
    442     ioq->timeoutTimer = CPjTimeoutTimer::NewL(); 
     440    ioq = PJ_POOL_ZALLOC_T(pool, pj_ioqueue_t); 
    443441    *p_ioqueue = ioq; 
    444442    return PJ_SUCCESS; 
     
    451449PJ_DEF(pj_status_t) pj_ioqueue_destroy( pj_ioqueue_t *ioq ) 
    452450{ 
    453     delete ioq->timeoutTimer; 
    454     ioq->timeoutTimer = NULL; 
    455  
     451    PJ_UNUSED_ARG(ioq); 
    456452    return PJ_SUCCESS; 
    457453} 
     
    488484    pj_ioqueue_key_t *key; 
    489485 
    490     key = (pj_ioqueue_key_t*) pj_pool_zalloc(pool, sizeof(pj_ioqueue_key_t)); 
     486    key = PJ_POOL_ZALLOC_T(pool, pj_ioqueue_key_t); 
    491487    key->cbObj = CIoqueueCallback::NewL(ioq, key, sock, cb, user_data); 
    492488 
     
    553549                                     pj_size_t size ) 
    554550{ 
    555     pj_memset(op_key, 0, size); 
     551    pj_bzero(op_key, size); 
    556552} 
    557553 
     
    635631                             const pj_time_val *timeout) 
    636632{ 
    637     CPjTimeoutTimer *timer; 
    638  
    639     if (timeout) { 
    640         //if (!ioq->timeoutTimer->IsActive()) 
    641         if (0) 
    642             timer = ioq->timeoutTimer; 
    643         else 
    644             timer = CPjTimeoutTimer::NewL(); 
    645  
    646         timer->StartTimer(timeout->sec*1000 + timeout->msec); 
    647  
    648     } else { 
    649         timer = NULL; 
    650     } 
    651  
    652     ioq->eventCount = 0; 
    653  
    654     do { 
    655         PjSymbianOS::Instance()->WaitForActiveObjects(); 
    656     } while (ioq->eventCount == 0 && (!timer || (timer && !timer->HasTimedOut()))); 
    657  
    658     if (timer && !timer->HasTimedOut()) 
    659         timer->Cancel(); 
    660  
    661     if (timer && timer != ioq->timeoutTimer) 
    662         delete timer; 
    663  
    664     return ioq->eventCount; 
     633    /* Polling is not necessary on Symbian, since all async activities 
     634     * are registered to active scheduler. 
     635     */ 
     636    PJ_UNUSED_ARG(ioq); 
     637    PJ_UNUSED_ARG(timeout); 
     638    return 0; 
    665639} 
    666640 
  • pjproject/trunk/pjlib/src/pj/os_core_symbian.cpp

    r1245 r1246  
    8484 
    8585CPjTimeoutTimer::CPjTimeoutTimer() 
    86 : CActive(EPriorityNormal), hasTimedOut_(PJ_FALSE) 
     86: CActive(PJ_SYMBIAN_TIMER_PRIORITY), hasTimedOut_(PJ_FALSE) 
    8787{ 
    8888} 
     
    421421PJ_DEF(pj_status_t) pj_thread_sleep(unsigned msec) 
    422422{ 
    423     //Not a good idea, as we don't want network events to 
    424     //arrive while we're not polling them: 
    425     //PjSymbianOS::Instance()->WaitForActiveObjects(); 
    426  
    427     //.. so rather use this, which won't wake up Active Objects: 
    428423    User::After(msec*1000); 
    429  
    430424    return PJ_SUCCESS; 
    431425} 
  • pjproject/trunk/pjlib/src/pj/os_symbian.h

    r1235 r1246  
    2121 
    2222#include <pj/sock.h> 
     23#include <pj/string.h> 
    2324 
    2425#include <e32base.h> 
     
    3435class CPjSocketReader; 
    3536 
     37#ifndef PJ_SYMBIAN_TIMER_PRIORITY 
     38#    define PJ_SYMBIAN_TIMER_PRIORITY   EPriorityNormal 
     39#endif 
     40 
    3641// 
    3742// PJLIB Symbian's Socket 
     
    217222                               pj_sockaddr_in &pj_addr) 
    218223    { 
    219         memset(&pj_addr, 0, sizeof(pj_sockaddr_in)); 
     224        pj_bzero(&pj_addr, sizeof(pj_sockaddr_in)); 
    220225        pj_addr.sin_family = PJ_AF_INET; 
    221         pj_addr.sin_addr.s_addr = sym_addr.Address(); 
    222         pj_addr.sin_port = (pj_uint16_t) sym_addr.Port(); 
     226        pj_addr.sin_addr.s_addr = pj_htonl(sym_addr.Address()); 
     227        pj_addr.sin_port = pj_htons((pj_uint16_t) sym_addr.Port()); 
    223228    } 
    224229 
     
    229234    { 
    230235        sym_addr.Init(KAfInet); 
    231         sym_addr.SetAddress((TUint32)pj_addr.sin_addr.s_addr); 
    232         sym_addr.SetPort(pj_addr.sin_port); 
     236        sym_addr.SetAddress((TUint32)pj_ntohl(pj_addr.sin_addr.s_addr)); 
     237        sym_addr.SetPort(pj_ntohs(pj_addr.sin_port)); 
    233238    } 
    234239 
  • pjproject/trunk/pjlib/src/pj/sock_symbian.cpp

    r1244 r1246  
    211211PJ_DEF(pj_uint16_t) pj_ntohs(pj_uint16_t netshort) 
    212212{ 
    213     /* There's no difference in host/network byte order in Symbian */ 
     213#if PJ_IS_LITTLE_ENDIAN 
     214    return pj_swap16(netshort); 
     215#else 
    214216    return netshort; 
     217#endif 
    215218} 
    216219 
     
    220223PJ_DEF(pj_uint16_t) pj_htons(pj_uint16_t hostshort) 
    221224{ 
    222     /* There's no difference in host/network byte order in Symbian */ 
     225#if PJ_IS_LITTLE_ENDIAN 
     226    return pj_swap16(hostshort); 
     227#else 
    223228    return hostshort; 
     229#endif 
    224230} 
    225231 
     
    229235PJ_DEF(pj_uint32_t) pj_ntohl(pj_uint32_t netlong) 
    230236{ 
    231     /* There's no difference in host/network byte order in Symbian */ 
     237#if PJ_IS_LITTLE_ENDIAN 
     238    return pj_swap32(netlong); 
     239#else 
    232240    return netlong; 
     241#endif 
    233242} 
    234243 
     
    238247PJ_DEF(pj_uint32_t) pj_htonl(pj_uint32_t hostlong) 
    239248{ 
    240     /* There's no difference in host/network byte order in Symbian */ 
    241     return hostlong; 
     249#if PJ_IS_LITTLE_ENDIAN 
     250    return pj_swap32(hostlong); 
     251#else 
     252    return netlong; 
     253#endif 
    242254} 
    243255 
     
    251263    static char str8[20]; 
    252264 
    253     TInetAddr temp_addr((TUint32)inaddr.s_addr, (TUint)0); 
     265    /* (Symbian IP address is in host byte order) */ 
     266    TInetAddr temp_addr((TUint32)pj_ntohl(inaddr.s_addr), (TUint)0); 
    254267    temp_addr.Output(str16); 
    255268  
     
    295308    addr.Init(KAfInet); 
    296309    if (addr.Input(ip_addr) == KErrNone) { 
    297         /* Success */ 
    298         inp->s_addr = addr.Address(); 
     310        /* Success (Symbian IP address is in host byte order) */ 
     311        inp->s_addr = pj_htonl(addr.Address()); 
    299312        return 1; 
    300313    } else { 
     
    498511    PJ_CHECK_STACK(); 
    499512 
    500     pj_memset(&addr, 0, sizeof(addr)); 
     513    pj_bzero(&addr, sizeof(addr)); 
    501514    addr.sin_family = PJ_AF_INET; 
    502515    addr.sin_addr.s_addr = pj_htonl(addr32); 
  • pjproject/trunk/pjsip-apps/src/symbian_ua/ua.cpp

    r1245 r1246  
    4545 
    4646// 
     47// Destination URI (to make call, or to subscribe presence) 
     48// 
     49#define SIP_DST_URI     "sip:192.168.0.70:5061" 
     50 
     51// 
    4752// Account 
    4853// 
     
    5964 
    6065 
     66// 
     67// Globals 
     68// 
     69static pjsua_acc_id g_acc_id = PJSUA_INVALID_ID; 
     70static pjsua_call_id g_call_id = PJSUA_INVALID_ID; 
     71static pjsua_buddy_id g_buddy_id = PJSUA_INVALID_ID; 
    6172 
    6273 
     
    7081    PJ_UNUSED_ARG(rdata); 
    7182 
     83    if (g_call_id != PJSUA_INVALID_ID) { 
     84        pjsua_call_answer(call_id, PJSIP_SC_BUSY_HERE, NULL, NULL); 
     85        return; 
     86    } 
     87     
    7288    pjsua_call_get_info(call_id, &ci); 
    7389 
     
    7692                         ci.remote_info.ptr)); 
    7793 
     94    g_call_id = call_id; 
     95     
    7896    /* Automatically answer incoming calls with 200/OK */ 
    7997    pjsua_call_answer(call_id, 200, NULL, NULL); 
     
    88106 
    89107    pjsua_call_get_info(call_id, &ci); 
     108     
     109    if (ci.state == PJSIP_INV_STATE_DISCONNECTED) { 
     110        if (call_id == g_call_id) 
     111            g_call_id = PJSUA_INVALID_ID; 
     112    } else { 
     113        if (g_call_id == PJSUA_INVALID_ID) 
     114            g_call_id = call_id; 
     115    } 
     116     
    90117    PJ_LOG(3,(THIS_FILE, "Call %d state=%.*s", call_id, 
    91118                         (int)ci.state_text.slen, 
     
    108135 
    109136 
     137/* Handler on buddy state changed. */ 
     138static void on_buddy_state(pjsua_buddy_id buddy_id) 
     139{ 
     140    pjsua_buddy_info info; 
     141    pjsua_buddy_get_info(buddy_id, &info); 
     142 
     143    PJ_LOG(3,(THIS_FILE, "%.*s status is %.*s", 
     144              (int)info.uri.slen, 
     145              info.uri.ptr, 
     146              (int)info.status_text.slen, 
     147              info.status_text.ptr)); 
     148} 
     149 
     150 
     151/* Incoming IM message (i.e. MESSAGE request)!  */ 
     152static void on_pager(pjsua_call_id call_id, const pj_str_t *from,  
     153                     const pj_str_t *to, const pj_str_t *contact, 
     154                     const pj_str_t *mime_type, const pj_str_t *text) 
     155{ 
     156    /* Note: call index may be -1 */ 
     157    PJ_UNUSED_ARG(call_id); 
     158    PJ_UNUSED_ARG(to); 
     159    PJ_UNUSED_ARG(contact); 
     160    PJ_UNUSED_ARG(mime_type); 
     161 
     162    PJ_LOG(3,(THIS_FILE,"MESSAGE from %.*s: %.*s", 
     163              (int)from->slen, from->ptr, 
     164              (int)text->slen, text->ptr)); 
     165} 
     166 
     167 
     168/* Received typing indication  */ 
     169static void on_typing(pjsua_call_id call_id, const pj_str_t *from, 
     170                      const pj_str_t *to, const pj_str_t *contact, 
     171                      pj_bool_t is_typing) 
     172{ 
     173    PJ_UNUSED_ARG(call_id); 
     174    PJ_UNUSED_ARG(to); 
     175    PJ_UNUSED_ARG(contact); 
     176 
     177    PJ_LOG(3,(THIS_FILE, "IM indication: %.*s %s", 
     178              (int)from->slen, from->ptr, 
     179              (is_typing?"is typing..":"has stopped typing"))); 
     180} 
     181 
     182 
     183/* Call transfer request status. */ 
     184static void on_call_transfer_status(pjsua_call_id call_id, 
     185                                    int status_code, 
     186                                    const pj_str_t *status_text, 
     187                                    pj_bool_t final, 
     188                                    pj_bool_t *p_cont) 
     189{ 
     190    PJ_LOG(3,(THIS_FILE, "Call %d: transfer status=%d (%.*s) %s", 
     191              call_id, status_code, 
     192              (int)status_text->slen, status_text->ptr, 
     193              (final ? "[final]" : ""))); 
     194 
     195    if (status_code/100 == 2) { 
     196        PJ_LOG(3,(THIS_FILE,  
     197                  "Call %d: call transfered successfully, disconnecting call", 
     198                  call_id)); 
     199        pjsua_call_hangup(call_id, PJSIP_SC_GONE, NULL, NULL); 
     200        *p_cont = PJ_FALSE; 
     201    } 
     202} 
     203 
     204 
     205/* Notification that call is being replaced. */ 
     206static void on_call_replaced(pjsua_call_id old_call_id, 
     207                             pjsua_call_id new_call_id) 
     208{ 
     209    pjsua_call_info old_ci, new_ci; 
     210 
     211    pjsua_call_get_info(old_call_id, &old_ci); 
     212    pjsua_call_get_info(new_call_id, &new_ci); 
     213 
     214    PJ_LOG(3,(THIS_FILE, "Call %d with %.*s is being replaced by " 
     215                         "call %d with %.*s", 
     216                         old_call_id,  
     217                         (int)old_ci.remote_info.slen, old_ci.remote_info.ptr, 
     218                         new_call_id, 
     219                         (int)new_ci.remote_info.slen, new_ci.remote_info.ptr)); 
     220} 
     221 
     222 
    110223/* Logging callback */ 
    111224static void log_writer(int level, const char *buf, unsigned len) 
     
    126239 * url may contain URL to call. 
    127240 */ 
    128 static pj_status_t app_startup(char *url) 
    129 { 
    130     pjsua_acc_id acc_id = 0; 
     241static pj_status_t app_startup() 
     242{ 
    131243    pj_status_t status; 
    132244 
     
    139251        pjsua_perror(THIS_FILE, "pjsua_create() error", status); 
    140252        return status; 
    141     } 
    142  
    143     /* If argument is specified, it's got to be a valid SIP URL */ 
    144     if (url) { 
    145         status = pjsua_verify_sip_url(url); 
    146         if (status != PJ_SUCCESS) { 
    147                 pjsua_perror(THIS_FILE, "Invalid URL", status); 
    148                 return status; 
    149         } 
    150253    } 
    151254 
     
    162265        cfg.cb.on_call_media_state = &on_call_media_state; 
    163266        cfg.cb.on_call_state = &on_call_state; 
     267        cfg.cb.on_buddy_state = &on_buddy_state; 
     268        cfg.cb.on_pager = &on_pager; 
     269        cfg.cb.on_typing = &on_typing; 
     270        cfg.cb.on_call_transfer_status = &on_call_transfer_status; 
     271        cfg.cb.on_call_replaced = &on_call_replaced; 
    164272 
    165273        if (SIP_PROXY) { 
     
    200308        } 
    201309         
    202         pjsua_acc_add_local(tid, PJ_TRUE, &acc_id); 
     310        pjsua_acc_add_local(tid, PJ_TRUE, &g_acc_id); 
    203311    } 
    204312 
     
    225333        cfg.cred_info[0].data = pj_str(SIP_PASSWD); 
    226334 
    227         status = pjsua_acc_add(&cfg, PJ_TRUE, &acc_id); 
     335        status = pjsua_acc_add(&cfg, PJ_TRUE, &g_acc_id); 
    228336        if (status != PJ_SUCCESS) { 
    229337                pjsua_perror(THIS_FILE, "Error adding account", status); 
     
    233341    } 
    234342 
    235     /* If URL is specified, make call to the URL. */ 
    236     if (url != NULL) { 
    237         pj_str_t uri = pj_str(url); 
    238         status = pjsua_call_make_call(acc_id, &uri, 0, NULL, NULL, NULL); 
    239         if (status != PJ_SUCCESS) { 
    240                 pjsua_perror(THIS_FILE, "Error making call", status); 
    241                 pjsua_destroy(); 
    242                 return status; 
    243         } 
    244                          
    245     } 
    246  
     343    if (SIP_DST_URI) { 
     344        pjsua_buddy_config bcfg; 
     345     
     346        pjsua_buddy_config_default(&bcfg); 
     347        bcfg.uri = pj_str(SIP_DST_URI); 
     348        bcfg.subscribe = PJ_FALSE; 
     349         
     350        pjsua_buddy_add(&bcfg, &g_buddy_id); 
     351    } 
    247352    return PJ_SUCCESS; 
    248353} 
     
    308413                "  D    Dump all states (detail)\n" 
    309414                "  P    Dump pool factory\n" 
     415                "  m    Make call\n" 
     416                "  a    Answer call\n" 
    310417                "  h    Hangup all calls\n" 
     418                "  s    Subscribe to buddy presence\n" 
     419                "  S    Unsubscribe buddy presence\n" 
     420                "  o    Set account online\n" 
     421                "  O    Set account offline\n" 
    311422                "  q    Quit\n")); 
    312423} 
     
    316427{ 
    317428        TKeyCode kc = con_->KeyCode(); 
    318  
     429        pj_bool_t reschedule = PJ_TRUE; 
     430         
    319431        switch (kc) { 
    320432        case 'q': 
    321433                asw_->AsyncStop(); 
     434                reschedule = PJ_FALSE; 
    322435                break; 
    323436        case 'D': 
    324437        case 'd': 
    325438                pjsua_dump(kc == 'D'); 
    326                 Run(); 
    327439                break; 
    328440        case 'P': 
    329441                pj_pool_factory_dump(&pjsua_var.cp.factory, PJ_TRUE); 
    330442                break; 
     443        case 'm': 
     444                if (g_call_id != PJSUA_INVALID_ID) { 
     445                        PJ_LOG(3,(THIS_FILE, "Another call is active"));         
     446                        break; 
     447                } 
     448         
     449                if (pjsua_verify_sip_url(SIP_DST_URI) == PJ_SUCCESS) { 
     450                        pj_str_t dst = pj_str(SIP_DST_URI); 
     451                        pjsua_call_make_call(g_acc_id, &dst, 0, NULL, 
     452                                             NULL, &g_call_id); 
     453                } else { 
     454                        PJ_LOG(3,(THIS_FILE, "Invalid SIP URI")); 
     455                } 
     456                break; 
     457        case 'a': 
     458                if (g_call_id != PJSUA_INVALID_ID) 
     459                        pjsua_call_answer(g_call_id, 200, NULL, NULL); 
     460                break; 
    331461        case 'h': 
    332462                pjsua_call_hangup_all(); 
    333                 Run(); 
     463                break; 
     464        case 's': 
     465        case 'S': 
     466                if (g_buddy_id != PJSUA_INVALID_ID) 
     467                        pjsua_buddy_subscribe_pres(g_buddy_id, kc=='s'); 
     468                break; 
     469        case 'o': 
     470        case 'O': 
     471                pjsua_acc_set_online_status(g_acc_id, kc=='o'); 
    334472                break; 
    335473        default: 
    336474                PJ_LOG(3,(THIS_FILE, "Keycode '%c' (%d) is pressed", 
    337475                          kc, kc)); 
     476                break; 
     477        } 
     478 
     479        PrintMenu(); 
     480         
     481        if (reschedule) 
    338482                Run(); 
    339                 break; 
    340         } 
    341  
    342         PrintMenu(); 
    343483} 
    344484 
     
    349489         
    350490        // Initialize pjsua 
    351         status  = app_startup("sip:192.168.0.77"); 
     491        status  = app_startup(); 
    352492        if (status != PJ_SUCCESS) 
    353493                return status; 
  • pjproject/trunk/pjsip/src/pjsip/sip_transaction.c

    r1241 r1246  
    142142                                               (64*PJSIP_T1_TIMEOUT)%1000 }; 
    143143 
    144 /* Internal timer IDs */ 
    145 enum Transaction_Timer_Id 
    146 { 
    147     TSX_TIMER_RETRANSMISSION, 
    148     TSX_TIMER_TIMEOUT, 
    149 }; 
     144#define TIMER_INACTIVE  0 
     145#define TIMER_ACTIVE    1 
    150146 
    151147 
     
    911907 
    912908    tsx->handle_200resp = 1; 
    913     tsx->retransmit_timer.id = TSX_TIMER_RETRANSMISSION; 
    914     tsx->retransmit_timer._timer_id = -1; 
     909    tsx->retransmit_timer.id = 0; 
    915910    tsx->retransmit_timer.user_data = tsx; 
    916911    tsx->retransmit_timer.cb = &tsx_timer_callback; 
    917     tsx->timeout_timer.id = TSX_TIMER_TIMEOUT; 
    918     tsx->timeout_timer._timer_id = -1; 
     912    tsx->timeout_timer.id = 0; 
    919913    tsx->timeout_timer.user_data = tsx; 
    920914    tsx->timeout_timer.cb = &tsx_timer_callback; 
     
    950944    } 
    951945    /* Cancel timeout timer. */ 
    952     if (tsx->timeout_timer._timer_id != -1) { 
     946    if (tsx->timeout_timer.id != 0) { 
    953947        pjsip_endpt_cancel_timer(tsx->endpt, &tsx->timeout_timer); 
    954         tsx->timeout_timer._timer_id = -1; 
     948        tsx->timeout_timer.id = 0; 
    955949    } 
    956950    /* Cancel retransmission timer. */ 
    957     if (tsx->retransmit_timer._timer_id != -1) { 
     951    if (tsx->retransmit_timer.id != 0) { 
    958952        pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer); 
    959         tsx->retransmit_timer._timer_id = -1; 
     953        tsx->retransmit_timer.id = 0; 
    960954    } 
    961955 
     
    1002996    PJ_UNUSED_ARG(theap); 
    1003997 
     998    entry->id = 0; 
     999     
    10041000    PJ_LOG(5,(tsx->obj_name, "%s timer event",  
    1005              (entry->id==TSX_TIMER_RETRANSMISSION ? "Retransmit":"Timeout"))); 
    1006  
    1007  
    1008     if (entry->id == TSX_TIMER_RETRANSMISSION) { 
    1009         PJSIP_EVENT_INIT_TIMER(event, &tsx->retransmit_timer); 
    1010     } else { 
    1011         PJSIP_EVENT_INIT_TIMER(event, &tsx->timeout_timer); 
    1012     } 
     1001             (entry==&tsx->retransmit_timer ? "Retransmit":"Timeout"))); 
     1002 
     1003 
     1004    PJSIP_EVENT_INIT_TIMER(event, entry); 
    10131005 
    10141006    /* Dispatch event to transaction. */ 
     
    10821074        } else { 
    10831075            /* Cancel timeout timer. */ 
    1084             if (tsx->timeout_timer._timer_id != -1) { 
     1076            if (tsx->timeout_timer.id != 0) { 
    10851077                pjsip_endpt_cancel_timer(tsx->endpt, &tsx->timeout_timer); 
    1086                 tsx->timeout_timer._timer_id = -1; 
     1078                tsx->timeout_timer.id = 0; 
    10871079            } 
    10881080 
     1081            tsx->timeout_timer.id = TIMER_ACTIVE; 
    10891082            pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer,  
    10901083                                        &timeout); 
     
    18221815    timeout.sec = msec_time / 1000; 
    18231816    timeout.msec = msec_time % 1000; 
     1817    tsx->retransmit_timer.id = TIMER_ACTIVE; 
    18241818    pjsip_endpt_schedule_timer( tsx->endpt, &tsx->retransmit_timer,  
    18251819                                &timeout); 
     
    19131907         * timeout. 
    19141908         */ 
     1909        tsx->timeout_timer.id = TIMER_ACTIVE; 
    19151910        pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer,  
    19161911                                    &timeout_timer_val); 
     
    19241919                tsx->transport_flag |= TSX_HAS_PENDING_RESCHED; 
    19251920            } else { 
     1921                tsx->retransmit_timer.id = TIMER_ACTIVE; 
    19261922                pjsip_endpt_schedule_timer(tsx->endpt, &tsx->retransmit_timer, 
    19271923                                           &t1_timer_val); 
     
    19641960 
    19651961        /* Cancel retransmission timer. */ 
    1966         if (tsx->retransmit_timer._timer_id != -1) { 
     1962        if (tsx->retransmit_timer.id != 0) { 
    19671963            pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer); 
    1968             tsx->retransmit_timer._timer_id = -1; 
     1964            tsx->retransmit_timer.id = 0; 
    19691965        } 
    19701966        tsx->transport_flag &= ~(TSX_HAS_PENDING_RESCHED); 
     
    19971993         */ 
    19981994        if (code >= 200) { 
    1999             if (tsx->retransmit_timer._timer_id != -1) { 
     1995            if (tsx->retransmit_timer.id != 0) { 
    20001996                pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer); 
    2001                 tsx->retransmit_timer._timer_id = -1; 
     1997                tsx->retransmit_timer.id = 0; 
    20021998            } 
    20031999 
    2004             if (tsx->timeout_timer._timer_id != -1) { 
     2000            if (tsx->timeout_timer.id != 0) { 
    20052001                pjsip_endpt_cancel_timer(tsx->endpt, &tsx->timeout_timer); 
    2006                 tsx->timeout_timer._timer_id = -1; 
     2002                tsx->timeout_timer.id = 0; 
    20072003            } 
    20082004 
     
    20112007             * retransmit timer will be rescheduled at T2. 
    20122008             */ 
    2013             if (tsx->retransmit_timer._timer_id != -1) { 
     2009            if (tsx->retransmit_timer.id != 0) { 
    20142010                pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer); 
    2015                 tsx->retransmit_timer._timer_id = -1; 
     2011                tsx->retransmit_timer.id = 0; 
    20162012            } 
    20172013 
     
    20292025            } else { 
    20302026                if (!tsx->is_reliable) { 
     2027                    tsx->retransmit_timer.id = TIMER_ACTIVE; 
    20312028                    pjsip_endpt_schedule_timer(tsx->endpt,  
    20322029                                               &tsx->retransmit_timer, 
     
    22022199                        tsx->transport_flag |= TSX_HAS_PENDING_RESCHED; 
    22032200                    } else { 
     2201                        tsx->retransmit_timer.id = TIMER_ACTIVE; 
    22042202                        pjsip_endpt_schedule_timer( tsx->endpt,  
    22052203                                                    &tsx->retransmit_timer, 
     
    22402238                } 
    22412239 
     2240                tsx->timeout_timer.id = TIMER_ACTIVE; 
    22422241                pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer,  
    22432242                                            &timeout); 
     
    22652264            if (tsx->method.id == PJSIP_INVITE_METHOD) { 
    22662265                /* Start timer H for INVITE */ 
     2266                tsx->timeout_timer.id = TIMER_ACTIVE; 
    22672267                pjsip_endpt_schedule_timer(tsx->endpt,&tsx->timeout_timer, 
    22682268                                           &timeout_timer_val); 
    22692269            } else if (!tsx->is_reliable) { 
    22702270                /* Start timer J on 64*T1 seconds for non-INVITE */ 
     2271                tsx->timeout_timer.id = TIMER_ACTIVE; 
    22712272                pjsip_endpt_schedule_timer(tsx->endpt,&tsx->timeout_timer, 
    22722273                                           &timeout_timer_val); 
     
    22742275                /* Start timer J on zero seconds for non-INVITE */ 
    22752276                pj_time_val zero_time = { 0, 0 }; 
     2277                tsx->timeout_timer.id = TIMER_ACTIVE; 
    22762278                pjsip_endpt_schedule_timer(tsx->endpt,&tsx->timeout_timer, 
    22772279                                           &zero_time); 
     
    22902292                        tsx->transport_flag |= TSX_HAS_PENDING_RESCHED; 
    22912293                    } else { 
     2294                        tsx->retransmit_timer.id = TIMER_ACTIVE; 
    22922295                        pjsip_endpt_schedule_timer(tsx->endpt,  
    22932296                                                   &tsx->retransmit_timer,  
     
    24272430                timeout.sec = timeout.msec = 0; 
    24282431            } 
     2432            tsx->timeout_timer.id = TIMER_ACTIVE; 
    24292433            pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer,  
    24302434                                        &timeout); 
    24312435 
    24322436            /* Cancel retransmission timer */ 
    2433             if (tsx->retransmit_timer._timer_id != -1) { 
     2437            if (tsx->retransmit_timer.id != 0) { 
    24342438                pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer); 
    2435                 tsx->retransmit_timer._timer_id = -1; 
     2439                tsx->retransmit_timer.id = 0; 
    24362440            } 
    24372441 
     
    24942498            timeout.sec = timeout.msec = 0; 
    24952499        } 
     2500        tsx->timeout->timer.id = TSX_TIMER_TIMEOUT; 
    24962501        pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer, &timeout); 
    24972502 
     
    25622567            timeout.sec = timeout.msec = 0; 
    25632568        } 
     2569        tsx->timeout_timer.id = TIMER_ACTIVE; 
    25642570        pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer, &timeout); 
    25652571 
     
    26022608 
    26032609            /* Cease retransmission. */ 
    2604             if (tsx->retransmit_timer._timer_id != -1) { 
     2610            if (tsx->retransmit_timer.id != 0) { 
    26052611                pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer); 
    2606                 tsx->retransmit_timer._timer_id = -1; 
     2612                tsx->retransmit_timer.id = 0; 
    26072613            } 
    26082614            tsx->transport_flag &= ~(TSX_HAS_PENDING_RESCHED); 
     
    26102616            /* Start timer I in T4 interval (transaction termination). */ 
    26112617            pjsip_endpt_cancel_timer( tsx->endpt, &tsx->timeout_timer ); 
     2618            tsx->timeout_timer.id = TIMER_ACTIVE; 
    26122619            pjsip_endpt_schedule_timer( tsx->endpt, &tsx->timeout_timer,  
    26132620                                        &t4_timer_val); 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_core.c

    r1224 r1246  
    646646static void busy_sleep(unsigned msec) 
    647647{ 
     648#if defined(PJ_SYMBIAN) && PJ_SYMBIAN != 0 
     649    pj_thread_sleep(msec); 
     650#else 
    648651    pj_time_val timeout, now; 
    649652 
     
    657660        pj_gettimeofday(&now); 
    658661    } while (PJ_TIME_VAL_LT(now, timeout)); 
     662#endif 
    659663} 
    660664 
Note: See TracChangeset for help on using the changeset viewer.