Make sure user can unregister even if not completely registered (e.g. when REGISTERING). Issue number:

cusax-fix
Emil Ivov 19 years ago
parent 172afa3755
commit 8f458ef1b9

@ -209,12 +209,12 @@ public void registrationStateChanged(RegistrationStateChangeEvent evt)
.getProtocolPresence(protocolProvider);
if (evt.getNewState().equals(RegistrationState.REGISTERED)) {
this.mainFrame.getStatusPanel()
.updateStatus(protocolProvider);
if(mainFrame.getCallManager().containsCallAccount(protocolProvider)) {
this.mainFrame.getCallManager()
.updateCallAccountStatus(protocolProvider);
}
@ -232,7 +232,7 @@ else if (evt.getNewState().equals(
if (evt.getReasonCode() == RegistrationStateChangeEvent
.REASON_RECONNECTION_RATE_LIMIT_EXCEEDED) {
String msgText = Messages.getI18NString(
"reconnectionLimitExceeded",
protocolProvider.getAccountID().getUserID()).getText();
@ -242,7 +242,7 @@ else if (evt.getNewState().equals(
}
else if (evt.getReasonCode() == RegistrationStateChangeEvent
.REASON_NON_EXISTING_USER_ID) {
String msgText = Messages.getI18NString(
"nonExistingUserId", protocolProvider
.getProtocolName()).getText();
@ -256,7 +256,7 @@ else if (evt.getReasonCode() == RegistrationStateChangeEvent
protocolProvider.getAccountID().getAccountAddress())
.getText();
new ErrorDialog(null, msgText,
new ErrorDialog(null, msgText,
Messages.getI18NString("error").getText()).showDialog();
}
logger.error(evt.getReason());
@ -300,7 +300,7 @@ else if (evt.getNewState().equals(RegistrationState.UNREGISTERED)) {
}
else if (evt.getReasonCode() == RegistrationStateChangeEvent
.REASON_CLIENT_LIMIT_REACHED_FOR_IP) {
String msgText = Messages.getI18NString("limitReachedForIp",
protocolProvider.getProtocolName()).getText();
@ -308,7 +308,7 @@ else if (evt.getReasonCode() == RegistrationStateChangeEvent
Messages.getI18NString("error").getText()).showDialog();
}
else if (evt.getReasonCode() == RegistrationStateChangeEvent
.REASON_CHANGE_REQUESTED_BY_USER) {
.REASON_USER_REQUEST) {
//do nothing
}
else {

@ -23,7 +23,7 @@
* The <tt>SimpleStatusSelectorBox</tt> is a <tt>SIPCommMenu</tt> that
* contains two statuses ONLINE and OFFLINE. It's used to represent the status
* of a protocol provider which doesn't support presence operation set.
*
*
* @author Yana Stamcheva
*/
public class SimpleStatusSelectorBox
@ -41,29 +41,29 @@ public class SimpleStatusSelectorBox
private Connecting connecting = new Connecting();
private ProtocolProviderService protocolProvider;
private ImageIcon onlineIcon
private ImageIcon onlineIcon
= new ImageIcon(ImageLoader.getImage(ImageLoader.SIP_LOGO));
private ImageIcon offlineIcon
= new ImageIcon(LightGrayFilter.createDisabledImage(
ImageLoader.getImage(ImageLoader.SIP_LOGO)));
private JMenuItem onlineItem = new JMenuItem(
Messages.getI18NString("online").getText(),
onlineIcon);
private JMenuItem offlineItem = new JMenuItem(
Messages.getI18NString("offline").getText(),
offlineIcon);
private int accountIndex;
private JLabel titleLabel;
/**
* Creates an instance of <tt>SimpleStatusSelectorBox</tt>.
*
*
* @param mainFrame The main application window.
* @param protocolProvider The protocol provider.
* @param accountIndex If we have more than one account for a protocol,
@ -76,19 +76,19 @@ public SimpleStatusSelectorBox(MainFrame mainFrame,
this.mainFrame = mainFrame;
this.protocolProvider = protocolProvider;
this.accountIndex = accountIndex;
String tooltip = "<html><b>"
+ protocolProvider.getAccountID().getUserID()
+ "</b><br>Connecting</html>";
this.setToolTipText(tooltip);
this.setToolTipText(tooltip);
onlineItem.setName("online");
offlineItem.setName("offline");
onlineItem.addActionListener(this);
offlineItem.addActionListener(this);
titleLabel = new JLabel(protocolProvider.getAccountID().getUserID());
titleLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
@ -96,7 +96,7 @@ public SimpleStatusSelectorBox(MainFrame mainFrame,
this.add(titleLabel);
this.addSeparator();
this.add(onlineItem);
this.add(offlineItem);
}
@ -104,21 +104,21 @@ public SimpleStatusSelectorBox(MainFrame mainFrame,
/**
* Handles the <tt>ActionEvent</tt> triggered when one of the items
* in the list is selected.
*/
*/
public void actionPerformed(ActionEvent e)
{
JMenuItem menuItem = (JMenuItem) e.getSource();
String itemName = menuItem.getName();
if(itemName.equals("online")) {
if(!protocolProvider.isRegistered()) {
this.mainFrame.getLoginManager().login(protocolProvider);
}
}
else {
if(! protocolProvider.getRegistrationState()
if( !protocolProvider.getRegistrationState()
.equals(RegistrationState.UNREGISTERED)
&& protocolProvider.getRegistrationState()
&& !protocolProvider.getRegistrationState()
.equals(RegistrationState.UNREGISTERING))
{
try {
@ -139,7 +139,7 @@ public void actionPerformed(ActionEvent e)
/**
* Starts the timer that changes the images given by the array, thus
* creating an animated image that indicates that the user is connecting.
*
*
* @param images A <tt>BufferedImage</tt> array that contains all images
* from which to create the animated image indicating the connecting state.
*/
@ -156,20 +156,20 @@ public void startConnecting(BufferedImage[] images)
* Stops the timer that manages the connecting animated icon.
*/
public void updateStatus()
{
{
this.connecting.stop();
if(protocolProvider.isRegistered()) {
setSelected(onlineItem, onlineIcon);
setSelected(onlineItem, onlineIcon);
}
else {
setSelected(offlineItem, offlineIcon);
}
String tooltip = this.getToolTipText();
tooltip = tooltip.substring(0, tooltip.lastIndexOf("<br>"));
this.setToolTipText(tooltip.concat("<br>" + onlineItem.getText()));
}
@ -208,11 +208,11 @@ public void setAccountIndex(int accountIndex)
{
this.accountIndex = accountIndex;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if(accountIndex > 0) {
AntialiasingManager.activateAntialiasing(g);
g.setColor(Color.DARK_GRAY);

@ -477,7 +477,8 @@ public void register(SecurityAuthority authority)
public void unregister()
throws OperationFailedException
{
if(!isRegistered())
if(getRegistrationState().equals(RegistrationState.UNREGISTERED)
|| getRegistrationState().equals(RegistrationState.UNREGISTERING))
{
return;
}
@ -1329,16 +1330,17 @@ ContactHeader getRegistrationContactHeader(InetAddress registrarAddress,
ContactHeader registrationContactHeader = null;
try
{
InetAddress localAddress = SipActivator
InetSocketAddress localAddress = SipActivator
.getNetworkAddressManagerService()
.getLocalHost(registrarAddress);
.getPublicAddressFor(registrarAddress
, srcListeningPoint.getPort());
SipURI contactURI = addressFactory.createSipURI(
((SipURI)ourSipAddress.getURI()).getUser()
, localAddress.getHostAddress());
, localAddress.getAddress().getHostAddress());
contactURI.setTransportParam(srcListeningPoint.getTransport());
contactURI.setPort(srcListeningPoint.getPort());
contactURI.setPort(localAddress.getPort());
Address contactAddress = addressFactory.createAddress( contactURI );
if (ourDisplayName != null)

@ -429,7 +429,7 @@ public void processOK(ClientTransaction clientTransatcion,
if (grantedExpiration <= 0 || requestedExpiration <= 0)
{
setRegistrationState(RegistrationState.UNREGISTERED
, RegistrationStateChangeEvent.REASON_CHANGE_REQUESTED_BY_USER
, RegistrationStateChangeEvent.REASON_USER_REQUEST
, "Registration terminated.");
}
else
@ -452,8 +452,9 @@ public void processOK(ClientTransaction clientTransatcion,
*/
public void unregister() throws OperationFailedException
{
if (getRegistrationState() != RegistrationState.REGISTERED)
if (getRegistrationState() == RegistrationState.UNREGISTERED)
{
logger.trace("Trying to unregister when already unresgistered");
return;
}
@ -533,19 +534,22 @@ public void unregister() throws OperationFailedException
"Unable to create a unregister transaction"
, OperationFailedException.INTERNAL_ERROR
, ex);
}
try
{
unregisterTransaction.sendRequest();
logger.debug("sent request: " + unregisterRequest);
//emcho: i think we should not set to unregistered here but rather
//wait for the ok response.
// setRegistrationState(RegistrationState.UNREGISTERING,
// RegistrationStateChangeEvent.
// REASON_USER_REQUEST, null);
//if we're currently registered we'll wait for an ok response
//before changing the status. otherwise we set it immediately.
if(!getRegistrationState().equals(RegistrationState.REGISTERED))
{
logger.trace("Setting state to UNREGISTERED.");
setRegistrationState(RegistrationState.UNREGISTERED,
RegistrationStateChangeEvent.REASON_USER_REQUEST, null);
}
}
catch (SipException ex)
{
@ -867,6 +871,10 @@ public void processRequest(RequestEvent requestEvent)
*/
public void processTimeout(TimeoutEvent timeoutEvent)
{
//don't alert the user if we're already off
if(getRegistrationState().equals(RegistrationState.UNREGISTERED))
return;
setRegistrationState(
RegistrationState.CONNECTION_FAILED
, RegistrationStateChangeEvent.REASON_NOT_SPECIFIED

@ -38,7 +38,7 @@ public class RegistrationStateChangeEvent extends PropertyChangeEvent
* Indicates that the change in the registration state that has just
* occurred has been requested by the user.
*/
public static final int REASON_CHANGE_REQUESTED_BY_USER = 0;
public static final int REASON_USER_REQUEST = 0;
/**
* Indicates that the server has refused registration due to a problem with
@ -81,11 +81,6 @@ public class RegistrationStateChangeEvent extends PropertyChangeEvent
*/
public static final int REASON_INTERNAL_ERROR = 6;
/**
* Indicates that event change has occurred because the user requested it.
*/
public static final int REASON_USER_REQUEST = 7;
/**
* Indicates that the specified server was not found (i.e. the fqdn was not
* resolved or the ip address was not reachable).
@ -198,7 +193,7 @@ public int getReasonCode()
* in a "details box". In the rest of the time, such services should consult
* the error code and provide corresponding, localized, reason phrases.
*
* @return a non localized String explaining the reason fo the state
* @return a non localized String explaining the reason for the state
* transition.
*/
public String getReason()

@ -1051,7 +1051,8 @@ public void waitForAuthResponse(long waitFor)
{
synchronized(this)
{
if(isAuthorizationResponseReceived) return;
if(isAuthorizationResponseReceived)
return;
try{
wait(waitFor);
}

Loading…
Cancel
Save