[sip-comm-dev] Global status settings do not match up correctly with account status settings


I have a SIP account, a Google Talk account and an MSN account in SIP communicator (1.0-alpha-nightly.build.1842).

When I set my global statuses, I get the following results:

1. "Online" --> SIP = "Online", Google Talk = "Available", MSN = "Idle"
2. "Free for chat" --> SIP = "Online", Google Talk = "Free for chat", MSN = "Online"
3. "Away" --> SIP = "Online", Google Talk = "Away", MSN = "Hide"
4. "Offline" --> SIP = "Offline", Google Talk = "Offline", MSN = "Offline"

In the case of #1, the MSN account has been set to the wrong status - it should be "Online". "Idle" should only be used when auto-away period has expired, and the account should switch back to online as soon as any activity occurs on the computer.

In the case of #3, SIP and MSN are both wrong and should be set to "Away".

Could someone with the appropriate access to the bug/issue tracker raise a ticket for this to be fixed?


Richard Cross.


To unsubscribe, e-mail: dev-unsubscribe@sip-communicator.dev.java.net
For additional commands, e-mail: dev-help@sip-communicator.dev.java.net


I tried to the examine the source of the problem and while debugging I could
identify that the problem occurs in the GlobalStatusSelectorBox class. When
you change your status to online the following code is executed (in the
actionPerfomed method):

                    while (statusSet.hasNext())
                        PresenceStatus status = statusSet.next();

                        if( status.getStatus()
                            && status.getStatus()
                                >= PresenceStatus.AVAILABLE_THRESHOLD)
                            new PublishPresenceStatusThread(presence,

                            this.saveStatusInformation( protocolProvider,


There is no problem to update the ICQ status, because the Online status is
the first on in the statusSet list, but when it gets to the MSN status the
first one is the Away status. This results in the error that status is set
to Away instead of Online. I am not sure, why we iterate over the status
set, instead of just checking if the requested status is valid (against the
PresenceStatus class). I suppose that is because not every protocol might
support the global status and we try to get the closest one. If that's the
point than I would rather check if the requested status is supported by the
protocol, otherwise choose the closest one (perhaps still using this

Maybe Yana can give us a hint on her intention, just brief me and I could
provide a fix on that issue.