farhadi / node-smpp

SMPP client and server implementation in node.js
MIT License
418 stars 177 forks source link

NodeJs Server Crash #111

Closed india-india closed 4 years ago

india-india commented 4 years ago

when node smpp client request to send sms ,and sms send successfully but Node js Server crash and show this error ECONNRESET

This is my code plz

var smpp = require('smpp');
const uuidv1 = require('uuid/v1');
var sleep = require('sleep');
var http = require('http');
const request = require('request');
var mysql = require('mysql');
var async = require('async');  

var con = mysql.createConnection({
            host: "localhost",
            user: "user",
            password: "password",
            database: "db",
            debug:false
         });

var check_user='';

// This should of course be replaced with your preferred auth system
function checkAsyncUserPass(username, password, cb) {
    if (username === 'NAVEEN' && password === 'NAVEEN') {
        // The last parameter is just user meta data that will be attached to the session as "userData" and is optional
        cb(null, true, {'username': 'foo', 'userId': 123});
    } else {
        cb(null, false);
    }
}

var server = smpp.createServer(function(session) {
    session.on('bind_transceiver', function(pdu) {
        console.log(pdu);

        checkAsyncUserPass(pdu.system_id, pdu.password, function(err) {
            if (err) {
                session.send(pdu.response({
                    command_status: smpp.ESME_RBINDFAIL
                }));
                session.close();
                return;
            }

        });

        session.send(pdu.response({
            system_id:'levent_sms'

        }));
    });

    session.on('submit_sm', function(pdu) {
        //console.log(pdu);
        var msgid = uuidv1();  // generate a message_id for this message.
        var time = Math.floor(new Date() / 1000);
        var s_addr =pdu.source_addr;
        var d_addr =pdu.destination_addr;

        var user_id = 1;
        var user_name = 'NAVEEN';
        var sms_from = pdu.source_addr;
        var sms_to = pdu.destination_addr;
        var sms_message = pdu.short_message.message;
        var sqn_no = pdu.sequence_number;

        //sending pdu submit 
        session.send(pdu.response({
            sequence_number: pdu.sequence_number,
            message_id: msgid

        }));

        // insert into all sms table

        var sql1 = 'INSERT INTO all_sms2(`snd_user_id`,`msg_user`,`msg_id`,`msg_from`,`Msisdn`,`msgdata`,`sqn_no`,`batch_no`) VALUES("'+user_id+'","'+user_name+'","'+msgid+'","'+sms_from+'","'+sms_to+'","'+sms_message+'","'+sqn_no+'","'+1+'")';

        con.query(sql1, function (err, result) {
            if (err) throw err;
            //console.log("1 record inserted in all_sms table");

        });

        var sql2 = 'SELECT * FROM sms_send_user WHERE send_user_id="'+user_id+'"';
        con.query(sql2, function (err, result) {
            if (err) throw err;
            //check_user = result[0].send_user_id;
            //console.log(result.length);

            if(result.length == 0){

                var sql3 = 'INSERT INTO sms_send_user(`send_user_id`) VALUES("'+user_id+'")';
                //console.log(sql);
                con.query(sql3, function (err, result) {
                    if (err) throw err;
                     console.log("1 record inserted in all_sms table");     
                });
                    // call the api

                    request('http://x.x.x.x/terkey/node_bulk_sms.php?user_id='+user_id, { json: false }, (err, res, body) => {
                        if (err) { return console.log(err); }

                        var info = JSON.parse(body);

                        var dlr_send = info.DlvRpt;

                        //console.log(dlr_send);

                        //dlr_send
                        dlr_send.forEach(function(element) {
                            console.log(element.DlrLoop);
                            element.DlrLoop;

                        });

                    });

            }else{
                //USER EXIST KR RAHA HAI TOH PROCESS REPEAT NAHI HOGI
            }

            session.on('deliver_sm_resp', function(pdu) {
                console.log(pdu);
            });

        });

    });

});
server.listen(2775);
juliangut commented 4 years ago

I've updated your message to properly display the code

You're receiving ECONNRESET only because the server crashes and thus the connection is dropped from server side

and sms send successfully but Node js Server crash

I assume you receive submit_sm_resp PDU from this code

        //sending pdu submit 
        session.send(pdu.response({
            sequence_number: pdu.sequence_number,
            message_id: msgid

        }));

Your code is doing many things after that point, can be a ddbb connection problem (you have several queries) or the API call, but most probably this lines hold the problem which error you should see on node's log:

                        //dlr_send
                        dlr_send.forEach(function(element) {
                            console.log(element.DlrLoop);
                            element.DlrLoop;

                        });

element is coming from API json response, what is element.DlrLoop; doing?

india-india commented 4 years ago

@juliangut Please Help. Can your see my code on live server. +91-7999452711 OR skypeid = anildalar

india-india commented 4 years ago

My Whatsapp +91-7999452711

india-india commented 4 years ago

element is coming from API json response, what is element.DlrLoop; doing?

DlrLoop were submitting dlr response according to sms status sms provider provide us sms sending api and smpp client want to get dlr report ,so we are checking status in php page and an Array of object of dlr response is comming of number of sms send by user and we are forwarding the dlr result

india-india commented 4 years ago

this is my new code const worker = require('worker_threads'); var smpp = require('smpp'); const uuidv1 = require('uuid/v1'); var sleep = require('sleep'); var http = require('http'); const request = require('request'); var mysql = require('mysql'); var async = require('async');

var con = mysql.createConnection({ host: "localhost", user: "kannel", password: "kannel@123", database: "kannel", debug:false });

var check_user='';

var server = smpp.createServer(function(session) { session.on('bind_transceiver', function(pdu) { console.log(pdu);

    con.query('SELECT * FROM  client_connection WHERE `username`="'+pdu.system_id+'" AND `password`="'+pdu.password+'" AND status=1', function (err, result, fields) {
        var numRows = result.length;

        if (numRows==0) {
            console.log('not user');
            session.send(pdu.response({
                command_status: smpp.ESME_RBINDFAIL
            }));
            session.close();
            return;
            //process.exit(0);
        }

        var user_id = result[0].user_id;
        var user_name = result[0].username;

        //var numRows = result.length;
        //console.log(worker);

    });

    session.send(pdu.response({
        system_id:'levent_sms'

    }));
});

session.on('submit_sm', function(pdu) {
    //console.log(pdu);
    var msgid = uuidv1();  // generate a message_id for this message.
    var time = Math.floor(new Date() / 1000);
    var s_addr =pdu.source_addr;
    var d_addr =pdu.destination_addr;

    var sms_from = pdu.source_addr;
    var sms_to = pdu.destination_addr;
    var sms_message = pdu.short_message.message;
    var sqn_no = pdu.sequence_number;

    //sending first dlr
    session.deliver_sm({
        command_id: 4,
        command_status: '',
        sequence_number: pdu.sequence_number,
        service_type: '',           
        source_addr_ton: '',
        source_addr_npi: '',
        source_addr: s_addr,
        dest_addr_ton: 1,
        dest_addr_npi: 1,
        destination_addr: d_addr,
        esm_class: 4,
        protocol_id: 1,
        priority_flag: 1,
        schedule_delivery_time: '',
        validity_period:'',
        registered_delivery: 1,
        replace_if_present_flag:'',
        sm_default_msg_id: '',
        short_message: {
            message:'id:'+msgid+' sub:001 dlvrd:0 submit date:'+time+' done date:'+time+' stat:ACCEPTD err:000'
        }

    });

    //sending pdu submit 
    session.send(pdu.response({
        sequence_number: pdu.sequence_number,
        message_id: msgid

    }));

    // insert into all sms table

    var sql1 = 'INSERT INTO all_sms2(`snd_user_id`,`msg_user`,`msg_id`,`msg_from`,`Msisdn`,`msgdata`,`sqn_no`,`batch_no`) VALUES("'+user_id+'","'+user_name+'","'+msgid+'","'+sms_from+'","'+sms_to+'","'+sms_message+'","'+sqn_no+'","'+1+'")';

    con.query(sql1, function (err, result) {
        if (err) throw err;
        //console.log("1 record inserted in all_sms table");

    });

    var sql2 = 'SELECT * FROM sms_send_user WHERE send_user_id="'+user_id+'"';
    con.query(sql2, function (err, result) {
        if (err) throw err;
        //check_user = result[0].send_user_id;
        //console.log(result.length);

        if(result.length == 0){

            var sql3 = 'INSERT INTO sms_send_user(`send_user_id`) VALUES("'+user_id+'")';
            //console.log(sql);
            con.query(sql3, function (err, result) {
                if (err) throw err;
                 console.log("1 record inserted in all_sms table");     
            });
                // call the api

                request('http://62.12.115.107/terkey/node_bulk_sms.php?user_id='+user_id, { json: false }, (err, res, body) => {
                    if (err) { return console.log(err); }

                    var info = JSON.parse(body);

                    var dlr_send = info.DlvRpt;

                    //console.log(dlr_send);

                    //dlr_send
                    dlr_send.forEach(function(element) {
                        console.log(element.DlrLoop);
                        element.DlrLoop;

                    });

                });

        }else{
            //USER EXIST KR RAHA HAI TOH PROCESS REPEAT NAHI HOGI
        }

        //session.on('deliver_sm_resp', function(pdu) {
            //console.log(pdu);
        //});

    });

});

}); server.listen(21000);

juliangut commented 4 years ago

Please provide node error log to see why is it crashing

juliangut commented 4 years ago

Closing, feel free to reopen providing some error information

dotsinspace commented 4 months ago

Still i get connection reset...and that too after long time...why ? i don't know..as there are no logs because when connection reset occurs node.js crashes..