[asterisk-bugs] [Asterisk 0015538]: Multi-tenant parking broken in 1.6.1.1 - does not allocate to designated parking spaces

Asterisk Bug Tracker noreply at bugs.digium.com
Sun Aug 30 12:44:32 CDT 2009


A NOTE has been added to this issue. 
====================================================================== 
https://issues.asterisk.org/view.php?id=15538 
====================================================================== 
Reported By:                gracedman
Assigned To:                dbrooks
====================================================================== 
Project:                    Asterisk
Issue ID:                   15538
Category:                   Features/Parking
Reproducibility:            always
Severity:                   major
Priority:                   normal
Status:                     assigned
Asterisk Version:           1.6.1.1 
Regression:                 No 
SVN Branch (only for SVN checkouts, not tarball releases): N/A 
SVN Revision (number only!):  
Request Review:              
====================================================================== 
Date Submitted:             2009-07-20 10:30 CDT
Last Modified:              2009-08-30 12:44 CDT
====================================================================== 
Summary:                    Multi-tenant parking broken in 1.6.1.1 - does not
allocate to designated parking spaces
Description: 
We are using 1.6.1.1 from the source tarball downloaded from
http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.1.1.tar.gz
and running on fully patched CentOS 5.3.

We are a multi-tenant environment and would like to implement call parking
and would like a separate parking lot for each tenant.  We defined the
parking lots in features.conf with appropriate changes to sip.conf and
extensions.conf (more specifically, included files) but call parking
allocates spaces from the default parking lot no matter what we do.

Perhaps we have configured it incorrectly.  Here is the pertinent
section from features.conf:

[parkinglot_a10] ; EBC
context => a10parking
parkpos => 101-110
;parkext => 100
findslot => next

[parkinglot_a100] ; SSI
context => a100parking
;parkext => 1000
parkpos => 1001-1020
findslot => next

If I understand this correctly, the parkinglog_a100 would be the channel
variable and a100parking the context into which parking extensions are
placed.

We set the channel parameter in sip.conf:

[a100](!,common)
context=a100
vmext=999
parkinglot=parkinglot_a100
subscribecontext=a100
accountcode=a0000-0100
fromdomain=ssiservices.biz

[userx](a100)
mailbox=yyy at a100,xxx at a100
secret=something
callerid=John A. Sullivan III <xxx>
fromuser=userid

and we included the context in extensions.conf:

[a100] ; SSI
exten => 911,1,Macro(emergency-US,xxxxxxxxxx)
exten => 9911,1,Macro(emergency-US,xxxxxxxxxx)

exten => 9999,1,VoiceMailMain(${CALLERID(num)}@a100) ; Direct mail
retrieval
include => a100pub
include => a100conf
include => a100parking
include => US-international
include => dial-uri

We also tried Set(CHANNEL(parkinglot)=parkinglot_a100).  We also tried
creating our own parking which yielded interesting data but no
solution.

Here is the console output using the regular setup described:

Call comes in and is answered:

   -- SIP/gss-cc01c918 answered SIP/localhost-cc002cf8
    -- Native bridging SIP/localhost-cc002cf8 and SIP/gss-cc01c918
    -- Started music on hold, class 'default', on SIP/localhost-cc002cf8
  == Using SIP RTP TOS bits 176
  == Using SIP RTP CoS mark 5

Call is parked:

    -- Executing [700 at a100:1] Park("SIP/gss-cc05ceb8", "") in new stack
  == Parked SIP/gss-cc05ceb8 on 701 (lot default). Will timeout back to
extension [a100] s, 1 in 60 seconds
    -- Added extension '701' priority 1 to parkedcalls (0x2aaaacca3f70)
    -- <SIP/gss-cc05ceb8> Playing 'digits/7.ulaw' (language 'en')
    -- <SIP/gss-cc05ceb8> Playing 'digits/0.ulaw' (language 'en')
    -- <SIP/gss-cc05ceb8> Playing 'digits/1.ulaw' (language 'en')
    -- Started music on hold, class 'default', on SIP/gss-cc05ceb8        
                                                                           
    

I'm not sure what is happening here but I think this is the original
callee releasing the call.  I don't know what the ZOMBIE extension is
about:

  == Spawn extension (a100, s, 1) exited non-zero on
'Parked/SIP/gss-cc05ceb8<ZOMBIE>'
    -- Auto fallthrough, channel 'Parked/SIP/gss-cc05ceb8<ZOMBIE>' status
is 'UNKNOWN'
    -- Executing [h at a100:1] Answer("Parked/SIP/gss-cc05ceb8<ZOMBIE>",
"0.5") in new stack
  == Spawn extension (a100, h, 1) exited non-zero on
'Parked/SIP/gss-cc05ceb8<ZOMBIE>'
    -- Stopped music on hold on SIP/gss-cc05ceb8
    -- Stopped music on hold on SIP/localhost-cc002cf8
    -- Started music on hold, class 'default', on SIP/localhost-cc002cf8
  == Spawn extension (macro-common, s, 1) exited non-zero on
'SIP/gss-cc05ceb8<ZOMBIE>' in macro 'common'
  == Spawn extension (a100pub, 314, 2) exited non-zero on
'SIP/gss-cc05ceb8<ZOMBIE>'
  == Using SIP RTP TOS bits 176
  == Using SIP RTP CoS mark 5

Then we see the destination callee attempting to pick up the call and is
the output of our routine to catch misdialed/unknown extensions:

    -- Executing [701 at a100:1] GotoIf("SIP/jasiii-cc05ceb8", "0?:_.,1") in
new stack
    -- Goto (a100,_.,1)
    -- Executing [_. at a100:1] Answer("SIP/jasiii-cc05ceb8", "0.5") in new
stack
    -- Executing [_. at a100:2] Playback("SIP/jasiii-cc05ceb8", "im-sorry")
in new stack
    -- <SIP/jasiii-cc05ceb8> Playing 'im-sorry.ulaw' (language 'en')
    -- Executing [_. at a100:3] Wait("SIP/jasiii-cc05ceb8", "0.0.5") in new
stack
    -- Executing [_. at a100:4] Playback("SIP/jasiii-cc05ceb8",
"you-dialed-wrong-number") in new stack
    -- <SIP/jasiii-cc05ceb8> Playing 'you-dialed-wrong-number.ulaw'
(language 'en')
    -- Executing [_. at a100:5] Wait("SIP/jasiii-cc05ceb8", "0.4") in new
stack
    -- Executing [_. at a100:6] Playback("SIP/jasiii-cc05ceb8", "vm-goodbye")
in new stack
    -- <SIP/jasiii-cc05ceb8> Playing 'vm-goodbye.ulaw' (language 'en')
    -- Executing [_. at a100:7] Hangup("SIP/jasiii-cc05ceb8", "") in new
stack
  == Spawn extension (a100, _., 7) exited non-zero on
'SIP/jasiii-cc05ceb8'
    -- Executing [h at a100:1] Answer("SIP/jasiii-cc05ceb8", "0.5") in new
stack
  == Spawn extension (a100, h, 1) exited non-zero on
'SIP/jasiii-cc05ceb8'

We then see the park timeout and fail to return to the original callee:

    -- Stopped music on hold on SIP/localhost-cc002cf8
    -- Added extension 'SIP0gss' priority 1 to park-dial (0x2aaaacca2050)
  == Timeout for SIP/localhost-cc002cf8 parked on 701 (default). Returning
to park-dial,SIP0gss,1
    -- Executing [SIP0gss at park-dial:1] Dial("SIP/localhost-cc002cf8",
"SIP/gss|30|") in new stack
[Jul  1 01:54:56] WARNING[6401]: pbx.c:953 pbx_exec: The application
delimiter is now the comma, not the pipe.  Did you forget to convert your
dialplan?  (Dial(SIP/gss|30|))
  == Using SIP RTP TOS bits 176
  == Using SIP RTP CoS mark 5
[Jul  1 01:54:57] WARNING[6401]: chan_sip.c:4526 create_addr: No such
host: gss|30|
[Jul  1 01:54:57] WARNING[6401]: app_dial.c:1518 dial_exec_full: Unable to
create channel of type 'SIP' (cause 20 - Unknown)
  == Everyone is busy/congested at this time (1:0/0/1)
    -- Auto fallthrough, channel 'SIP/localhost-cc002cf8' status is
'CHANUNAVAIL'

Have I misconfigured anything or have I stumbled into a bug?

We next tried to create our own park channel.  We did this by adding the
following to extensions.conf:

[a100parking]
exten => 1000,1,Set(CHANNEL(parkinglot)=parkinglot_a100)
exten => 1000,n,Park()

This gives us interestingly different results.  First we see the call
come in:

   -- SIP/gss-1a513628 answered SIP/localhost-cc002cc8
    -- Native bridging SIP/localhost-cc002cc8 and SIP/gss-1a513628
    -- Started music on hold, class 'default', on SIP/localhost-cc002cc8
  == Using SIP RTP TOS bits 176
  == Using SIP RTP CoS mark 5

We next see the call parked but this time using extensions from the
parkinglot_a100 parking lot:

    -- Executing [1000 at a100:1] Set("SIP/gss-1a56d498",
"CHANNEL(parkinglot)=parkinglot_a100") in new stack
    -- Executing [1000 at a100:2] Park("SIP/gss-1a56d498", "") in new stack
  == Parked SIP/gss-1a56d498 on 1001 (lot parkinglot_a100). Will timeout
back to extension [a100] s, 1 in 45 seconds
    -- Added extension '1001' priority 1 to a100parking (0x1a512180)
    -- <SIP/gss-1a56d498> Playing 'digits/1.ulaw' (language 'en')
    -- <SIP/gss-1a56d498> Playing 'digits/0.ulaw' (language 'en')
    -- <SIP/gss-1a56d498> Playing 'digits/0.ulaw' (language 'en')
    -- <SIP/gss-1a56d498> Playing 'digits/1.ulaw' (language 'en')
    -- Started music on hold, class 'default', on SIP/gss-1a56d498

We next see that section I don't understand with the ZOMBIE and s
extensions:

  == Spawn extension (a100, s, 1) exited non-zero on
'Parked/SIP/gss-1a56d498<ZOMBIE>'
    -- Auto fallthrough, channel 'Parked/SIP/gss-1a56d498<ZOMBIE>' status
is 'UNKNOWN'
    -- Executing [h at a100:1] Answer("Parked/SIP/gss-1a56d498<ZOMBIE>",
"0.5") in new stack
  == Spawn extension (a100, h, 1) exited non-zero on
'Parked/SIP/gss-1a56d498<ZOMBIE>'
    -- Stopped music on hold on SIP/gss-1a56d498
    -- Stopped music on hold on SIP/localhost-cc002cc8
    -- Started music on hold, class 'default', on SIP/localhost-cc002cc8
  == Spawn extension (macro-common, s, 1) exited non-zero on
'SIP/gss-1a56d498<ZOMBIE>' in macro 'common'
  == Spawn extension (a100pub, 314, 2) exited non-zero on
'SIP/gss-1a56d498<ZOMBIE>'
  == Using SIP RTP TOS bits 176
  == Using SIP RTP CoS mark 5

Now we see the destination callee try to pickup the parked call only to
be told there is no call parked on extension 1001:

    -- Executing [1001 at a100:1] ParkedCall("SIP/jasiii-1a56d498", "1001")
in new stack
    -- <SIP/jasiii-1a56d498> Playing 'pbx-invalidpark.ulaw' (language
'en')
    -- Channel SIP/jasiii-1a56d498 tried to talk to nonexistent parked
call 1001
  == Spawn extension (a100, 1001, 1) exited non-zero on
'SIP/jasiii-1a56d498'
    -- Executing [h at a100:1] Answer("SIP/jasiii-1a56d498", "0.5") in new
stack
  == Spawn extension (a100, h, 1) exited non-zero on
'SIP/jasiii-1a56d498'


Unfortunately, we do not have the development skills to step into the code
but are certainly willing to test and do whatever else we can to help
resolve the issue. Thanks - John

====================================================================== 

---------------------------------------------------------------------- 
 (0109814) mvanbaak (manager) - 2009-08-30 12:44
 https://issues.asterisk.org/view.php?id=15538#c109814 
---------------------------------------------------------------------- 
Workaround (code in AEL)
context incoming_customer_a {
    31123456789 => {
        Set(_PARKINGLOT=parkinglot_a);
        Dial(SIP/customera_1000)
    };
};

now if customera_1000 picks up an incoming call and parks it, it will be
parked in the parkinglot_a parking context.

For some reason the 'parkinglot=parkinglot_a' line in a sip peer section
is not used when this peer gets a call. I'm still looking where that goes
wrong but for now you can use this workaround. 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2009-08-30 12:44 mvanbaak       Note Added: 0109814                          
======================================================================




More information about the asterisk-bugs mailing list