Skip to content

Commit

Permalink
Pull in various Ua[cs]StateX into UA to avoid having gross
Browse files Browse the repository at this point in the history
circular import dependency removal hack and fix some linting
errors.
  • Loading branch information
sobomax committed Jan 19, 2025
1 parent 0668d16 commit 735a04f
Show file tree
Hide file tree
Showing 14 changed files with 71 additions and 130 deletions.
12 changes: 12 additions & 0 deletions sippy/UA.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,18 @@ class UA(object):
compact_sip = False
uas_lossemul = 0

if 'UasStateTrying' not in globals(): from UasStateTrying import UasStateTrying
if 'UacStateTrying' not in globals(): from UacStateTrying import UacStateTrying
if 'UacStateRinging' not in globals(): from UacStateRinging import UacStateRinging
if 'UasStateRinging' not in globals(): from UasStateRinging import UasStateRinging
if 'UaStateFailed' not in globals(): from UaStateFailed import UaStateFailed
if 'UaStateConnected' not in globals(): from UaStateConnected import UaStateConnected
if 'UacStateCancelling' not in globals(): from UacStateCancelling import UacStateCancelling
if 'UasStateUpdating' not in globals(): from UasStateUpdating import UasStateUpdating
if 'UacStateUpdating' not in globals(): from UacStateUpdating import UacStateUpdating
if 'UaStateDisconnected' not in globals(): from UaStateDisconnected import UaStateDisconnected
if 'UaStateDead' not in globals(): from UaStateDead import UaStateDead

def __init__(self, global_config, event_cb = None, username = None, password = None, nh_address = None, credit_time = None, \
conn_cbs = None, disc_cbs = None, fail_cbs = None, ring_cbs = None, dead_cbs = None, ltag = None, extra_headers = None, \
expire_time = None, no_progress_time = None, nh_transport = SipConf.my_transport):
Expand Down
17 changes: 5 additions & 12 deletions sippy/UaStateConnected.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,12 @@ def recvRequest(self, req):
if self.ua.on_remote_sdp_change != None:
body = self.ua.on_remote_sdp_change(body, partial(self.ua.delayed_remote_sdp_update, event))
if body is None:
return (UasStateUpdating,)
return (self.ua.UasStateUpdating,)
self.ua.rSDP = body.getCopy()
else:
self.ua.rSDP = None
self.ua.equeue.append(event)
return (UasStateUpdating,)
return (self.ua.UasStateUpdating,)
if req.getMethod() == 'BYE':
req.sendResponse(200, 'OK')
#print('BYE received in the Connected state, going to the Disconnected state')
Expand All @@ -111,7 +111,7 @@ def recvRequest(self, req):
self.ua.equeue.append(event)
self.ua.cancelCreditTimer()
self.ua.disconnect_ts = req.rtime
return (UaStateDisconnected, self.ua.disc_cbs, req.rtime, self.ua.origin)
return (self.ua.UaStateDisconnected, self.ua.disc_cbs, req.rtime, self.ua.origin)
if req.getMethod() == 'INFO':
req.sendResponse(200, 'OK')
event = CCEventInfo(req.getBody(), rtime = req.rtime, origin = self.ua.origin)
Expand Down Expand Up @@ -176,7 +176,7 @@ def recvEvent(self, event):
self.ua.newTransaction(req)
self.ua.cancelCreditTimer()
self.ua.disconnect_ts = event.rtime
return (UaStateDisconnected, self.ua.disc_cbs, event.rtime, event.origin)
return (self.ua.UaStateDisconnected, self.ua.disc_cbs, event.rtime, event.origin)
if isinstance(event, CCEventUpdate):
body = event.getData()
fake_laddr = (('127.0.0.1', None), None)
Expand Down Expand Up @@ -211,7 +211,7 @@ def recvEvent(self, event):
max_forwards = max_forwards_hf)
self.ua.lSDP = body
self.ua.newUacTransaction(req)
return (UacStateUpdating,)
return (self.ua.UacStateUpdating,)
if isinstance(event, CCEventInfo):
body = event.getData()
req = self.ua.genRequest('INFO', body, extra_headers = eh)
Expand Down Expand Up @@ -294,10 +294,3 @@ def onStateChange(self, newstate):
def rComplete(self, resp):
req = self.ua.genRequest('BYE')
self.ua.newTransaction(req)

if 'UaStateDisconnected' not in globals():
from sippy.UaStateDisconnected import UaStateDisconnected
if 'UasStateUpdating' not in globals():
from sippy.UasStateUpdating import UasStateUpdating
if 'UacStateUpdating' not in globals():
from sippy.UacStateUpdating import UacStateUpdating
5 changes: 1 addition & 4 deletions sippy/UaStateDisconnected.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,4 @@ def recvRequest(self, req):

def goDead(self):
#print('Time in Disconnected state expired, going to the Dead state')
self.ua.changeState((UaStateDead,))

if 'UaStateDead' not in globals():
from sippy.UaStateDead import UaStateDead
self.ua.changeState((self.ua.UaStateDead,))
5 changes: 1 addition & 4 deletions sippy/UaStateFailed.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,4 @@ def __init__(self, ua):

def goDead(self):
#print('Time in Failed state expired, going to the Dead state')
self.ua.changeState((UaStateDead,))

if 'UaStateDead' not in globals():
from sippy.UaStateDead import UaStateDead
self.ua.changeState((self.ua.UaStateDead,))
11 changes: 3 additions & 8 deletions sippy/UacStateCancelling.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def __init__(self, ua):
def goIdle(self):
#print('Time in Cancelling state expired, going to the Dead state')
self.te = None
self.ua.changeState((UaStateDead,))
self.ua.changeState((self.ua.UaStateDead,))

def recvResponse(self, resp, tr):
code, reason = resp.getSCode()
Expand Down Expand Up @@ -91,14 +91,9 @@ def recvResponse(self, resp, tr):
self.ua.rUri.setTag(resp.getHFBody('to').getTag())
req = self.ua.genRequest('BYE')
self.ua.newTransaction(req)
return (UaStateDisconnected,)
return (UaStateDead,)
return (self.ua.UaStateDisconnected,)
return (self.ua.UaStateDead,)

def recvEvent(self, event):
#print('wrong event %s in the Cancelling state' % event)
return None

if 'UaStateDead' not in globals():
from sippy.UaStateDead import UaStateDead
if 'UaStateDisconnected' not in globals():
from sippy.UaStateDisconnected import UaStateDisconnected
9 changes: 2 additions & 7 deletions sippy/UacStateIdle.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,16 +101,11 @@ def recvEvent(self, event):
self.ua.no_progress_timer = TimeoutAbsMono(self.ua.no_progress_expires, self.ua.no_progress_mtime)
elif self.ua.expire_time != None:
self.ua.expire_timer = TimeoutAbsMono(self.ua.expires, self.ua.expire_mtime)
return (UacStateTrying,)
return (self.ua.UacStateTrying,)
if isinstance(event, CCEventFail) or isinstance(event, CCEventRedirect) or isinstance(event, CCEventDisconnect):
if self.ua.setup_ts is None or event.rtime >= self.ua.setup_ts:
self.ua.disconnect_ts = event.rtime
else:
self.ua.disconnect_ts = MonoTime()
return (UaStateDead, self.ua.disc_cbs, event.rtime, event.origin)
return (self.ua.UaStateDead, self.ua.disc_cbs, event.rtime, event.origin)
return None

if 'UacStateTrying' not in globals():
from sippy.UacStateTrying import UacStateTrying
if 'UaStateDead' not in globals():
from sippy.UaStateDead import UaStateDead
17 changes: 5 additions & 12 deletions sippy/UacStateRinging.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,19 +75,19 @@ def _recvResponse(self, resp, tr):
self.ua.disconnect_ts = resp.rtime
else:
self.ua.disconnect_ts = MonoTime()
return (UaStateFailed, self.ua.fail_cbs, resp.rtime, self.ua.origin, scode[0])
return (self.ua.UaStateFailed, self.ua.fail_cbs, resp.rtime, self.ua.origin, scode[0])
self.ua.rUri.setTag(tag)
if not self.ua.late_media or body is None:
self.ua.late_media = False
event = CCEventConnect(scode, rtime = resp.rtime, origin = self.ua.origin)
self.ua.startCreditTimer(resp.rtime)
self.ua.connect_ts = resp.rtime
rval = (UaStateConnected, self.ua.conn_cbs, resp.rtime, self.ua.origin)
rval = (self.ua.UaStateConnected, self.ua.conn_cbs, resp.rtime, self.ua.origin)
else:
event = CCEventPreConnect(scode, rtime = resp.rtime, origin = self.ua.origin)
tr.uack = True
self.ua.pending_tr = tr
rval = (UaStateConnected,)
rval = (self.ua.UaStateConnected,)
if body is not None:
if self.ua.on_remote_sdp_change != None:
body = self.ua.on_remote_sdp_change(body, partial(self.ua.delayed_remote_sdp_update, event))
Expand Down Expand Up @@ -116,7 +116,7 @@ def _recvResponse(self, resp, tr):
self.ua.disconnect_ts = resp.rtime
else:
self.ua.disconnect_ts = MonoTime()
return (UaStateFailed, self.ua.fail_cbs, resp.rtime, self.ua.origin, code)
return (self.ua.UaStateFailed, self.ua.fail_cbs, resp.rtime, self.ua.origin, code)

def recvEvent(self, event):
if isinstance(event, CCEventFail) or isinstance(event, CCEventRedirect) or isinstance(event, CCEventDisconnect):
Expand All @@ -128,13 +128,6 @@ def recvEvent(self, event):
self.ua.disconnect_ts = event.rtime
else:
self.ua.disconnect_ts = MonoTime()
return (UacStateCancelling, self.ua.disc_cbs, event.rtime, event.origin, self.ua.last_scode)
return (self.ua.UacStateCancelling, self.ua.disc_cbs, event.rtime, event.origin, self.ua.last_scode)
#print('wrong event %s in the Ringing state' % event)
return None

if 'UaStateFailed' not in globals():
from sippy.UaStateFailed import UaStateFailed
if 'UaStateConnected' not in globals():
from sippy.UaStateConnected import UaStateConnected
if 'UacStateCancelling' not in globals():
from sippy.UacStateCancelling import UacStateCancelling
25 changes: 8 additions & 17 deletions sippy/UacStateTrying.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,13 @@ def _recvResponse(self, resp, tr):
body = self.ua.on_remote_sdp_change(body, partial(self.ua.delayed_remote_sdp_update, event))
if body is None:
self.ua.p1xx_ts = resp.rtime
return (UacStateRinging, self.ua.ring_cbs, resp.rtime, self.ua.origin, code)
return (self.ua.UacStateRinging, self.ua.ring_cbs, resp.rtime, self.ua.origin, code)
self.ua.rSDP = body.getCopy()
else:
self.ua.rSDP = None
self.ua.equeue.append(event)
self.ua.p1xx_ts = resp.rtime
return (UacStateRinging, self.ua.ring_cbs, resp.rtime, self.ua.origin, code)
return (self.ua.UacStateRinging, self.ua.ring_cbs, resp.rtime, self.ua.origin, code)
if self.ua.expire_timer != None:
self.ua.expire_timer.cancel()
self.ua.expire_timer = None
Expand All @@ -92,19 +92,19 @@ def _recvResponse(self, resp, tr):
self.ua.disconnect_ts = resp.rtime
else:
self.ua.disconnect_ts = MonoTime()
return (UaStateFailed, self.ua.fail_cbs, resp.rtime, self.ua.origin, scode[0])
return (self.ua.UaStateFailed, self.ua.fail_cbs, resp.rtime, self.ua.origin, scode[0])
self.ua.rUri.setTag(tag)
if not self.ua.late_media or body is None:
self.ua.late_media = False
event = CCEventConnect(scode, rtime = resp.rtime, origin = self.ua.origin)
self.ua.startCreditTimer(resp.rtime)
self.ua.connect_ts = resp.rtime
rval = (UaStateConnected, self.ua.conn_cbs, resp.rtime, self.ua.origin)
rval = (self.ua.UaStateConnected, self.ua.conn_cbs, resp.rtime, self.ua.origin)
else:
event = CCEventPreConnect(scode, rtime = resp.rtime, origin = self.ua.origin)
tr.uack = True
self.ua.pending_tr = tr
rval = (UaStateConnected,)
rval = (self.ua.UaStateConnected,)
if body is not None:
if self.ua.on_remote_sdp_change != None:
body = self.ua.on_remote_sdp_change(body, partial(self.ua.delayed_remote_sdp_update, event))
Expand Down Expand Up @@ -138,7 +138,7 @@ def _recvResponse(self, resp, tr):
self.ua.disconnect_ts = resp.rtime
else:
self.ua.disconnect_ts = MonoTime()
return (UaStateFailed, self.ua.fail_cbs, resp.rtime, self.ua.origin, code)
return (self.ua.UaStateFailed, self.ua.fail_cbs, resp.rtime, self.ua.origin, code)

def recvEvent(self, event):
if isinstance(event, CCEventFail) or isinstance(event, CCEventRedirect) or isinstance(event, CCEventDisconnect):
Expand All @@ -156,7 +156,7 @@ def recvEvent(self, event):
self.ua.disconnect_ts = event.rtime
else:
self.ua.disconnect_ts = MonoTime()
return (UacStateCancelling, self.ua.disc_cbs, event.rtime, event.origin, self.ua.last_scode)
return (self.ua.UacStateCancelling, self.ua.disc_cbs, event.rtime, event.origin, self.ua.last_scode)
#print('wrong event %s in the Trying state' % event)
return None

Expand Down Expand Up @@ -200,13 +200,4 @@ def recvResponse(self, resp, tr):
self.genBYE()
self.ua.equeue.append(event)
self.ua.disconnect_ts = resp.rtime
return (UaStateFailed, self.ua.fail_cbs, resp.rtime, self.ua.origin, ex.code)

if 'UacStateRinging' not in globals():
from sippy.UacStateRinging import UacStateRinging
if 'UaStateFailed' not in globals():
from sippy.UaStateFailed import UaStateFailed
if 'UaStateConnected' not in globals():
from sippy.UaStateConnected import UaStateConnected
if 'UacStateCancelling' not in globals():
from sippy.UacStateCancelling import UacStateCancelling
return (self.ua.UaStateFailed, self.ua.fail_cbs, resp.rtime, self.ua.origin, ex.code)
17 changes: 6 additions & 11 deletions sippy/UacStateUpdating.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def recvRequest(self, req):
self.ua.equeue.append(event)
self.ua.cancelCreditTimer()
self.ua.disconnect_ts = req.rtime
return (UaStateDisconnected, self.ua.disc_cbs, req.rtime, self.ua.origin)
return (self.ua.UaStateDisconnected, self.ua.disc_cbs, req.rtime, self.ua.origin)
#print('wrong request %s in the state Updating' % req.getMethod())
return None

Expand Down Expand Up @@ -80,12 +80,12 @@ def recvResponse(self, resp, tr):
'downstream: "%s"' % str(e))
return self.updateFailed(event)
if body is None:
return (UaStateConnected,)
return (self.ua.UaStateConnected,)
self.ua.rSDP = body.getCopy()
else:
self.ua.rSDP = None
self.ua.equeue.append(event)
return (UaStateConnected,)
return (self.ua.UaStateConnected,)
try:
reason_rfc3326 = resp.getHFBody('reason')
except:
Expand All @@ -111,7 +111,7 @@ def recvResponse(self, resp, tr):
return self.updateFailed(event)

self.ua.equeue.append(event)
return (UaStateConnected,)
return (self.ua.UaStateConnected,)

def updateFailed(self, event):
self.ua.equeue.append(event)
Expand All @@ -121,7 +121,7 @@ def updateFailed(self, event):
self.ua.disconnect_ts = event.rtime
self.ua.equeue.append(CCEventDisconnect(rtime = event.rtime, \
origin = self.ua.origin))
return (UaStateDisconnected, self.ua.disc_cbs, event.rtime, event.origin)
return (self.ua.UaStateDisconnected, self.ua.disc_cbs, event.rtime, event.origin)

def recvEvent(self, event):
if isinstance(event, CCEventDisconnect) or isinstance(event, CCEventFail) or isinstance(event, CCEventRedirect):
Expand All @@ -130,11 +130,6 @@ def recvEvent(self, event):
self.ua.newTransaction(req)
self.ua.cancelCreditTimer()
self.ua.disconnect_ts = event.rtime
return (UaStateDisconnected, self.ua.disc_cbs, event.rtime, event.origin)
return (self.ua.UaStateDisconnected, self.ua.disc_cbs, event.rtime, event.origin)
#print('wrong event %s in the Updating state' % event)
return None

if 'UaStateConnected' not in globals():
from sippy.UaStateConnected import UaStateConnected
if 'UaStateDisconnected' not in globals():
from sippy.UaStateDisconnected import UaStateDisconnected
7 changes: 2 additions & 5 deletions sippy/UasStateIdle.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,13 +103,10 @@ def recvRequest(self, req):
body = self.ua.on_remote_sdp_change(body, partial(self.ua.delayed_remote_sdp_update, event))
if body is None:
self.ua.setup_ts = req.rtime
return (UasStateTrying,)
return (self.ua.UasStateTrying,)
self.ua.rSDP = body.getCopy()
else:
self.ua.rSDP = None
self.ua.equeue.append(event)
self.ua.setup_ts = req.rtime
return (UasStateTrying,)

if 'UasStateTrying' not in globals():
from sippy.UasStateTrying import UasStateTrying
return (self.ua.UasStateTrying,)
21 changes: 7 additions & 14 deletions sippy/UasStateRinging.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,11 @@ def recvEvent(self, event):
self.ua.expire_timer = None
self.ua.startCreditTimer(event.rtime)
self.ua.connect_ts = event.rtime
return (UaStateConnected, self.ua.conn_cbs, event.rtime, event.origin)
return (self.ua.UaStateConnected, self.ua.conn_cbs, event.rtime, event.origin)
else:
self.ua.sendUasResponse(code, reason, body, (self.ua.lContact,), ack_wait = True, \
extra_headers = eh)
return (UaStateConnected,)
return (self.ua.UaStateConnected,)
elif isinstance(event, CCEventRedirect):
scode = event.getData()
contacts = None
Expand All @@ -87,7 +87,7 @@ def recvEvent(self, event):
self.ua.expire_timer.cancel()
self.ua.expire_timer = None
self.ua.disconnect_ts = event.rtime
return (UaStateFailed, self.ua.fail_cbs, event.rtime, event.origin, scode[0])
return (self.ua.UaStateFailed, self.ua.fail_cbs, event.rtime, event.origin, scode[0])
elif isinstance(event, CCEventFail):
scode = event.getData()
if scode == None:
Expand All @@ -97,7 +97,7 @@ def recvEvent(self, event):
self.ua.expire_timer.cancel()
self.ua.expire_timer = None
self.ua.disconnect_ts = event.rtime
return (UaStateFailed, self.ua.fail_cbs, event.rtime, event.origin, scode[0])
return (self.ua.UaStateFailed, self.ua.fail_cbs, event.rtime, event.origin, scode[0])
elif isinstance(event, CCEventDisconnect):
#import sys, traceback
#traceback.print_stack(file = sys.stdout)
Expand All @@ -106,7 +106,7 @@ def recvEvent(self, event):
self.ua.expire_timer.cancel()
self.ua.expire_timer = None
self.ua.disconnect_ts = event.rtime
return (UaStateDisconnected, self.ua.disc_cbs, event.rtime, event.origin, self.ua.last_scode)
return (self.ua.UaStateDisconnected, self.ua.disc_cbs, event.rtime, event.origin, self.ua.last_scode)
#print('wrong event %s in the Ringing state' % event)
return None

Expand All @@ -129,7 +129,7 @@ def recvRequest(self, req):
self.ua.expire_timer.cancel()
self.ua.expire_timer = None
self.ua.disconnect_ts = req.rtime
return (UaStateDisconnected, self.ua.disc_cbs, req.rtime, self.ua.origin)
return (self.ua.UaStateDisconnected, self.ua.disc_cbs, req.rtime, self.ua.origin)
return None

def cancel(self, rtime, req):
Expand All @@ -140,12 +140,5 @@ def cancel(self, rtime, req):
except:
pass
self.ua.disconnect_ts = rtime
self.ua.changeState((UaStateDisconnected, self.ua.disc_cbs, rtime, self.ua.origin))
self.ua.changeState((self.ua.UaStateDisconnected, self.ua.disc_cbs, rtime, self.ua.origin))
self.ua.emitEvent(event)

if 'UaStateFailed' not in globals():
from sippy.UaStateFailed import UaStateFailed
if 'UaStateConnected' not in globals():
from sippy.UaStateConnected import UaStateConnected
if 'UaStateDisconnected' not in globals():
from sippy.UaStateDisconnected import UaStateDisconnected
Loading

0 comments on commit 735a04f

Please sign in to comment.