Improved SIP Contact comparison. (#7)

sip-call-params
Tom Uijldert 10 years ago committed by Ingo Bauersachs
parent fd2723ba9b
commit 49f146fb1a

@ -535,9 +535,7 @@ public boolean equals(Object obj)
if(obj instanceof String)
{
String sobj = (String)obj;
if(sobj.startsWith("sip:"))
sobj = sobj.substring(4);
sobj = stripScheme(stripAddress(sobj));
if(getAddress().equalsIgnoreCase(sobj))
return true;
@ -555,6 +553,38 @@ public boolean equals(Object obj)
return this.getAddress().equals(sipContact.getAddress());
}
/**
* Get rid of any parameters, ports etc. within a sip contact
* @param address the address to strip
* @return [sip[s]:]user@host without any params or port numbers.
*/
static String stripAddress(String address)
{
if (address != null && address.length() > 0)
{
int idx = address.indexOf(':', 5);
if (idx > -1)
address = address.substring(0, idx);
idx = address.indexOf(';');
if (idx > -1)
address = address.substring(0, idx);
}
return address;
}
/**
* @param from address to strip
* @return the address, stripped from either "sip:" or "sips:"
*/
public static String stripScheme(String from)
{
int i = from.substring(0, 5).indexOf(':');
if(from.startsWith("sip") && i > 0)
return from.substring(i + 1);
return from;
}
/**
* Returns the presence operation set that this contact belongs
* to.

@ -19,7 +19,9 @@
import java.util.*;
import javax.sip.address.*;
import junit.framework.*;
import net.java.sip.communicator.impl.protocol.sip.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.event.*;
import net.java.sip.communicator.util.*;
@ -150,7 +152,7 @@ public void testRegister()
/**
* Verifies that all operation sets have the type they are declarded to
* Verifies that all operation sets have the type they are declared to
* have.
*
* @throws java.lang.Exception if a class indicated in one of the keys
@ -174,6 +176,27 @@ public void testOperationSetTypes() throws Exception
}
}
/**
* Tests the <tt>equals()</tt> implementation of the SIP Contact class
*/
public void testContactSipImpl() throws Exception
{
ProtocolProviderServiceSipImpl provider =
(ProtocolProviderServiceSipImpl) fixture.provider1;
Address reference =
provider.parseAddressString("sip:User@Host");
Contact referenceContact = new ContactSipImpl(reference, provider);
assertTrue("Cannot find user-only part in a SIP Contact compare",
referenceContact.equals("User"));
assertTrue("Cannot find SIP Contact using strings",
referenceContact.equals("sip:User@Host"));
assertTrue("Cannot find SIP Contact when protocol is secure",
referenceContact.equals("sips:User@Host"));
assertTrue("Cannot find SIP Contact when port is specified",
referenceContact.equals("sip:User@Host:5060"));
}
/**
* A class that would plugin as a registration listener to a protocol
* provider and simply record all events that it sees and notifyAll()

Loading…
Cancel
Save