diff --git a/sippy/Core/EventDispatcher.py b/sippy/Core/EventDispatcher.py index c997fb528..d87828891 100644 --- a/sippy/Core/EventDispatcher.py +++ b/sippy/Core/EventDispatcher.py @@ -26,15 +26,13 @@ from __future__ import print_function +from functools import partial from datetime import datetime from heapq import heappush, heappop, heapify from threading import Lock from random import random import sys, traceback, signal -if sys.version_info[0] < 3: - from thread import get_ident -else: - from _thread import get_ident +from _thread import get_ident from sippy.Time.MonoTime import MonoTime from sippy.Core.Exceptions import dump_exception, StdException @@ -67,7 +65,8 @@ def cleanup(self): self.randomize_runs = None def get_randomizer(self, p): - return lambda x: x * (1.0 + p * (1.0 - 2.0 * random())) + def randomizer(p, x): x * (1.0 + p * (1.0 - 2.0 * random())) + return partial(randomizer, p) def spread_runs(self, p): self.randomize_runs = self.get_randomizer(p) diff --git a/sippy/Security/SipNonce.py b/sippy/Security/SipNonce.py index 0de976e27..614a56860 100644 --- a/sippy/Security/SipNonce.py +++ b/sippy/Security/SipNonce.py @@ -25,6 +25,7 @@ #import sys; sys.path.append('..') +from functools import partial from base64 import b64encode, b64decode from Crypto import Random @@ -32,19 +33,8 @@ from sippy.Time.clock_dtime import clock_getntime, CLOCK_MONOTONIC -# Python 2.7 compat shims -to_bytes_be = lambda x, sz: x.to_bytes(sz, 'big') -try: - to_bytes_be(int(1), 1) -except AttributeError: - to_bytes_be = lambda x, sz: '{:0{}x}'.format(x, sz * 2).decode('hex') - -from_bytes_be = lambda x: int.from_bytes(x, 'big') -try: - from_bytes_be(to_bytes_be(1, 1)) -except AttributeError: - from_bytes_be = lambda x: int(x.encode('hex'), 16) - +to_bytes_be = partial(int.to_bytes, byteorder='big') +from_bytes_be = partial(int.from_bytes, byteorder='big') def bxor(ba1, ba2): olen = len(ba1) diff --git a/sippy/UaStateConnected.py b/sippy/UaStateConnected.py index 73be41092..7ec211871 100644 --- a/sippy/UaStateConnected.py +++ b/sippy/UaStateConnected.py @@ -24,6 +24,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from functools import partial + from sippy.Time.Timeout import Timeout from sippy.UaStateGeneric import UaStateGeneric from sippy.SipAlso import SipAlso @@ -85,7 +87,7 @@ def recvRequest(self, req): pass if body != None: if self.ua.on_remote_sdp_change != None: - self.ua.on_remote_sdp_change(body, lambda x: self.ua.delayed_remote_sdp_update(event, x)) + self.ua.on_remote_sdp_change(body, partial(self.ua.delayed_remote_sdp_update, event)) return (UasStateUpdating,) else: self.ua.rSDP = body.getCopy() @@ -137,7 +139,7 @@ def recvACK(self, req): callback(self.ua, req.rtime, self.ua.origin) if body != None: if self.ua.on_remote_sdp_change != None: - self.ua.on_remote_sdp_change(body, lambda x: self.ua.delayed_remote_sdp_update(event, x)) + self.ua.on_remote_sdp_change(body, partial(self.ua.delayed_remote_sdp_update, event)) return None else: self.ua.rSDP = body.getCopy() @@ -188,7 +190,7 @@ def recvEvent(self, event): return None if body != None and self.ua.on_local_sdp_change != None and body.needs_update: try: - self.ua.on_local_sdp_change(body, lambda x: self.ua.recvEvent(event), en_excpt = True) + self.ua.on_local_sdp_change(body, partial(self.ua.recvEvent, event), en_excpt = True) except Exception as e: event = CCEventFail((400, 'Malformed SDP Body'), rtime = event.rtime) event.setWarning(str(e)) @@ -222,7 +224,7 @@ def recvEvent(self, event): self.ua.expire_timer = None code, reason, body = event.getData() if body != None and self.ua.on_local_sdp_change != None and body.needs_update: - self.ua.on_local_sdp_change(body, lambda x: self.ua.recvEvent(event)) + self.ua.on_local_sdp_change(body, partial(self.ua.recvEvent, event)) return None self.ua.startCreditTimer(event.rtime) self.ua.connect_ts = event.rtime diff --git a/sippy/UacStateIdle.py b/sippy/UacStateIdle.py index 906ba73f8..b1cc2572e 100644 --- a/sippy/UacStateIdle.py +++ b/sippy/UacStateIdle.py @@ -24,6 +24,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from functools import partial + from sippy.Time.Timeout import TimeoutAbsMono from sippy.UaStateGeneric import UaStateGeneric from sippy.CCEvents import CCEventTry, CCEventFail, CCEventRedirect, CCEventDisconnect @@ -46,7 +48,7 @@ def recvEvent(self, event): cId, callingID, calledID, body, auth, callingName = event.getData() if body != None: if self.ua.on_local_sdp_change != None and body.needs_update: - self.ua.on_local_sdp_change(body, lambda x: self.ua.recvEvent(event)) + self.ua.on_local_sdp_change(body, partial(self.ua.recvEvent, event)) return None else: self.ua.late_media = True diff --git a/sippy/UacStateRinging.py b/sippy/UacStateRinging.py index 96332328b..435197253 100644 --- a/sippy/UacStateRinging.py +++ b/sippy/UacStateRinging.py @@ -24,6 +24,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from functools import partial + from sippy.SipAddress import SipAddress from sippy.SipRoute import SipRoute from sippy.UaStateGeneric import UaStateGeneric @@ -47,7 +49,7 @@ def recvResponse(self, resp, tr): ring_cb(self.ua, resp.rtime, self.ua.origin, code) if body != None: if self.ua.on_remote_sdp_change != None: - self.ua.on_remote_sdp_change(body, lambda x: self.ua.delayed_remote_sdp_update(event, x)) + self.ua.on_remote_sdp_change(body, partial(self.ua.delayed_remote_sdp_update, event)) return None else: self.ua.rSDP = body.getCopy() @@ -121,7 +123,7 @@ def recvResponse(self, resp, tr): rval = (UaStateConnected,) if body != None: if self.ua.on_remote_sdp_change != None: - self.ua.on_remote_sdp_change(body, lambda x: self.ua.delayed_remote_sdp_update(event, x)) + self.ua.on_remote_sdp_change(body, partial(self.ua.delayed_remote_sdp_update, event)) return rval else: self.ua.rSDP = body.getCopy() diff --git a/sippy/UacStateTrying.py b/sippy/UacStateTrying.py index 67d7a6abd..81905c8ab 100644 --- a/sippy/UacStateTrying.py +++ b/sippy/UacStateTrying.py @@ -24,6 +24,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from functools import partial + from sippy.SipAddress import SipAddress from sippy.SipRoute import SipRoute from sippy.UaStateGeneric import UaStateGeneric @@ -62,7 +64,7 @@ def recvResponse(self, resp, tr): event = CCEventRing(scode, rtime = resp.rtime, origin = self.ua.origin) if body != None: if self.ua.on_remote_sdp_change != None: - self.ua.on_remote_sdp_change(body, lambda x: self.ua.delayed_remote_sdp_update(event, x)) + self.ua.on_remote_sdp_change(body, partial(self.ua.delayed_remote_sdp_update, event)) self.ua.p1xx_ts = resp.rtime return (UacStateRinging, self.ua.ring_cbs, resp.rtime, self.ua.origin, code) else: @@ -139,7 +141,7 @@ def recvResponse(self, resp, tr): rval = (UaStateConnected,) if body != None: if self.ua.on_remote_sdp_change != None: - self.ua.on_remote_sdp_change(body, lambda x: self.ua.delayed_remote_sdp_update(event, x)) + self.ua.on_remote_sdp_change(body, partial(self.ua.delayed_remote_sdp_update, event)) return rval else: self.ua.rSDP = body.getCopy() diff --git a/sippy/UacStateUpdating.py b/sippy/UacStateUpdating.py index b9aa1283f..8d5999272 100644 --- a/sippy/UacStateUpdating.py +++ b/sippy/UacStateUpdating.py @@ -24,6 +24,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from functools import partial + from sippy.UaStateGeneric import UaStateGeneric from sippy.CCEvents import CCEventDisconnect, CCEventRing, CCEventConnect, CCEventFail, CCEventRedirect @@ -63,7 +65,7 @@ def recvResponse(self, resp, tr): event = CCEventConnect(scode, rtime = resp.rtime, origin = self.ua.origin) if body != None: if self.ua.on_remote_sdp_change != None: - cb_func = lambda x: self.ua.delayed_remote_sdp_update(event, x) + cb_func = partial(self.ua.delayed_remote_sdp_update, event) try: self.ua.on_remote_sdp_change(body, cb_func, en_excpt = True) except Exception as e: diff --git a/sippy/UasStateIdle.py b/sippy/UasStateIdle.py index 41b751ff8..3f3944180 100644 --- a/sippy/UasStateIdle.py +++ b/sippy/UasStateIdle.py @@ -24,6 +24,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from functools import partial + from sippy.Time.Timeout import TimeoutAbsMono from sippy.SipAddress import SipAddress from sippy.SipRoute import SipRoute @@ -98,7 +100,7 @@ def recvRequest(self, req): self.ua.expire_timer = TimeoutAbsMono(self.ua.expires, self.ua.expire_mtime) if body != None: if self.ua.on_remote_sdp_change != None: - self.ua.on_remote_sdp_change(body, lambda x: self.ua.delayed_remote_sdp_update(event, x)) + self.ua.on_remote_sdp_change(body, partial(self.ua.delayed_remote_sdp_update, event)) self.ua.setup_ts = req.rtime return (UasStateTrying,) else: diff --git a/sippy/UasStateRinging.py b/sippy/UasStateRinging.py index f40016621..2013dadd7 100644 --- a/sippy/UasStateRinging.py +++ b/sippy/UasStateRinging.py @@ -24,11 +24,12 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from functools import partial + from sippy.UaStateGeneric import UaStateGeneric from sippy.CCEvents import CCEventRing, CCEventConnect, CCEventFail, CCEventRedirect, \ CCEventDisconnect, CCEventPreConnect from sippy.SipContact import SipContact -from sippy.SipAddress import SipAddress class UasStateRinging(UaStateGeneric): sname = 'Ringing(UAS)' @@ -44,7 +45,7 @@ def recvEvent(self, event): if code == 100: return None if body != None and self.ua.on_local_sdp_change != None and body.needs_update: - self.ua.on_local_sdp_change(body, lambda x: self.ua.recvEvent(event)) + self.ua.on_local_sdp_change(body, partial(self.ua.recvEvent, event)) return None self.ua.lSDP = body if self.ua.p1xx_ts == None: @@ -56,7 +57,7 @@ def recvEvent(self, event): elif isinstance(event, CCEventConnect) or isinstance(event, CCEventPreConnect): code, reason, body = event.getData() if body != None and self.ua.on_local_sdp_change != None and body.needs_update: - self.ua.on_local_sdp_change(body, lambda x: self.ua.recvEvent(event)) + self.ua.on_local_sdp_change(body, partial(self.ua.recvEvent, event)) return None if event.extra_headers != None: extra_headers = tuple(event.extra_headers) diff --git a/sippy/UasStateTrying.py b/sippy/UasStateTrying.py index df9eac899..d031e6112 100644 --- a/sippy/UasStateTrying.py +++ b/sippy/UasStateTrying.py @@ -24,11 +24,12 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from functools import partial + from sippy.UaStateGeneric import UaStateGeneric from sippy.CCEvents import CCEventRing, CCEventConnect, CCEventFail, CCEventRedirect, \ CCEventDisconnect, CCEventPreConnect from sippy.SipContact import SipContact -from sippy.SipAddress import SipAddress from sippy.Time.Timeout import TimeoutAbsMono class UasStateTrying(UaStateGeneric): @@ -44,7 +45,7 @@ def recvEvent(self, event): if code == 100: return None if body != None and self.ua.on_local_sdp_change != None and body.needs_update: - self.ua.on_local_sdp_change(body, lambda x: self.ua.recvEvent(event)) + self.ua.on_local_sdp_change(body, partial(self.ua.recvEvent, event)) return None self.ua.lSDP = body self.ua.sendUasResponse(code, reason, body) @@ -59,7 +60,7 @@ def recvEvent(self, event): elif isinstance(event, CCEventConnect) or isinstance(event, CCEventPreConnect): code, reason, body = event.getData() if body != None and self.ua.on_local_sdp_change != None and body.needs_update: - self.ua.on_local_sdp_change(body, lambda x: self.ua.recvEvent(event)) + self.ua.on_local_sdp_change(body, partial(self.ua.recvEvent, event)) return None if event.extra_headers != None: extra_headers = tuple(event.extra_headers) diff --git a/sippy/UasStateUpdating.py b/sippy/UasStateUpdating.py index 3c3465f41..2563d7dba 100644 --- a/sippy/UasStateUpdating.py +++ b/sippy/UasStateUpdating.py @@ -24,8 +24,9 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from functools import partial + from sippy.SipContact import SipContact -from sippy.SipAddress import SipAddress from sippy.UaStateGeneric import UaStateGeneric from sippy.CCEvents import CCEventDisconnect, CCEventRing, CCEventConnect, CCEventFail, CCEventRedirect @@ -75,7 +76,7 @@ def recvEvent(self, event): scode = (180, 'Ringing', None) body = scode[2] if body != None and self.ua.on_local_sdp_change != None and body.needs_update: - self.ua.on_local_sdp_change(body, lambda x: self.ua.recvEvent(event)) + self.ua.on_local_sdp_change(body, partial(self.ua.recvEvent, event)) return None self.ua.lSDP = body self.ua.sendUasResponse(scode[0], scode[1], body) @@ -83,7 +84,7 @@ def recvEvent(self, event): elif isinstance(event, CCEventConnect): code, reason, body = event.getData() if body != None and self.ua.on_local_sdp_change != None and body.needs_update: - self.ua.on_local_sdp_change(body, lambda x: self.ua.recvEvent(event)) + self.ua.on_local_sdp_change(body, partial(self.ua.recvEvent, event)) return None self.ua.lSDP = body self.ua.sendUasResponse(code, reason, body, (self.ua.lContact,))