[asterisk-dev] Multi-tenant parking broken in 1.6.1.1?

John A. Sullivan III jsullivan at opensourcedevel.com
Fri Jul 17 12:39:06 CDT 2009


Hello, all.  My apologies for troubling the developer list as an end
user but we were not able to resolve this issue on the user list and it
is smelling like a possible bug when using multi-tenant call parking.

There seem to be two problems:
     1. Parking assigns parking spaces from the default group no matter
        what we do.
     2. When the parked call timer expires, the callback to the original
        callee fails because a | delimiter is used in the Dial()
        function.

The second was fixed by backporting a patch from SVN but we still have
the first problem.

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 not
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'


What's going on and how do I fix it? Thanks - John
-- 
John A. Sullivan III
Open Source Development Corporation
+1 207-985-7880
jsullivan at opensourcedevel.com

http://www.spiritualoutreach.com
Making Christianity intelligible to secular society




More information about the asterisk-dev mailing list