Unsubscribe for events we have subscribed when registering sip account.

cusax-fix
Damian Minkov 13 years ago
parent 767fea3eab
commit 810f897f69

@ -7,6 +7,7 @@
package net.java.sip.communicator.impl.protocol.sip;
import java.io.*;
import java.text.*;
import java.util.*;
import java.util.regex.*;
@ -236,18 +237,7 @@ protected Subscription getSubscription(String callId)
try
{
final Address subscribeAddress;
String vmAddressURI = (String)provider.getAccountID()
.getAccountProperty(
ProtocolProviderFactory.VOICEMAIL_URI);
if(StringUtils.isNullOrEmpty(vmAddressURI))
subscribeAddress = provider.getRegistrarConnection()
.getAddressOfRecord();
else
subscribeAddress = provider.parseAddressString(
vmAddressURI);
final Address subscribeAddress = getSubscribeAddress();
if(subscribeAddress != null)
{
@ -255,11 +245,47 @@ protected Subscription getSubscription(String callId)
new MessageSummarySubscriber(subscribeAddress));
}
}
catch(Exception e)
catch(Throwable e)
{
e.printStackTrace();
logger.error("Error subscribing for mailbox", e);
}
}
else if (evt.getNewState().equals(RegistrationState.UNREGISTERING))
{
if(messageWaitingSubscriber != null)
{
try
{
messageWaitingSubscriber.unsubscribe(
getSubscribeAddress(), false);
}
catch(Throwable t)
{
logger.error("Error unsubscribing mailbox", t);
}
}
}
}
/**
* Returns the subscribe address for current account mailbox, default
* or configured.
* @return the subscribe address for current account mailbox.
* @throws ParseException
*/
private Address getSubscribeAddress()
throws ParseException
{
String vmAddressURI = (String)provider.getAccountID()
.getAccountProperty(
ProtocolProviderFactory.VOICEMAIL_URI);
if(StringUtils.isNullOrEmpty(vmAddressURI))
return provider.getRegistrarConnection()
.getAddressOfRecord();
else
return provider.parseAddressString(
vmAddressURI);
}
/**

@ -681,7 +681,10 @@ public void publishPresenceStatus(
// must be done in last to avoid some problem when terminating a
// subscription of a contact who is also one of our watchers
if (status.equals(sipStatusEnum.getStatus(SipStatusEnum.OFFLINE)))
{
unsubscribeToAllEventSubscribers();
unsubscribeToAllContact();
}
// inform the listeners of these changes
this.fireProviderStatusChangeEvent(oldStatus);
@ -2882,6 +2885,28 @@ public void unsubscribeToAllContact()
}
}
/**
* Unsubscribe to every event we have subscribes, as it is done normally
* on exit or logout do it silently if it fails.
*/
private void unsubscribeToAllEventSubscribers()
{
if(this.watcherInfoSubscriber != null)
{
try
{
watcherInfoSubscriber.unsubscribe(
parentProvider.getRegistrarConnection()
.getAddressOfRecord(), false);
}
catch (Throwable ex)
{
logger.error("Failed to send the unsubscription " +
"for watcher info.", ex);
}
}
}
/**
* Sets the display name for <tt>contact</tt> to be <tt>newName</tt>.
* <p>
@ -3190,6 +3215,22 @@ else if (evt.getNewState().equals(RegistrationState.CONNECTION_FAILED))
, contact.getParentContactGroup()
, oldContactStatus);
}
if(this.useDistantPA)
{
try
{
watcherInfoSubscriber.removeSubscription(
parentProvider.getRegistrarConnection()
.getAddressOfRecord());
}
catch (Throwable ex)
{
logger.error("Failed to remove subscription " +
"for watcher info.", ex);
}
}
// stop any task associated with the timer
cancelTimer();
waitedCallIds.clear();

Loading…
Cancel
Save