[reSIProcate] Register crash after the third time login?

Scott Godin slgodin at icescape.com
Mon Apr 9 10:29:00 CDT 2007


You should not be changing the MasterProfile at runtime.  You should
create a new UserProfile and pass this to the makeRegistration function.

 

From: resiprocate-devel-bounces at list.resiprocate.org
[mailto:resiprocate-devel-bounces at list.resiprocate.org] On Behalf Of
Dien Ba Quang
Sent: Monday, April 09, 2007 11:14 AM
To: resiprocate-devel at list.resiprocate.org
Subject: [reSIProcate] Register crash after the third time login?

 

Hi all,

I'm writing a soft phone using resiprocate as a sip stack. I have a
problem with register:
If i login three times in a row resiprocate crashes on the third time at
line 775 in dialogset.cxx

AppDialog* appDialog = mAppDialogSet->createAppDialog(msg);

Do you have any solution for that issue?
Thank you very much.

DBQ.
PS: Bellow is my login function( before calling Register function I have
called a function called InitResiprocate to initialize sipstack, sipdum,
...): 

void Csipmmc::Register(char* struser, char* strpasswd, char* strrealm)
{
    try {
        bool first = true; 
        string from(struser);
        if (from.find("sip:",0) != 0) 
            from.insert(0, "sip:");
        Data tmp_data(from); 
        Uri tmp_uri(tmp_data);
        uac.myUri = tmp_uri;

        string user(str_get_username(struser));
        string passwd(strpasswd); 
        string realm(strrealm);

        // sip logic 
        clientDum->getMasterProfile()->setDefaultRegistrationTime(70);

        
        /////
        NameAddr naFrom(from.c_str());
        clientDum->getMasterProfile()->setDefaultFrom(naFrom);
        clientDum->getMasterProfile()->setDigestCredential(
realm.c_str(), user.c_str(), passwd.c_str());

        SharedPtr<SipMessage> regMessage =
clientDum->makeRegistration(naFrom); 

        clientDum->send( regMessage );
    } 
    catch (BaseException& e) {}

int Csipmmc::InitResiprocate(char* outboundProxy, int port) 
{
    clientDum = new DialogUsageManager(clientStack);
    stackThread = new StackThread(clientStack);
    SharedPtr<MasterProfile> profile(new MasterProfile);    
    profile->addSupportedMethod(REFER);
    profile->addSupportedMethod(NOTIFY); 
    profile->addSupportedMethod(SUBSCRIBE);
    profile->addSupportedMethod(MESSAGE); 

    profile->validateAcceptEnabled() = false;
    profile->validateContentEnabled() = false;

    profile->addSupportedMimeType(NOTIFY, Pidf::getStaticType()); 
    profile->addSupportedMimeType(NOTIFY,Mime("application",
"simple-message-summary"));
    profile->addSupportedMimeType(MESSAGE, Mime("text", "plain"));
    Uri outboundproxy; 
    int proxy_port;
    if (outboundProxy != NULL)
    {
        string input_sipaddress(outboundProxy);
        outboundproxy.host() =
Data(str_get_outboundproxy(input_sipaddress, proxy_port));
        outboundproxy.port() = proxy_port;
        profile->setOutboundProxy(outboundproxy);
    }

    clientDum->addTransport(UDP, port);
    clientDum->setMasterProfile(profile);

    auto_ptr<ClientAuthManager> clientAuth(new ClientAuthManager());   
    clientDum->setClientAuthManager(clientAuth); 
    clientDum->setClientRegistrationHandler(&uac);
    clientDum->addClientSubscriptionHandler("presence",&uac); 
    clientDum->addServerSubscriptionHandler("presence",&uac);
    clientDum->setInviteSessionHandler(&uac);
    clientDum->addOutOfDialogHandler(OPTIONS, &uac);
    clientDum->setClientPagerMessageHandler(&uac);
    clientDum->setServerPagerMessageHandler(&uac); 

    dumThread= 0;
    dumThread = new DumThread(*clientDum); 
    stackThread->run();
    if (dumThread)
    {
       dumThread->run();
    } 
    return 0;
} 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.resiprocate.org/pipermail/resiprocate-devel/attachments/20070409/4934dbe4/attachment.htm>


More information about the resiprocate-devel mailing list