Each account has it´s own different SIP UDP-Port. Is that possible?

M
MichaelUndJutta (at) gmx.net
Thu, Oct 7, 2010 12:41 PM

Hello,

My computer is connected to internet via a combined DSL-Router and telephone system (so called FritzBox 7270). On this Fritzbox, there are also some internal Telephones connected (Fritzbox has internaly also a SIP SW-Stack for this telefones).

I would like to write a PJSUA Phone Application on my computer, and to have two accounts - one to the Fritzbox, for internal calls, one to the SIP IP-Provider (for external calls).

Now I get a conflict with Port 5060 (which is also used by Fritzbox), and which can not be forwarded by internal Router.

Using Port 5080 instead (in PJSUA), works fine, as long as I only connect to SIP IP-Provider OR Fritzbox. When using 5080 as port for Account to Fritzbox, there is a conflict (when receiving a call), that the ACK Telegram (which switches SIP phone-call from CONNECTING to CONFIRMED) gets lost in the fritzbox, and after timeout PJSUA disconnects the call ...

The only thing - I could imagine, to make this run - is, to have the SIP-port separated for every account (5060 for Fritzbox, 5080 for external)

What I don´t know: In which way to get separated Port

x  A hack in Transport layer, opening two ports, sending telegrams on
the correct port (depending on IP-Adress from the receiver), recei-
ving on both ports ???
x  A copy uf UDP-Transport, so having two UDP-Transports inside (seems
to be much work; no easy solution possible).
x  Where to read, in which way transport is integrated (and what´s the
difference UDP-Transport and SIP-UDP-Transport)``
x  How to figure out, which transport mechanism´s my SIP-Provider is `
able to support?

Who has a tip, in which way it makes sense to proceed ...

With Regards,
Michael

--
GRATIS! Movie-FLAT mit über 300 Videos.
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome

Hello, My computer is connected to internet via a combined DSL-Router and telephone system (so called FritzBox 7270). On this Fritzbox, there are also some internal Telephones connected (Fritzbox has internaly also a SIP SW-Stack for this telefones). I would like to write a PJSUA Phone Application on my computer, and to have two accounts - one to the Fritzbox, for internal calls, one to the SIP IP-Provider (for external calls). Now I get a conflict with Port 5060 (which is also used by Fritzbox), and which can not be forwarded by internal Router. Using Port 5080 instead (in PJSUA), works fine, as long as I only connect to SIP IP-Provider _OR_ Fritzbox. When using 5080 as port for Account to Fritzbox, there is a conflict (when receiving a call), that the ACK Telegram (which switches SIP phone-call from CONNECTING to CONFIRMED) gets lost in the fritzbox, and after timeout PJSUA disconnects the call ... The only thing - I could imagine, to make this run - is, to have the SIP-port separated for every account (5060 for Fritzbox, 5080 for external) What I don´t know: In which way to get separated Port x A hack in Transport layer, opening two ports, sending telegrams on the correct port (depending on IP-Adress from the receiver), recei- ving on both ports ??? x A copy uf UDP-Transport, so having two UDP-Transports inside (seems to be much work; no easy solution possible). x Where to read, in which way transport is integrated (and what´s the difference UDP-Transport and SIP-UDP-Transport)`` x How to figure out, which transport mechanism´s my SIP-Provider is ` able to support? Who has a tip, in which way it makes sense to proceed ... With Regards, Michael -- GRATIS! Movie-FLAT mit über 300 Videos. Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome
JS
Jose Suarez
Thu, Oct 7, 2010 3:43 PM

Michael , you must create a different transport (one for each count) and
assign it to that count. Ex:

Creating a transport:

pj_status_t pjStatus;
pjsua_transport_config pjConfig;
char c_strPublicIPAddress[255];

strcpy (c_strPublicIPAddress, strPublicIp.c_str());

pjsua_transport_config_default (&pjConfig);

pjConfig.port = lSipPort; //here you specify the new port (ie:
5060,5061,5062, etc)
pjConfig.public_addr = pj_str(c_strPublicIPAddress);

pjStatus = pjsua_transport_create (PJSIP_TRANSPORT_UDP, &pjConfig,
&m_pjTransportId);

if (pjStatus != PJ_SUCCESS)
{
m_oLogger.write ("CDialerSIP - createtransport() -
pjsua_transport_create - Falló.", CDialerLogger::iLogError);
return false;
}

m_oLogger.write ("CDialerSIP - createtransport() - Ok.",
CDialerLogger::iLogInformation);
m_isTransportCreated = true;
return true;
}

//-----------

Then you must assign that transport to your account. In the following
function, I create an account and assign its transport id to the tansport
that I've created before.

bool CDialerSIP::registeraccount ()
{
pj_status_t pjStatus;
pjsua_acc_config pjConfig;
pj_str_t pjStrId, pjStrRegURL;
pjsua_acc_id pjAccountId;
int iEvent;

pjStrId.ptr = (char*) pj_pool_alloc (m_pjPool, 255);

if (!pjStrId.ptr)
{
m_oLogger.write ("registeraccount - pj_pool_alloc - Falló <pjStrId.ptr>.",
CDialerLogger::iLogError);
return false;
}

pjsua_acc_config_default (&pjConfig);

 pj_strcpy (&pjStrId, &(pj_str("sip:")));
 pj_strcat (&pjStrId, &m_pjStrSipUser);

pj_strcat (&pjStrId, &(pj_str("@")));
pj_strcat (&pjStrId, &m_pjStrSipDomain);

pjConfig.id = pjStrId;

pjStrRegURL.ptr = (char*) pj_pool_alloc (m_pjPool, 255);

if (!pjStrRegURL.ptr)
{
m_oLogger.write ("registeraccount - pj_pool_alloc - Falló
<pjStrRegURL.ptr>.", CDialerLogger::iLogError);
return false;
}

pj_strcpy2 (&pjStrRegURL, "sip:");
pj_strcat (&pjStrRegURL, &m_pjStrSipDomain);

pjConfig.reg_uri  = pjStrRegURL;

pjConfig.cred_count  = 1;
pjConfig.cred_info[0].realm = pj_str("*");
pjConfig.cred_info[0].scheme    = pj_str("digest");
pjConfig.cred_info[0].username = m_pjStrSipUser;
pjConfig.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
pjConfig.cred_info[0].data = m_pjStrSipPwd;

pjConfig.transport_id  = m_pjTransportId; //HERE I ASSIGN THE TRANSPORT ID
THAT I'VE CREATED BEFORE USING pjsua_transport_create.

pjStatus = pjsua_acc_add (&pjConfig, PJ_TRUE, &pjAccountId);

if (pjStatus != PJ_SUCCESS)
{
m_oLogger.write ("registeraccount - pjsua_acc_add - Falló.",
CDialerLogger::iLogError);
return false;
}

pthread_mutex_lock (&m_iMutex_AccountId);
m_pjAccountId = pjAccountId;
pthread_mutex_unlock (&m_iMutex_AccountId);

this->waitevent (&iEvent, false);

if (iEvent != CDialerDialer::i_UserAgent_Register)
{
m_oLogger.write ("registeraccount - Failed.",
CDialerLogger::iLogInformation);
return false;
}

pthread_mutex_lock (&m_iMutex_IsRegistered);
m_isRegistered = true;  //la cuenta fue registrada en el sip proxy con
exito. Luego solo se mantendra su estado
// desde la clase CDialerSIPController
pthread_mutex_unlock (&m_iMutex_IsRegistered);

setregisterstate (true);

m_oLogger.write ("registeraccount - Ok.", CDialerLogger::iLogInformation);
return true;

}

that's all.

Let me know if you have a doubt.

bye.
Jose

----- Original Message -----
From: MichaelUndJutta@gmx.net
To: pjsip@lists.pjsip.org
Sent: Thursday, October 07, 2010 9:41 AM
Subject: [SPAM] - [pjsip] Each account has it´s own different SIP UDP-Port.
Is that possible? - Character set not allowed (n/a)

Hello,

My computer is connected to internet via a combined DSL-Router and
telephone system (so called FritzBox 7270). On this Fritzbox, there are
also some internal Telephones connected (Fritzbox has internaly also a SIP
SW-Stack for this telefones).

I would like to write a PJSUA Phone Application on my computer, and to
have two accounts - one to the Fritzbox, for internal calls, one to the
SIP IP-Provider (for external calls).

Now I get a conflict with Port 5060 (which is also used by Fritzbox), and
which can not be forwarded by internal Router.

Using Port 5080 instead (in PJSUA), works fine, as long as I only connect
to SIP IP-Provider OR Fritzbox. When using 5080 as port for Account to
Fritzbox, there is a conflict (when receiving a call), that the ACK
Telegram (which switches SIP phone-call from CONNECTING to CONFIRMED) gets
lost in the fritzbox, and after timeout PJSUA disconnects the call ...

The only thing - I could imagine, to make this run - is, to have the
SIP-port separated for every account (5060 for Fritzbox, 5080 for
external)

What I don´t know: In which way to get separated Port

x  A hack in Transport layer, opening two ports, sending telegrams on
the correct port (depending on IP-Adress from the receiver), recei-
ving on both ports ???
x  A copy uf UDP-Transport, so having two UDP-Transports inside (seems
to be much work; no easy solution possible).
x  Where to read, in which way transport is integrated (and what´s the
difference UDP-Transport and SIP-UDP-Transport)``
x  How to figure out, which transport mechanism´s my SIP-Provider is `
able to support?

Who has a tip, in which way it makes sense to proceed ...

With Regards,
Michael

--
GRATIS! Movie-FLAT mit über 300 Videos.
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome


Visit our blog: http://blog.pjsip.org

pjsip mailing list
pjsip@lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
ɜ

Michael , you must create a different transport (one for each count) and assign it to that count. Ex: Creating a transport: ---------------------- pj_status_t pjStatus; pjsua_transport_config pjConfig; char c_strPublicIPAddress[255]; strcpy (c_strPublicIPAddress, strPublicIp.c_str()); pjsua_transport_config_default (&pjConfig); pjConfig.port = lSipPort; //here you specify the new port (ie: 5060,5061,5062, etc) pjConfig.public_addr = pj_str(c_strPublicIPAddress); pjStatus = pjsua_transport_create (PJSIP_TRANSPORT_UDP, &pjConfig, &m_pjTransportId); if (pjStatus != PJ_SUCCESS) { m_oLogger.write ("CDialerSIP - createtransport() - pjsua_transport_create - Falló.", CDialerLogger::iLogError); return false; } m_oLogger.write ("CDialerSIP - createtransport() - Ok.", CDialerLogger::iLogInformation); m_isTransportCreated = true; return true; } //----------- Then you must assign that transport to your account. In the following function, I create an account and assign its transport id to the tansport that I've created before. bool CDialerSIP::registeraccount () { pj_status_t pjStatus; pjsua_acc_config pjConfig; pj_str_t pjStrId, pjStrRegURL; pjsua_acc_id pjAccountId; int iEvent; pjStrId.ptr = (char*) pj_pool_alloc (m_pjPool, 255); if (!pjStrId.ptr) { m_oLogger.write ("registeraccount - pj_pool_alloc - Falló <pjStrId.ptr>.", CDialerLogger::iLogError); return false; } pjsua_acc_config_default (&pjConfig); pj_strcpy (&pjStrId, &(pj_str("sip:"))); pj_strcat (&pjStrId, &m_pjStrSipUser); pj_strcat (&pjStrId, &(pj_str("@"))); pj_strcat (&pjStrId, &m_pjStrSipDomain); pjConfig.id = pjStrId; pjStrRegURL.ptr = (char*) pj_pool_alloc (m_pjPool, 255); if (!pjStrRegURL.ptr) { m_oLogger.write ("registeraccount - pj_pool_alloc - Falló <pjStrRegURL.ptr>.", CDialerLogger::iLogError); return false; } pj_strcpy2 (&pjStrRegURL, "sip:"); pj_strcat (&pjStrRegURL, &m_pjStrSipDomain); pjConfig.reg_uri = pjStrRegURL; pjConfig.cred_count = 1; pjConfig.cred_info[0].realm = pj_str("*"); pjConfig.cred_info[0].scheme = pj_str("digest"); pjConfig.cred_info[0].username = m_pjStrSipUser; pjConfig.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD; pjConfig.cred_info[0].data = m_pjStrSipPwd; pjConfig.transport_id = m_pjTransportId; //HERE I ASSIGN THE TRANSPORT ID THAT I'VE CREATED BEFORE USING pjsua_transport_create. pjStatus = pjsua_acc_add (&pjConfig, PJ_TRUE, &pjAccountId); if (pjStatus != PJ_SUCCESS) { m_oLogger.write ("registeraccount - pjsua_acc_add - Falló.", CDialerLogger::iLogError); return false; } pthread_mutex_lock (&m_iMutex_AccountId); m_pjAccountId = pjAccountId; pthread_mutex_unlock (&m_iMutex_AccountId); this->waitevent (&iEvent, false); if (iEvent != CDialerDialer::i_UserAgent_Register) { m_oLogger.write ("registeraccount - Failed.", CDialerLogger::iLogInformation); return false; } pthread_mutex_lock (&m_iMutex_IsRegistered); m_isRegistered = true; //la cuenta fue registrada en el sip proxy con exito. Luego solo se mantendra su estado // desde la clase CDialerSIPController pthread_mutex_unlock (&m_iMutex_IsRegistered); setregisterstate (true); m_oLogger.write ("registeraccount - Ok.", CDialerLogger::iLogInformation); return true; } that's all. Let me know if you have a doubt. bye. Jose ----- Original Message ----- From: <MichaelUndJutta@gmx.net> To: <pjsip@lists.pjsip.org> Sent: Thursday, October 07, 2010 9:41 AM Subject: [SPAM] - [pjsip] Each account has it´s own different SIP UDP-Port. Is that possible? - Character set not allowed (n/a) > Hello, > > My computer is connected to internet via a combined DSL-Router and > telephone system (so called FritzBox 7270). On this Fritzbox, there are > also some internal Telephones connected (Fritzbox has internaly also a SIP > SW-Stack for this telefones). > > I would like to write a PJSUA Phone Application on my computer, and to > have two accounts - one to the Fritzbox, for internal calls, one to the > SIP IP-Provider (for external calls). > > Now I get a conflict with Port 5060 (which is also used by Fritzbox), and > which can not be forwarded by internal Router. > > Using Port 5080 instead (in PJSUA), works fine, as long as I only connect > to SIP IP-Provider _OR_ Fritzbox. When using 5080 as port for Account to > Fritzbox, there is a conflict (when receiving a call), that the ACK > Telegram (which switches SIP phone-call from CONNECTING to CONFIRMED) gets > lost in the fritzbox, and after timeout PJSUA disconnects the call ... > > > The only thing - I could imagine, to make this run - is, to have the > SIP-port separated for every account (5060 for Fritzbox, 5080 for > external) > > What I don´t know: In which way to get separated Port > > x A hack in Transport layer, opening two ports, sending telegrams on > the correct port (depending on IP-Adress from the receiver), recei- > ving on both ports ??? > x A copy uf UDP-Transport, so having two UDP-Transports inside (seems > to be much work; no easy solution possible). > x Where to read, in which way transport is integrated (and what´s the > difference UDP-Transport and SIP-UDP-Transport)`` > x How to figure out, which transport mechanism´s my SIP-Provider is ` > able to support? > > Who has a tip, in which way it makes sense to proceed ... > > With Regards, > Michael > > > -- > GRATIS! Movie-FLAT mit über 300 Videos. > Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip@lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > ɜ