FreePBX / issue-tracker

The unified FreePBX issue tracker.
https://www.freepbx.org
GNU General Public License v3.0
8 stars 1 forks source link

[bug]: CDR(userfield) prefix ; added for some reason #388

Open gudge25 opened 1 month ago

gudge25 commented 1 month ago

FreePBX Version

FreePBX 16

Issue Description

Im adding PJSIP Header and setting CDR(userfield) same as PJSIP Header but for some reason ; is added to cdr userfield image

Operating Environment

Asterisk 20.5.2 No repos specified, using: [standard] from last GUI settings

+---------------------+------------+-----------------------------------+-------------+ | Module | Version | Status | License | +---------------------+------------+-----------------------------------+-------------+ | accountcodepreserve | 16.0.0.1 | Enabled | GPLv2 | | allowlist | | Not Installed (Locally available) | GPLv3+ | | announcement | 16.0.7 | Enabled | GPLv3+ | | api | 16.0.13 | Enabled | AGPLv3+ | | arimanager | 16.0.13 | Enabled | GPLv3+ | | asteriskinfo | 16.0.10 | Enabled | GPLv3+ | | asternic_cdr | 1.6.4 | Enabled | | | backup | 16.0.70 | Enabled | GPLv3+ | | blacklist | 16.0.21 | Enabled | GPLv3+ | | builtin | | Enabled | | | bulkhandler | 16.0.16 | Enabled | GPLv3+ | | calendar | 16.0.21 | Enabled | GPLv3+ | | callback | | Not Installed (Locally available) | GPLv3+ | | callforward | 16.0.6 | Enabled | AGPLv3+ | | callrecording | 16.0.21 | Enabled | AGPLv3+ | | callwaiting | 16.0.5 | Enabled | GPLv3+ | | cdr | 16.0.46.10 | Enabled | GPLv3+ | | cdrpro | | Not Installed (Locally available) | Commercial | | cel | 16.0.20 | Enabled | GPLv3+ | | certman | 16.0.22 | Enabled | AGPLv3+ | | cidlookup | 16.0.16 | Enabled | GPLv3+ | | cloudmigration | | Not Installed (Locally available) | Commercial | | conferences | 16.0.9 | Enabled | GPLv3+ | | contactmanager | 16.0.26.1 | Enabled | GPLv3+ | | core | 16.0.68.20 | Enabled | GPLv3+ | | customappsreg | 16.0.5 | Enabled | GPLv3+ | | customcontexts | 13.0.3.2 | Enabled | GPLv2+ | | dashboard | 16.0.21 | Enabled | AGPLv3+ | | daynight | 16.0.3 | Enabled | GPLv3+ | | dictate | 16.0.1 | Enabled | GPLv3+ | | directory | 16.0.3 | Enabled | GPLv3+ | | disa | 16.0.4 | Enabled | AGPLv3+ | | donotdisturb | 16.0.3 | Enabled | GPLv3+ | | dynroute | 16.0.4 | Enabled | GPLv3+ | | extensionsettings | 16.0.5 | Enabled | GPLv3+ | | fax | 16.0.13 | Enabled | GPLv3+ | | featurecodeadmin | 16.0.11 | Enabled | GPLv3+ | | filestore | 16.0.18 | Enabled | AGPLv3 | | findmefollow | 16.0.23 | Enabled | GPLv3+ | | firewall | 16.0.57.6 | Enabled | AGPLv3+ | | framework | 16.0.40.8 | Enabled | GPLv2+ | | fw_langpacks | 16.0.1 | Enabled | GPLv3+ | | iaxsettings | | Not Installed (Locally available) | AGPLv3 | | infoservices | 16.0.2 | Enabled | GPLv2+ | | irc | | Not Installed (Locally available) | GPLv3+ | | ivr | 16.0.9 | Enabled | GPLv3+ | | languages | 16.0.4 | Enabled | GPLv3+ | | logfiles | 16.0.7 | Enabled | GPLv3+ | | manager | 16.0.23 | Enabled | GPLv2+ | | miscapps | 16.0.2 | Enabled | GPLv3+ | | miscdests | 16.0.2 | Enabled | GPLv3+ | | missedcall | | Not Installed (Locally available) | GPLv3+ | | music | 16.0.2 | Enabled | GPLv3+ | | outcnam | | Not Installed (Locally available) | GPLv3+ | | outroutemsg | 16.0.1 | Enabled | GPLv3+ | | paging | 16.0.13 | Enabled | GPLv3+ | | parking | 16.0.4 | Enabled | GPLv3+ | | pbxmfa | | Not Installed (Locally available) | Commercial+ | | phonebook | 16.0.3 | Enabled | GPLv3+ | | pinsets | 16.0.8 | Enabled | GPLv3+ | | pm2 | 16.0.8 | Enabled | AGPLv3+ | | presencestate | 16.0.4 | Enabled | GPLv3+ | | printextensions | 16.0.8 | Enabled | GPLv3+ | | queueprio | 16.0.3 | Enabled | GPLv3+ | | queues | 16.0.27 | Enabled | GPLv2+ | | recordings | 16.0.16 | Enabled | GPLv3+ | | ringgroups | 16.0.11 | Enabled | GPLv3+ | | setcid | 16.0.3 | Enabled | GPLv3+ | | sipsettings | 16.0.27 | Enabled | AGPLv3+ | | smsplus | | Not Installed (Locally available) | Commercial | | soundlang | 16.0.9 | Enabled | GPLv3+ | | superfecta | 16.0.35 | Enabled | GPLv2+ | | synologyabb | | Not Installed (Locally available) | GPLv3+ | | sysadmin | 16.0.41.24 | Enabled | Commercial | | timeconditions | 16.0.11 | Enabled | GPLv3+ | | tts | 16.0.3 | Enabled | GPLv3+ | | ttsengines | 16.0.3 | Enabled | AGPLv3 | | ucp | 16.0.38.2 | Enabled | AGPLv3+ | | userman | 16.0.44.12 | Enabled | AGPLv3+ | | vmblast | 16.0.11 | Enabled | GPLv3+ | | voicemail | 16.0.55 | Enabled | GPLv3+ | | weakpasswords | 16.0.1 | Enabled | GPLv3+ | +---------------------+------------+-----------------------------------+-------------+

Relevant log output

-- Executing [s@func-apply-sipheaders:13] Set("PJSIP/222-00000026", "PJSIP_HEADER(add,X-Custom)=1724327461.119") in new stack
  == Begin MixMonitor Recording Local/222@from-queue-00000020;2
  == Begin MixMonitor Recording Local/225@from-queue-00000021;2
    -- Executing [s@func-apply-sipheaders:14] NoOp("PJSIP/222-00000026", "CDR userfield before setting: ") in new stack
    -- Executing [s@func-apply-sipheaders:15] Set("PJSIP/222-00000026", "CDR(userfield)=1724327461.119") in new stack
    -- Executing [s@func-apply-sipheaders:16] NoOp("PJSIP/222-00000026", "CDR userfield after setting: 1724327461.119") in new stack
    -- Executing [s@func-apply-sipheaders:17] Return("PJSIP/222-00000026", "") in new stack
gudge25 commented 1 month ago

more details https://community.freepbx.org/t/bug-cdr-userfield-cannot-be-populated-correctly/99922/6

gudge25 commented 1 month ago

`[func-apply-sipheaders] include => func-apply-sipheaders-custom exten => s,1,Noop(Applying SIP Headers to channel ${CHANNEL}) exten => s,n,Set(TECH=${CUT(CHANNEL,/,1)}) exten => s,n,Set(SIPHEADERKEYS=${HASHKEYS(SIPHEADERS)}) exten => s,n,While($["${SET(sipkey=${SHIFT(SIPHEADERKEYS)})}" != ""]) exten => s,n,Set(sipheader=${HASH(SIPHEADERS,${sipkey})}) exten => s,n,ExecIf($["${sipheader}" = "unset" & "${TECH}" = "SIP"]?SIPRemoveHeader(${sipkey}:)) exten => s,n,ExecIf($["${sipheader}" = "unset" & "${TECH}" = "PJSIP"]?Set(PJSIP_HEADER(remove,${sipkey})=)) exten => s,n,ExecIf($["${sipheader}" != "unset" & "${sipkey}" = "Alert-Info" & ${REGEX("^<[^>]>" ${sipheader})} != 1 & ${REGEX("\;info=" ${sipheader})} != 1]?Set(sipheader=http://127.0.0.1\;info=${sipheader})) exten => s,n,ExecIf($["${sipheader}" != "unset" & "${sipkey}" = "Alert-Info" & ${REGEX("^<[^>]>" ${sipheader})} != 1]?Set(sipheader=http://127.0.0.1${sipheader})) exten => s,n,ExecIf($["${TECH}" = "SIP" & "${sipheader}" != "unset"]?SIPAddHeader(${sipkey}:${sipheader})) exten => s,n,ExecIf($["${TECH}" = "PJSIP" & "${sipheader}" != "unset"]?Set(PJSIP_HEADER(add,${sipkey})=${sipheader})) exten => s,n,EndWhile exten => s,n,Set(PJSIP_HEADER(add,X-Custom)=${CALLIDVAR}) exten => s,n,NoOp(CDR userfield before setting: ${CDR(userfield)}) exten => s,n,Set(CDR(userfield)=${CALLIDVAR}) exten => s,n,NoOp(CDR userfield after setting: ${CDR(userfield)}) exten => s,n,Return()

;--== end of [func-apply-sipheaders] ==--;

[ext-queues] exten => h,1,NoOp(==End Call==) same => n,NoOp(CDR userfield:${CDR(userfield)}) same => n,Macro(hangupcall,)

[from-queue-exten-only] exten => h,1,NoOp(==End Call==) same => n,NoOp(CDR userfield:${CDR(userfield)}) same => n,Macro(hangupcall,) `

gudge25 commented 1 month ago

also reproducible on Asterisk 18.20.2 (i done a switch using asterisk-version-switch)