From 4f050928f1cec43a06a8a8b7f913a37d5ad143f6 Mon Sep 17 00:00:00 2001 From: Lynesth Date: Thu, 1 Aug 2019 11:30:01 +1100 Subject: [PATCH 1/5] Allow defining default generator's first sequence --- smpplib/client.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/smpplib/client.py b/smpplib/client.py index 876f029..968fe1d 100644 --- a/smpplib/client.py +++ b/smpplib/client.py @@ -38,8 +38,8 @@ class SimpleSequenceGenerator(object): MIN_SEQUENCE = 0x00000001 MAX_SEQUENCE = 0x7FFFFFFF - def __init__(self): - self._sequence = self.MIN_SEQUENCE + def __init__(self, start_sequence=None): + self._sequence = start_sequence or self.MIN_SEQUENCE @property def sequence(self): @@ -64,13 +64,13 @@ class Client(object): _socket = None sequence_generator = None - def __init__(self, host, port, timeout=5, sequence_generator=None): + def __init__(self, host, port, timeout=5, sequence_generator=None, start_sequence=None): self.host = host self.port = int(port) self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self._socket.settimeout(timeout) if sequence_generator is None: - sequence_generator = SimpleSequenceGenerator() + sequence_generator = SimpleSequenceGenerator(start_sequence=start_sequence) self.sequence_generator = sequence_generator def __enter__(self): From f9ab8bc783aa79ff61944df3979a9b6f7b7d3f75 Mon Sep 17 00:00:00 2001 From: Lynesth Date: Fri, 2 Aug 2019 22:19:00 +1100 Subject: [PATCH 2/5] Add checks & exceptions for start_sequence --- smpplib/client.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/smpplib/client.py b/smpplib/client.py index 968fe1d..8bdbd9d 100644 --- a/smpplib/client.py +++ b/smpplib/client.py @@ -39,7 +39,18 @@ class SimpleSequenceGenerator(object): MAX_SEQUENCE = 0x7FFFFFFF def __init__(self, start_sequence=None): - self._sequence = start_sequence or self.MIN_SEQUENCE + if start_sequence is not None: + if not isinstance(start_sequence, int): + raise TypeError('start_sequence must be an int, {} provided'.format( + type(start_sequence) + )) + if start_sequence < self.MIN_SEQUENCE or start_sequence > self.MAX_SEQUENCE: + raise ValueError('start_sequence must be between {} and {}'.format( + self.MIN_SEQUENCE, self.MAX_SEQUENCE + )) + self._sequence = start_sequence + else: + self._sequence = self.MIN_SEQUENCE @property def sequence(self): From 03a9170df575245f84660acc1e4d255ab9d9102e Mon Sep 17 00:00:00 2001 From: Lynesth Date: Tue, 6 Aug 2019 09:33:07 +1100 Subject: [PATCH 3/5] Remove start_sequence arg from Client --- smpplib/client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/smpplib/client.py b/smpplib/client.py index 8bdbd9d..8780cb4 100644 --- a/smpplib/client.py +++ b/smpplib/client.py @@ -75,13 +75,13 @@ class Client(object): _socket = None sequence_generator = None - def __init__(self, host, port, timeout=5, sequence_generator=None, start_sequence=None): + def __init__(self, host, port, timeout=5, sequence_generator=None): self.host = host self.port = int(port) self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self._socket.settimeout(timeout) if sequence_generator is None: - sequence_generator = SimpleSequenceGenerator(start_sequence=start_sequence) + sequence_generator = SimpleSequenceGenerator() self.sequence_generator = sequence_generator def __enter__(self): From fb28abb26d60329da052709db6ce990c5efc7312 Mon Sep 17 00:00:00 2001 From: Lynesth Date: Tue, 6 Aug 2019 09:39:01 +1100 Subject: [PATCH 4/5] Update README.md --- README.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6f6aa9d..93cac05 100644 --- a/README.md +++ b/README.md @@ -63,16 +63,23 @@ t = Thread(target=client.listen) t.start() ``` -The client supports setting a custom generator that produces sequence numbers for the PDU packages. Per default a simple in memory generator is used which in conclusion is reset on (re)instantiation of the client, e.g. by an application restart. If you want to keep the sequence number to be persisted across restarts you can implement your own storage backed generator. +The client supports setting a custom generator that produces sequence numbers for the PDU packages. Per default a simple in memory generator is used which in conclusion is reset on (re)instantiation of the client, e.g. by an application restart. You may also set the starting sequence yourself by declaring the generator beforehand and passing it to the Client: +```python +import smpplib.client + +generator = smpplib.client.SimpleSequenceGenerator(start_sequence=1234) +client = smpplib.client.Client('example.com', SOMEPORTNUMBER, sequence_generator=generator) +... +``` -Example: +If you need more/different features associated with the generator, you can implement your own: ```python import smpplib.client import mymodule -generator = mymodule.PersistentSequenceGenerator() +generator = mymodule.MyAwesomeSequenceGenerator() client = smpplib.client.Client('example.com', SOMEPORTNUMBER, sequence_generator=generator) ... ``` From 4a2807d51b6bebd809747a0378e87dc475dccb4c Mon Sep 17 00:00:00 2001 From: Lynesth Date: Tue, 6 Aug 2019 09:43:56 +1100 Subject: [PATCH 5/5] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 93cac05..369db89 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ t = Thread(target=client.listen) t.start() ``` -The client supports setting a custom generator that produces sequence numbers for the PDU packages. Per default a simple in memory generator is used which in conclusion is reset on (re)instantiation of the client, e.g. by an application restart. You may also set the starting sequence yourself by declaring the generator beforehand and passing it to the Client: +A simple in memory generator that produces sequence numbers for the PDU packages is used, which is reset on (re)instantiation of the client, e.g. by an application restart. It starts by default with sequence number 0x00000001 but you may set the starting sequence yourself by declaring the generator beforehand and passing it to the Client: ```python import smpplib.client @@ -73,7 +73,7 @@ client = smpplib.client.Client('example.com', SOMEPORTNUMBER, sequence_generator ``` -If you need more/different features associated with the generator, you can implement your own: +The client supports setting a custom generator, so if you need more/different features associated with it, you can implement your own: ```python import smpplib.client