Esempio n. 1
0
        private void SendBindReceiver()
        {
            var bind_receiver = new BindReceiver
            {
                SystemID         = system_id,
                Password         = password,
                InterfaceVersion = Common.SmppVersionType.Version3_4,
                SystemType       = system_type,
                Ton             = (Common.TonType)source_ton,
                Npi             = (Common.NpiType)source_npi,
                sequence_number = sequence_number
            };

            commands_queue.Add(sequence_number, DateTime.Now);

            string pdu = bind_receiver.Encode();

            SendPDU(pdu);
            Events.LogChannelEvent(channel_name, "Sending [bind_receiver]", debug ? pdu : "");
        }
Esempio n. 2
0
 public BindResponseReceiver(ref BindReceiver pak)
 {
     m_commandId    = commandIdEnum.bind_receiver_resp;
     SequenceNumber = pak.SequenceNumber;
 }
Esempio n. 3
0
        /// <summary>
        /// Handles incoming request
        /// </summary>
        private static void CreateConnection()
        {
            TcpClient tcp_client;

            try { tcp_client = tcp_server.AcceptTcpClient(); }
            catch { return; }

            try
            {
                if (tcp_client != null && tcp_client.Connected)
                {
                    NetworkStream ns;
                    ns = tcp_client.GetStream();
                    byte[] buffer     = new byte[Common.MAX_RECEIVE_LENGTH];
                    byte[] ByteLength = new byte[4];
                    byte[] BytePDU;
                    int    PDULength;
                    string pdu;
                    string systemId;
                    string response = "";
                    int    l        = 0;

                    string ip       = ((IPEndPoint)tcp_client.Client.RemoteEndPoint).Address.ToString();
                    int    authCode = 0;

                    ns.Read(buffer, 0, buffer.Length);
                    ByteLength[0] = buffer[0]; ByteLength[1] = buffer[1];
                    ByteLength[2] = buffer[2]; ByteLength[3] = buffer[3];
                    PDULength     = int.Parse(Common.ConvertByteArrayToHexString(ByteLength), System.Globalization.NumberStyles.HexNumber);

                    BytePDU = new byte[PDULength];
                    for (int k = 0; k < PDULength; k++)
                    {
                        try
                        {
                            BytePDU[k] = buffer[l++];
                        }
                        catch
                        {
                            ns.Close();
                            tcp_client.Close();
                            throw new CommandLengthException(String.Empty);
                        }
                    }
                    pdu = Common.ConvertByteArrayToHexString(BytePDU);

                    switch (Common.command_id.Values[Common.command_id.IndexOfKey(uint.Parse(pdu.Substring(8, 8), System.Globalization.NumberStyles.HexNumber))])
                    {
                    case "bind_receiver":
                        var bind_receiver      = new BindReceiver(pdu);
                        var bind_receiver_resp = new BindReceiverResp();

                        authCode = Authenticate(bind_receiver.SystemID, bind_receiver.Password, ip);
                        systemId = bind_receiver.SystemID;
                        bind_receiver_resp.SystemID        = Common.SMSC_ID;
                        bind_receiver_resp.command_status  = (uint)authCode;
                        bind_receiver_resp.sequence_number = bind_receiver.sequence_number;
                        response = bind_receiver_resp.Encode();

                        break;

                    case "bind_transmitter":
                        var bind_transmitter      = new BindTransmitter(pdu);
                        var bind_transmitter_resp = new BindTransmitterResp();

                        authCode = Authenticate(bind_transmitter.SystemID, bind_transmitter.Password, ip);
                        systemId = bind_transmitter.SystemID;
                        bind_transmitter_resp.SystemID        = Common.SMSC_ID;
                        bind_transmitter_resp.command_status  = (uint)authCode;
                        bind_transmitter_resp.sequence_number = bind_transmitter.sequence_number;
                        response = bind_transmitter_resp.Encode();

                        break;

                    case "bind_transceiver":
                        var bind_transceiver      = new BindTransceiver(pdu);
                        var bind_transceiver_resp = new BindTransceiverResp();

                        authCode = Authenticate(bind_transceiver.SystemID, bind_transceiver.Password, ip);
                        systemId = bind_transceiver.SystemID;
                        bind_transceiver_resp.SystemID        = Common.SMSC_ID;
                        bind_transceiver_resp.command_status  = (uint)authCode;
                        bind_transceiver_resp.sequence_number = bind_transceiver.sequence_number;
                        response = bind_transceiver_resp.Encode();

                        break;

                    default:
                        // Something unknown was received
                        ns.Close();
                        tcp_client.Close();
                        return;
                    }
                    byte[] msg;
                    msg = Common.ConvertHexStringToByteArray(response);

                    ns.Write(msg, 0, msg.Length);

                    if (authCode != 0)
                    {
                        // Events.LogEvent(LogEvent.Level.Error, "Received [" + Common.command_id.Values[Common.command_id.IndexOfKey(uint.Parse(pdu.Substring(8, 8), System.Globalization.NumberStyles.HexNumber))] + "]");
                        // Events.LogEvent(LogEvent.Level.Error, "Error connecting: " + Common.command_status[(uint)authCode].description);
                        ns.Close();
                        tcp_client.Close();
                        return;
                    }

                    Server esme = Gate.Servers.Values.FirstOrDefault(server => server.system_id == systemId);
                    esme.Events.LogChannelEvent(esme.channel_name, "Received [" + Common.command_id.Values[Common.command_id.IndexOfKey(uint.Parse(pdu.Substring(8, 8), System.Globalization.NumberStyles.HexNumber))] + "]");

                    esme.Events.LogChannelEvent(esme.channel_name, "Logged in successfully IP: " + ip);

                    esme.tcp_client = tcp_client;
                    esme.tcp_stream = tcp_client.GetStream();
                    esme.is_server  = true;
                    esme.connected  = true;
                    esme.enquire_link_timer.Start();
                    esme.timeout_timer.Start();
                    esme.Receive();
                }
            }
            catch (Exception)
            {
                return;
            }
        }