import asyncio
import smpp34
async def main() -> None:
server = smpp34.Server(host="127.0.0.1", port=2775, system_id="ExampleSMSC")
await server.start()
print("SMSC listening on 127.0.0.1:2775 — Ctrl-C to stop")
sessions: dict[str, smpp34.Esme] = {}
while True:
ev = await server.next()
if isinstance(ev, smpp34.Esme):
sessions[ev.session_id] = ev
print("bound:", ev.system_id)
elif isinstance(ev, smpp34.SubmitSmEvent):
print(f"MO submit_sm {ev.source_addr} -> {ev.destination_addr}: {ev.short_message!r}")
ev.accept(message_id="msg-1")
esme = sessions.get(ev.session_id)
if esme is not None:
await esme.deliver_sm(
source_addr=ev.destination_addr,
destination_addr=ev.source_addr,
esm_class=0x04, short_message=b"id:msg-1 stat:DELIVRD",
tlvs=[
smpp34.Tlv(smpp34.TLV_RECEIPTED_MESSAGE_ID, b"msg-1\x00"),
smpp34.Tlv(smpp34.TLV_MESSAGE_STATE, b"\x02"), ],
)
elif isinstance(ev, smpp34.Unbound):
sessions.pop(ev.session_id, None)
print("unbound:", ev.session_id)
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
pass