public void TestBindTranceiverDecode() { var pdu = new BindTransceiver(rawPdu); Assert.AreEqual((uint)0x00000009, (uint)pdu.command_id, "Command_id should be bind_tranceiver"); Assert.AreEqual(systemId, pdu.SystemID, "SystemId Should match"); Assert.AreEqual(password, pdu.Password, "Password should match"); Assert.AreEqual(systemType, pdu.SystemType, "System types should match"); }
public void TestBindTranceiverEncode() { var pdu = new BindTransceiver(); pdu.SystemID = systemId; pdu.Password = password; pdu.SystemType = systemType; Assert.AreEqual(rawPdu, pdu.Encode(), "bind_tranceiver should be encoded properly"); }
private void SendBindTransceiver() { string pdu; var bind_transceiver = new BindTransceiver { 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); pdu = bind_transceiver.Encode(); SendPDU(pdu); Events.LogChannelEvent(channel_name, "Sending [bind_transceiver]", debug ? pdu : ""); }
public BindResponseTransceiver(ref BindTransceiver pak) { m_commandId = commandIdEnum.bind_transceiver_resp; SequenceNumber = pak.SequenceNumber; }
/// <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; } }