_state = newState;
}
public void updateState(SipResponse response, boolean uac)
{
SipRequest request = (SipRequest) response.getRequest();
int status = response.getStatus();
if (request.isInitial() && (request.isInvite() || request.isSubscribe()))
{
switch (_state)
{
case INITIAL:
if (status < 300)
{
if (_ua != null)
_ua.createDialog(response, uac);
else if (isProxy())
createProxyDialog(response);
if (status < 200)
setState(State.EARLY);
else
setState(State.CONFIRMED);
}
else
{
if (uac)
{
_ua.resetDialog();
setState(State.INITIAL);
}
else
{
setState(State.TERMINATED);
}
}
break;
case EARLY:
if (200 <= status && status < 300)
{
setState(State.CONFIRMED);
}
else if (status >= 300)
{
if (uac)
setState(State.INITIAL);
else
setState(State.TERMINATED);
}
break;
}
}
else if (request.isBye())
{
setState(State.TERMINATED);
}
}