comparison doc/Arch-design @ 1:c4f8a32af088

doc/Arch-design: continuing
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 20 Dec 2023 09:27:05 +0000
parents 9e364c18e0e8
children b203ebebe9b3
comparison
equal deleted inserted replaced
0:9e364c18e0e8 1:c4f8a32af088
330 possible to avoid looking at users' private message content when it is not 330 possible to avoid looking at users' private message content when it is not
331 necessary to do so for technical troubleshooting reasons. Toward this 331 necessary to do so for technical troubleshooting reasons. Toward this
332 objective, themwi-smsc-dump must make it easy to look at only technically 332 objective, themwi-smsc-dump must make it easy to look at only technically
333 necessary information, without throwing unnecessary private info into the 333 necessary information, without throwing unnecessary private info into the
334 operator's eyeballs. 334 operator's eyeballs.
335
336 2.3. themwi-smsc-core daemon operation
337
338 The core daemon (long-lived process) of ThemWi-SMSC is named themwi-smsc-core.
339 Aside from themwi-smsc-dump read-only tool, themwi-smsc-core will be the only
340 software component that accesses pms.bin directly - all other components of
341 ThemWi-SMSC will connect to a UNIX domain local socket provided by
342 themwi-smsc-core. In more detail, the core daemon will perform the following
343 functions:
344
345 * Read the potentially-active (not marked as historical-only) tail portion of
346 PMS on startup, catch all still-active SMs and hold them in RAM-based data
347 structures;
348
349 * Listen on a UNIX domain local socket of type SOCK_SEQPACKET, meaning
350 connection- and message-oriented;
351
352 * Accept message submission (or entry) commands from other ThemWi-SMSC
353 components connecting to this socket;
354
355 * Allow those socket-connecting SMSC components to register themselves as
356 performing special roles (GSM network interface, IMSI resolver, uplink and
357 downlink SMPP connection handlers), and send notification packets to those
358 role-handlers when an active SM needs that type of processing;
359
360 * When these just-described role-handlers respond with success or failure of
361 message handling, discharge the SM into historical state (either delivered or
362 failed), or in one special case (successful completion of MSISDN-to-IMSI
363 lookup) promote the SM from need-IMSI-lookup state into GSM-MT-delivery state.
364
365 The key feature of themwi-smsc-core daemon is that it can stay up and running
366 even when all other ThemWi-SMSC daemon processes are shut down. It won't be
367 particularly useful in this state, and won't be able to bring any outstanding
368 active SMs any closer toward delivery, but the key point is that dependency
369 graph arrows between sw components point in only one direction.
370
371 2.4. Message entry paths
372
373 Every new SM enters the SMSC by way of one of our sw components making a local
374 socket connection to themwi-smsc-core and sending it a "submit new message"
375 command packet. The following ThemWi-SMSC sw components will be able to enter
376 new SMs in this manner:
377
378 * A special command line utility named themwi-smsc-submit will perform just
379 this function and nothing else;
380
381 * GSM network interface daemon themwi-smsc-gsmif will submit SMs received from
382 GSM subscribers as MO messages;
383
384 * Upstream SMPP link handler themwi-smsc-uplink will submit SMs received from
385 the upstream connection, i.e., from the outside world;
386
387 * Downstream SMPP link handlers will submit SMs received from downstream peers.
388
389 Most of the common processing functions, such routing and validation steps,
390 will be performed by themwi-smsc-core. Once all admission-time checks pass,
391 the new SM will be written into PMS, and if the destination is anything other
392 than write-into-PMS-only, the new active SM will also be added to the core
393 daemon's in-RAM data structures. Further delivery steps will happen if and when
394 the appropriate role-handler connects to themwi-smsc-core and accepts messages
395 for processing.
396
397 2.4.1. Routing of Short Messages
398
399 For every incoming SM, themwi-smsc-core will apply routing based on the
400 destination address in addr_to_orig member of the submitted struct sm_record.
401 Referring to the general principles of section 1.1, this step is very specific
402 to the numbering plan (NANP) for which ThemWi-SMSC is designed. The following
403 routing rules will be applied:
404
405 * If the destination number is international (TON=1) and the country code is
406 anything other than +1, the destination is set to SME_CLASS_UPSTREAM.
407
408 * If the destination number is NANP, entered in international TON=1 format or
409 in one of local-culture formats (10-digit NPANXXXXXX or 11-digit 1NPANXXXXXX,
410 TON=0), NANP validation rules are applied and outright-invalid numbers are
411 rejected. The validated NANP number is looked up in themwi-nanp database of
412 locally owned phone numbers; if the number is locally owned, the destination
413 is either SME_CLASS_LOCAL or SME_CLASS_GSM, depending on how the number is
414 assigned, or the message may be rejected if the locally-owned number is of a
415 type that cannot receive SMS. If there is no hit in the database of locally
416 owned numbers, another number database gets a lookup, the one for numbers of
417 downstream peers - a hit in that database will set the destination to
418 SME_CLASS_DOWNSTREAM. Finally, if the NANP destination number doesn't hit
419 anywhere, the destination is SME_CLASS_UPSTREAM.
420
421 * If the destination number is a USA SMS short code of form NXXXX or NXXXXX,
422 the destination is SME_CLASS_UPSTREAM.
423
424 * In the case of locally originated SMs only (coming from GSM MO or from
425 themwi-smsc-submit command line utility), special 4-digit numbers may be
426 defined in the number database of themwi-nanp that are meaningful only
427 locally. If one of those numbers matches, the destination is SME_CLASS_LOCAL
428 or SME_CLASS_GSM according to the exact number type.
429
430 * If none of the above conditions match, the message is rejected as unroutable.
431
432 What is the difference between SME_CLASS_LOCAL and SME_CLASS_GSM destinations?
433 Answer: SME_CLASS_LOCAL means that writing the SM into PMS constitutes final
434 delivery, and nothing more needs to be done. OTOH, destination of SME_CLASS_GSM
435 means that an MSISDN-to-IMSI lookup needs to be performed, followed by GSM MT
436 delivery.
437
438 There is one additional routing mode that is available only via
439 themwi-smsc-submit, or perhaps future specialized network sw components that
440 incorporate the same function: if a locally generated MT message needs to be
441 sent to a local GSM MS addressed by IMSI, with no destination phone number
442 existing at all, themwi-smsc-submit can instruct themwi-smsc-core to skip the
443 routing step, with the destination preset to SME_CLASS_GSM and dest_imsi
444 prefilled.
445
446 2.4.2. Permission to send to the uplink
447
448 To be described.
449
450 2.4.3. PID and DCS constraints
451
452 To be described.
453
454 2.4.4. Validity period and expiry time
455
456 To be described.
457
458 3. SMS communication via direct shell access
459
460 To be filled.
461
462 4. Interface to local Osmocom GSM network
463
464 GSUP and separate MSISDN-to-IMSI lookup, to be described.
465
466 5. SMPP connection handlers and outside-world SM exchange
467
468 To be filled.