diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2014-06-17 19:22:34 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2014-06-17 19:22:34 +0200 |
commit | c9cb3d5cab06255a64aba0d01e132c3007855e37 (patch) | |
tree | 1251ac64d041ab05b7851838085f181b89a0d409 /connection/SMPPConnection.st | |
parent | de471382a40d2ec8201fec11f37490a32e1267a1 (diff) |
connection: Begin creating a proper connection class to connect to a ESME
Diffstat (limited to 'connection/SMPPConnection.st')
-rw-r--r-- | connection/SMPPConnection.st | 94 |
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 + ] + ] +] |