summaryrefslogtreecommitdiffstats
path: root/connection/SMPPConnection.st
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2014-06-17 19:22:34 +0200
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2014-06-17 19:22:34 +0200
commitc9cb3d5cab06255a64aba0d01e132c3007855e37 (patch)
tree1251ac64d041ab05b7851838085f181b89a0d409 /connection/SMPPConnection.st
parentde471382a40d2ec8201fec11f37490a32e1267a1 (diff)
connection: Begin creating a proper connection class to connect to a ESME
Diffstat (limited to 'connection/SMPPConnection.st')
-rw-r--r--connection/SMPPConnection.st94
1 files changed, 94 insertions, 0 deletions
diff --git a/connection/SMPPConnection.st b/connection/SMPPConnection.st
new file mode 100644
index 0000000..ac7ed2b
--- /dev/null
+++ b/connection/SMPPConnection.st
@@ -0,0 +1,94 @@
+"
+ (C) 2014 by Holger Hans Peter Freyther
+ All Rights Reserved
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+"
+
+Osmo.OsmoStreamSocketBase subclass: SMPPConnection [
+ | writeQueue nextSeq systemId password systemType |
+ <category: 'SMPP-Connection'>
+
+ createConnection: aHostname port: aPort [
+ <category: 'socket'>
+ ^ Sockets.StreamSocket remote: aHostname port: aPort.
+ ]
+
+ systemId: anId [
+ systemId := anId
+ ]
+
+ password: aPassword [
+ password := aPassword
+ ]
+
+ systemType: aType [
+ systemType := aType
+ ]
+
+ scheduleBindTrx [
+ | header body seq data |
+
+ seq := nextSeq.
+ nextSeq := nextSeq + 1.
+
+ header := SMPPPDUHeader new
+ commandId: SMPPBindTransceiver messageType;
+ commandStatus: 0;
+ sequenceNumber: seq;
+ yourself.
+ body := SMPPBindTransceiver new
+ systemId: systemId;
+ password: password;
+ systemType: systemType;
+ version: 16r34;
+ numberingPlanIndicator: 0;
+ typeOfNumber: 0;
+ addressRange: #[];
+ yourself.
+
+ data := (SMPPMessage new
+ header: header;
+ body: body;
+ toMessage) asByteArray.
+ writeQueue nextPut: data.
+ ]
+
+ connect [
+ super connect.
+ nextSeq := 0.
+ writeQueue := SharedQueue new.
+ self scheduleBindTrx.
+ ]
+
+ sendOne [
+ | msg |
+ "TODO: Pill of death!"
+ msg := writeQueue next.
+ socket nextPutAllFlush: msg.
+ ]
+
+ dispatchOne [
+ | msg |
+
+ [
+ msg := SMPPMessage readFrom: socket.
+ msg inspect.
+ ] on: Error do: [:e |
+ e
+ inspect;
+ pass
+ ]
+ ]
+]