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 

Comments

  1. 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

Post a Comment

Popular posts from this blog

node.js - StackOverflow API not returning JSON -

python - Subclassed QStyledItemDelegate ignores Stylesheet -

java - HttpClient 3.1 Connection pooling vs HttpClient 4.3.2 -