smppjs
Version:
Modern approach to smpp protocol.
155 lines • 6.21 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const net_1 = require("net");
const tls_1 = require("tls");
const PDU_1 = __importDefault(require("./PDU"));
const dtos_1 = require("./dtos");
const logger_1 = require("./utils/logger");
class Session {
get connected() {
return this._connected;
}
set connected(value) {
this._connected = value;
}
get closed() {
return this.socket.closed;
}
get sequenceNumber() {
this._sequenceNumber += 1;
if (this._sequenceNumber > this.MAX_SMPP_SEQUENCE) {
this._sequenceNumber = 1;
this.logger.debug('sequence number wrapped around - avoid overflow');
}
return this._sequenceNumber;
}
constructor(interfaceVersion, debug = false, timeout, secure) {
this.interfaceVersion = interfaceVersion;
this.debug = debug;
this.timeout = timeout;
this.secure = secure;
this._sequenceNumber = 0;
this._connected = false;
this.MAX_SMPP_SEQUENCE = 0xffffffff;
this.initSession();
this.initResponseEnd();
this.initResponseRead();
}
initSession() {
if (this.secure.tls === true) {
this.socket = new tls_1.TLSSocket(new net_1.Socket(), Object.assign({ isServer: false }, this.secure.secureOptions));
}
else {
this.socket = new net_1.Socket();
}
this.socket.setTimeout(this.timeout);
this.logger = new logger_1.Logger(this.socket, { debug: this.debug });
this.PDU = new PDU_1.default(this.socket, { unsafeBuffer: this.secure.unsafeBuffer || false });
}
initResponseEnd() {
this.socket.on('end', () => {
this.connected = false;
this.logger.debug(`disconnect - forced - disconnected from smpp server.`);
this.socket.destroy();
throw new Error('Server closed the conn.');
});
}
initResponseRead() {
this.socket.on('readable', () => {
try {
const data = this.socket.read();
if (data) {
const pdu = this.PDU.readPdu(data);
this.socket.emit('pdu', pdu);
}
}
catch (error) {
this.socket.emit('error', error);
}
});
}
connect({ host, port }) {
this.socket.connect(port, host, () => {
this.connected = true;
this.logger.debug(`connect - called - connected to smpp server using secure set to: ${this.secure.tls}`, { host, port });
});
}
disconnect() {
this.socket.destroy();
this.connected = false;
this.logger.debug(`disconnect - called - disconnected to smpp server.`);
return this.socket.closed;
}
on(eventName, callback) {
this.socket.on(eventName, callback);
}
bindTransceiver(params) {
this.logger.debug(`bindTransceiver - called`, params);
if (!params.interfaceVersion) {
params.interfaceVersion = this.interfaceVersion;
}
const dto = (0, dtos_1.getDTO)('bind_transceiver')(params);
return this.PDU.call({ command: 'bind_transceiver', sequenceNumber: this.sequenceNumber, dto });
}
bindReceiver(params) {
this.logger.debug(`bindReceiver - called`, params);
if (!params.interfaceVersion) {
params.interfaceVersion = this.interfaceVersion;
}
const dto = (0, dtos_1.getDTO)('bind_receiver')(params);
return this.PDU.call({ command: 'bind_receiver', sequenceNumber: this.sequenceNumber, dto });
}
bindTransmitter(params) {
this.logger.debug(`bindTransmitter - called`, params);
if (!params.interfaceVersion) {
params.interfaceVersion = this.interfaceVersion;
}
const dto = (0, dtos_1.getDTO)('bind_transmitter')(params);
return this.PDU.call({ command: 'bind_transmitter', sequenceNumber: this.sequenceNumber, dto });
}
submitSm(params) {
this.logger.debug(`submitSm - called`, params);
const dto = (0, dtos_1.getDTO)('submit_sm')(params);
return this.PDU.call({ command: 'submit_sm', sequenceNumber: this.sequenceNumber, dto });
}
dataSm(params) {
this.logger.debug(`dataSm - called`, params);
const dto = (0, dtos_1.getDTO)('data_sm')(params);
return this.PDU.call({ command: 'data_sm', sequenceNumber: this.sequenceNumber, dto });
}
querySm(params) {
this.logger.debug(`querySm - called`, params);
const dto = (0, dtos_1.getDTO)('query_sm')(params);
return this.PDU.call({ command: 'query_sm', sequenceNumber: this.sequenceNumber, dto });
}
cancelSm(params) {
this.logger.debug(`cancelSm - called`, params);
const dto = (0, dtos_1.getDTO)('cancel_sm')(params);
return this.PDU.call({ command: 'cancel_sm', sequenceNumber: this.sequenceNumber, dto });
}
replaceSm(params) {
this.logger.debug(`replaceSm - called`, params);
const dto = (0, dtos_1.getDTO)('replace_sm')(params);
return this.PDU.call({ command: 'replace_sm', sequenceNumber: this.sequenceNumber, dto });
}
enquireLink() {
this.logger.debug(`enquireLink - called`);
const dto = (0, dtos_1.getDTO)('enquire_link')({});
return this.PDU.call({ command: 'enquire_link', sequenceNumber: this.sequenceNumber, dto });
}
unbind() {
this.logger.debug(`unbind - called`);
const dto = (0, dtos_1.getDTO)('unbind')({});
return this.PDU.call({ command: 'unbind', sequenceNumber: this.sequenceNumber, dto });
}
deliverSmResp(params) {
this.logger.debug(`deliverSmResp - called`, params);
const dto = (0, dtos_1.getDTO)('deliver_sm_resp')(params);
return this.PDU.call({ command: 'deliver_sm_resp', sequenceNumber: this.sequenceNumber, dto });
}
}
exports.default = Session;
//# sourceMappingURL=session.js.map