authorization - understanding auth on smpp node.js -
ok, struggling bit here. want achieve: create , run smpp server listens smpp send requests our sms service platform. our platform should able connect server.
on receiving bind, authorise is our service, , receive send request
only accept send requests authorised user/password.
on receipt of send request, send out our messaging provider, registered_delivery = 1
wait deliver_sm response let know has arrived
update our local db message delivery status.
my problem - service seems let submit_sm without authorization.
here's rough, ugly test code have put far. structuring things wrong ? bear in mind new both smpp , node.js, may wildly off track.
var smpp = require('smpp'); // create listener incoming connections our server var server = smpp.createserver(function(session) { // create outbound connection provider pass messages on var outsession = smpp.connect('smpp.provider.net', 8101); outsession.bind_transceiver({ system_id: 'myaccount', password: 'abcdef' }, function (pdu){ console.log("outsession bind completed"); if (pdu.command_status == 0){ console.log("outsession bind completed ok, status 0"); } }); console.log("srv: starting session.on event handlers"); session.on('bind_transceiver', function(pdu) { // pause session prevent further incoming pdu events, // untill authorize session async operation. // auth incoming - can our local system far. //if (checkasyncuserpass(id,pw)){ // credentials ok // how remember future send request ? //} else { // report fail //} console.log("srv: received bind_transceiver"); session.send(pdu.response()); outsession.submit_sm({ destination_addr: '447957123456', registered_delivery: 1, short_message: 'hello provider, received bind server' }, function(pdu) { if (pdu.command_status == 0) { console.log('srv: sent ok provider'); } }); session.send(pdu.response()); // listen incoming delivery response messages previous messages outsession.on('deliver_sm_resp', function(pdu){ console.log('srv: outsession received deliver_sm_resp'); }); outsession.on('deliver_sm', function(pdu){ console.log('srv: outsession received deliver_sm pdu'); }); }); session.on('unbind', function(pdu){ console.log("srv: received unbind"); session.send(pdu.response()); }); session.on('submit_sm', function(pdu){ console.log("srv: received submit_sm, pdu:"); session.send(pdu.response()); }); session.on('submit_sm_resp', function(pdu){ console.log("srv: received submit_sm_resp"); session.send(pdu.response()); }); session.on('deliver_sm', function(pdu){ console.log("srv: received deliver_sm pdu:"); session.send(pdu.response()); }); session.on('deliver_sm_resp', function(pdu){ console.log("srv: session received deliver_sm_resp"); session.send(pdu.response()); }); session.on('enquire_link', function(pdu){ console.log("srv: received enquire_link"); session.send(pdu.response()); }); session.on('enquire_link_sm', function(pdu){ console.log("srv: received enquire_link_sm"); session.send(pdu.response()); }); }); function checkasyncuserpass(id, pw, fn){ return true; } server.listen(8101);
you must call asynchronic function authorizes user credentials:
session.on('bind_transceiver', function(pdu) { // pause session prevent further incoming pdu events // until authorize session async operation session.pause(); checkasyncuserpass(pdu.system_id, pdu.password, function(client){ if(!client){ session.send(pdu.response({ command_status: smpp.esme_rbindfail //here reject wrong clients })); session.close(); return; } // receive sms... session.resume(); session.on('submit_sm', function(pdu) { // whatever want received sms // e.g. respond uuid response or something: session.send(pdu.response({ message_id: msgid //uuid (you have generate this) }); }); }); //end checkasyncuserpass }); //end bind_transceiver
Nice Post!! It has become very important for enterprises to stay connected with customers by maintaining communication. SMPP Client Panel is best for this.
ReplyDelete