Skip to content

NethVoice: handle missing device dial strings with upstream FreePBX Core #8217

Description

@Stell0

Parent: #7570

Preserve this NethVoice behavior while using the unmodified upstream FreePBX Core module. The upgrade checkout installs Core 17.0.18.54. The old nethesis_nv8 fork is based on Core 16.0.68.40; comparing it with the matching upstream 16 release isolates the Nethesis changes from unrelated upstream updates. The obsolete Flexisip transport change is excluded from this migration.

Problem and original purpose

A stale device reference must not stop valid phones from ringing. The fork skips devices whose DEVICE/<device>/dial value is empty, preventing empty components in a multi-device dial string, for example PJSIP/device-a&&PJSIP/device-b.

Original change: 66d11c02 in nethesis/freepbx-core, originally authored in 2019 and carried into the NS8 fork in 2023.

Upstream assessment

Core 17.0.18.54 still lacks the empty-value guard in dialparties.agi. It skips PJSIP devices without registered contacts, which is a different condition. The issue depends on stale or incomplete device references; occurrence on the upgraded stack has not been confirmed by live calls.

Enabling the experimental DIALPARTIESDIALPLAN setting is not a sufficient replacement: its generated dialplan also appends empty device components.

Implementation plan

  • Reproduce missing-device cases on the upgraded stack and establish their effect on valid devices and dial-string generation.
  • Submit the minimal empty-value guard upstream and consume an upstream release containing the fix when available.
  • Clean stale references during extension deletion and migration using the supported FreePBX device model.
  • If protection is required before an upstream release, add a small module-owned predial sanitizer through the supported ring-all and hunt hooks. Sanitize only the destination components, preserving timers, options and long dial strings, and handle an entirely empty destination list cleanly.
  • Include Follow Me and the relevant ring strategies in validation. Avoid copying or patching the entire Core AGI script.

Acceptance criteria

  • Missing devices at the beginning, middle and end of a device list do not introduce empty dial destinations.
  • Valid devices still ring in mixed valid/missing lists.
  • An entirely missing device list follows the intended unavailable/no-answer path.
  • Ring-all, hunt and Follow Me behavior, timers and confirmation options remain correct.
  • Deletion and migration cleanup preserve valid references.
  • Protection remains effective after reload, restart and backup/restore with unmodified upstream Core.
  • If reproduction shows no functional defect, record the evidence and remove the legacy workaround requirement.

References

Activity

  1. added theissue type on Oct 9, 2026
  2. added
    nethvoiceBug or features releted to the NethVoice project
    on Oct 9, 2026
  3. Stell0 commented on Oct 9, 2026

    @Stell0
    Author

    Test

    Test Case 1

    • Run missing_device_dial_test.php: missing device first/middle/last, empty lists and confirmation paths.

    Test Case 2

    • Call a ring group whose member has a stale device followed by registered devices; a valid sibling still answers.
    • Repeat with only stale devices; the call ends cleanly without an empty dial target.

    Test Case 3

    • Enable call confirmation for a group containing stale and valid devices; accept on a valid device and verify the call connects.
    • Enable DIALPARTIESDIALPLAN, repeat Test Case 2, then restore the setting.

    Completed checks passed on nethvoice58 with pr-1035.1092-1.89f806d: valid sibling answered after a missing first device; all-missing group ended with no active channels.

    Draft PR: nethesis/ns8-nethvoice#1035.

  4. added
    testingPackages are available from testing repositories
    on Oct 9, 2026
  5. moved this from Todo to Testing in NethVoiceon Oct 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

nethvoiceBug or features releted to the NethVoice projecttestingPackages are available from testing repositories

Projects

  • Status
    Testing

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions