biddyweb / android-rcs-ims-stack

Automatically exported from code.google.com/p/android-rcs-ims-stack
2 stars 1 forks source link

Problem in android 4.0 ice cream sandwich #72

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?

When I turn on the RCS service in a device with android 4.0 version, the device 
doesn't start and I get the exception:

[SipMessageFactory](8026): Can't create SIP message
W/System.err(8026): java.text.ParseException: sip:[::127.0.0.1%2]: Illegal Host 
name  (at offset 16) (at offset 0)
W/System.err(8026):     at 
gov2.nist.javax2.sip.address.AddressFactoryImpl.createSipURI(AddressFactoryImpl.
java:137)
W/System.err(8026):     at 
com.orangelabs.rcs.core.ims.protocol.sip.SipInterface.getLocalContact(SipInterfa
ce.java:499)
W/System.err(8026):     at 
com.orangelabs.rcs.core.ims.network.sip.SipMessageFactory.createRegister(SipMess
ageFactory.java:113)
W/System.err(8026):     at 
com.orangelabs.rcs.core.ims.network.registration.RegistrationManager.registratio
n(RegistrationManager.java:245)
W/System.err(8026):     at 
com.orangelabs.rcs.core.ims.network.ImsNetworkInterface.register(ImsNetworkInter
face.java:481)
W/System.err(8026):     at 
com.orangelabs.rcs.core.ims.network.ImsConnectionManager.run(ImsConnectionManage
r.java:480)
W/System.err(8026):     at java.lang.Thread.run(Thread.java:856)

What version of the product are you using? On what operating system?

I'm using RCS release 2.4.4 and android 4.0

Thanks.

Original issue reported on code.google.com by natalia....@gmail.com on 7 Jun 2012 at 1:55

GoogleCodeExporter commented 9 years ago
Do you test under IPv6 ? Emulator or device ?

Original comment by jmauffret@gmail.com on 7 Jun 2012 at 2:15

GoogleCodeExporter commented 9 years ago
No, I test under IPv4 with a device, specifically, a Samsung Galaxy.

Original comment by natalia....@gmail.com on 8 Jun 2012 at 7:18

GoogleCodeExporter commented 9 years ago

Original comment by jmauffret@gmail.com on 11 Jun 2012 at 6:14

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Hi,

I've been looking for something that was wrong through the classes that appear 
in the above exception, but I can't know why it puts the address 127.0.0.1%2

Any news on this issue?

Thanks.

Original comment by natalia....@gmail.com on 21 Jun 2012 at 8:14

GoogleCodeExporter commented 9 years ago
We have implemented RFC4007 and RFC2373. This will be available in the next 
release, planed to be delivered next week

Original comment by jmauffret@gmail.com on 21 Jun 2012 at 9:39

GoogleCodeExporter commented 9 years ago
Hi,

I have seen the new release and I have made checkout but the classes 
IpAddressUtils.java and GsmaUiConnector.java are missing in repository so there 
are errors in classes like RcsCoreService.java or Android NetworkFactory.java.

Can you confirm me that this classes are in the repository?

Thanks you very much.

Original comment by natalia....@gmail.com on 29 Jun 2012 at 9:44

GoogleCodeExporter commented 9 years ago
sorry for this disagreement

Original comment by jmauffret@gmail.com on 2 Jul 2012 at 12:01

GoogleCodeExporter commented 9 years ago
Hi,

I still have problems with android 4.0.3 version. The device doesn't start and 
I get the exception:

07-03 15:26:05.746: I/[RCS][RegistrationManager](19540): Send REGISTER, 
expire=3600
07-03 15:26:05.746: V/[RCS][SipInterface](19540): Create a transaction context 
PAPBNhTMAA@::127.0.0.1
07-03 15:26:05.746: V/[RCS][SipInterface](19540): >>> Send SIP REGISTER
07-03 15:26:05.746: I/System.out(19540): >>> REGISTER sip:solaiemes.com SIP/2.0
07-03 15:26:05.746: I/System.out(19540): Call-ID: PAPBNhTMAA@::127.0.0.1
07-03 15:26:05.746: I/System.out(19540): CSeq: 1 REGISTER
07-03 15:26:05.746: I/System.out(19540): From: 
<sip:666658864@solaiemes.com>;tag=wCPBNhTOAA
07-03 15:26:05.746: I/System.out(19540): To: <sip:666658864@solaiemes.com>
07-03 15:26:05.751: I/System.out(19540): Via: SIP/2.0/UDP 
[::127.0.0.1]:5987;branch=z9hG4bKb91f0b82caa4a19e1cfd54ccf589931c383535;rport
07-03 15:26:05.751: I/System.out(19540): Max-Forwards: 70
07-03 15:26:05.751: I/System.out(19540): Contact: 
<sip:[::127.0.0.1]:5987;transport=udp>;+g.oma.sip-im
07-03 15:26:05.751: I/System.out(19540): Supported: path
07-03 15:26:05.751: I/System.out(19540): Allow: 
INVITE,UPDATE,ACK,CANCEL,BYE,NOTIFY,OPTIONS,MESSAGE,REFER
07-03 15:26:05.751: I/System.out(19540): Route: 
<sip:91.215.65.62:7060;lr;transport=UDP>
07-03 15:26:05.751: I/System.out(19540): Expires: 3600
07-03 15:26:05.751: I/System.out(19540): User-Agent: IM-client/OMA1.0 
OrangeLabs-RCS-client/2.4.5
07-03 15:26:05.751: I/System.out(19540): Content-Length: 0
07-03 15:26:05.751: I/System.out(19540): 
07-03 15:26:05.751: I/System.out(19540): 
-----------------------------------------------------------------------------
07-03 15:26:05.776: E/[RCS][SipInterface](19540): Can't send SIP message
07-03 15:26:05.776: W/System.err(19540): javax2.sip.SipException: IO Error 
sending request
07-03 15:26:05.776: W/System.err(19540):    at 
gov2.nist.javax2.sip.stack.SIPClientTransaction.sendRequest(SIPClientTransaction
.java:971)
07-03 15:26:05.776: W/System.err(19540):    at 
com.orangelabs.rcs.core.ims.protocol.sip.SipInterface.sendSipMessageAndWait(SipI
nterface.java:682)
07-03 15:26:05.776: W/System.err(19540):    at 
com.orangelabs.rcs.core.ims.network.sip.SipManager.sendSipMessageAndWait(SipMana
ger.java:155)
07-03 15:26:05.776: W/System.err(19540):    at 
com.orangelabs.rcs.core.ims.network.registration.RegistrationManager.sendRegiste
r(RegistrationManager.java:352)
07-03 15:26:05.776: W/System.err(19540):    at 
com.orangelabs.rcs.core.ims.network.registration.RegistrationManager.registratio
n(RegistrationManager.java:248)
07-03 15:26:05.776: W/System.err(19540):    at 
com.orangelabs.rcs.core.ims.network.ImsNetworkInterface.register(ImsNetworkInter
face.java:494)
07-03 15:26:05.776: W/System.err(19540):    at 
com.orangelabs.rcs.core.ims.network.ImsConnectionManager.run(ImsConnectionManage
r.java:480)
07-03 15:26:05.776: W/System.err(19540):    at 
java.lang.Thread.run(Thread.java:856)
07-03 15:26:05.776: W/System.err(19540): Caused by: java.net.SocketException: 
sendto failed: ENETUNREACH (Network is unreachable)
07-03 15:26:05.776: W/System.err(19540):    at 
libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:496)
07-03 15:26:05.776: W/System.err(19540):    at 
libcore.io.IoBridge.sendto(IoBridge.java:465)
07-03 15:26:05.776: W/System.err(19540):    at 
java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:182)
07-03 15:26:05.776: W/System.err(19540):    at 
java.net.DatagramSocket.send(DatagramSocket.java:287)
07-03 15:26:05.776: W/System.err(19540):    at 
gov2.nist.javax2.sip.stack.UDPMessageChannel.sendMessage(UDPMessageChannel.java:
724)
07-03 15:26:05.776: W/System.err(19540):    at 
gov2.nist.javax2.sip.stack.MessageChannel.sendMessage(MessageChannel.java:250)
07-03 15:26:05.776: W/System.err(19540):    at 
gov2.nist.javax2.sip.stack.SIPTransaction.sendMessage(SIPTransaction.java:734)
07-03 15:26:05.781: W/System.err(19540):    at 
gov2.nist.javax2.sip.stack.SIPClientTransaction.sendMessage(SIPClientTransaction
.java:476)
07-03 15:26:05.781: W/System.err(19540):    at 
gov2.nist.javax2.sip.stack.SIPClientTransaction.sendRequest(SIPClientTransaction
.java:967)
07-03 15:26:05.781: W/System.err(19540):    ... 7 more
07-03 15:26:05.781: W/System.err(19540): Caused by: libcore.io.ErrnoException: 
sendto failed: ENETUNREACH (Network is unreachable)
07-03 15:26:05.796: W/System.err(19540):    at 
libcore.io.Posix.sendtoBytes(Native Method)
07-03 15:26:05.796: W/System.err(19540):    at 
libcore.io.Posix.sendto(Posix.java:146)
07-03 15:26:05.796: W/System.err(19540):    at 
libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177)
07-03 15:26:05.796: W/System.err(19540):    at 
libcore.io.IoBridge.sendto(IoBridge.java:463)
07-03 15:26:05.796: W/System.err(19540):    ... 14 more
07-03 15:26:05.796: E/[RCS][RegistrationManager](19540): Registration has failed
07-03 15:26:05.796: W/System.err(19540): 
com.orangelabs.rcs.core.ims.protocol.sip.SipException: Can't send SIP message
07-03 15:26:05.796: W/System.err(19540):    at 
com.orangelabs.rcs.core.ims.protocol.sip.SipInterface.sendSipMessageAndWait(SipI
nterface.java:725)
07-03 15:26:05.796: W/System.err(19540):    at 
com.orangelabs.rcs.core.ims.network.sip.SipManager.sendSipMessageAndWait(SipMana
ger.java:155)
07-03 15:26:05.796: W/System.err(19540):    at 
com.orangelabs.rcs.core.ims.network.registration.RegistrationManager.sendRegiste
r(RegistrationManager.java:352)
07-03 15:26:05.801: W/System.err(19540):    at 
com.orangelabs.rcs.core.ims.network.registration.RegistrationManager.registratio
n(RegistrationManager.java:248)
07-03 15:26:05.801: W/System.err(19540):    at 
com.orangelabs.rcs.core.ims.network.ImsNetworkInterface.register(ImsNetworkInter
face.java:494)
07-03 15:26:05.801: W/System.err(19540):    at 
com.orangelabs.rcs.core.ims.network.ImsConnectionManager.run(ImsConnectionManage
r.java:480)
07-03 15:26:05.801: W/System.err(19540):    at 
java.lang.Thread.run(Thread.java:856)
07-03 15:26:05.801: I/[RCS][RegistrationManager](19540): Registration has 
failed: 1, reason=Can't send SIP message
07-03 15:26:05.801: V/[RCS][RcsCoreService](19540): Handle event registration 
failed
07-03 15:26:05.801: D/dalvikvm(19540): GC_CONCURRENT freed 386K, 7% free 
9311K/9991K, paused 1ms+2ms
07-03 15:26:05.821: D/dalvikvm(19540): GC_EXPLICIT freed 26K, 8% free 
9284K/9991K, paused 2ms+2ms
07-03 15:26:05.836: V/[RCS][WifiNetworkInterface](19540): IMS registration has 
failed
07-03 15:26:05.841: V/[RCS][ImsConnectionManager](19540): Can't register to the 
IMS
07-03 15:26:05.841: V/[RCS][ImsConnectionManager](19540): Wait 100s before 
retry registration (failures=2, coeff=0.84)

I work with release 2.4.5., last version in repository.

Thanks.

Original comment by natalia....@gmail.com on 3 Jul 2012 at 1:37

GoogleCodeExporter commented 9 years ago
I give you some information to help you.

I turn on the RCS service (release 2.4.5.) in the following devices:

- Samsung Galaxy with android 2.2.1. It starts OK.
- HTC device with android 4.0.3. It starts OK.
- Samsung device with android 4.0.3. It doesn't start and I get the above 
exception.

Original comment by natalia....@gmail.com on 3 Jul 2012 at 2:17

GoogleCodeExporter commented 9 years ago
I'm seeing the same ENETUNREACH exception.

Motorola Droid 4, LTE, Android 4.0.4, ENETUNREACH exception. Host is certainly 
reachable as I can ping it from terminal emulator on the device, might port 
problem?

Motorola Droid, CDMA, Android 2.2.3, registration succeeded
Samsung Droid Charge, LTE, Android 2.3 registration succeeded

I thought it's problem with Android ICS, from the previou post it might not.

Original comment by mcd...@mcdull.us on 16 Jul 2012 at 7:32

GoogleCodeExporter commented 9 years ago
Here are the reasons I found that the RCS service (2.4.5) is not working on the 
Motorola Droid 4 and probably some Android ICS devices.
It is becasue it always pick the wrong local IP address.
This seems not related to the original issue but just provide the information 
here rather than open up a new issue.

When connected with wifi, on an IPv4 network, unlike previous Android version, 
the device actually have a few network interfaces available:
rmnet0 (when mobile is enabled, regardless connected or not)
usb1 (always available)
wlan0 (when wifi is connected)

Because AndroidNetworkFActory.getLocalIPAddress() will pick the first IP 
Address which is not loopback and link local, so it will pick either "rmnet0" 
if mobile is enabled or "usb1" if mobile is diabled, but never the correct 
"wlan0".
As a result, the request can never get a reponse and will receive a TIMEOUT 
error.

When connected on mobile data, the following network interfaces are available:
rmnet0 (when mobile is enabled, regardless connected or not)
rmnet1 (when mobile data is connected)
usb1 (always available)

Again, RCS service will pick the "rmnet0" which seems not the default interface 
for mobile data, and it always throws the ENETUNREACH exception.
"rmnet0" has only IPv6 IP which I bleieve all LTE Android ICS devices on 
Verizon network are using IPv6.

I have to manually make it to use "rmnet1", which both has IPv6 and IPv4 IP 
address.
The RCS server I'm connecting has IPv4 IP, I can make a connection if using 
IPv4 of "rmnet1". But if I use the IPv6 of "rmnet1", I will also always receive 
ENETUNREACH exception. Is that expected?

Here is the log:
07-17 09:49:21.648: I/System.out(7588): >>> REGISTER sip:my.rcssever.com SIP/2.0
07-17 09:49:21.648: I/System.out(7588): Call-ID: 
3CB2ViTAAA@2600:1012:8009:e487::101
07-17 09:49:21.648: I/System.out(7588): CSeq: 1 REGISTER
07-17 09:49:21.648: I/System.out(7588): From: 
<sip:9253248941@my.rcsserver.com>;tag=GDB2ViTCAA
07-17 09:49:21.648: I/System.out(7588): To: <sip:9253248941@my.rcsserver.com>
07-17 09:49:21.648: I/System.out(7588): Via: SIP/2.0/TCP 
[2600:1012:8009:e487::101]:5062;branch=z9hG4bK64a2c1ad1f417ac70c27969a05a877be33
3238;rport
07-17 09:49:21.648: I/System.out(7588): Max-Forwards: 70
07-17 09:49:21.648: I/System.out(7588): Contact: 
<sip:[2600:1012:8009:e487::101]:5062>;+g.oma.sip-im
07-17 09:49:21.648: I/System.out(7588): Supported: path
07-17 09:49:21.648: I/System.out(7588): Allow: 
INVITE,UPDATE,ACK,CANCEL,BYE,NOTIFY,OPTIONS,MESSAGE,REFER
07-17 09:49:21.648: I/System.out(7588): Route: 
<sip:12.139.6.248:5060;lr;transport=TCP>
07-17 09:49:21.648: I/System.out(7588): Expires: 60
07-17 09:49:21.648: I/System.out(7588): User-Agent: IM-client/OMA1.0 
OrangeLabs-RCS-client/2.4.5
07-17 09:49:21.648: I/System.out(7588): Content-Length: 0
07-17 09:49:21.648: I/System.out(7588): 
07-17 09:49:21.648: I/System.out(7588): 
-----------------------------------------------------------------------------
07-17 09:49:21.679: D/dalvikvm(7588): GC_CONCURRENT freed 1764K, 16% free 
9714K/11555K, paused 3ms+2ms
07-17 09:49:21.710: E/[RCS][SipInterface](7588): Can't send SIP message
07-17 09:49:21.710: W/System.err(7588): javax2.sip.SipException: IO Error 
sending request
07-17 09:49:21.710: W/System.err(7588):     at 
gov2.nist.javax2.sip.stack.SIPClientTransaction.sendRequest(SIPClientTransaction
.java:971)
07-17 09:49:21.710: W/System.err(7588):     at 
com.orangelabs.rcs.core.ims.protocol.sip.SipInterface.sendSipMessageAndWait(SipI
nterface.java:688)
07-17 09:49:21.710: W/System.err(7588):     at 
com.orangelabs.rcs.core.ims.network.sip.SipManager.sendSipMessageAndWait(SipMana
ger.java:155)
07-17 09:49:21.710: W/System.err(7588):     at 
com.orangelabs.rcs.core.ims.network.registration.RegistrationManager.sendRegiste
r(RegistrationManager.java:352)
07-17 09:49:21.710: W/System.err(7588):     at 
com.orangelabs.rcs.core.ims.network.registration.RegistrationManager.registratio
n(RegistrationManager.java:248)
07-17 09:49:21.710: W/System.err(7588):     at 
com.orangelabs.rcs.core.ims.network.ImsNetworkInterface.register(ImsNetworkInter
face.java:494)
07-17 09:49:21.710: W/System.err(7588):     at 
com.orangelabs.rcs.core.ims.network.ImsConnectionManager.run(ImsConnectionManage
r.java:477)
07-17 09:49:21.710: W/System.err(7588):     at 
java.lang.Thread.run(Thread.java:856)
07-17 09:49:21.710: W/System.err(7588): Caused by: java.net.ConnectException: 
failed to connect to /12.139.6.248 (port 5060): connect failed: ENETUNREACH 
(Network is unreachable)
07-17 09:49:21.718: W/System.err(7588):     at 
libcore.io.IoBridge.connect(IoBridge.java:114)
07-17 09:49:21.718: W/System.err(7588):     at 
java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
07-17 09:49:21.718: W/System.err(7588):     at 
java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
07-17 09:49:21.718: W/System.err(7588):     at 
java.net.Socket.startupSocket(Socket.java:566)
07-17 09:49:21.718: W/System.err(7588):     at 
java.net.Socket.<init>(Socket.java:249)
07-17 09:49:21.718: W/System.err(7588):     at 
gov2.nist.core.net.DefaultNetworkLayer.createSocket(DefaultNetworkLayer.java:120
)
07-17 09:49:21.718: W/System.err(7588):     at 
gov2.nist.javax2.sip.stack.IOHandler.sendBytes(IOHandler.java:204)

Original comment by mcd...@mcdull.us on 18 Jul 2012 at 7:05

GoogleCodeExporter commented 9 years ago
The local IP Address is picked before the DNS lookup on the server hostname.
However, it would be better to select the local IP after.
If the server is resolved as IPv4, it should pick the IPv4 local IP Address 
from network interface, or if the server IP is IPv6, it should pick the IPv6 
local IP Address.
Otherwise, it will become the current situation, it tries to connect to a IPv4 
server using a local IPv6 address even the correct network interface is being 
used.

Original comment by mcd...@mcdull.us on 18 Jul 2012 at 8:06