From c9cb3d5cab06255a64aba0d01e132c3007855e37 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Tue, 17 Jun 2014 19:22:34 +0200 Subject: [PATCH] connection: Begin creating a proper connection class to connect to a ESME --- connection/SMPPConnection.st | 94 ++++++++++++++++++++++++++++++++++++ package.xml | 2 + 2 files changed, 96 insertions(+) create mode 100644 connection/SMPPConnection.st 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 . +" + +Osmo.OsmoStreamSocketBase subclass: SMPPConnection [ + | writeQueue nextSeq systemId password systemType | + + + createConnection: aHostname port: aPort [ + + ^ 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 + ] + ] +] diff --git a/package.xml b/package.xml index 2707842..29267f4 100644 --- a/package.xml +++ b/package.xml @@ -40,6 +40,8 @@ codec/SMPPMessage.st + connection/SMPPConnection.st + Osmo.SMPPPDUHeaderTest Osmo.SMPPMessageTest