Proper way to handle Ip address changes in Android

SC
Shaun Clark
Tue, Aug 21, 2012 4:24 PM

When the Android app goes between wifi and 3g the call does not
automatically switch, I can call 'n' which re-does the NAT, but then
looking at this page: http://trac.pjsip.org/repos/wiki/IPAddressChange none
of these approaches seem to work. Since mobile phones often switch back and
forth between wifi and 3g/mobile this seems like a great feature to build
into pjsip. Is there a way to easily handle this now on Android? Thanks!

Shaun

When the Android app goes between wifi and 3g the call does not automatically switch, I can call 'n' which re-does the NAT, but then looking at this page: http://trac.pjsip.org/repos/wiki/IPAddressChange none of these approaches seem to work. Since mobile phones often switch back and forth between wifi and 3g/mobile this seems like a great feature to build into pjsip. Is there a way to easily handle this now on Android? Thanks! Shaun
RM
Régis Montoya
Tue, Aug 21, 2012 4:32 PM

Hi Shaun,

From my experience on CSipSimple it's not something that is relevant of
the sip stack.
Besides, it's not simple to support on android and may depend on your
approach on that. Depending on whether you'd like to support VPN
connection /for example/ approach will be different. It will also be
different depending on what android version you'd like to support.
You can get inspired on what's done on Android stock SIP application...
BTW, you'll see it's also not responsibility of the sip stack but of the
sip application to decide whether to restart or not the sip stack in the
implementation from Google too... so I think that's not a bad idea ;).

Best regards,
Régis

On 21/08/2012 18:24, Shaun Clark wrote:

When the Android app goes between wifi and 3g the call does not
automatically switch, I can call 'n' which re-does the NAT, but then
looking at this page: http://trac.pjsip.org/repos/wiki/IPAddressChange
none of these approaches seem to work. Since mobile phones often
switch back and forth between wifi and 3g/mobile this seems like a
great feature to build into pjsip. Is there a way to easily handle
this now on Android? Thanks!

Shaun


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

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

Hi Shaun, From my experience on CSipSimple it's not something that is relevant of the sip stack. Besides, it's not simple to support on android and may depend on your approach on that. Depending on whether you'd like to support VPN connection /for example/ approach will be different. It will also be different depending on what android version you'd like to support. You can get inspired on what's done on Android stock SIP application... BTW, you'll see it's also not responsibility of the sip stack but of the sip application to decide whether to restart or not the sip stack in the implementation from Google too... so I think that's not a bad idea ;). Best regards, Régis On 21/08/2012 18:24, Shaun Clark wrote: > When the Android app goes between wifi and 3g the call does not > automatically switch, I can call 'n' which re-does the NAT, but then > looking at this page: http://trac.pjsip.org/repos/wiki/IPAddressChange > none of these approaches seem to work. Since mobile phones often > switch back and forth between wifi and 3g/mobile this seems like a > great feature to build into pjsip. Is there a way to easily handle > this now on Android? Thanks! > > Shaun > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip@lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
SW
shawn wang
Wed, Aug 22, 2012 3:16 PM

Hi,Régis :
Do you know the best way to obtain current active ip address on
Android? Because I have a device
that allow two types of network connected at the same time, then when
iterating networking interface, we
will get two ip addresses, but we don't know which is the one that is being
used by the system.

On Wed, Aug 22, 2012 at 12:32 AM, Régis Montoya r3gis.3r@gmail.com wrote:

Hi Shaun,

From my experience on CSipSimple it's not something that is relevant of
the sip stack.
Besides, it's not simple to support on android and may depend on your
approach on that. Depending on whether you'd like to support VPN connection
for example approach will be different. It will also be different
depending on what android version you'd like to support.
You can get inspired on what's done on Android stock SIP application...
BTW, you'll see it's also not responsibility of the sip stack but of the
sip application to decide whether to restart or not the sip stack in the
implementation from Google too... so I think that's not a bad idea ;).

Best regards,
Régis

On 21/08/2012 18:24, Shaun Clark wrote:

When the Android app goes between wifi and 3g the call does not
automatically switch, I can call 'n' which re-does the NAT, but then
looking at this page: http://trac.pjsip.org/repos/wiki/IPAddressChangenone of these approaches seem to work. Since mobile phones often switch
back and forth between wifi and 3g/mobile this seems like a great feature
to build into pjsip. Is there a way to easily handle this now on Android?
Thanks!

Shaun


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

pjsip mailing listpjsip@lists.pjsip.orghttp://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org


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

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

Hi,Régis : Do you know the best way to obtain current active ip address on Android? Because I have a device that allow two types of network connected at the same time, then when iterating networking interface, we will get two ip addresses, but we don't know which is the one that is being used by the system. On Wed, Aug 22, 2012 at 12:32 AM, Régis Montoya <r3gis.3r@gmail.com> wrote: > Hi Shaun, > > From my experience on CSipSimple it's not something that is relevant of > the sip stack. > Besides, it's not simple to support on android and may depend on your > approach on that. Depending on whether you'd like to support VPN connection > *for example* approach will be different. It will also be different > depending on what android version you'd like to support. > You can get inspired on what's done on Android stock SIP application... > BTW, you'll see it's also not responsibility of the sip stack but of the > sip application to decide whether to restart or not the sip stack in the > implementation from Google too... so I think that's not a bad idea ;). > > Best regards, > Régis > > > On 21/08/2012 18:24, Shaun Clark wrote: > > When the Android app goes between wifi and 3g the call does not > automatically switch, I can call 'n' which re-does the NAT, but then > looking at this page: http://trac.pjsip.org/repos/wiki/IPAddressChangenone of these approaches seem to work. Since mobile phones often switch > back and forth between wifi and 3g/mobile this seems like a great feature > to build into pjsip. Is there a way to easily handle this now on Android? > Thanks! > > Shaun > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing listpjsip@lists.pjsip.orghttp://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip@lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > >
RM
Régis Montoya
Wed, Aug 22, 2012 4:06 PM

Hi,

The very first problem is that "Active IP address" is something that
doesn't exists. Told like that it makes no sense on any good OS. It's
not specific to Android !

Something important to understand is that an OS can have several IP
addresses. Then it's network routes and rules that allows to connect the
rest of the universe.
So for example if you have two interfaces (wifi + vpn for example), you
have at least 2 IP.
Besides on recent android phones + recent networks you'll also get ipv6
addresses. So even with one "network" you'll get two addresses. (I
obviously exclude loopback address that is again another one).
What you could try is to get the ipv4 address of the interface connected
to the default gateway. At least with that as target, you are searching
something that you can find. (while searching "active ip address" is
something that makes no sense). To search the ipv4 address of the
interface connected to default gateway several solutions. Maybe with
java api, or maybe with network route files.
If you have a server address to test it would be easier to open a socket
to it and see your local address however (as doing that automatically
resolves routes and interfaces).

On 22/08/2012 17:16, shawn wang wrote:

Hi,Régis :
Do you know the best way to obtain current active ip address on
Android? Because I have a device
that allow two types of network connected at the same time, then when
iterating networking interface, we
will get two ip addresses, but we don't know which is the one that is
being used by the system.

On Wed, Aug 22, 2012 at 12:32 AM, Régis Montoya <r3gis.3r@gmail.com
mailto:r3gis.3r@gmail.com> wrote:

 Hi Shaun,

 From my experience on CSipSimple it's not something that is
 relevant of the sip stack.
 Besides, it's not simple to support on android and may depend on
 your approach on that. Depending on whether you'd like to support
 VPN connection /for example/ approach will be different. It will
 also be different depending on what android version you'd like to
 support.
 You can get inspired on what's done on Android stock SIP
 application... BTW, you'll see it's also not responsibility of the
 sip stack but of the sip application to decide whether to restart
 or not the sip stack in the implementation from Google too... so I
 think that's not a bad idea ;).

 Best regards,
 Régis


 On 21/08/2012 18:24, Shaun Clark wrote:
 When the Android app goes between wifi and 3g the call does not
 automatically switch, I can call 'n' which re-does the NAT, but
 then looking at this page:
 http://trac.pjsip.org/repos/wiki/IPAddressChange none of these
 approaches seem to work. Since mobile phones often switch back
 and forth between wifi and 3g/mobile this seems like a great
 feature to build into pjsip. Is there a way to easily handle this
 now on Android? Thanks!

 Shaun


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

 pjsip mailing list
 pjsip@lists.pjsip.org  <mailto:pjsip@lists.pjsip.org>
 http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
 _______________________________________________
 Visit our blog: http://blog.pjsip.org

 pjsip mailing list
 pjsip@lists.pjsip.org <mailto:pjsip@lists.pjsip.org>
 http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org

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

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

Hi, The very first problem is that "Active IP address" is something that doesn't exists. Told like that it makes no sense on any good OS. It's not specific to Android ! Something important to understand is that an OS can have several IP addresses. Then it's network routes and rules that allows to connect the rest of the universe. So for example if you have two interfaces (wifi + vpn for example), you have at least 2 IP. Besides on recent android phones + recent networks you'll also get ipv6 addresses. So even with one "network" you'll get two addresses. (I obviously exclude loopback address that is again another one). What you could try is to get the ipv4 address of the interface connected to the default gateway. At least with that as target, you are searching something that you can find. (while searching "active ip address" is something that makes no sense). To search the ipv4 address of the interface connected to default gateway several solutions. Maybe with java api, or maybe with network route files. If you have a server address to test it would be easier to open a socket to it and see your local address however (as doing that automatically resolves routes and interfaces). On 22/08/2012 17:16, shawn wang wrote: > Hi,Régis : > Do you know the best way to obtain current active ip address on > Android? Because I have a device > that allow two types of network connected at the same time, then when > iterating networking interface, we > will get two ip addresses, but we don't know which is the one that is > being used by the system. > > On Wed, Aug 22, 2012 at 12:32 AM, Régis Montoya <r3gis.3r@gmail.com > <mailto:r3gis.3r@gmail.com>> wrote: > > Hi Shaun, > > From my experience on CSipSimple it's not something that is > relevant of the sip stack. > Besides, it's not simple to support on android and may depend on > your approach on that. Depending on whether you'd like to support > VPN connection /for example/ approach will be different. It will > also be different depending on what android version you'd like to > support. > You can get inspired on what's done on Android stock SIP > application... BTW, you'll see it's also not responsibility of the > sip stack but of the sip application to decide whether to restart > or not the sip stack in the implementation from Google too... so I > think that's not a bad idea ;). > > Best regards, > Régis > > > On 21/08/2012 18:24, Shaun Clark wrote: >> When the Android app goes between wifi and 3g the call does not >> automatically switch, I can call 'n' which re-does the NAT, but >> then looking at this page: >> http://trac.pjsip.org/repos/wiki/IPAddressChange none of these >> approaches seem to work. Since mobile phones often switch back >> and forth between wifi and 3g/mobile this seems like a great >> feature to build into pjsip. Is there a way to easily handle this >> now on Android? Thanks! >> >> Shaun >> >> >> _______________________________________________ >> Visit our blog:http://blog.pjsip.org >> >> pjsip mailing list >> pjsip@lists.pjsip.org <mailto:pjsip@lists.pjsip.org> >> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip@lists.pjsip.org <mailto:pjsip@lists.pjsip.org> > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip@lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
FB
Fabian Bernhard
Wed, Aug 22, 2012 4:57 PM

Hi,

I agree with Régis that it is in the responsibility of the the application
rather than the SIP stack to act upon network changes.

In your original email you specifically ask about Android and the use case
of switching between 3G and WIFI.

Check out Android's ConnectivityManager:

http://developer.android.com/reference/android/net/ConnectivityManager.html

and "Check if Internet access is available on Android":

http://stackoverflow.com/questions/11662707/check-if-internet-access-is-available-on-android

You can create a BroadcastReceiver and listen for network change events,
like

@Override
public void onReceive(Context context, Intent intent) {

if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction()) {

    ConnectivityManager manager = (ConnectivityManager)

context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (manager != null) {
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();
        // or
        NetworkInfo networkInfoWifi =

manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
// etc...
// decide here what to do in which case, e.g. restart the SIP
stack in case of network change
}

}

http://developer.android.com/reference/android/content/BroadcastReceiver.html

Hope this helps.

Fabian

On Wed, Aug 22, 2012 at 6:06 PM, Régis Montoya r3gis.3r@gmail.com wrote:

Hi,

The very first problem is that "Active IP address" is something that
doesn't exists. Told like that it makes no sense on any good OS. It's not
specific to Android !

Something important to understand is that an OS can have several IP
addresses. Then it's network routes and rules that allows to connect the
rest of the universe.
So for example if you have two interfaces (wifi + vpn for example), you
have at least 2 IP.
Besides on recent android phones + recent networks you'll also get ipv6
addresses. So even with one "network" you'll get two addresses. (I
obviously exclude loopback address that is again another one).
What you could try is to get the ipv4 address of the interface connected
to the default gateway. At least with that as target, you are searching
something that you can find. (while searching "active ip address" is
something that makes no sense). To search the ipv4 address of the interface
connected to default gateway several solutions. Maybe with java api, or
maybe with network route files.
If you have a server address to test it would be easier to open a socket
to it and see your local address however (as doing that automatically
resolves routes and interfaces).

On 22/08/2012 17:16, shawn wang wrote:

Hi,Régis :
Do you know the best way to obtain current active ip address on
Android? Because I have a device
that allow two types of network connected at the same time, then when
iterating networking interface, we
will get two ip addresses, but we don't know which is the one that is
being used by the system.

On Wed, Aug 22, 2012 at 12:32 AM, Régis Montoya r3gis.3r@gmail.comwrote:

Hi Shaun,

From my experience on CSipSimple it's not something that is relevant of
the sip stack.
Besides, it's not simple to support on android and may depend on your
approach on that. Depending on whether you'd like to support VPN connection
for example approach will be different. It will also be different
depending on what android version you'd like to support.
You can get inspired on what's done on Android stock SIP application...
BTW, you'll see it's also not responsibility of the sip stack but of the
sip application to decide whether to restart or not the sip stack in the
implementation from Google too... so I think that's not a bad idea ;).

Best regards,
Régis

On 21/08/2012 18:24, Shaun Clark wrote:

When the Android app goes between wifi and 3g the call does not
automatically switch, I can call 'n' which re-does the NAT, but then
looking at this page: http://trac.pjsip.org/repos/wiki/IPAddressChangenone of these approaches seem to work. Since mobile phones often switch
back and forth between wifi and 3g/mobile this seems like a great feature
to build into pjsip. Is there a way to easily handle this now on Android?
Thanks!

Shaun


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

pjsip mailing listpjsip@lists.pjsip.orghttp://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org


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

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


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

pjsip mailing listpjsip@lists.pjsip.orghttp://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org


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

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

Hi, I agree with Régis that it is in the responsibility of the the application rather than the SIP stack to act upon network changes. In your original email you specifically ask about Android and the use case of switching between 3G and WIFI. Check out Android's ConnectivityManager: http://developer.android.com/reference/android/net/ConnectivityManager.html and "Check if Internet access is available on Android": http://stackoverflow.com/questions/11662707/check-if-internet-access-is-available-on-android You can create a BroadcastReceiver and listen for network change events, like @Override public void onReceive(Context context, Intent intent) { if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction()) { ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (manager != null) { NetworkInfo networkInfo = manager.getActiveNetworkInfo(); // or NetworkInfo networkInfoWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); // etc... // decide here what to do in which case, e.g. restart the SIP stack in case of network change } } http://developer.android.com/reference/android/content/BroadcastReceiver.html Hope this helps. Fabian On Wed, Aug 22, 2012 at 6:06 PM, Régis Montoya <r3gis.3r@gmail.com> wrote: > Hi, > > The very first problem is that "Active IP address" is something that > doesn't exists. Told like that it makes no sense on any good OS. It's not > specific to Android ! > > Something important to understand is that an OS can have several IP > addresses. Then it's network routes and rules that allows to connect the > rest of the universe. > So for example if you have two interfaces (wifi + vpn for example), you > have at least 2 IP. > Besides on recent android phones + recent networks you'll also get ipv6 > addresses. So even with one "network" you'll get two addresses. (I > obviously exclude loopback address that is again another one). > What you could try is to get the ipv4 address of the interface connected > to the default gateway. At least with that as target, you are searching > something that you can find. (while searching "active ip address" is > something that makes no sense). To search the ipv4 address of the interface > connected to default gateway several solutions. Maybe with java api, or > maybe with network route files. > If you have a server address to test it would be easier to open a socket > to it and see your local address however (as doing that automatically > resolves routes and interfaces). > > > > > On 22/08/2012 17:16, shawn wang wrote: > > Hi,Régis : > Do you know the best way to obtain current active ip address on > Android? Because I have a device > that allow two types of network connected at the same time, then when > iterating networking interface, we > will get two ip addresses, but we don't know which is the one that is > being used by the system. > > On Wed, Aug 22, 2012 at 12:32 AM, Régis Montoya <r3gis.3r@gmail.com>wrote: > >> Hi Shaun, >> >> From my experience on CSipSimple it's not something that is relevant of >> the sip stack. >> Besides, it's not simple to support on android and may depend on your >> approach on that. Depending on whether you'd like to support VPN connection >> *for example* approach will be different. It will also be different >> depending on what android version you'd like to support. >> You can get inspired on what's done on Android stock SIP application... >> BTW, you'll see it's also not responsibility of the sip stack but of the >> sip application to decide whether to restart or not the sip stack in the >> implementation from Google too... so I think that's not a bad idea ;). >> >> Best regards, >> Régis >> >> >> On 21/08/2012 18:24, Shaun Clark wrote: >> >> When the Android app goes between wifi and 3g the call does not >> automatically switch, I can call 'n' which re-does the NAT, but then >> looking at this page: http://trac.pjsip.org/repos/wiki/IPAddressChangenone of these approaches seem to work. Since mobile phones often switch >> back and forth between wifi and 3g/mobile this seems like a great feature >> to build into pjsip. Is there a way to easily handle this now on Android? >> Thanks! >> >> Shaun >> >> >> _______________________________________________ >> Visit our blog: http://blog.pjsip.org >> >> pjsip mailing listpjsip@lists.pjsip.orghttp://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >> >> >> >> _______________________________________________ >> Visit our blog: http://blog.pjsip.org >> >> pjsip mailing list >> pjsip@lists.pjsip.org >> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >> >> > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing listpjsip@lists.pjsip.orghttp://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip@lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > >
RM
Régis Montoya
Wed, Aug 22, 2012 8:22 PM

Hi,

Yes indeed the connectivity manager will help.
Take care however it's not so simple to manage. The broadcast event can
arrive from any network. For example you can get an event on the mobile
data disconnected after the wifi connected state. The connected even
also arrives sometimes before dhcp negotiation complete. It's also never
raised for a VPN connection.
That's why it's necessary to have some dedicated code to treat all of that.
As I said getting inspired of code of Android SIP application could be a
first step even if they only manage Wifi connectivity. You can also get
inspired of code of CSipSimple that already manages that and restart or
just stop the sip stack depending on the new connectivity kind and of
settings.
The global idea is to always resync with static network state when
getting this event and to temporise a little before treating a
connection up event and to treat immediately connection down event.

On 22/08/2012 18:57, Fabian Bernhard wrote:

Hi,

I agree with Régis that it is in the responsibility of the the
application rather than the SIP stack to act upon network changes.

In your original email you specifically ask about Android and the use
case of switching between 3G and WIFI.

Check out Android's ConnectivityManager:

http://developer.android.com/reference/android/net/ConnectivityManager.html

and "Check if Internet access is available on Android":

http://stackoverflow.com/questions/11662707/check-if-internet-access-is-available-on-android

You can create a BroadcastReceiver and listen for network change
events, like

@Override
public void onReceive(Context context, Intent intent) {

 if 

(ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction()) {

     ConnectivityManager manager = (ConnectivityManager) 

context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (manager != null) {
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
// or
NetworkInfo networkInfoWifi =
manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
// etc...
// decide here what to do in which case, e.g. restart the
SIP stack in case of network change
}

 }

http://developer.android.com/reference/android/content/BroadcastReceiver.html

Hope this helps.

Fabian

On Wed, Aug 22, 2012 at 6:06 PM, Régis Montoya <r3gis.3r@gmail.com
mailto:r3gis.3r@gmail.com> wrote:

 Hi,

 The very first problem is that "Active IP address" is something
 that doesn't exists. Told like that it makes no sense on any good
 OS. It's not specific to Android !

 Something important to understand is that an OS can have several
 IP addresses. Then it's network routes and rules that allows to
 connect the rest of the universe.
 So for example if you have two interfaces (wifi + vpn for
 example), you have at least 2 IP.
 Besides on recent android phones + recent networks you'll also get
 ipv6 addresses. So even with one "network" you'll get two
 addresses. (I obviously exclude loopback address that is again
 another one).
 What you could try is to get the ipv4 address of the interface
 connected to the default gateway. At least with that as target,
 you are searching something that you can find. (while searching
 "active ip address" is something that makes no sense). To search
 the ipv4 address of the interface connected to default gateway
 several solutions. Maybe with java api, or maybe with network
 route files.
 If you have a server address to test it would be easier to open a
 socket to it and see your local address however (as doing that
 automatically resolves routes and interfaces).




 On 22/08/2012 17:16, shawn wang wrote:
 Hi,Régis :
     Do you know the best way to obtain current active ip address
 on Android? Because I have a device
 that allow two types of network connected at the same time, then
 when iterating networking interface, we
 will get two ip addresses, but we don't know which is the one
 that is being used by the system.

 On Wed, Aug 22, 2012 at 12:32 AM, Régis Montoya
 <r3gis.3r@gmail.com <mailto:r3gis.3r@gmail.com>> wrote:

     Hi Shaun,

     From my experience on CSipSimple it's not something that is
     relevant of the sip stack.
     Besides, it's not simple to support on android and may depend
     on your approach on that. Depending on whether you'd like to
     support VPN connection /for example/ approach will be
     different. It will also be different depending on what
     android version you'd like to support.
     You can get inspired on what's done on Android stock SIP
     application... BTW, you'll see it's also not responsibility
     of the sip stack but of the sip application to decide whether
     to restart or not the sip stack in the implementation from
     Google too... so I think that's not a bad idea ;).

     Best regards,
     Régis


     On 21/08/2012 18:24, Shaun Clark wrote:
     When the Android app goes between wifi and 3g the call does
     not automatically switch, I can call 'n' which re-does the
     NAT, but then looking at this page:
     http://trac.pjsip.org/repos/wiki/IPAddressChange none of
     these approaches seem to work. Since mobile phones often
     switch back and forth between wifi and 3g/mobile this seems
     like a great feature to build into pjsip. Is there a way to
     easily handle this now on Android? Thanks!

     Shaun


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

     pjsip mailing list
     pjsip@lists.pjsip.org  <mailto:pjsip@lists.pjsip.org>
     http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
     _______________________________________________
     Visit our blog: http://blog.pjsip.org

     pjsip mailing list
     pjsip@lists.pjsip.org <mailto:pjsip@lists.pjsip.org>
     http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org




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

 pjsip mailing list
 pjsip@lists.pjsip.org  <mailto:pjsip@lists.pjsip.org>
 http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
 _______________________________________________
 Visit our blog: http://blog.pjsip.org

 pjsip mailing list
 pjsip@lists.pjsip.org <mailto:pjsip@lists.pjsip.org>
 http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org

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

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

Hi, Yes indeed the connectivity manager will help. Take care however it's not so simple to manage. The broadcast event can arrive from any network. For example you can get an event on the mobile data disconnected after the wifi connected state. The connected even also arrives sometimes before dhcp negotiation complete. It's also never raised for a VPN connection. That's why it's necessary to have some dedicated code to treat all of that. As I said getting inspired of code of Android SIP application could be a first step even if they only manage Wifi connectivity. You can also get inspired of code of CSipSimple that already manages that and restart or just stop the sip stack depending on the new connectivity kind and of settings. The global idea is to always resync with static network state when getting this event and to temporise a little before treating a connection up event and to treat immediately connection down event. On 22/08/2012 18:57, Fabian Bernhard wrote: > Hi, > > I agree with Régis that it is in the responsibility of the the > application rather than the SIP stack to act upon network changes. > > In your original email you specifically ask about Android and the use > case of switching between 3G and WIFI. > > Check out Android's ConnectivityManager: > > http://developer.android.com/reference/android/net/ConnectivityManager.html > > and "Check if Internet access is available on Android": > > http://stackoverflow.com/questions/11662707/check-if-internet-access-is-available-on-android > > You can create a BroadcastReceiver and listen for network change > events, like > > @Override > public void onReceive(Context context, Intent intent) { > > if > (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction()) { > > ConnectivityManager manager = (ConnectivityManager) > context.getSystemService(Context.CONNECTIVITY_SERVICE); > if (manager != null) { > NetworkInfo networkInfo = manager.getActiveNetworkInfo(); > // or > NetworkInfo networkInfoWifi = > manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); > // etc... > // decide here what to do in which case, e.g. restart the > SIP stack in case of network change > } > > } > > http://developer.android.com/reference/android/content/BroadcastReceiver.html > > Hope this helps. > > Fabian > > > > On Wed, Aug 22, 2012 at 6:06 PM, Régis Montoya <r3gis.3r@gmail.com > <mailto:r3gis.3r@gmail.com>> wrote: > > Hi, > > The very first problem is that "Active IP address" is something > that doesn't exists. Told like that it makes no sense on any good > OS. It's not specific to Android ! > > Something important to understand is that an OS can have several > IP addresses. Then it's network routes and rules that allows to > connect the rest of the universe. > So for example if you have two interfaces (wifi + vpn for > example), you have at least 2 IP. > Besides on recent android phones + recent networks you'll also get > ipv6 addresses. So even with one "network" you'll get two > addresses. (I obviously exclude loopback address that is again > another one). > What you could try is to get the ipv4 address of the interface > connected to the default gateway. At least with that as target, > you are searching something that you can find. (while searching > "active ip address" is something that makes no sense). To search > the ipv4 address of the interface connected to default gateway > several solutions. Maybe with java api, or maybe with network > route files. > If you have a server address to test it would be easier to open a > socket to it and see your local address however (as doing that > automatically resolves routes and interfaces). > > > > > On 22/08/2012 17:16, shawn wang wrote: >> Hi,Régis : >> Do you know the best way to obtain current active ip address >> on Android? Because I have a device >> that allow two types of network connected at the same time, then >> when iterating networking interface, we >> will get two ip addresses, but we don't know which is the one >> that is being used by the system. >> >> On Wed, Aug 22, 2012 at 12:32 AM, Régis Montoya >> <r3gis.3r@gmail.com <mailto:r3gis.3r@gmail.com>> wrote: >> >> Hi Shaun, >> >> From my experience on CSipSimple it's not something that is >> relevant of the sip stack. >> Besides, it's not simple to support on android and may depend >> on your approach on that. Depending on whether you'd like to >> support VPN connection /for example/ approach will be >> different. It will also be different depending on what >> android version you'd like to support. >> You can get inspired on what's done on Android stock SIP >> application... BTW, you'll see it's also not responsibility >> of the sip stack but of the sip application to decide whether >> to restart or not the sip stack in the implementation from >> Google too... so I think that's not a bad idea ;). >> >> Best regards, >> Régis >> >> >> On 21/08/2012 18:24, Shaun Clark wrote: >>> When the Android app goes between wifi and 3g the call does >>> not automatically switch, I can call 'n' which re-does the >>> NAT, but then looking at this page: >>> http://trac.pjsip.org/repos/wiki/IPAddressChange none of >>> these approaches seem to work. Since mobile phones often >>> switch back and forth between wifi and 3g/mobile this seems >>> like a great feature to build into pjsip. Is there a way to >>> easily handle this now on Android? Thanks! >>> >>> Shaun >>> >>> >>> _______________________________________________ >>> Visit our blog:http://blog.pjsip.org >>> >>> pjsip mailing list >>> pjsip@lists.pjsip.org <mailto:pjsip@lists.pjsip.org> >>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >> >> >> _______________________________________________ >> Visit our blog: http://blog.pjsip.org >> >> pjsip mailing list >> pjsip@lists.pjsip.org <mailto:pjsip@lists.pjsip.org> >> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >> >> >> >> >> _______________________________________________ >> Visit our blog:http://blog.pjsip.org >> >> pjsip mailing list >> pjsip@lists.pjsip.org <mailto:pjsip@lists.pjsip.org> >> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip@lists.pjsip.org <mailto:pjsip@lists.pjsip.org> > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip@lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org