Giter Club home page Giter Club logo

sccp_manager's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

sccp_manager's Issues

Vendor config settings not set in cnf file

Reported by @FrozenHaxor

It seems that the generated CNF files do not reflect the vendor config correctly, I changed the phone display timeout settings and saved them, then generated new CNF files and it populated the variables with default values anyway

Plus there is a naming duplication

Pushed a new commit to the 'develop' branch, which handles alertinfo2ringtype conversion nicely and correctly this time.

Is it possible to expose the ringtype setting to the sccp_manager FreePBX module in a newer release of sccp_manager? Or, is there a chan-sccp '_custom' .conf' file that ringtype could always be set to inside?

I can set it manually within the sccp.conf file, but any server config change/save with the sccp_manager module of FreePBX overwrites/removes the ringtype parameter.

Pushed a new commit to the 'develop' branch, which handles alertinfo2ringtype conversion nicely and correctly this time.

Also added a way to change the default ringtype

[general]
...
ringtype=inside                               ; default value is "outside"
...

Thanks you for providing an initial solution to the issue (that always helps a lot) and also
thank you for making me aware of this lack in standards support :-)

Originally posted by @dkgroot in chan-sccp/chan-sccp#368 (comment)

outbound CID also used for internal calls

I just noticed, if I set the outbound CID for an SCCP phone, internal calls from that phone also get that CID.

Here is the debug log from a call, with the external number replaced with XXXXX

root@asterix ~ # asterisk -rvvvvv
Asterisk 13.38.3, Copyright (C) 1999 - 2014, Digium, Inc. and others.
Created by Mark Spencer <[email protected]>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Please note that this version of Asterisk no longer receives bug fixes.
Consult the following URL for Asterisk version support status information:
https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions
=========================================================================
Connected to Asterisk 13.38.3 currently running on asterix (pid = 19584)
  == Using SCCP RTP TOS bits 184
  == Using SCCP RTP CoS mark 6
    -- Executing [148@from-internal:1] GotoIf("SCCP/147-000000B7", "0?ext-local,148,1:followme-check,148,1") in new stack
    -- Goto (followme-check,148,1)
    -- Executing [148@followme-check:1] Gosub("SCCP/147-000000B7", "followme-sub,148,1()") in new stack
    -- Executing [148@followme-sub:1] GotoIf("SCCP/147-000000B7", "0?skipclid") in new stack
    -- Executing [148@followme-sub:2] Macro("SCCP/147-000000B7", "user-callerid,") in new stack
    -- Executing [s@macro-user-callerid:1] Set("SCCP/147-000000B7", "TOUCH_MONITOR=1634814401.510") in new stack
    -- Executing [s@macro-user-callerid:2] Set("SCCP/147-000000B7", "CHANCONTEXT=") in new stack
    -- Executing [s@macro-user-callerid:3] Set("SCCP/147-000000B7", "CHANCONTEXT=") in new stack
    -- Executing [s@macro-user-callerid:4] Set("SCCP/147-000000B7", "CHANEXTENCONTEXT=147-000000B7") in new stack
    -- Executing [s@macro-user-callerid:5] Set("SCCP/147-000000B7", "CHANEXTEN=147-000000B7") in new stack
    -- Executing [s@macro-user-callerid:6] Set("SCCP/147-000000B7", "CALLERID(number)="Han Boetes" <0XXXXX147") in new stack
    -- Executing [s@macro-user-callerid:7] Set("SCCP/147-000000B7", "AMPUSER=Han Boetes <0XXXXX147") in new stack
    -- Executing [s@macro-user-callerid:8] Set("SCCP/147-000000B7", "HOTDESCKCHAN=147-000000B7") in new stack
    -- Executing [s@macro-user-callerid:9] Set("SCCP/147-000000B7", "HOTDESKEXTEN=147") in new stack
    -- Executing [s@macro-user-callerid:10] Set("SCCP/147-000000B7", "HOTDESKCALL=0") in new stack
    -- Executing [s@macro-user-callerid:11] ExecIf("SCCP/147-000000B7", "0?Set(HOTDESKCALL=1)") in new stack
    -- Executing [s@macro-user-callerid:12] ExecIf("SCCP/147-000000B7", "0?Set(CALLERID(name)=)") in new stack
    -- Executing [s@macro-user-callerid:13] GotoIf("SCCP/147-000000B7", "0?report") in new stack
    -- Executing [s@macro-user-callerid:14] ExecIf("SCCP/147-000000B7", "1?Set(REALCALLERIDNUM="Han Boetes" <0XXXXX147)") in new stack
    -- Executing [s@macro-user-callerid:15] Set("SCCP/147-000000B7", "AMPUSER=") in new stack
    -- Executing [s@macro-user-callerid:16] GotoIf("SCCP/147-000000B7", "0?limit") in new stack
    -- Executing [s@macro-user-callerid:17] Set("SCCP/147-000000B7", "AMPUSERCIDNAME=") in new stack
    -- Executing [s@macro-user-callerid:18] ExecIf("SCCP/147-000000B7", "0?Set(__CIDMASQUERADING=TRUE)") in new stack
    -- Executing [s@macro-user-callerid:19] GotoIf("SCCP/147-000000B7", "1?report") in new stack
    -- Goto (macro-user-callerid,s,28)
    -- Executing [s@macro-user-callerid:28] NoOp("SCCP/147-000000B7", "Macro Depth is 1") in new stack
    -- Executing [s@macro-user-callerid:29] GotoIf("SCCP/147-000000B7", "1?report2:macroerror") in new stack
    -- Goto (macro-user-callerid,s,30)
    -- Executing [s@macro-user-callerid:30] GotoIf("SCCP/147-000000B7", "0?continue") in new stack
    -- Executing [s@macro-user-callerid:31] ExecIf("SCCP/147-000000B7", "1?Set(__CALLEE_ACCOUNCODE=)") in new stack
    -- Executing [s@macro-user-callerid:32] Set("SCCP/147-000000B7", "__TTL=64") in new stack
    -- Executing [s@macro-user-callerid:33] GotoIf("SCCP/147-000000B7", "1?continue") in new stack
    -- Goto (macro-user-callerid,s,49)
    -- Executing [s@macro-user-callerid:49] Set("SCCP/147-000000B7", "CALLERID(number)="Han Boetes" <0XXXXX147") in new stack
    -- Executing [s@macro-user-callerid:50] Set("SCCP/147-000000B7", "CALLERID(name)=Han Boetes") in new stack
    -- Executing [s@macro-user-callerid:51] GotoIf("SCCP/147-000000B7", "0?cnum") in new stack
    -- Executing [s@macro-user-callerid:52] Set("SCCP/147-000000B7", "CDR(cnam)=Han Boetes") in new stack
    -- Executing [s@macro-user-callerid:53] Set("SCCP/147-000000B7", "CDR(cnum)="Han Boetes" <0XXXXX147") in new stack
    -- Executing [s@macro-user-callerid:54] Set("SCCP/147-000000B7", "CHANNEL(language)=en") in new stack
    -- Executing [148@followme-sub:3] Set("SCCP/147-000000B7", "DIAL_OPTIONS=HhTtrI") in new stack
    -- Executing [148@followme-sub:4] Set("SCCP/147-000000B7", "CONNECTEDLINE(num,i)=148") in new stack
    -- Executing [148@followme-sub:5] Gosub("SCCP/147-000000B7", "sub-presencestate-display,s,1(148)") in new stack
    -- Executing [s@sub-presencestate-display:1] Goto("SCCP/147-000000B7", "state-not_set,1") in new stack
    -- Goto (sub-presencestate-display,state-not_set,1)
    -- Executing [state-not_set@sub-presencestate-display:1] Set("SCCP/147-000000B7", "PRESENCESTATE_DISPLAY=") in new stack
    -- Executing [state-not_set@sub-presencestate-display:2] Return("SCCP/147-000000B7", "") in new stack
    -- Executing [148@followme-sub:6] Set("SCCP/147-000000B7", "CONNECTEDLINE(name)=René Hirtenfelder") in new stack
    -- Executing [148@followme-sub:7] Set("SCCP/147-000000B7", "FM_DIALSTATUS=NOT_INUSE") in new stack
    -- Executing [148@followme-sub:8] Set("SCCP/147-000000B7", "__EXTTOCALL=148") in new stack
    -- Executing [148@followme-sub:9] Set("SCCP/147-000000B7", "__PICKUPMARK=148") in new stack
    -- Executing [148@followme-sub:10] Macro("SCCP/147-000000B7", "blkvm-setifempty,") in new stack
    -- Executing [s@macro-blkvm-setifempty:1] GotoIf("SCCP/147-000000B7", "1?init") in new stack
    -- Goto (macro-blkvm-setifempty,s,4)
    -- Executing [s@macro-blkvm-setifempty:4] Set("SCCP/147-000000B7", "__BLKVM_CHANNEL=SCCP/147-000000B7") in new stack
    -- Executing [s@macro-blkvm-setifempty:5] Set("SCCP/147-000000B7", "SHARED(BLKVM,SCCP/147-000000B7)=TRUE") in new stack
    -- Executing [s@macro-blkvm-setifempty:6] Set("SCCP/147-000000B7", "GOSUB_RETVAL=TRUE") in new stack
    -- Executing [s@macro-blkvm-setifempty:7] MacroExit("SCCP/147-000000B7", "") in new stack
    -- Executing [148@followme-sub:11] GotoIf("SCCP/147-000000B7", "1?skipov") in new stack
    -- Goto (followme-sub,148,14)
    -- Executing [148@followme-sub:14] Set("SCCP/147-000000B7", "RRNODEST=") in new stack
    -- Executing [148@followme-sub:15] Set("SCCP/147-000000B7", "__NODEST=148") in new stack
    -- Executing [148@followme-sub:16] GosubIf("SCCP/147-000000B7", "0?sub-fmsetcid,s,1()") in new stack
    -- Executing [148@followme-sub:17] GotoIf("SCCP/147-000000B7", "1?skipprepend") in new stack
    -- Goto (followme-sub,148,19)
    -- Executing [148@followme-sub:19] Set("SCCP/147-000000B7", "RecordMethod=Group") in new stack
    -- Executing [148@followme-sub:20] Gosub("SCCP/147-000000B7", "sub-record-check,s,1(exten,148,)") in new stack
    -- Executing [s@sub-record-check:1] GotoIf("SCCP/147-000000B7", "0?initialized") in new stack
    -- Executing [s@sub-record-check:2] Set("SCCP/147-000000B7", "__REC_STATUS=INITIALIZED") in new stack
    -- Executing [s@sub-record-check:3] Set("SCCP/147-000000B7", "NOW=1634814402") in new stack
    -- Executing [s@sub-record-check:4] Set("SCCP/147-000000B7", "__DAY=21") in new stack
    -- Executing [s@sub-record-check:5] Set("SCCP/147-000000B7", "__MONTH=10") in new stack
    -- Executing [s@sub-record-check:6] Set("SCCP/147-000000B7", "__YEAR=2021") in new stack
    -- Executing [s@sub-record-check:7] Set("SCCP/147-000000B7", "__TIMESTR=20211021-130642") in new stack
    -- Executing [s@sub-record-check:8] Set("SCCP/147-000000B7", "__FROMEXTEN=Han Boetes <0XXXXX147") in new stack
    -- Executing [s@sub-record-check:9] Set("SCCP/147-000000B7", "__MON_FMT=wav") in new stack
    -- Executing [s@sub-record-check:10] NoOp("SCCP/147-000000B7", "Recordings initialized") in new stack
    -- Executing [s@sub-record-check:11] ExecIf("SCCP/147-000000B7", "1?Set(ARG3=dontcare)") in new stack
    -- Executing [s@sub-record-check:12] Set("SCCP/147-000000B7", "REC_POLICY_MODE_SAVE=") in new stack
    -- Executing [s@sub-record-check:13] ExecIf("SCCP/147-000000B7", "0?Set(REC_STATUS=NO)") in new stack
    -- Executing [s@sub-record-check:14] GotoIf("SCCP/147-000000B7", "5?checkaction") in new stack
    -- Goto (sub-record-check,s,17)
    -- Executing [s@sub-record-check:17] GotoIf("SCCP/147-000000B7", "1?sub-record-check,exten,1") in new stack
    -- Goto (sub-record-check,exten,1)
    -- Executing [exten@sub-record-check:1] NoOp("SCCP/147-000000B7", "Exten Recording Check between Han Boetes <0XXXXX147 and 148") in new stack
    -- Executing [exten@sub-record-check:2] Set("SCCP/147-000000B7", "CALLTYPE=internal") in new stack
    -- Executing [exten@sub-record-check:3] ExecIf("SCCP/147-000000B7", "0?Set(CALLTYPE=)") in new stack
    -- Executing [exten@sub-record-check:4] Set("SCCP/147-000000B7", "CALLEE=dontcare") in new stack
    -- Executing [exten@sub-record-check:5] ExecIf("SCCP/147-000000B7", "0?Set(CALLEE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:6] GotoIf("SCCP/147-000000B7", "0?callee") in new stack
    -- Executing [exten@sub-record-check:7] GotoIf("SCCP/147-000000B7", "1?caller") in new stack
    -- Goto (sub-record-check,exten,13)
    -- Executing [exten@sub-record-check:13] Set("SCCP/147-000000B7", "RECMODE=") in new stack
    -- Executing [exten@sub-record-check:14] Set("SCCP/147-000000B7", "CALLERRECMODE=") in new stack
    -- Executing [exten@sub-record-check:15] Set("SCCP/147-000000B7", "CALEERECMODE=dontcare") in new stack
    -- Executing [exten@sub-record-check:16] GotoIf("SCCP/147-000000B7", "0?processnormal") in new stack
    -- Executing [exten@sub-record-check:17] ExecIf("SCCP/147-000000B7", "0?Set(RECMODE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:18] ExecIf("SCCP/147-000000B7", "0?Set(RECMODE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:19] ExecIf("SCCP/147-000000B7", "0?Set(RECMODE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:20] ExecIf("SCCP/147-000000B7", "0?Set(RECMODE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:21] ExecIf("SCCP/147-000000B7", "1?Set(RECMODE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:22] ExecIf("SCCP/147-000000B7", "1?Set(RECMODE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:23] Gosub("SCCP/147-000000B7", "recordcheck,1(dontcare,internal,148)") in new stack
    -- Executing [recordcheck@sub-record-check:1] NoOp("SCCP/147-000000B7", "Starting recording check against dontcare") in new stack
    -- Executing [recordcheck@sub-record-check:2] Goto("SCCP/147-000000B7", "dontcare") in new stack
    -- Goto (sub-record-check,recordcheck,3)
    -- Executing [recordcheck@sub-record-check:3] Return("SCCP/147-000000B7", "") in new stack
    -- Executing [exten@sub-record-check:24] Return("SCCP/147-000000B7", "") in new stack
    -- Executing [148@followme-sub:21] GotoIf("SCCP/147-000000B7", "1?skipdring") in new stack
    -- Goto (followme-sub,148,24)
    -- Executing [148@followme-sub:24] Set("SCCP/147-000000B7", "STRATEGY=ringallv2-prim") in new stack
    -- Executing [148@followme-sub:25] Set("SCCP/147-000000B7", "__RVOL=") in new stack
    -- Executing [148@followme-sub:26] GotoIf("SCCP/147-000000B7", "1?skipsimple") in new stack
    -- Goto (followme-sub,148,29)
    -- Executing [148@followme-sub:29] Set("SCCP/147-000000B7", "RingGroupMethod=ringallv2-prim") in new stack
    -- Executing [148@followme-sub:30] Set("SCCP/147-000000B7", "_FMGRP=148") in new stack
    -- Executing [148@followme-sub:31] GotoIf("SCCP/147-000000B7", "1?DIALGRP") in new stack
    -- Goto (followme-sub,148,35)
    -- Executing [148@followme-sub:35] ExecIf("SCCP/147-000000B7", "1?Set(DOPTS=HhTtrI):Set(DOPTS=m(Ring)HhTtI)") in new stack
    -- Executing [148@followme-sub:36] Set("SCCP/147-000000B7", "__ALT_CONFIRM_MSG=") in new stack
    -- Executing [148@followme-sub:37] GotoIf("SCCP/147-000000B7", "0?doconfirm") in new stack
    -- Executing [148@followme-sub:38] GotoIf("SCCP/147-000000B7", "1?ringallv21") in new stack
    -- Goto (followme-sub,148,41)
    -- Executing [148@followme-sub:41] Macro("SCCP/147-000000B7", "dial,20,HhTtrI,148-142") in new stack
    -- Executing [s@macro-dial:1] NoOp("SCCP/147-000000B7", "Blind Transfer: , Attended Transfer: , User: , Alert Info: ") in new stack
    -- Executing [s@macro-dial:2] Set("SCCP/147-000000B7", "__CRM_SOURCE="Han Boetes" <0XXXXX147") in new stack
    -- Executing [s@macro-dial:3] ExecIf("SCCP/147-000000B7", "0?Set(ALERT_INFO=)") in new stack
    -- Executing [s@macro-dial:4] ExecIf("SCCP/147-000000B7", "0?Set(ALERT_INFO=)") in new stack
    -- Executing [s@macro-dial:5] ExecIf("SCCP/147-000000B7", "0?Set(ALERT_INFO=)") in new stack
    -- Executing [s@macro-dial:6] ExecIf("SCCP/147-000000B7", "0?Set(CHANNEL(musicclass)=)") in new stack
    -- Executing [s@macro-dial:7] AGI("SCCP/147-000000B7", "dialparties.agi") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
 dialparties.agi: Starting New Dialparties.agi
dialparties.agi: Caller ID name is 'Han Boetes' number is 'Han
 dialparties.agi: CW Ignore is: 
 dialparties.agi: CF Ignore is: 
 dialparties.agi: CW IN_USE/BUSY is: 1
 dialparties.agi: Ringgroup confirm is  : 
       > dialparties.agi: USE_CONFIRMATION:  'FALSE'
       > dialparties.agi: RINGGROUP_INDEX:   ''
 dialparties.agi: Methodology of ring is  'ringallv2-prim'
    -- dialparties.agi: Added extension 148 to extension map
    -- dialparties.agi: Added extension 142 to extension map
       > dialparties.agi: got fmgrp_prering: 2, fmgrp_grptime: 20
       > dialparties.agi: fmgrp_totalprering: 22
       > dialparties.agi: found extension in pre-ring and array
       > dialparties.agi: ringallv2 ring times: REALPRERING: 22, PRERING: 2
    -- dialparties.agi: Extension 148 cf is disabled
    -- dialparties.agi: Extension 142 cf is disabled
    -- dialparties.agi: Extension 148 do not disturb is disabled
    -- dialparties.agi: Extension 142 do not disturb is disabled
       > dialparties.agi: extnum 148 has:  cw: 0; hascfb: 0 [] hascfu: 0 []
 dialparties.agi: EXTENSION_STATE: 0 (NOT_INUSE)
 dialparties.agi: Extension 148 has ExtensionState: 0
 dialparties.agi: EXTENSION_STATE: 0 (NOT_INUSE)
 dialparties.agi: Extension 148 has ExtensionState: 0
    -- dialparties.agi: Checking CW and CFB status for extension 148
    -- dialparties.agi: DbDel CALLTRACE/148 - Caller ID is not defined
       > dialparties.agi: extnum 142 has:  cw: 0; hascfb: 0 [] hascfu: 0 []
 dialparties.agi: EXTENSION_STATE: 4 (UNAVAILABLE)
 dialparties.agi: Extension 142 has ExtensionState: 4
    -- dialparties.agi: Checking CW and CFB status for extension 142
 dialparties.agi: Extension 142 is not available to be called
    -- dialparties.agi: Filtered ARG3: 148
    -- dialparties.agi: RING ALL V2 : 142
       > dialparties.agi: NODEST: 148 adding M(auto-blkvm) to dialopts: HhTtrIM(auto-blkvm)
       > dialparties.agi: NODEST: 148 blkvm enabled macro already in dialopts: HhTtrIM(auto-blkvm)
 dialparties.agi: RVOL_MODE '' 
 dialparties.agi: RVOL is: 
 dialparties.agi: RVOLPARENT is: 
    -- <SCCP/147-000000B7>AGI Script dialparties.agi completed, returning 0
    -- Executing [s@macro-dial:8] GotoIf("SCCP/147-000000B7", "1?normdial") in new stack
    -- Goto (macro-dial,s,11)
    -- Executing [s@macro-dial:11] NoOp("SCCP/147-000000B7", "Returned from dialparties with groups to dial") in new stack
    -- Executing [s@macro-dial:12] NoOp("SCCP/147-000000B7", "ringall array 142 ") in new stack
    -- Executing [s@macro-dial:13] Set("SCCP/147-000000B7", "__FMGL_DIAL=142") in new stack
    -- Executing [s@macro-dial:14] Set("SCCP/147-000000B7", "LOOPCNT=1") in new stack
    -- Executing [s@macro-dial:15] Set("SCCP/147-000000B7", "ITER=1") in new stack
    -- Executing [s@macro-dial:16] Set("SCCP/147-000000B7", "__EXTTOCALL=148") in new stack
    -- Executing [s@macro-dial:17] NoOp("SCCP/147-000000B7", "Working with 148") in new stack
    -- Executing [s@macro-dial:18] ExecIf("SCCP/147-000000B7", "0?Set(HASH(__SIPHEADERS,Alert-Info)=Normal;volume=)") in new stack
    -- Executing [s@macro-dial:19] ExecIf("SCCP/147-000000B7", "0?Set(HASH(__SIPHEADERS,Alert-Info)=Normal;volume=)") in new stack
    -- Executing [s@macro-dial:20] Set("SCCP/147-000000B7", "ITER=2") in new stack
    -- Executing [s@macro-dial:21] GotoIf("SCCP/147-000000B7", "0?ndloopbegin") in new stack
    -- Executing [s@macro-dial:22] Macro("SCCP/147-000000B7", "dial-ringall-predial-hook,") in new stack
    -- Executing [s@macro-dial-ringall-predial-hook:1] MacroExit("SCCP/147-000000B7", "") in new stack
    -- Executing [s@macro-dial:23] ExecIf("SCCP/147-000000B7", "0?Set(CWRING=r(callwaiting)):Set(CWRING=)") in new stack
    -- Executing [s@macro-dial:24] ExecIf("SCCP/147-000000B7", "0?Set(ds=Local/FMPR-148@from-internal&Local/FMGL-142@from-internal,22,HhTtrIM(auto-blkvm)g)") in new stack
    -- Executing [s@macro-dial:25] Dial("SCCP/147-000000B7", "Local/FMPR-148@from-internal&Local/FMGL-142@from-internal,22,HhTtrIM(auto-blkvm)b(func-apply-sipheaders^s^1),") in new stack
    -- Local/FMPR-148@from-internal-0000007f;1 Internal Gosub(func-apply-sipheaders,s,1) start
    -- Executing [s@func-apply-sipheaders:1] ExecIf("Local/FMPR-148@from-internal-0000007f;1", "0?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1)") in new stack
    -- Executing [s@func-apply-sipheaders:2] NoOp("Local/FMPR-148@from-internal-0000007f;1", "Applying SIP Headers to channel Local/FMPR-148@from-internal-0000007f;1") in new stack
    -- Executing [s@func-apply-sipheaders:3] Set("Local/FMPR-148@from-internal-0000007f;1", "TECH=Local") in new stack
    -- Executing [s@func-apply-sipheaders:4] Set("Local/FMPR-148@from-internal-0000007f;1", "SIPHEADERKEYS=") in new stack
    -- Executing [s@func-apply-sipheaders:5] While("Local/FMPR-148@from-internal-0000007f;1", "0") in new stack
    -- Jumping to priority 13
    -- Executing [s@func-apply-sipheaders:14] Return("Local/FMPR-148@from-internal-0000007f;1", "") in new stack
  == Spawn extension (from-internal, 148, 1) exited non-zero on 'Local/FMPR-148@from-internal-0000007f;1'
    -- Local/FMPR-148@from-internal-0000007f;1 Internal Gosub(func-apply-sipheaders,s,1) complete GOSUB_RETVAL=
    -- Local/FMGL-142@from-internal-00000080;1 Internal Gosub(func-apply-sipheaders,s,1) start
    -- Executing [s@func-apply-sipheaders:1] ExecIf("Local/FMGL-142@from-internal-00000080;1", "0?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1)") in new stack
    -- Executing [s@func-apply-sipheaders:2] NoOp("Local/FMGL-142@from-internal-00000080;1", "Applying SIP Headers to channel Local/FMGL-142@from-internal-00000080;1") in new stack
    -- Executing [s@func-apply-sipheaders:3] Set("Local/FMGL-142@from-internal-00000080;1", "TECH=Local") in new stack
    -- Executing [s@func-apply-sipheaders:4] Set("Local/FMGL-142@from-internal-00000080;1", "SIPHEADERKEYS=") in new stack
    -- Executing [s@func-apply-sipheaders:5] While("Local/FMGL-142@from-internal-00000080;1", "0") in new stack
    -- Jumping to priority 13
    -- Executing [s@func-apply-sipheaders:14] Return("Local/FMGL-142@from-internal-00000080;1", "") in new stack
  == Spawn extension (from-internal, 148, 1) exited non-zero on 'Local/FMGL-142@from-internal-00000080;1'
    -- Local/FMGL-142@from-internal-00000080;1 Internal Gosub(func-apply-sipheaders,s,1) complete GOSUB_RETVAL=
    -- Called Local/FMPR-148@from-internal
    -- Called Local/FMGL-142@from-internal
    -- Executing [FMGL-142@from-internal:1] Set("Local/FMGL-142@from-internal-00000080;2", "CDR_PROP(disable)=true") in new stack
    -- Executing [FMGL-142@from-internal:2] Set("Local/FMGL-142@from-internal-00000080;2", "DIALNUMS=142") in new stack
    -- Executing [FMGL-142@from-internal:3] Set("Local/FMGL-142@from-internal-00000080;2", "ENDLOOP=1634814404") in new stack
    -- Executing [FMGL-142@from-internal:4] GotoIf("Local/FMGL-142@from-internal-00000080;2", "0?dodnd") in new stack
    -- Executing [FMGL-142@from-internal:5] Wait("Local/FMGL-142@from-internal-00000080;2", "1") in new stack
    -- Executing [FMPR-148@from-internal:1] Set("Local/FMPR-148@from-internal-0000007f;2", "CDR_PROP(disable)=true") in new stack
    -- Executing [FMPR-148@from-internal:2] Set("Local/FMPR-148@from-internal-0000007f;2", "RingGroupMethod=") in new stack
    -- Executing [FMPR-148@from-internal:3] Set("Local/FMPR-148@from-internal-0000007f;2", "USE_CONFIRMATION=") in new stack
    -- Executing [FMPR-148@from-internal:4] Set("Local/FMPR-148@from-internal-0000007f;2", "RINGGROUP_INDEX=") in new stack
    -- Executing [FMPR-148@from-internal:5] Macro("Local/FMPR-148@from-internal-0000007f;2", "simple-dial,148,22") in new stack
    -- Executing [s@macro-simple-dial:1] Set("Local/FMPR-148@from-internal-0000007f;2", "__EXTTOCALL=148") in new stack
    -- Executing [s@macro-simple-dial:2] Set("Local/FMPR-148@from-internal-0000007f;2", "RT=22") in new stack
    -- Executing [s@macro-simple-dial:3] Set("Local/FMPR-148@from-internal-0000007f;2", "CFUEXT=") in new stack
    -- Executing [s@macro-simple-dial:4] Set("Local/FMPR-148@from-internal-0000007f;2", "CFBEXT=") in new stack
    -- Executing [s@macro-simple-dial:5] Set("Local/FMPR-148@from-internal-0000007f;2", "CWI_TMP=") in new stack
    -- Executing [s@macro-simple-dial:6] Macro("Local/FMPR-148@from-internal-0000007f;2", "dial-one,22,HhTtr,148") in new stack
    -- Executing [s@macro-dial-one:1] Set("Local/FMPR-148@from-internal-0000007f;2", "DEXTEN=148") in new stack
    -- Executing [s@macro-dial-one:2] Set("Local/FMPR-148@from-internal-0000007f;2", "__CRM_SOURCE="Han Boetes" <0XXXXX147") in new stack
    -- Executing [s@macro-dial-one:3] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Set(__EXTTOCALL=148)") in new stack
    -- Executing [s@macro-dial-one:4] Set("Local/FMPR-148@from-internal-0000007f;2", "DIALSTATUS_CW=") in new stack
    -- Executing [s@macro-dial-one:5] GosubIf("Local/FMPR-148@from-internal-0000007f;2", "0?screen,1()") in new stack
    -- Executing [s@macro-dial-one:6] GosubIf("Local/FMPR-148@from-internal-0000007f;2", "0?cf,1()") in new stack
    -- Executing [s@macro-dial-one:7] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "1?skip1") in new stack
    -- Goto (macro-dial-one,s,10)
    -- Executing [s@macro-dial-one:10] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "0?nodial") in new stack
    -- Executing [s@macro-dial-one:11] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "0?continue") in new stack
    -- Executing [s@macro-dial-one:12] Set("Local/FMPR-148@from-internal-0000007f;2", "EXTHASCW=") in new stack
    -- Executing [s@macro-dial-one:13] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "1?next1:cwinusebusy") in new stack
    -- Goto (macro-dial-one,s,14)
    -- Executing [s@macro-dial-one:14] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "0?docfu:skip3") in new stack
    -- Goto (macro-dial-one,s,18)
    -- Executing [s@macro-dial-one:18] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "1?next2:continue") in new stack
    -- Goto (macro-dial-one,s,19)
    -- Executing [s@macro-dial-one:19] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "1?continue") in new stack
    -- Goto (macro-dial-one,s,27)
    -- Executing [s@macro-dial-one:27] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "0?nodial") in new stack
    -- Executing [s@macro-dial-one:28] GosubIf("Local/FMPR-148@from-internal-0000007f;2", "1?dstring,1():dlocal,1()") in new stack
    -- Executing [dstring@macro-dial-one:1] Set("Local/FMPR-148@from-internal-0000007f;2", "DSTRING=") in new stack
    -- Executing [dstring@macro-dial-one:2] Set("Local/FMPR-148@from-internal-0000007f;2", "DEVICES=148&99148") in new stack
    -- Executing [dstring@macro-dial-one:3] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Return()") in new stack
    -- Executing [dstring@macro-dial-one:4] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Set(DEVICES=48&99148)") in new stack
    -- Executing [dstring@macro-dial-one:5] Set("Local/FMPR-148@from-internal-0000007f;2", "LOOPCNT=2") in new stack
    -- Executing [dstring@macro-dial-one:6] Set("Local/FMPR-148@from-internal-0000007f;2", "ITER=1") in new stack
    -- Executing [dstring@macro-dial-one:7] Set("Local/FMPR-148@from-internal-0000007f;2", "THISDIAL=SCCP/148") in new stack
    -- Executing [dstring@macro-dial-one:8] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "1?docheck") in new stack
    -- Goto (macro-dial-one,dstring,14)
    -- Executing [dstring@macro-dial-one:14] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "0?skipset") in new stack
    -- Executing [dstring@macro-dial-one:15] Set("Local/FMPR-148@from-internal-0000007f;2", "DSTRING=SCCP/148&") in new stack
    -- Executing [dstring@macro-dial-one:16] Set("Local/FMPR-148@from-internal-0000007f;2", "ITER=2") in new stack
    -- Executing [dstring@macro-dial-one:17] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "1?begin") in new stack
    -- Goto (macro-dial-one,dstring,7)
    -- Executing [dstring@macro-dial-one:7] Set("Local/FMPR-148@from-internal-0000007f;2", "THISDIAL=SIP/99148") in new stack
    -- Executing [dstring@macro-dial-one:8] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "1?docheck") in new stack
    -- Goto (macro-dial-one,dstring,14)
    -- Executing [dstring@macro-dial-one:14] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "0?skipset") in new stack
    -- Executing [dstring@macro-dial-one:15] Set("Local/FMPR-148@from-internal-0000007f;2", "DSTRING=SCCP/148&SIP/99148&") in new stack
    -- Executing [dstring@macro-dial-one:16] Set("Local/FMPR-148@from-internal-0000007f;2", "ITER=3") in new stack
    -- Executing [dstring@macro-dial-one:17] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "0?begin") in new stack
    -- Executing [dstring@macro-dial-one:18] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Return()") in new stack
    -- Executing [dstring@macro-dial-one:19] Set("Local/FMPR-148@from-internal-0000007f;2", "DSTRING=SCCP/148&SIP/99148") in new stack
    -- Executing [dstring@macro-dial-one:20] Return("Local/FMPR-148@from-internal-0000007f;2", "") in new stack
    -- Executing [s@macro-dial-one:29] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "0?nodial") in new stack
    -- Executing [s@macro-dial-one:30] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "0?skiptrace") in new stack
    -- Executing [s@macro-dial-one:31] GosubIf("Local/FMPR-148@from-internal-0000007f;2", "0?ctset,1():ctclear,1()") in new stack
    -- Executing [ctclear@macro-dial-one:1] NoOp("Local/FMPR-148@from-internal-0000007f;2", "Deleting: CALLTRACE/148 ") in new stack
    -- Executing [ctclear@macro-dial-one:2] Return("Local/FMPR-148@from-internal-0000007f;2", "") in new stack
    -- Executing [s@macro-dial-one:32] Set("Local/FMPR-148@from-internal-0000007f;2", "D_OPTIONS=HhTtrM(auto-blkvm)") in new stack
    -- Executing [s@macro-dial-one:33] GosubIf("Local/FMPR-148@from-internal-0000007f;2", "0?func-set-sipheader,s,1(Alert-Info,)") in new stack
    -- Executing [s@macro-dial-one:34] NoOp("Local/FMPR-148@from-internal-0000007f;2", "Blind Transfer: , Attended Transfer: , User: , Alert Info: ") in new stack
    -- Executing [s@macro-dial-one:35] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Set(ALERT_INFO=)") in new stack
    -- Executing [s@macro-dial-one:36] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Set(ALERT_INFO=)") in new stack
    -- Executing [s@macro-dial-one:37] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Set(ALERT_INFO=)") in new stack
    -- Executing [s@macro-dial-one:38] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Set(ALERT_INFO=Normal;volume=)") in new stack
    -- Executing [s@macro-dial-one:39] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Set(ALERT_INFO=Normal;volume=)") in new stack
    -- Executing [s@macro-dial-one:40] GosubIf("Local/FMPR-148@from-internal-0000007f;2", "0?func-set-sipheader,s,1(Alert-Info,)") in new stack
    -- Executing [s@macro-dial-one:41] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Set(CHANNEL(musicclass)=)") in new stack
    -- Executing [s@macro-dial-one:42] GosubIf("Local/FMPR-148@from-internal-0000007f;2", "0?qwait,1()") in new stack
    -- Executing [s@macro-dial-one:43] Set("Local/FMPR-148@from-internal-0000007f;2", "__CWIGNORE=") in new stack
    -- Executing [s@macro-dial-one:44] Set("Local/FMPR-148@from-internal-0000007f;2", "__KEEPCID=TRUE") in new stack
    -- Executing [s@macro-dial-one:45] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "0?usegoto,1") in new stack
    -- Executing [s@macro-dial-one:46] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "1?godial") in new stack
    -- Goto (macro-dial-one,s,51)
    -- Executing [s@macro-dial-one:51] Macro("Local/FMPR-148@from-internal-0000007f;2", "dialout-one-predial-hook,") in new stack
    -- Executing [s@macro-dialout-one-predial-hook:1] MacroExit("Local/FMPR-148@from-internal-0000007f;2", "") in new stack
    -- Executing [s@macro-dial-one:52] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Set(D_OPTIONS=HhtrM(auto-blkvm)I)") in new stack
    -- Executing [s@macro-dial-one:53] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Set(CWRING=r(callwaiting)):Set(CWRING=)") in new stack
    -- Executing [s@macro-dial-one:54] NoOp("Local/FMPR-148@from-internal-0000007f;2", "") in new stack
    -- Executing [s@macro-dial-one:55] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Set(D_OPTIONS=HhTtrM(auto-blkvm)g)") in new stack
    -- Executing [s@macro-dial-one:56] Dial("Local/FMPR-148@from-internal-0000007f;2", "SCCP/148&SIP/99148,22,HhTtrM(auto-blkvm)b(func-apply-sipheaders^s^1)") in new stack
[2021-10-21 13:06:42] WARNING[24786][C-0000002d]: app_dial.c:2589 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Subscriber absent)
    -- SCCP/148-000000B8 Internal Gosub(func-apply-sipheaders,s,1) start
    -- Executing [s@func-apply-sipheaders:1] ExecIf("SCCP/148-000000B8", "0?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1)") in new stack
    -- Executing [s@func-apply-sipheaders:2] NoOp("SCCP/148-000000B8", "Applying SIP Headers to channel SCCP/148-000000B8") in new stack
    -- Executing [s@func-apply-sipheaders:3] Set("SCCP/148-000000B8", "TECH=SCCP") in new stack
    -- Executing [s@func-apply-sipheaders:4] Set("SCCP/148-000000B8", "SIPHEADERKEYS=") in new stack
    -- Executing [s@func-apply-sipheaders:5] While("SCCP/148-000000B8", "0") in new stack
    -- Jumping to priority 13
    -- Executing [s@func-apply-sipheaders:14] Return("SCCP/148-000000B8", "") in new stack
  == Spawn extension (from-internal, FMPR-148, 1) exited non-zero on 'SCCP/148-000000B8'
    -- SCCP/148-000000B8 Internal Gosub(func-apply-sipheaders,s,1) complete GOSUB_RETVAL=
    -- Called SCCP/148
    -- SCCP/148-000000B8 is ringing
    -- Local/FMPR-148@from-internal-0000007f;1 is ringing
    -- Connected line update to SCCP/147-000000B7 prevented.
    -- Local/FMPR-148@from-internal-0000007f;1 is ringing
    -- Executing [FMGL-142@from-internal:6] GotoIf("Local/FMGL-142@from-internal-00000080;2", "1?start") in new stack
    -- Goto (from-internal,FMGL-142,4)
    -- Executing [FMGL-142@from-internal:4] GotoIf("Local/FMGL-142@from-internal-00000080;2", "0?dodnd") in new stack
    -- Executing [FMGL-142@from-internal:5] Wait("Local/FMGL-142@from-internal-00000080;2", "1") in new stack
  == Spawn extension (macro-dial, s, 25) exited non-zero on 'SCCP/147-000000B7' in macro 'dial'
  == Spawn extension (followme-sub, 148, 41) exited non-zero on 'SCCP/147-000000B7'
  == Spawn extension (from-internal, FMGL-142, 5) exited non-zero on 'Local/FMGL-142@from-internal-00000080;2'
    -- Executing [h@from-internal:1] Macro("Local/FMGL-142@from-internal-00000080;2", "hangupcall") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("Local/FMGL-142@from-internal-00000080;2", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,3)
    -- Executing [s@macro-hangupcall:3] ExecIf("Local/FMGL-142@from-internal-00000080;2", "0?Set(CDR(recordingfile)=)") in new stack
  == Spawn extension (macro-dial-one, s, 56) exited non-zero on 'Local/FMPR-148@from-internal-0000007f;2' in macro 'dial-one'
  == Spawn extension (macro-simple-dial, s, 6) exited non-zero on 'Local/FMPR-148@from-internal-0000007f;2' in macro 'simple-dial'
  == Spawn extension (from-internal, FMPR-148, 5) exited non-zero on 'Local/FMPR-148@from-internal-0000007f;2'
    -- Executing [h@from-internal:1] Macro("Local/FMPR-148@from-internal-0000007f;2", "hangupcall") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,3)
    -- Executing [s@macro-hangupcall:4] NoOp("Local/FMGL-142@from-internal-00000080;2", " montior file= ") in new stack
    -- Executing [s@macro-hangupcall:5] GotoIf("Local/FMGL-142@from-internal-00000080;2", "1?skipagi") in new stack
    -- Goto (macro-hangupcall,s,7)
    -- Executing [s@macro-hangupcall:7] Hangup("Local/FMGL-142@from-internal-00000080;2", "") in new stack
  == Spawn extension (macro-hangupcall, s, 7) exited non-zero on 'Local/FMGL-142@from-internal-00000080;2' in macro 'hangupcall'
  == Spawn extension (from-internal, h, 1) exited non-zero on 'Local/FMGL-142@from-internal-00000080;2'
    -- Executing [s@macro-hangupcall:3] ExecIf("Local/FMPR-148@from-internal-0000007f;2", "0?Set(CDR(recordingfile)=)") in new stack
    -- Executing [s@macro-hangupcall:4] NoOp("Local/FMPR-148@from-internal-0000007f;2", "SCCP/148-000000B8 montior file= ") in new stack
    -- Executing [s@macro-hangupcall:5] GotoIf("Local/FMPR-148@from-internal-0000007f;2", "1?skipagi") in new stack
    -- Goto (macro-hangupcall,s,7)
    -- Executing [s@macro-hangupcall:7] Hangup("Local/FMPR-148@from-internal-0000007f;2", "") in new stack
  == Spawn extension (macro-hangupcall, s, 7) exited non-zero on 'Local/FMPR-148@from-internal-0000007f;2' in macro 'hangupcall'
  == Spawn extension (from-internal, h, 1) exited non-zero on 'Local/FMPR-148@from-internal-0000007f;2'
asterix*CLI> exit

could not install sccp_manager

Ubuntu 20.04. asterisk 16 freepbx 15. chan-sccp compiled, installed and installed by given instruction. But can't install sccp_manager, getting a message:

Installing sccp_manager
Updating tables sccpdevice, sccpline, sccpbuttonconfig, sccpdevmodel, sccpuser, sccpsettings...Done
Checking for required Sccp_manager database tables..
Checking Asterisk Version :
Sccp model Compatible code :

Chan Sccp not Found. Install it before continuing !

What's wrong? How explain/point to sccp_manager installation that chan_sccp module succefully installed?

Additional (secondary/tertiary) Asterisk node config in multinode environment

Hi,

In a multinode environment (2 nodes at least; primary/secondary, or as Cisco calls it, publisher and subcscriber(s)), phones have the ability to register to the primary node and open a TCP/SCCP connection toward the secondary (and tertiary) nodes (3 nodes max. in a call manager group according to Cisco).
When the primary node fails (TCP or SCCP keepalives are lost), phone reverts to next one in the CM group.
More about it here:
https://github.com/chan-sccp/chan-sccp/wiki/Keepalive-and-Failover-Architecture and
https://github.com/chan-sccp/chan-sccp/wiki/registration,-keepalive-and-srst

Additional callmanagers should be added to the phone config xml (two node example). processNodeName, name, description should be changed accordingly:

  <devicePool>
    <callManagerGroup>
      <members>
        <member priority="0">
          <callManager>
            <ports>
              <ethernetPhonePort>2000</ethernetPhonePort>
            </ports>
            <processNodeName>192.168.1.228</processNodeName>
            <name>Asterisk</name>
            <description>Asterisk</description>
          </callManager>
        </member>
        <member priority="1">
          <callManager>
            <ports>
              <ethernetPhonePort>2000</ethernetPhonePort>
            </ports>
            <processNodeName>192.168.1.229</processNodeName>
            <name>Asterisk2</name>
            <description>Asterisk2</description>
          </callManager>
        </member>
      </members>
    </callManagerGroup>
  </devicePool>

Screenshot from the Cisco IP Communicator softphone (Settings -> Device configuration) and two node asterisk setup:
Capture

Regex errors in rewrite.rules file for `sccp Provision`

sccp manager have support for provision module from this git: https://github.com/dkgroot/provision_sccp.
But file sccp_manager/contrib/rewrite.rules that goes with sccp manager contains regex expression errors.
I fixed errors that I found while testing tftp provision with 7911/12/14/40/60 cisco phone models:

rewrite.zip

rewrite.rules

#
# TFTPd Rewrite for SCCP_Manager Custom remaping
#	/firmware
#	/settings
#	/wallpapers
#	/ringtones
#	/locales
#
# 6901 firmware (java-based)
ri ^(APP6901SCCP)(.+\.sgn)$ firmware/6901/\1\2
ri ^(KNL6901SCCP)(.+\.sgn)$ firmware/6901/\1\2
ri ^(SCCP6901)(.+\.loads)$ firmware/6901/\1\2

# 6911 firmware (java-based)
ri ^(APP6911SCCP)(.+\.sgn)$ firmware/6911/\1\2
ri ^(BFS6911SCCP)(.+\.sgn)$ firmware/6911/\1\2
ri ^(KNL6911SCCP)(.+\.sgn)$ firmware/6911/\1\2
ri ^(SCCP6911)(.+\.loads)$ firmware/6911/\1\2

# 6921 firmware (java-based)
ri ^(BOOT69xx)(.+\.sgn)$ firmware/6921/\1\2
ri ^(DSP69xx)(.+\.sgn)$ firmware/6921/\1\2
ri ^(SCCP69xx)(.+\.loads)$ firmware/6921/\1\2
ri ^(SCCP69xx)(.+\.sgn)$ firmware/6921/\1\2

# 6945 firmware (java-based)
ri ^(SCCP6945)(.+\.sgn)$ firmware/6945/\1\2
ri ^(SCCP6945)(.+\.loads)$ firmware/6945/\1\2

# 69xx firmware (java-based)
ri ^(BOOT69xx)(.+\.sgn)$ firmware/69xx/\1\2
ri ^(DSP69xx)(.+\.sgn)$ firmware/69xx/\1\2
ri ^(SCCP69xx)(.+\.loads)$ firmware/69xx/\1\2
ri ^(SCCP69xx)(.+\.sgn)$ firmware/69xx/\1\2

# 7902 firmware (ancient)
ri ^(CP7902080002SCCP060817A.sbin)$ firmware/7902/\1

# 7905 firmware (ancient)
ri ^(CP7905080003SCCP070409A.sbin)$ firmware/7905/\1
ri ^(CP7905080003SCCP070409A.zup)$ firmware/7905/\1

# 7906_7911 firmware (java-based)
ri ^(apps11)(.+\.sbn)$ firmware/7906/\1\2
ri ^(cnu11)(.+\.sbn)$ firmware/7906/\1\2
ri ^(cvm11sccp)(.+\.sbn)$ firmware/7906/\1\2
ri ^(dsp11)(.+\.sbn)$ firmware/7906/\1\2
ri ^(jar11sccp)(.+\.sbn)$ firmware/7906/\1\2
ri ^(SCCP11)(.+\.loads)$ firmware/7906/\1\2
ri ^(term06)(.+\.loads)$ firmware/7906/\1\2
ri ^(term11)(.+\.loads)$ firmware/7906/\1\2

# 7910 firmware (ancient)
ri ^(P00405000700.bin)$ firmware/7910/\1
ri ^(P00405000700.sbn)$ firmware/7910/\1

# 7912 firmware (ancient)
ri ^(CP7912080004SCCP080108A.sbin)$ firmware/7912/\1

# 7915 firmware (ancient)
ri ^(B015-1-0-)(.+\.SBN)$ firmware/7915/\1\2

# 7916 firmware (ancient)
ri ^(B016-1-0-)(.+\.SBN)$ firmware/7916/\1\2

# 7920 firmware (ancient)
ri ^(cmterm_7920)(.+\.bin)$ firmware/7920/\1\2

# 7921_7925 firmware (ancient)
ri ^(APPS-1.4.3.4.SBN)$ firmware/7921/\1
ri ^(CP7921G-1.4.3.4.LOADS)$ firmware/7921/\1
ri ^(GUI-1.4.3.4.SBN)$ firmware/7921/\1
ri ^(SYS-1.4.3.4.SBN)$ firmware/7921/\1
ri ^(TNUX-1.4.3.4.SBN)$ firmware/7921/\1
ri ^(TNUXR-1.4.3.4.SBN)$ firmware/7921/\1
ri ^(WLAN-1.4.3.4.SBN)$ firmware/7921/\1

# 7926 firmware (ancient)
ri ^(APPSS-1.4.1SR1.SBN)$ firmware/7926/\1
ri ^(CP7926G-1.4.1SR1.LOADS)$ firmware/7926/\1
ri ^(EA15FW-BF3-220.SBN)$ firmware/7926/\1
ri ^(GUIS-1.4.1SR1.SBN)$ firmware/7926/\1
ri ^(JSYSS-1.4.1SR1.SBN)$ firmware/7926/\1
ri ^(JUIS-1.4.1SR1.SBN)$ firmware/7926/\1
ri ^(SYSS-1.4.1SR1.SBN)$ firmware/7926/\1
ri ^(TNUXRS-1.4.1SR1.SBN)$ firmware/7926/\1
ri ^(TNUXS-1.4.1SR1.SBN)$ firmware/7926/\1
ri ^(WLANS-1.4.1SR1.SBN)$ firmware/7926/\1

# 7931 firmware (java-based)
ri ^(apps31)(.+\.sbn)$ firmware/7931/\1\2
ri ^(cnu31)(.+\.sbn)$ firmware/7931/\1\2
ri ^(cvm31sccp)(.+\.sbn)$ firmware/7931/\1\2
ri ^(dsp31)(.+\.sbn)$ firmware/7931/\1\2
ri ^(jar31sccp)(.+\.sbn)$ firmware/7931/\1\2
ri ^(SCCP31)(.+\.loads)$ firmware/7931/\1\2
ri ^(term31)(.+\.loads)$ firmware/7931/\1\2

# 7935 firmware (ancient)
ri ^(P00503021900.bin)$ firmware/7935/\1

# 7936 firmware (ancient)
ri ^(cmterm_7936.3-3-21-0.bin)$ firmware/7936/\1

# 7937 firmware (ancient)
ri ^(apps37sccp.1-4-5-7.bin)$ firmware/7937/\1

# 7940_7960 firmware (ancient)
ri ^(P0030801SR)(.+\.bin)$ firmware/7940/\1\2
ri ^(P0030801SR)(.+\.loads)$ firmware/7940/\1\2
ri ^(P0030801SR)(.+\.sb2)$ firmware/7940/\1\2
ri ^(P0030801SR)(.+\.sbn)$ firmware/7940/\1\2

# 7941_7961 firmware (java-based)
ri ^(apps41)(.+\.sbn)$ firmware/7941/\1\2
ri ^(cnu41)(.+\.sbn)$ firmware/7941/\1\2
ri ^(cvm41sccp)(.+\.sbn)$ firmware/7941/\1\2
ri ^(dsp41)(.+\.sbn)$ firmware/7941/\1\2
ri ^(jar41sccp)(.+\.sbn)$ firmware/7941/\1\2
ri ^(SCCP41)(.+\.loads)$ firmware/7941/\1\2
ri ^(term41)(.+\.loads)$ firmware/7941/\1\2
ri ^(term61)(.+\.loads)$ firmware/7941/\1\2

# 7942_7962 firmware (java-based)
ri ^(apps42)(.+\.sbn)$ firmware/7942/\1\2
ri ^(cnu42)(.+\.sbn)$ firmware/7942/\1\2
ri ^(cvm42sccp)(.+\.sbn)$ firmware/7942/\1\2
ri ^(dsp42)(.+\.sbn)$ firmware/7942/\1\2
ri ^(jar42sccp)(.+\.sbn)$ firmware/7942/\1\2
ri ^(SCCP42)(.+\.loads)$ firmware/7942/\1\2
ri ^(term42)(.+\.loads)$ firmware/7942/\1\2
ri ^(term62)(.+\.loads)$ firmware/7942/\1\2

# 7945_7965 firmware (java-based)
ri ^(apps45)(.+\.sbn)$ firmware/7945/\1\2
ri ^(cnu45)(.+\.sbn)$ firmware/7945/\1\2
ri ^(cvm45sccp)(.+\.sbn)$ firmware/7945/\1\2
ri ^(dsp45)(.+\.sbn)$ firmware/7945/\1\2
ri ^(jar45sccp)(.+\.sbn)$ firmware/7945/\1\2
ri ^(SCCP45)(.+\.loads)$ firmware/7945/\1\2
ri ^(term45)(.+\.loads)$ firmware/7945/\1\2
ri ^(term65)(.+\.loads)$ firmware/7945/\1\2

# 7970_7971 firmware (java-based)
ri ^(apps70)(.+\.sbn)$ firmware/7970/\1\2
ri ^(cnu70)(.+\.sbn)$ firmware/7970/\1\2
ri ^(cvm70sccp)(.+\.sbn)$ firmware/7970/\1\2
ri ^(dsp70)(.+\.sbn)$ firmware/7970/\1\2
ri ^(jar70sccp)(.+\.sbn)$ firmware/7970/\1\2
ri ^(SCCP70)(.+\.loads)$ firmware/7970/\1\2
ri ^(term70)(.+\.loads)$ firmware/7970/\1\2
ri ^(term71)(.+\.loads)$ firmware/7970/\1\2

# 7975 firmware (java-based)
ri ^(apps75)(.+\.sbn)$ firmware/7975/\1\2
ri ^(cnu75)(.+\.sbn)$ firmware/7975/\1\2
ri ^(cvm75sccp)(.+\.sbn)$ firmware/7975/\1\2
ri ^(dsp75)(.+\.sbn)$ firmware/7975/\1\2
ri ^(jar75sccp)(.+\.sbn)$ firmware/7975/\1\2
ri ^(SCCP75)(.+\.loads)$ firmware/7975/\1\2
ri ^(term75)(.+\.loads)$ firmware/7975/\1\2

# 7985 firmware (ancient)
ri ^(cmterm_7985.4-1-7-0.bin)$ firmware/7985/\1

# 894x firmware (java-based)
ri ^(BOOT894x)(.+\.sgn)$ firmware/894x/\1\2
ri ^(SCCP894x)(.+\.sgn)$ firmware/894x/\1\2
ri ^(SCCP894x)(.+\.loads)$ firmware/894x/\1\2

# ata186/ata188 firmware (ancient)
ri ^(ATA030204SCCP090202A.zup)$ firmware/ata186/\1

# Sub-Directory Handling

# settings
#ri ^(.+\.tlv)?$ settings/\1
#ri ^\/(.+\.tlv)?$ settings/\1
#ri ^((.+\.cnf.xml)(\.enc)?(\.sgn)?)$ settings/\1
#ri ^\/((.+\-cnf.xml)(\.enc)?(\.sgn)?)$ settings/\1
#ri ^\/((SPA504G-cfg.xml)(\.enc)?(\.sgn)?)$ settings/\1

# Keep firmware in a separate directory (optional)
#ri ^(.+\.loads)$ firmware/\1
#ri ^(.+\.sbn)$ firmware/\1

# Keep locales in a separate directory (optional)
ri ^(.+)\/(.+-sccp.jar)$ languages/\1/\2
ri ^(.+)\/(.+-sip.jar)$ languages/\1/\2
ri ^(.+)\/(.+-dictionary.xml)$ languages/\1/\2
ri ^(.+)\/(.+-dictionary-ext.xml)$ languages/\1/\2
ri ^(.+)\/(.+-tones.xml)$ languages/\1/\2
ri ^(.+)\/(.+-font.xml)$ languages/\1/\2
ri ^(.+)\/(.+-kate.xml)$ languages/\1/\2
ri ^(.+)\/(gk.+)(\.cfg)$ languages/\1/\2\3

#ri ^(.+)\/(.+-tones.xml)$ locales/countries/\1/\2

# Keep ring-tones in a separate directory (optional)
ri ^([R|r]ing[L|l]ist)(\.xml|-wb\.xml)(\.sgn)?$ ringtones/ringlist.xml
ri ^(Distinctive[R|r]ing[L|l]ist)(\.xml|-wb\.xml)(\.sgn)?$ ringtones/ringlist.xml
ri ^(.+)(\.raw|\.rwb|\.pcm)(\.sgn)?$ ringtones/\1\2\3

# Rename Desktops to wallpapers (optional)
#ri ^Desktops/(.+)/(List\.xml)(\.sgn)?$ wallpapers/\1/\2\3
#ri ^Desktops/(.+)/(.+\.png)(\.sgn)?$ wallpapers/\1/\2\3

ri ^authorized_keys$ settings/authorized_keys

#
# Generic Rules
#
ri	^[a-z]:				# Remove "drive letters"
rg	\\		/		# Convert backslashes to slashes
rg	\#		@		# Convert hash marks to @ signs
rg	/../		/..no../	# Convert /../ to /..no../
# e	^ok/				# These are always ok
# r	^[^/]		/tftpboot/\0	# Convert non-absolute files
# a	\.pvt$				# Reject requests for private files

SIP device add assigns sccp line and not sip line

Reported by @nortien

When creating a new SIP device, the default line assigned is an sccp line and not a sip line. Device create then fails as no line found which results in an exception.

Workaround: edit device buttons and this proposes only SIP lines

HTTP Provisioning in version 14.3

Can we add Http Provisioning to version 14.3 I believe that the previous versions did have this option, but with 14.3 not having an index.php in the /tftpboot directory I get an error when I go to <pbxipaddress>:6970.

md5sum did not match

Hi,
while upgrading from 14.2.0.1 to 14.2.0.3 via Module Admin I got following error:

Downloading and Installing sccp_manager
Downloading sccp_manager 0 of 143 (0%)
Error(s) downloading sccp_manager:

File Integrity failed for /var/www/html/admin/modules/_cache/v14.2.0.3.tar.gz - aborting (md5sum did not match)

cid_num in table sccpline does not fill in when creating SCCP extension

Sccp Manager v14.5.0.4

At some point all newly created extensions does not have cid_num filled with extension number, therefore all internal calls from that extensions shows only info from cid_name column

(In fact it's a rather useful for cases, where i need to hide extension number in incoming calls, but i think FreePBX can handle such cases with other tools :) )

Here is a screenshot without filled cid_num
sccpline_w_error

But, if i fill in Outbound CID - cid_num is correctly populating with my Outbound CID
sccpline_wo_error

And, if i remove Outbound CID for extension, cid_num is reverting to NULL

sccp_manager fails to install

I just installed the freepbx 15 distro with asterisk 18. I did yum update and also updated all modules then installed chan-sccp succefully. When I was trying to install sccp-mangaer i faced 2 issues:

  1. the command mysql -u root asterisk < /usr/src/chan-sccp/conf/mysql-v5_enum.sql fails to create buttonconfig table due to foreign key constraint error (unable to create the foreign key on buttonconfig(device) to reference sccpdevice (name) the primary key and both have same data type!
  2. when downloading the module into module admin and try to install the sccp-manager module i get the error:
  3. PHP Parse error: syntax error, unexpected 'class' (T_CLASS) in /var/www/html/admin/modules/sccp_manager/install.php on line 32
    Whoops\Exception\ErrorException: syntax error, unexpected 'class' (T_CLASS) in file /var/www/html/admin/modules/sccp_manager/install.php on line 32
    Stack trace:
  4. Whoops\Exception\ErrorException->() /var/www/html/admin/modules/sccp_manager/install.php:32
    It seems to be a PHP issue since the distro comes with php56w.
    Is there a workaround? if not, which distro freepbx/asterisk this supposed to work with. I am setting up freepbx mainly to use to manage 60 cisco 7960 phones. It's extremely important for me to get this working rather than installing sip on cisco phones.
    Thanks for all the efforts on this project!

Hotline / Auto Provision support

When you enable "hotline" in 'SCCP Server Settings':'SCCP Device' chan-sccp will allow unknown devices to register to chan-sccp and will automatically assign them a so called 'Hotline' / PLAR (Private Line Automatic Ringdown) extension . This is a somewhat insecure setting for production environments but very nice when you are setting up a new environment with a large number of phones.

I noticed how these Hotline devices are able to connect and already show up in the 'Phone Manager':'SCCP Phone' list, with their Device Identifier, Type, Description: *NEW* and Status (So all the information we need is already there). But when you go to the config page for this device, the information is lost along the way.

image

Enhancement: When you select the edit/config action button at the end, that it would transfer this knowledge and already fill in the type of the phone and it's Device ID, so the whole procedure could be reduced to setting up the line button for it. It could even move you to the second tab immediately asking for the line to assign right away.

On the 'SCCP Server Settings':'SCCP Device' page we ought to make the user aware this is insecure and should be switched of before going into production. A PLAR phone is still able to ring any other extension by entering the number on the phone before going off-hook. So either setup a secure context for these types of phones or switch off hotline.

Paging/Intercom seems to be not working on cisco 7960/7940

When I try to intercom or page a phone, it rings twice and disconnects instead of auto answer. Not sure if all models do that but all I have is 7960 and 7940.
am I missing a setting that would correct this behavior? I searched the issues but didn't find anything about it
Thanks!

Config backup/restore via FreePBX backup module

FPBX 15 has redefined the way it manages backup procedure. In short, every module is in charge of its own data. Could we (I mean you) make sccp_manager compatible with fpbx backup?

In FreePBX 15 our backup module was redesigned for simplicity, flexibility and maintainability. Storage options are now handled in the Filestore module which offers more options to keep your data safe. You can now backup per module. This allows you to create custom backups of just the data you need. You can also divide your modules in to different backups for data that may change more often. With each module handling the data it owns we can now do cross-version backup and restore (15+).

More here: https://wiki.freepbx.org/pages/viewpage.action?pageId=114852215
And developer stuff here: https://wiki.freepbx.org/display/FOP/Implementing+Backup

SCCP Manager throws an exception on a fresh install if you choose the wrong menu item

Steps to reproduce:

  1. Install the FreePBX 16 distro
  2. Install Chan SCCP
  3. Install SCCP Manager from the command line
    fwconsole ma downloadinstall https://github.com/chan-sccp/sccp_manager/archive/refs/tags/14.3.0.13.zip
  4. In the FreePBX web UI, go to Sccp Connectivity > System Parameters

This throws the following exception because masterFilesStructure.xml is missing:

Whoops\Exception\ErrorException thrown with message "simplexml_load_file(): I/O warning : failed to load external entity &quot;/tftpboot/masterFilesStructure.xml&quot;"

Stacktrace:
#5 Whoops\Exception\ErrorException in /var/www/html/admin/modules/sccp_manager/views/advserver.model.php:155
#4 simplexml_load_file in /var/www/html/admin/modules/sccp_manager/views/advserver.model.php:155
#3 include in /var/www/html/admin/modules/sccp_manager/Sccp_manager.class.php:372
#2 FreePBX\modules\Sccp_manager:processPageData in /var/www/html/admin/modules/sccp_manager/Sccp_manager.class.php:295
#1 FreePBX\modules\Sccp_manager:advServerShowPage in /var/www/html/admin/modules/sccp_manager/page.sccp_adv.php:19
#0 include in /var/www/html/admin/config.php:647

Workaround:

Before going to Sccp Connectivity > System Parameters, go to Sccp Connectivity > Server Config first.
This generates the required files.

Suggested fix:

Download https://github.com/dkgroot/provision_sccp/blob/master/tools/tftpbootFiles.xml and put it in /tftpboot/masterFilesStructure.xml during install (if possible)

Alternate fix:

I'm bad at PHP and not very familiar with the project, so I haven't submitted a pull request, but could it be as simple as replacing this:

$tftpBootXml = simplexml_load_file("{$this->sccppath['tftp_path']}/masterFilesStructure.xml");

With something like this:

if (!file_exists("{$this->sccppath['tftp_path']}/masterFilesStructure.xml")) {
if (!$this->getFileListFromProvisioner()) {
// File does not exist and cannot get from internet.
return $result;
};
}
$tftpBootXml = simplexml_load_file("{$this->sccppath['tftp_path']}/masterFilesStructure.xml");

Line settings are included in add device and therefore ignored - need to move these settings to line

it is logical to assume that when you add a new device, it takes some device settings from the server configuration. Such as for example:
Message Lamp On Call
Call history stored book
Call Forward
Transfer
Call Forward busy
Call Forward NO ANSWER
DND Button on Device

Or the same thing with lines, the server configuration specifies some parameters, and when creating a line, it does not take values from the server configuration:
Directed Pickup Answer in the server configuration, it is "No", and when creating a line (extension), it is "Yes"
Directed Pickup the same thing

either remove these parameters from the server configuration or fix it so that the settings are loaded
And if you fix it, it would be super to increase the values of the server configuration, which were then loaded when creating a line or device

Secondary addon module issue

SEPXXX.cnf.xml file generated by sccp manager contains only one entry for an addon module.
I tried adding cisco 7960 with two 7914 expansion modules and cisco 7965 with two 7916 modules with same results. Generated .cnf.xml file looks like this:

<addOnModules><addOnModule idx="1"><loadInformation>S00105000400</loadInformation></addOnModule></addOnModules></device>

Everything works without issues if I add second addon module entry manually through text editor:

  <addOnModules>
   <addOnModule idx="1"><loadInformation>S00105000400</loadInformation></addOnModule>
   <addOnModule idx="2"><loadInformation>S00105000400</loadInformation></addOnModule>
  </addOnModules>
</device>

After changing Sound Language in FreePBX, changes do not propogate to sccp_manager controlled phones - sccp_manager v14.5.0.4

I'm not 100% sure whether this is a FreePBX issue or a sccp_manager issue, as I only have SCCP phones and can't test fully by myself, but its fairly easy to reproduce in order to resolve.

To reproduce: Add a sound language to FreePBX under the Admin/Sound Languages module, then under Admin/Sound Languages/Settings change the 'default' language to something other than English. The "channel" language for the phones will remain in English, despite the default language being changed, regardless of restarting Asterisk/FreePBX or changing settings in asterisk.conf.

Workaround: Either remove and re-add the phone to the Phone Manager, or change the phone sound language in Phone Manager from "Default" to the target language.

Failure during SCCP Manager Install, cannot find chan-sccp

Hello,

I am attempting to install the Chan SCCP manager into an Asterisk/FreePBX system. The system is online, and the chan_sccp module is loaded. I have done the following:

  - [X] Built and Installed chan_sccp
  - [X] Setup the SCCP contents of /etc/asterisk
  - [X] Loaded firmware and xml files to /tftpboot
  - [X] Followed the instructions for setting up the realtime database
  - [X] Verified the tables exist
  - [X] verified the data in /etc/asterisk/extconfig.conf
  - [X] verified the data in /etc/asterisk/res_config_mysql.conf
  - [X] Manually added and removed data from the device and line tables

Phones are provisioning via SCCP, but I cannot manage the lines via the FreePBX GUI. After all of these attempts I am still greeted with the error below. If someone could point me in the right direction to get this running I would be very appreciative.

image

Asterisk: 16.21.1
DB: MariaDB 10.3.31
PHP: 7.0.1
SCCP: Latest from Repo Releases
SCCP Manager: 14.2

14.4.0.1 error during upgrade

PDOException (42000)
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'IF EXISTS _description, DROP COLUMN IF EXISTS _loginname, DROP COLUMN IF EXISTS ' at line 1

Generated Cisco phone XML configuration files invalid

sccp_manager version: 14.3.0.30
7945 firmware: SCCP45.9-4-2SR3-1S

Hi,
XML files generated via sccp_manager appear to use 'on' and 'off' for options where a boolean is expected. I'm unsure if it is my specific version of firmware on the phones themselves that is unable to interpret this.

I have tried both Cisco 7945 and Cisco 7940 IP phones. The 7945 boots but some settings on the phone (that are set by the XML file) are wrong, and logs a error interpreting the XML file. The 7940 doesn't boot at all, just keeps requesting the XML file from tftp server.

Opening the files and replacing all instances of 'on' and 'off' with 1 and 0 respectively fixes this entirely.

Every example configuration file I can find for these phones online uses 1 and 0 (including the template files in this repo for the phones I'm using, see conf/SEP0000000000.cnf.xml_796x_template)

SCCP extensions tab disappears from FreePBX Extensions module

After a certain period of time, notably after doing module updates, the SCCP extensions tab seems to disappear from the main FreePBX extensions page. Seems as though after module updates, the hook is being removed from the Extensions page.

As a result, you can no longer add SCCP extensions. If you do so, you get an error when you attempt an add due to a "null value". Existing extensions still function normally.

The only way I've found to fix this is to uninstall the module and reinstall the module. Unfortunately this also wipes out the SCCP device database and puts a new blank one in place, disconnecting all SCCP extensions.

undefined index: ntp_config enabled error when saving device in sccp-manager

image

I am using the latest version 14.3.0.30
when adding a device and try to save I get the above error, which started all of the sudden! I was able to add devices before successfully using the same version. I restarted the freepbx and still no luck.
the error:
undefined index: ntp_config enabled
File:/var/www/html/admin/modules/sccp_manager/sccpManClasses/xmlinterface.class.php:235

HTTP Country Locale Phone Provisioning Issue

Hello All:

I am trying to setup HTTP provisioning instead of TFTP due to decreasing the Cisco phone's boot-up time. I am not sure whether to post this issue here at sccp_manager or under provision_sccp, but the two are closely connected to each other.

To start off, I have installed chan_sccp, sccp_manager, and provision_sccp in that order on a FreePBX 16 system with Asterisk 16. The Default Device Language has been set to English_United_States and the Network Country is United_States.

The phones can get most of the files (firmware, config, ringtones, wallpapers, etc.) via HTTP requests, but are unable to pull down the country-specific files, specifically the /United_States/g3-tones.xml file. Between the index.php file and the index.cnf file located in the /tftpboot folder, the Apache webserver is providing a link to the phone to g3-tones.xml at /tftpboot/locales/languages/United_States/g3-tones.xml but this should be at /tftpboot/locales/countries/United_States/g3-tones.xml

Here's where it becomes more difficult: sccp_manager is looking for the language and country files to be located inside the 'locales' folder of /tftpboot to generate the device configuration files with, while provision_sccp is using a 'language' file (and no 'country' file) directly on the root of the /tftpboot folder (not nested within the 'locales' folder).

No matter what I change in the index.cnf file, I cannot modify or reroute the countries request (g3-tones.xml) from the phone to the 'countries' folder located in the 'locales' folder. And yet, with debug set to on, the 'countries' and 'languages' values are at the correct location of /tftpboot/locales/countries and /tftpboot/locales/languages respectively.

I also noticed when setting the default_language in index.cnf, the value is /tftpboot/locales/English_United_States but should be /tftpboot/locales/languages/English_United_States. Adding a languages/ to the beginning when setting this value seems to correct this.

On the other hand, the TFTP re-writes/map file works as expected and I can always provision the files via TFTP; though much slower since the phones try to connect via HTTP first, then TFTP second.

So far, the current workaround I came up with is to temporarily disable the tftpboot.conf Apache webserver, forcing the phones to update the initial firmware and config file over TFTP initially, and then re-enable the tftpboot.conf Apache webserver. It appears that the phones only request the locale information once a firmware has been changed or updated, and I am sure the phones will operate just fine without the locale information downloaded; but it would be nice to have the best of both worlds.

I do realize that there is an open request to port the index.php file into an Apache mod_rewrite webserver config file, but is there anyone able to take a look at this issue to get it work with the current index.php/index.cnf method for now to work with both sccp_manager and provision_sccp together?

Below are some config files and debug output if it helps anyone with the issue:

tftpboot.conf

Listen 6970
<VirtualHost *:6970>
    DocumentRoot "/tftpboot"
    ErrorLog /var/log/httpd/tftp.error.log
    CustomLog /var/log/httpd/tftp.access.log combined

    <Directory /tftpboot>
      Options FollowSymlinks
      AllowOverride none
      Require all granted
      RewriteEngine on
      RewriteBase "/"
      RewriteCond "/tftpboot/%{REQUEST_FILENAME}" !-f
      RewriteCond "/tftpboot/%{REQUEST_FILENAME}" !-d
      RewriteRule "(.*)" "index.php?id=$1" [PT,QSA]
    </Directory>

    <Directory />
        Options FollowSymLinks
        AllowOverride all
        Require all granted
    </Directory>

    <Location />
      Require all granted
    </Location>

    Alias / "/tftpboot/"
</VirtualHost>

index.cnf

[main]
tftproot = /tftpboot
firmware = firmware
settings = settings
locales = locales
languages = languages
templates = templates
dialplan = dialplan
softkey = softkey
ringtones = ringtones
wallpapers = wallpapers
countries = countries
debug = 1
log = /tftpboot/provision.log
default_language = languages/English_United_States

index.php

<?php
//
// Written by Alex / github.com/PhantomVI
//

$base_path = realpath($_SERVER['DOCUMENT_ROOT']);
$base_config = Array(
    'debug' => 1,
    'tftproot' => $base_path,
    'default_language' => 'English_United_States',
    'firmware' => 'firmware', 'settings' => 'settings', 'wallpapers' => 'wallpapers', 'ringtones' => 'ringtones',
    'locales' => 'locales', 'countries' => 'countries', 'languages' => 'languages'
);
$base_tree = Array('settings' => 'tftproot', 'wallpapers' => 'tftproot', 'ringtones'=>'tftproot',
                   'locales' => 'tftproot',  'firmware' => 'tftproot', 'languages' => 'locales', 
                   'countries' => 'locales', 'default_language' => 'locales');

# Merge config
$ini_array = parse_ini_file('index.cnf');
if (!empty($ini_array)) {
    $config = array_merge($base_config, $ini_array);
}

foreach ($base_tree as $key => $value) {
     if (!empty($config[$key])) {
        if (substr($config[$key],0,1) != "/") {
             $config[$key] = $config[$value].'/'.$config[$key];
         }
     }
}
 
#$config['tftproot'] = (!empty($config['tftproot'])) ? $config['tftproot'] : '/tftpboot';

# Fixup debug
$print_debug = (!empty($config['debug'])) ? $config['debug'] : 'off';
$print_debug = ($print_debug == 1) ? 'on' : $print_debug;

# Parse request
$request = $_REQUEST;
$req_file = !empty($request['id']) ? $request['id'] : '';

# directory content extensions map
$fw_suffix = array('.bin', '.loads', '.sbn', '.sb2', '.sbin', '.zz', '.zup', '.loads');

//$settings_suffix = array('cnf.xml');

$ringtones_list = array('distinctive.xml', 'ringlist.xml','distinctiveringlist.xml');
$ringtones_suffix = array('.raw', '.pcm', '.rwb');

$locale_list = array('-dictionary.', 'dictionary-ext.', '-dictionary.utf-8.', '-kate.xml', '-font.xml', '-font.dat','-tones.xml',
                     'be-sccp.jar', 'tc-sccp.jar', 'td-sccp.jar', 'ipc-sccp.jar', 'mk-sccp.jar', '_locale.loads', 'i-button-help.xml',
                     'tc-sip.jar', 'td-sipp.jar');

# Show debug output
if ($print_debug == 'on') {
    print_r("<br> Config:<pre>");
    print_r($config);
    print("</pre>");
    print_r("<br> Request:<br><pre>");
    print_r($request);
    print("</pre>");
}

# Start parsing the request
$req_file_full_path = '' ;

if (!empty($req_file)) {
    $signed = FALSE;
    $req_data_ar = explode('/', $req_file);
    $req_data_len = count($req_data_ar) - 1;

    $orig_req_file_name = end($req_data_ar);
    $req_file_name = $orig_req_file_name;
    
    if (strpos('.sgn;', strtolower($orig_req_file_name).';') !== FALSE) {		// handle signed files
        $signed = TRUE;
        $req_file_name = basename($orig_req_file_name, '.sgn');				// strip signed part
    }

        
    if (file_exists($config['tftproot'].'/'.$req_file_name))				// prevent "/../...//" browsing - (eliminate back door)
    {
        $req_file_full_path = $config['tftproot'].'/'.$req_file_name;
    } 
    else 
    { 
        $tmp_file = explode('.', $req_file_name);
        
        if (strpos_array($req_file_name, $fw_suffix,'any') !== FALSE) {			// Firmware file was requested
            $firmware_list = find_all_files($config['firmware']);
            $pos2 = strpos_array($firmware_list, $req_file_name, 'any'); 		// case unsensitive
            if ($pos2 !== FALSE) { 							// Request Firmware 
                $req_file_full_path = $firmware_list[$pos2];
            }
            if ($print_debug == 'on'){ print_r('<br>Requested Firmware: '. $req_file_full_path. '<br>');}
        }
        else 
        {
            $tmp_file = '';

            //if (strpos_array($req_file_name, $settings_suffix, 'any') !==  FALSE) { 	// Request Settings
            if (strpos(strtolower($req_file_name), '.cnf.xml') !==  FALSE) {		// Request Settings
                $tmp_file = $config['settings'].'/'.$req_file_name;
            }
            else if (strpos(strtolower($req_file), 'desktops/') !== FALSE) { 		// Request Wallpapers
                $tmp_file = $config['wallpapers'].'/'. $req_data_ar[$req_data_len-1].'/'. $req_file_name;
            }
            else if (strpos_array($ringtones_list, $req_file_name, 'any') !== FALSE) {	// Request RingTones
                $tmp_file = $config['ringtones'].'/'.$req_file_name;
                if (!file_exists($tmp_file)) {
                    $tmp_file = $config['ringtones'].'/ringlist.xml';
                }
            } 
            else if(strpos_array($req_file_name, $ringtones_suffix,'any') !== FALSE) {			// Firmware file was requested
                $tmp_file = $config['ringtones'].'/'.$req_file_name;
            }
            else if (strpos_array($req_file, $locale_list, 'any') !== FALSE) { 		// Request Languages
                if (!empty($req_data_ar[$req_data_len-1])) {
                    $tmp_file = $config['languages'].'/'. $req_data_ar[$req_data_len-1].'/'. $req_file_name;
                } else {
                    $tmp_file = $config['default_language'].'/'. $req_file_name;
                }
            }
            
/*
            else if (strpos(strtolower($req_file), '-tones.xml') !== FALSE) { 		// Request Countries
                $tmp_file = $config['countries'].'/'. $req_data_ar[$req_data_len-1].'/'. $req_data_ar[$req_data_len];
            }
 
            else if (strpos(strtolower($req_file), '-dictionary.') !== FALSE) { 		// Request Countries
                $tmp_file = $config['languages'].'/'. $req_data_ar[$req_data_len-1].'/'. $req_data_ar[$req_data_len];
            }

            else if (strpos_array($req_file, $locale_list, 'any') !== FALSE) { 		// Request Languages
                $tmp_file = $config['languages'].'/'. $req_data_ar[$req_data_len-1].'/'. $req_data_ar[$req_data_len];
            }

            else if (strpos(strtolower($req_file), '-dictionary.jar') !== FALSE) { 	// Request Countries
                $tmp_file = $config['languages'].'/'. $req_data_ar[$req_data_len-1].'/'. $req_data_ar[$req_data_len];
            }
*/
            if ($print_debug == 'on'){ print_r('<br>File : '. $orig_req_file_name. ' not found.<br>');}
            if (empty($tmp_file)) { 
                if (!empty($config['log'])) { to_log(array('GET ('.$req_file.'):'.$orig_req_file_name, 'no match found'),'E',$config['log']); }
                header("HTTP/1.0 404 Not Found");
                die('ERROR: no match found.');
            }
            $req_file_full_path = $tmp_file;
        }
    }
    if (!empty($config['log'])) { to_log(array('GET ('.$req_file.') :'.$orig_req_file_name, 'Remap :'.$req_file_full_path),'i',$config['log']); }
    
    if (!empty($req_file_full_path)) { 
        if ($signed) {
            $req_file_full_path .= '.sgn';
        }
        if (!file_exists($req_file_full_path)) { 
            header("HTTP/1.0 404 Not Found");
            die('Could not find:'. $req_file_full_path);
        }
        if ($print_debug == 'on'){ print_r('<br>Returning: '. $req_file_full_path. '<br>');}
        file_force_download($req_file_full_path);
    } 
} 

/*
 * Helper functiosn 
 */
function file_force_download($file) {
  if (file_exists($file)) {

    if (ob_get_level()) {
      ob_end_clean();
    }

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));

    if ($fd = fopen($file, 'rb')) {
      while (!feof($fd)) {
        print fread($fd, 1024);
      }
      fclose($fd);
    }
    exit;
  }
}

/*
 *  Founds any string from array in array 
 */
function strpos_array($haystack, $needles, $mode='any') {
    if (is_array($needles)) {
        foreach ($needles as $str) {
            $pos = strpos_array($haystack, $str, $mode);
            if ($pos !== FALSE) {
                return $pos;
            }
        }
    } else {
        if (is_array($haystack)) {
            foreach ($haystack as $key => $subtr) {
                $pos = strpos_array($subtr, $needles, $mode);
                if ($pos !== FALSE) {
                    return $key;
                }
            }
            return FALSE;
        } else {
            if ($mode == 'any') {
                return strpos(strtolower($haystack), strtolower($needles));
            } else {
                if ($mode == 'full') {
                    if ($haystack == $needles) {
                        return 0;
                    } else {
                        return FALSE;
                    }
                } else {
                    return strpos($haystack, $needles);
                }
                    
            }
        }
    }
    return FALSE;
}

function to_log($text, $level='i', $file) {
    switch (strtolower($level)) {
        case 'e':
        case 'error':
            $level='ERROR';
            break;
        case 'i':
        case 'info':
            $level='INFO';
            break;
        case 'd':
        case 'debug':
            $level='DEBUG';
            break;
        default:
            $level='INFO';
    }
    if (is_array($text)) {
        $to_log = '';
        foreach ($text as $value) {
           $to_log .= $value."\t";
        }
    } else {
        $to_log .= $text;
    }
    $_txt = date('d.m.Y h:i:s')."\t[".$level."]\t ".$to_log."\n"; 
    if (empty($file)) {
        error_log($_txt, 0);
    } else {
        error_log($_txt, 3, $file);    
    }
}

function find_all_files($dir, $file_mask=null, $mode='full'){

    $result = NULL;
    if (empty($dir) || (!file_exists($dir))) {
        return $result;
    }

    $root = scandir($dir);
    foreach($root as $value) {
        if($value === '.' || $value === '..') {continue;}
        if(is_file("$dir/$value")) {
            $filter = FALSE;
            if (!empty($file_mask)) {
                if (is_array($file_mask)) {
                    foreach ($file_mask as $k){
                        if (strpos(strtolower($value), strtolower($k)) !== FALSE) {$filter = true;}
                    }
                } else {
                    if (strpos(strtolower($value), strtolower($file_mask)) !== FALSE) {$filter = true;}
                }
              } else {$filter = true;}
            if ($filter) {
                if ($mode=='fileonly'){
                    $result[]="$value";
                } else {
                    $result[]="$dir/$value";
                }
            } else {$result[]=null;}
            continue;
        }
        $sub_fiend = find_all_files("$dir/$value", $file_mask, $mode);
        if (!empty($sub_fiend)) {
            foreach($sub_fiend as $sub_value) {
                if (!empty($sub_value)) {
                    $result[]=$sub_value;
                }
            }
        }
    }
    return $result;
} 

/var/log/httpd/tftp.access.log

10.98.1.5 - - [28/Mar/2022:11:30:19 -0400] "GET /term61.default.loads HTTP/1.1" 200 648 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:30:20 -0400] "GET /jar41sccp.9-4-2ES26.sbn HTTP/1.1" 200 1630052 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:30:26 -0400] "GET /cnu41.9-4-2ES26.sbn HTTP/1.1" 200 556833 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:30:29 -0400] "GET /apps41.9-4-2ES26.sbn HTTP/1.1" 200 3157527 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:30:40 -0400] "GET /dsp41.9-4-2ES26.sbn HTTP/1.1" 200 562693 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:30:42 -0400] "GET /cvm41sccp.9-4-2ES26.sbn HTTP/1.1" 200 2219477 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:32:25 -0400] "GET /CTLSEP001E4A93748B.tlv HTTP/1.1" 404 688 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:32:25 -0400] "GET /ITLSEP001E4A93748B.tlv HTTP/1.1" 404 688 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:32:25 -0400] "GET /ITLFile.tlv HTTP/1.1" 404 666 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:32:26 -0400] "GET /SEP001E4A93748B.cnf.xml HTTP/1.1" 200 3373 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:32:54 -0400] "GET /SCCP41.9-4-2SR3-1S.loads HTTP/1.1" 200 652 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:32:57 -0400] "GET /jar41sccp.9-4-2ES26.sbn HTTP/1.1" 200 1630052 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:33:04 -0400] "GET /cnu41.9-4-2ES26.sbn HTTP/1.1" 200 556833 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:33:08 -0400] "GET /apps41.9-4-2ES26.sbn HTTP/1.1" 200 3157527 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:33:20 -0400] "GET /dsp41.9-4-2ES26.sbn HTTP/1.1" 200 562693 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:33:25 -0400] "GET /cvm41sccp.9-4-2ES26.sbn HTTP/1.1" 200 2219477 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:34:43 -0400] "GET /CTLSEP001E4A93748B.tlv HTTP/1.1" 404 688 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:34:43 -0400] "GET /ITLSEP001E4A93748B.tlv HTTP/1.1" 404 688 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:34:43 -0400] "GET /ITLFile.tlv HTTP/1.1" 404 666 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:34:43 -0400] "GET /SEP001E4A93748B.cnf.xml HTTP/1.1" 200 3373 "-" "-"
10.98.1.5 - - [28/Mar/2022:11:34:51 -0400] "GET /English_United_States/mk-sccp.jar HTTP/1.1" 200 58726 "-" "-"
-->10.98.1.5 - - [28/Mar/2022:11:34:53 -0400] "GET /United_States/g3-tones.xml HTTP/1.1" 404 729 "-" "-"<--

/tftpboot/provision.log

28.03.2022 03:25:03	[ERROR]	 GET (CTLSEP001E4A93748B.tlv):CTLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:25:03	[ERROR]	 GET (ITLSEP001E4A93748B.tlv):ITLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:25:03	[ERROR]	 GET (ITLFile.tlv):ITLFile.tlv	no match found	
28.03.2022 03:25:03	[INFO]	 GET (ToveLow-Habits.raw) :ToveLow-Habits.raw	Remap :/tftpboot/ringtones/ToveLow-Habits.raw	
28.03.2022 03:25:04	[INFO]	 GET (SEP001E4A93748B.cnf.xml) :SEP001E4A93748B.cnf.xml	Remap :/tftpboot/settings/SEP001E4A93748B.cnf.xml	
28.03.2022 03:27:14	[ERROR]	 GET (CTLSEP001E4A93748B.tlv):CTLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:27:15	[ERROR]	 GET (ITLSEP001E4A93748B.tlv):ITLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:27:15	[ERROR]	 GET (ITLFile.tlv):ITLFile.tlv	no match found	
28.03.2022 03:27:15	[INFO]	 GET (ToveLow-Habits.raw) :ToveLow-Habits.raw	Remap :/tftpboot/ringtones/ToveLow-Habits.raw	
28.03.2022 03:27:16	[INFO]	 GET (SEP001E4A93748B.cnf.xml) :SEP001E4A93748B.cnf.xml	Remap :/tftpboot/settings/SEP001E4A93748B.cnf.xml	
28.03.2022 03:28:26	[ERROR]	 GET (CTLSEP001E4A93748B.tlv):CTLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:28:26	[ERROR]	 GET (ITLSEP001E4A93748B.tlv):ITLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:28:26	[ERROR]	 GET (ITLFile.tlv):ITLFile.tlv	no match found	
28.03.2022 03:28:26	[ERROR]	 GET (CTLSEP001E4A93748B.tlv):CTLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:28:27	[ERROR]	 GET (ITLSEP001E4A93748B.tlv):ITLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:28:27	[ERROR]	 GET (ITLFile.tlv):ITLFile.tlv	no match found	
28.03.2022 03:28:27	[ERROR]	 GET (CTLSEP001E4A93748B.tlv):CTLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:28:27	[ERROR]	 GET (ITLSEP001E4A93748B.tlv):ITLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:28:27	[ERROR]	 GET (ITLFile.tlv):ITLFile.tlv	no match found	
28.03.2022 03:28:28	[INFO]	 GET (SEP001E4A93748B.cnf.xml) :SEP001E4A93748B.cnf.xml	Remap :/tftpboot/settings/SEP001E4A93748B.cnf.xml	
28.03.2022 03:28:29	[INFO]	 GET (SEP001E4A93748B.cnf.xml) :SEP001E4A93748B.cnf.xml	Remap :/tftpboot/settings/SEP001E4A93748B.cnf.xml	
28.03.2022 03:28:32	[INFO]	 GET (SEP001E4A93748B.cnf.xml) :SEP001E4A93748B.cnf.xml	Remap :/tftpboot/settings/SEP001E4A93748B.cnf.xml	
28.03.2022 03:30:19	[INFO]	 GET (term61.default.loads) :term61.default.loads	Remap :/tftpboot/firmware/7941/term61.default.loads	
28.03.2022 03:30:20	[INFO]	 GET (jar41sccp.9-4-2ES26.sbn) :jar41sccp.9-4-2ES26.sbn	Remap :/tftpboot/firmware/7941/jar41sccp.9-4-2ES26.sbn	
28.03.2022 03:30:26	[INFO]	 GET (cnu41.9-4-2ES26.sbn) :cnu41.9-4-2ES26.sbn	Remap :/tftpboot/firmware/7941/cnu41.9-4-2ES26.sbn	
28.03.2022 03:30:29	[INFO]	 GET (apps41.9-4-2ES26.sbn) :apps41.9-4-2ES26.sbn	Remap :/tftpboot/firmware/7941/apps41.9-4-2ES26.sbn	
28.03.2022 03:30:40	[INFO]	 GET (dsp41.9-4-2ES26.sbn) :dsp41.9-4-2ES26.sbn	Remap :/tftpboot/firmware/7941/dsp41.9-4-2ES26.sbn	
28.03.2022 03:30:42	[INFO]	 GET (cvm41sccp.9-4-2ES26.sbn) :cvm41sccp.9-4-2ES26.sbn	Remap :/tftpboot/firmware/7941/cvm41sccp.9-4-2ES26.sbn	
28.03.2022 03:32:25	[ERROR]	 GET (CTLSEP001E4A93748B.tlv):CTLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:32:25	[ERROR]	 GET (ITLSEP001E4A93748B.tlv):ITLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:32:25	[ERROR]	 GET (ITLFile.tlv):ITLFile.tlv	no match found	
28.03.2022 03:32:26	[INFO]	 GET (SEP001E4A93748B.cnf.xml) :SEP001E4A93748B.cnf.xml	Remap :/tftpboot/settings/SEP001E4A93748B.cnf.xml	
28.03.2022 03:32:54	[INFO]	 GET (SCCP41.9-4-2SR3-1S.loads) :SCCP41.9-4-2SR3-1S.loads	Remap :/tftpboot/firmware/7941/SCCP41.9-4-2SR3-1S.loads	
28.03.2022 03:32:57	[INFO]	 GET (jar41sccp.9-4-2ES26.sbn) :jar41sccp.9-4-2ES26.sbn	Remap :/tftpboot/firmware/7941/jar41sccp.9-4-2ES26.sbn	
28.03.2022 03:33:04	[INFO]	 GET (cnu41.9-4-2ES26.sbn) :cnu41.9-4-2ES26.sbn	Remap :/tftpboot/firmware/7941/cnu41.9-4-2ES26.sbn	
28.03.2022 03:33:08	[INFO]	 GET (apps41.9-4-2ES26.sbn) :apps41.9-4-2ES26.sbn	Remap :/tftpboot/firmware/7941/apps41.9-4-2ES26.sbn	
28.03.2022 03:33:20	[INFO]	 GET (dsp41.9-4-2ES26.sbn) :dsp41.9-4-2ES26.sbn	Remap :/tftpboot/firmware/7941/dsp41.9-4-2ES26.sbn	
28.03.2022 03:33:25	[INFO]	 GET (cvm41sccp.9-4-2ES26.sbn) :cvm41sccp.9-4-2ES26.sbn	Remap :/tftpboot/firmware/7941/cvm41sccp.9-4-2ES26.sbn	
28.03.2022 03:34:43	[ERROR]	 GET (CTLSEP001E4A93748B.tlv):CTLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:34:43	[ERROR]	 GET (ITLSEP001E4A93748B.tlv):ITLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:34:43	[ERROR]	 GET (ITLFile.tlv):ITLFile.tlv	no match found	
28.03.2022 03:34:43	[INFO]	 GET (SEP001E4A93748B.cnf.xml) :SEP001E4A93748B.cnf.xml	Remap :/tftpboot/settings/SEP001E4A93748B.cnf.xml	
28.03.2022 03:34:51	[INFO]	 GET (English_United_States/mk-sccp.jar) :mk-sccp.jar	Remap :/tftpboot/locales/languages/English_United_States/mk-sccp.jar	
28.03.2022 03:34:53	[INFO]	 GET (United_States/g3-tones.xml) :g3-tones.xml	Remap :/tftpboot/locales/languages/United_States/g3-tones.xml	
28.03.2022 03:36:14	[INFO]	 GET (English_United_States/mk-sccp.jar) :mk-sccp.jar	Remap :/tftpboot/locales/languages/English_United_States/mk-sccp.jar	
28.03.2022 03:36:31	[INFO]	 GET (United_States/g3-tones.xml) :g3-tones.xml	Remap :/tftpboot/locales/languages/United_States/g3-tones.xml	
28.03.2022 03:36:31	[ERROR]	 GET (favicon.ico):favicon.ico	no match found	
28.03.2022 03:36:35	[ERROR]	 GET (CTLSEP001E4A93748B.tlv):CTLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:36:35	[ERROR]	 GET (ITLSEP001E4A93748B.tlv):ITLSEP001E4A93748B.tlv	no match found	
28.03.2022 03:36:35	[ERROR]	 GET (ITLFile.tlv):ITLFile.tlv	no match found	
28.03.2022 03:36:35	[INFO]	 GET (SEP001E4A93748B.cnf.xml) :SEP001E4A93748B.cnf.xml	Remap :/tftpboot/settings/SEP001E4A93748B.cnf.xml	
28.03.2022 03:36:40	[INFO]	 GET (United_States/g3-tones.xml) :g3-tones.xml	Remap :/tftpboot/locales/languages/United_States/g3-tones.xml	
28.03.2022 04:37:23	[INFO]	 GET (United_States/g3-tones.xml) :g3-tones.xml	Remap :/tftpboot/locales/languages/United_States/g3-tones.xml

/var/log/messages

Mar 28 11:38:42 freepbx in.tftpd[2080]: RRQ from 10.98.1.5 filename term61.default.loads remapped to firmware/7941/term61.default.loads
Mar 28 11:38:42 freepbx in.tftpd[2080]: Client 10.98.1.5 finished term61.default.loads
Mar 28 11:38:44 freepbx in.tftpd[2081]: RRQ from 10.98.1.5 filename jar41sccp.9-4-2ES26.sbn remapped to firmware/7941/jar41sccp.9-4-2ES26.sbn
Mar 28 11:38:47 freepbx in.tftpd[2081]: Client 10.98.1.5 finished jar41sccp.9-4-2ES26.sbn
Mar 28 11:38:52 freepbx in.tftpd[2082]: RRQ from 10.98.1.5 filename cnu41.9-4-2ES26.sbn remapped to firmware/7941/cnu41.9-4-2ES26.sbn
Mar 28 11:38:53 freepbx in.tftpd[2082]: Client 10.98.1.5 finished cnu41.9-4-2ES26.sbn
Mar 28 11:38:56 freepbx in.tftpd[2083]: RRQ from 10.98.1.5 filename apps41.9-4-2ES26.sbn remapped to firmware/7941/apps41.9-4-2ES26.sbn
Mar 28 11:39:02 freepbx in.tftpd[2083]: Client 10.98.1.5 finished apps41.9-4-2ES26.sbn
Mar 28 11:39:10 freepbx in.tftpd[2119]: RRQ from 10.98.1.5 filename dsp41.9-4-2ES26.sbn remapped to firmware/7941/dsp41.9-4-2ES26.sbn
Mar 28 11:39:11 freepbx in.tftpd[2119]: Client 10.98.1.5 finished dsp41.9-4-2ES26.sbn
Mar 28 11:39:14 freepbx in.tftpd[2120]: RRQ from 10.98.1.5 filename cvm41sccp.9-4-2ES26.sbn remapped to firmware/7941/cvm41sccp.9-4-2ES26.sbn
Mar 28 11:39:18 freepbx in.tftpd[2120]: Client 10.98.1.5 finished cvm41sccp.9-4-2ES26.sbn
Mar 28 11:41:05 freepbx in.tftpd[2244]: RRQ from 10.98.1.5 filename CTLSEP001E4A93748B.tlv remapped to settings/CTLSEP001E4A93748B.tlv
Mar 28 11:41:05 freepbx in.tftpd[2244]: Client 10.98.1.5 File not found settings/CTLSEP001E4A93748B.tlv
Mar 28 11:41:06 freepbx in.tftpd[2245]: RRQ from 10.98.1.5 filename ITLSEP001E4A93748B.tlv remapped to settings/ITLSEP001E4A93748B.tlv
Mar 28 11:41:06 freepbx in.tftpd[2245]: Client 10.98.1.5 File not found settings/ITLSEP001E4A93748B.tlv
Mar 28 11:41:06 freepbx in.tftpd[2246]: RRQ from 10.98.1.5 filename ITLFile.tlv remapped to settings/ITLFile.tlv
Mar 28 11:41:06 freepbx in.tftpd[2246]: Client 10.98.1.5 File not found settings/ITLFile.tlv
Mar 28 11:41:06 freepbx in.tftpd[2247]: RRQ from 10.98.1.5 filename SEP001E4A93748B.cnf.xml remapped to settings/SEP001E4A93748B.cnf.xml
Mar 28 11:41:06 freepbx in.tftpd[2247]: Client 10.98.1.5 finished SEP001E4A93748B.cnf.xml
Mar 28 11:41:34 freepbx in.tftpd[2254]: RRQ from 10.98.1.5 filename SCCP41.9-4-2SR3-1S.loads remapped to firmware/7941/SCCP41.9-4-2SR3-1S.loads
Mar 28 11:41:34 freepbx in.tftpd[2254]: Client 10.98.1.5 finished SCCP41.9-4-2SR3-1S.loads
Mar 28 11:41:37 freepbx in.tftpd[2255]: RRQ from 10.98.1.5 filename jar41sccp.9-4-2ES26.sbn remapped to firmware/7941/jar41sccp.9-4-2ES26.sbn
Mar 28 11:41:40 freepbx in.tftpd[2255]: Client 10.98.1.5 finished jar41sccp.9-4-2ES26.sbn
Mar 28 11:41:47 freepbx in.tftpd[2257]: RRQ from 10.98.1.5 filename cnu41.9-4-2ES26.sbn remapped to firmware/7941/cnu41.9-4-2ES26.sbn
Mar 28 11:41:48 freepbx in.tftpd[2257]: Client 10.98.1.5 finished cnu41.9-4-2ES26.sbn
Mar 28 11:41:52 freepbx in.tftpd[2258]: RRQ from 10.98.1.5 filename apps41.9-4-2ES26.sbn remapped to firmware/7941/apps41.9-4-2ES26.sbn
Mar 28 11:41:58 freepbx in.tftpd[2258]: Client 10.98.1.5 finished apps41.9-4-2ES26.sbn
Mar 28 11:42:09 freepbx in.tftpd[2294]: RRQ from 10.98.1.5 filename dsp41.9-4-2ES26.sbn remapped to firmware/7941/dsp41.9-4-2ES26.sbn
Mar 28 11:42:10 freepbx in.tftpd[2294]: Client 10.98.1.5 finished dsp41.9-4-2ES26.sbn
Mar 28 11:42:14 freepbx in.tftpd[2295]: RRQ from 10.98.1.5 filename cvm41sccp.9-4-2ES26.sbn remapped to firmware/7941/cvm41sccp.9-4-2ES26.sbn
Mar 28 11:42:18 freepbx in.tftpd[2295]: Client 10.98.1.5 finished cvm41sccp.9-4-2ES26.sbn
Mar 28 11:43:32 freepbx in.tftpd[2331]: RRQ from 10.98.1.5 filename CTLSEP001E4A93748B.tlv remapped to settings/CTLSEP001E4A93748B.tlv
Mar 28 11:43:32 freepbx in.tftpd[2331]: Client 10.98.1.5 File not found settings/CTLSEP001E4A93748B.tlv
Mar 28 11:43:32 freepbx in.tftpd[2332]: RRQ from 10.98.1.5 filename ITLSEP001E4A93748B.tlv remapped to settings/ITLSEP001E4A93748B.tlv
Mar 28 11:43:32 freepbx in.tftpd[2332]: Client 10.98.1.5 File not found settings/ITLSEP001E4A93748B.tlv
Mar 28 11:43:32 freepbx in.tftpd[2333]: RRQ from 10.98.1.5 filename ITLFile.tlv remapped to settings/ITLFile.tlv
Mar 28 11:43:32 freepbx in.tftpd[2333]: Client 10.98.1.5 File not found settings/ITLFile.tlv
Mar 28 11:43:33 freepbx in.tftpd[2334]: RRQ from 10.98.1.5 filename SEP001E4A93748B.cnf.xml remapped to settings/SEP001E4A93748B.cnf.xml
Mar 28 11:43:33 freepbx in.tftpd[2334]: Client 10.98.1.5 finished SEP001E4A93748B.cnf.xml
Mar 28 11:43:42 freepbx in.tftpd[2341]: RRQ from 10.98.1.5 filename English_United_States/mk-sccp.jar remapped to locales/languages/English_United_States/mk-sccp.jar
Mar 28 11:43:43 freepbx in.tftpd[2341]: Client 10.98.1.5 finished English_United_States/mk-sccp.jar
Mar 28 11:43:45 freepbx in.tftpd[2342]: RRQ from 10.98.1.5 filename United_States/g3-tones.xml remapped to locales/countries/United_States/g3-tones.xml
Mar 28 11:43:45 freepbx in.tftpd[2342]: Client 10.98.1.5 finished United_States/g3-tones.xml

Thank you everyone :)

Device SEP ID Field

When creating a new device it only asks for the MAC address of the device and then proceeds to call it SEPxxxxxxx in the list and displays it in this strange 4,4,4 representation when you click the device edit button. There are some things that trouble me a little with this.

  1. If MAC representation is what we wanted we would expect : as the separator (right).
  2. Some SCCP devices don't use SEPxxxxxx as their identifier, for example
    • The Voice Gateways (VG224 / VG248), are represented as VGxxxxxxxxx (and for each attached analog phone, they tack on 2 more digits to the address).
    • The two port Ata186 / Ata188 do the same and their references start with ATAxxxxxxxxx (And the last digit is altered depending on the port used).
    • There might be others i am currently not aware of.

image

Proposed Solution:

  • Call the field "Device Identifier" (dropping the SEP part)
  • For the ATA /VG it seems to change the representation in the list automatically, so that part already works. But the column is called Device SEP ID (So mostly cosmetic)
  • To support multi port devices like ATA and VG it might be nice if you could auto generate all the entries based on the number of ports it has. For example on the VG248 you would have to manually add 48 VG Phone's manually. (Enhancement)

VLAN for PC port

My PFsense router/firewall is configured with Voice VLAN and Data VLAN. I don't see where in sccp-manager I can tell it to use the data VLAN on the pc port of the phone. Is this possible in sccp-manager/freepbx for cisco phones? if not is this considered in any future releases? I have the latest version 14.3.0.27
Thanks!

Missing SCCP tab in Extension edit page

There is missing SCCP tab on the Extension edit page, as well as on the page for creating a new extension SCCP.
This tab allows you to configure additional line options, as well as used codecs for a specific device.

how it looks on version from this git:
image

how it should be (version from PhantomVl git):
image

sccp manager version: 14.2.0.10
FreePBX version: 15.0.17.34
Asterisk version: 16.17.0

SCCP Info page:
image

Auto answer attempt on Cisco 7962 hangs entire pbx

Hello everyone (and Diederik!)
I have recently updated SCCP from 33da09010fa8b9f139fa302df5ac7776a297b0d7 to c1533a6b5ab5aa77fd55f432884a56d1c9601588 (quite a gap - ~2 years), because I was getting some dropped calls. That issue seems to be resolved, however just found out a new, serious one.
I have been using a custom extension to get auto answer mechanism on some phones, which effectively called this:
SCCP/4010/aa=2wb/ringer=silent
Now if try that, whole PBX hangs, and I have to killall asterisk to get it working again. Phones hang as well. Could you please tell me what logs to provide to help fix this?

Update error to 14.5.0.1

I have upgraded to the latest version 14.5.0.1 of sccp_manager.
I get errors and the installation fails:

root@odroidn2:~# fwconsole ma upgrade sccp_manager
No repos specified, using: [standard,stable] from last GUI settings

Starting module download from https://github.com/chan-sccp/sccp_manager/archive/refs/tags/v14.5.0.1.tar.gz ...
Processing
Downloading...
143/143 [============================] 100%
Finished downloading
Extracting...Done
Module https://github.com/chan-sccp/sccp_manager/archive/refs/tags/v14.5.0.1.tar.gz successfully downloaded
Updating tables sccpdevice, sccpline, sccpbuttonconfig, sccpdevmodel, sccpuser, sccpsettings...Done
PHP Fatal error: During class fetch: Uncaught Whoops\Exception\ErrorException: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/html/admin/modules/sccp_manager/sccpManTraits/ajaxHelper.php:731
Stack trace:
#0 /var/www/html/admin/functions.inc.php(118): Whoops\Run->handleError()
#1 /var/www/html/admin/functions.inc.php(118): include()
#2 [internal function]: fpbx_framework_autoloader()
#3 /var/www/html/admin/modules/sccp_manager/Sccp_manager.class.php(85): spl_autoload_call()
#4 /var/www/html/admin/libraries/BMO/Self_Helper.class.php(167): include('/var/www/html/a...')
#5 /var/www/html/admin/libraries/BMO/Self_Helper.class.php(62): FreePBX\Self_Helper->loadObject()
#6 /var/www/html/admin/libraries/modulefunctions.class.php(2565): FreePBX\Self_Helper->injectClass()
#7 /var/www/html/admin/libraries/modulefunctions.class.php(2039): module_functions->_runscripts()
#8 /var/www/html/admin/libraries/Console/Moduleadmin.class.php(444): module_functions->install()
#9 /var/www/html/admi in /var/www/html/admin/modules/sccp_manager/Sccp_manager.class.php on line 85
Whoops\Exception\ErrorException: During class fetch: Uncaught Whoops\Exception\ErrorException: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/html/admin/modules/sccp_manager/sccpManTraits/ajaxHelper.php:731
Stack trace:
#0 /var/www/html/admin/functions.inc.php(118): Whoops\Run->handleError()
#1 /var/www/html/admin/functions.inc.php(118): include()
#2 [internal function]: fpbx_framework_autoloader()
#3 /var/www/html/admin/modules/sccp_manager/Sccp_manager.class.php(85): spl_autoload_call()
#4 /var/www/html/admin/libraries/BMO/Self_Helper.class.php(167): include('/var/www/html/a...')
#5 /var/www/html/admin/libraries/BMO/Self_Helper.class.php(62): FreePBX\Self_Helper->loadObject()
#6 /var/www/html/admin/libraries/modulefunctions.class.php(2565): FreePBX\Self_Helper->injectClass()
#7 /var/www/html/admin/libraries/modulefunctions.class.php(2039): module_functions->_runscripts()
#8 /var/www/html/admin/libraries/Console/Moduleadmin.class.php(444): module_functions->install()
#9 /var/www/html/admi in file /var/www/html/admin/modules/sccp_manager/Sccp_manager.class.php on line 85
Stack trace:

  1. Whoops\Exception\ErrorException->() /var/www/html/admin/modules/sccp_manager/Sccp_manager.class.php:85
  2. Whoops\Run->handleError() /var/www/html/admin/libraries/Composer/vendor/filp/whoops/src/Whoops/Run.php:383
  3. Whoops\Run->handleShutdown() [internal]:0
    Updating Hooks...PHP Fatal error: During class fetch: Uncaught Whoops\Exception\ErrorException: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/html/admin/modules/sccp_manager/sccpManTraits/ajaxHelper.php:731

The button function in DeviceButtons cannot be removed.

sccp_manager version: 14.3.0.30
FreePBX 16

You cannot remove a button function in DeviceButtons - set it to empty or change the function type. After saving the settings, the buttons still have their previous functions assigned to them.
Adding and saving functions to empty buttons works fine.

Various DND settings not saved or cause chan-sccp error

Reported by @rofferman

  1. Not able to turn on DND in Device Configuration? I turn it on but when I save and go back to the device it is still off.
  2. chan-sccp reports error with dnd setting

ERROR[6720]: sccp_config.c:588 sccp_config_object_setValue: SCCP: obsolete config param at dnd='reject' in line 58
(OBSOLETE) Turn on the dnd softkey for all devices. Valid values are 'off', 'on' (replaced by in favor of 'dndFeature').

Callgroup and Pickupgroup & Namedcallgroup and Namedpickupgroup

FreePBX does not have the ability to edit group data. why? it's a necessary tool. please add it.

This setting does not affect anything. Can you explain why it's here? Or what does she do?
DefPG

If the values are entered into the database, then for lines 108,133,134,135,136,147, Pickup and GroupPickup work fine
2022-01-29_02-46-03
sccp show line 133 everything is fine, shows correctly

Call Group                                     : 24
Pickup Group                                   : 24
Directed Pickup                                : on
Directed Pickup Context                        :
Pickup Mode Answer                             : on
Named Call Group                               : 24
Named Pickup Group                             : 24

sccp show line 160 NamedCallGroup and NamedPickupGroup show the value "NONE", although in the database (null) and accordingly all lines where in the database indicated (null) have the same group "NONE", which leads to the possibility to pickup all with this value. The solution to avoid this is to set the value of Directed Pickup to "off"
Why does "sccp show line" not output an empty value as in CallGroup or PickupGroup?

Call Group                                     :
Pickup Group                                   :
Directed Pickup                                : off
Directed Pickup Context                        :
Pickup Mode Answer                             : off
Named Call Group                               : NONE
Named Pickup Group                             : NONE

Cisco 8841 phone template

I have just bought an 8841 phone for use in sccp manager (that hasn't arrived yet), as I saw it was compatible in my phones list. The only worry I have is that it only shows 1 button when there are 10 for this model phone. I was wondering if this is expected and if the phones even work with chan SCCP and SCCP manager. I have the enterprise firmware and everything like that, as well as SIP being enabled in SCCP manager. The only other worry I have is not having the XML files.

image

Also, I tried to add a SIP phone as testing but I couldn't select the type, which is worrying me but I saw something about the MAC address defining this.

image

Sorry if this is all just worry on my part!!

collation is not in sync

Error when opening the phone manager page:

QLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation '='
File:/var/www/html/admin/modules/sccp_manager/sccpManClasses/dbinterface.class.php:150

(@dkgroot knows about this)

Bulk import/export of extensions/phones

A feature Bulk Handler module provides for extensions/DISs/routes would be nice to have.
The idea is to populate a csv file with required values (MAC, type, line, etc) and feed it to parser. Also, it should be able to export values in database back to csv.

Call Transfer Issue

Hello,

When I try to transfer a call by pressing the transfer soft button "Key is Not Active" is displayed on the screen.

I tried re-compiling from source with --enabled-advaned-functions, but to avail, still getting the same result on both a 7962 and 7975.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.