Difference between revisions of "Assignment 2: H323 (by Fabio & Anneke)"

From TD-er's Wiki
Jump to navigationJump to search
m
m
Line 16: Line 16:
 
* [[VoIPBuster]]
 
* [[VoIPBuster]]
 
* [[ZapTel]]
 
* [[ZapTel]]
<big>'''2.3 Configuring videoconferencing DUNDi'''</big>
+
<big>'''2.3 Configuring videoconferencing'''</big>
  
 
<big>'''2.4 Intercom'''</big>
 
<big>'''2.4 Intercom'''</big>

Revision as of 14:33, 7 March 2007

2.1 H323

2.2 Connection to regular telephone network

2.3 Configuring videoconferencing

2.4 Intercom

2.5 Updating to newer versions of Trixbox

We use gnomemeeting softphones and a gnugk gatekeeper.

Introduction

Setting up Trixbox for H323 <-> SIP telephony is not a straightforward procedure. There is basically only one source of information and that is the Trixbox forum. The people on this forum who have a working configuration all integrate a hardware H323 system (like cisco call manager) with the trixbox. We started out trying to directly connect our H323 extensions to the trixbox but this did not seem possible. As a solution we started working with an H323 gatekeeper to handle H323 functionality and let the Trixbox function as gateway. After playing around with the configuration of clients, gk and Trixbox we are able to let H323 -> SIP and SIP -> H323 ring but as soon as it is picked up the call is terminated by the Trixbox. We can handle H323 -> H323 by the just the gatekeeper. At first we thought this might be a codec problem but when we use the same client with SIP there is no problem. Also enabling just one codec on both the SIP and H323 client gives the same problem with no reference to a codec problem in any of the logs.

To have come this far we have had extensive help from one person on the Trixbox forum who has a large H323 and sip network and we followed all his suggestions. What follows is the configuration of Trixbox, GnuGK gatekeeper and different H323 clients as we have it right now. We have intensely studied the output of the asterisk OOH323 and SIP debugger and the gatekeeper logs to figure out what goes wrong with this configuration but they do not show what the problem is. We think that it might be that the gatekeeper does not offer enough functionality to replace the hardware solutions other people have found.

There is another post on the forum by somebody who seems to do it in a different way. If he talking about integrating a network or loose extensions is not clear. We have not had time to investigate his solution. It seems like an awful lot of compiling but it might be worth a try.

Several people on the forum advise to use trixbox 1.2.3 since they find ooh323 does not work on trixbox 2.0. They also use a very specific version of the asterisk add-ons.

Configuration of Trixbox 1.2.3

We followed mostly the instructions from these two forums on the Trixbox site:

There are more forums where people say things about h323 but these seem to be the most helpful.

Following the suggestions we used Trixbox 1.2.3 with asterisk-addons-1.2.3. In order to do this we deleted the current addons:

rpm -qa | grep asterisk-addons
rpm -e asterisk-addons-1.2.4_1.2.12.1-1.294

And loaded the older addons: (these can be found ...............)

rpm -i asterisk-addons-1.2.3-1.219.i386.rpm

If this is really necessary we can't tell right now. Once you get everything working it might be worth trying it without these add-ons.

ooh323.conf

Next thing was to edit the ooh323.conf file. This file needs to be copied from the samples first:

cp /etc/asterisk-1.2.8-samples/ooh323.conf /etc/asterisk 

Here is our ooh323.conf:

; Objective System's H323 Configuration example for Asterisk
; ooh323c driver configuration
;
; [general] section defines global parameters
;
; This is followed by profiles which can be of three types - user/peer/friend
; Name of the user profile should match with the h323id of the user device.
; For peer/friend profiles, host ip address must be provided as "dynamic" is
; not supported as of now.
;
; Syntax for specifying a H323 device in extensions.conf is
; For Registered peers/friends profiles:
;        OOH323/name where name is the name of the peer/friend profile.
;
; For unregistered H.323 phones:
;        OOH323/ip[:port] OR if gk is used OOH323/alias where alias can be any H323
;                          alias
;
; For dialing into another asterisk peer at a specific exten
;       OOH323/exten/peer OR OOH323/exten@ip
;
; Domain name resolution is not yet supported.
;
; When a H.323 user calls into asterisk, his H323ID is matched with the profile
; name and context is determined to route the call
;
; The channel driver will register all global aliases and aliases defined in
; peer profiles with the gatekeeper, if one exists. So, that when someone
; outside our pbx (non-user) calls an extension, gatekeeper will route that
; call to our asterisk box, from where it will be routed as per dial plan.


[general]
;Define the asetrisk server h323 endpoint

;The port asterisk should listen for incoming H323 connections.
;Default - 1720
;port=1720
;CHANGED
port=1720

;The dotted IP address asterisk should listen on for incoming H323
;connections
;Default - tries to find out local ip address on it's own
bindaddr=0.0.0.0

;This parameter indicates whether channel driver should register with
;gatekeeper as a gateway or an endpoint.
;Default - no
;gateway=no
;CHANGED
gateway=yes

;Whether asterisk should use fast-start and tunneling for H323 connections.
;Default - yes
;faststart=no
;h245tunneling=no
;CHANGED
h245tunneling=yes
 
;H323-ID to be used for asterisk server
;Default - Asterisk PBX
h323id=ObjSysAsterisk
;e164=100
;CHANGED
e164=501

;CallerID to use for calls
;Default - Same as h323id
callerid=asterisk

;Whether this asterisk server will use gatekeeper.
;Default - DISABLE
;gatekeeper = DISCOVER
;gatekeeper = DISABLE
;CHANGED
gatekeeper = 129.125.71.171

;Location for H323 log file
;Default - /var/log/asterisk/h323_log
;CHANGED
logfile=/var/log/asterisk/h323_log


;Following values apply to all users/peers/friends defined below, unless
;overridden within their client definition
 
;Sets default context all clients will be placed in.
;Default - default
context=default

;Sets rtptimeout for all clients, unless overridden
;Default - 60 seconds
;rtptimeout=60      ; Terminate call if 60 seconds of no RTP activity
                    ; when we're not on hold
;CHANGED
rtptimeout=3
;Type of Service
;Default - none (lowdelay, thoughput, reliability, mincost, none)
;tos=lowdelay

;amaflags = default

;The account code used by default for all clients.
;accountcode=h3230101

;The codecs to be used for all clients.Only ulaw and gsm supported as of now.
;Default - ulaw
; ONLY ulaw, gsm, g729 and g7231 supported as of now
;disallow=all     ;Note order of disallow/allow is important.
;allow=gsm
;allow=ulaw
;;CHANGED
;allow=g729
;allow=g723

;CHANGED
allow=all

; dtmf mode to be used by default for all clients. Supports rfc2833, q931keypad
; h245alphanumeric, h245signal.
;Default - rfc 2833
dtmfmode=rfc2833

; User/peer/friend definitions:
; User config options                    Peer config options
; ------------------                     -------------------
; context
; disallow                               disallow
; allow                                  allow
; accountcode                            accountcode
; amaflags                               amaflags
; dtmfmode                               dtmfmode
; rtptimeout                             ip
;                                        port
;                                        h323id
;                                        email
;                                        url
;                                        e164
;                                        rtptimeout

;

;Define users here
;Section header is extension
[myuser1]
type=user
context=context1
disallow=all
allow=gsm
allow=ulaw



[mypeer1]
type=peer
context=context2
ip=a.b.c.d   ; UPDATE with appropriate ip address
port=1720    ; UPDATE with appropriate port
e164=101



;[myfriend1]

[friend-Anneke]
type=friend
;CHANGED
context=from-internal
ip=129.125.71.172   ; UPDATE with appropriate ip address
;port=1820           ; UPDATE with appropriate port
port=1720
disallow=all
;allow=ulaw
;CHANGED
allow=gsm
allow=ulaw
allow=g729
allow=g723

;CHANGED
;e164=12345
e164=601

rtptimeout=3
dtmfmode=rfc2833


[friend-Fabio]
type=friend
context=default
ip=129.125.71.173   ; UPDATE with appropriate ip address
;port=1820           ; UPDATE with appropriate port
port=1720
disallow=all
;allow=ulaw
;CHANGED
allow=gsm
allow=ulaw
allow=g729
allow=g723

;CHANGED
;e164=12345

rtptimeout=3
dtmfmode=rfc2833

;[601]
;type=peer
;context=default
;ip=129.125.71.173:1719
;e164=100
;OH323/129.125.71.173:1719
;gatekeeper=ENABLE
;OOH323/601


(Still needs some cleaning up, will do later)

Comments on this file:

  • All parameters that have been changed by us are preceded with a comment line ;CHANGED
  • The Trixbox is going to act as gateway for the gatekeeper hence gateway = yes
  • h245tunneling = yes (later our trixbox forum instructor suggested h245tunneling = no, but this did not change anything for us, but this might be an important parameter)
  • For some reason it seems that you have to set e164 to the SIP extension number ??? (how to handle multiple extension???) (not true anymore ?)
  • We will be using a gatekeeper so gatekeeper = 129.125.71.171 (ip-address of the gatekeeper)
  • The user profile section is a bit messy right now and we don't seem to be needing it anyway

Adding H323 extensions

A H323 extension can be added in FreePBX as a custom extension. For example:

Extension number: 601
Displayname: Anneke h323
Dial: OOH323/601@129.125.71.172 (ip-address of machine where extension can be found/maybe gatekeeper?)

Asterisk saves these extensions in the file extensions_additional.conf at the ..............

General remarks

Whenever you edit anyting in the .conf files makes sure to do

amportal stop
amportal start

at you asterisk prompt. If you then do

asterisk -vvvvr

you get an CLI and here you can type

ooh323 debug
sip debug
exit

to initiate the debugger

Configuration of Gnomemeeting

Edit -> Preferences

  • General: You can fill in your personal data and leave everything default
  • H323 Settings: Gatekeeper:
Registering method: Gatekeeper host
Gatekeeper host: 129.125.71.171:1719
Gatekeeper alias: 601

Gatekeeper host is the IP address and port of the gatekeeper. Port 1720 is the standard h323 port .

Gatekeeper alias is the primary alias with the gatekeeper, also the extension number in Asterisk to keep things simple.

Tick the "Register this alias as the primary alias with the gatekeeper" box and Apply (sorry, you need to do this after you've installed the gk) :).

  • H323 Settings: Gateway:
    • For H323 to H323 - Do not use a gateway, these calls will only go via the gatekeeper, not the trixbox
    • However for H323 to SIP a gateway to the trixbox (so trixbox ip) is needed but this messes up the h323 to h323 settings. Right now we don't have another solution than manually check or uncheck the box depending on what kind of call you want to make :S
  • Codecs: Audio Codecs - We enabled all available codecs.
  • Codecs: Video Codecs - We have not been able to spend time on this
  • Devices:
    • Audio Devices:
      • Audio Plugin ALSA
      • Output device: Intel ICH5
      • Input device: Intel ICH5
    • Detect Devices

(All the audio and video devices settings are of course depending on your local system, this is more for our own reference) :)

Alternative: Ekiga

To check the codec availability we decided to switch back to Ekiga since it supports SIP and H.323. We first made a SIP call and this worked fine. Switching to H.323 and calling a SIP phone and calling from the SIP phone to Ekiga(H.323) does not report any codec problems. (It seems that this is just a consequence of switching to Ekiga, no other parameters were changed).

GnuGk Gatekeeper

Packages for this gatekeeper are not available for CentOS. We found out that this gatekeeper was already installed in Etch. (System administration provided us with two machines with etch so we could get the sound working).

Almost no configuring here. Just enable PROXY.

Once the gatekeeper is installed you can register your gnomemeeting clients with the gatekeeper (see section gnomemeeting.

We are still playing with the gatekeeper so this section is under construction.

Suggestions: Proxy, routing

Progression

Using Gnomemeeting

  • H323 -> H323: via gatekeeper only (gateway unchecked in gnomemeeting preferences)
  • H323 -> SIP : rings but no connection can be establihed (gnomemeeting says: no commmon codec). These calls seem to be terminated by the trixbox.
  • SIP -> H323 : SIP phone says there is a connection but receiving end gets very short signal followed by the message: call cleared by the gatekeeper. These seem to be terminated by the gatekeeper.

Using Gnomemeeting/Ekiga with GnuGK and TrixBox 1.2.3

  • H323 -> H323: via gatekeeper only (gateway unchecked in gnomemeeting preferences)
  • H323 -> SIP : rings but no connection can be establihed.
  • SIP -> H323 : rings but no connection can be establihed.

We cannot find any errors in the gatekeeper log. The error seems to be in Asterisk. Both ways the ooh323 debug output says:

     -- Executing Macro("SIP/501-0841a378", "exten-vm|novm|602") in new stack
     -- Executing Macro("SIP/501-0841a378", "user-callerid") in new stack
     -- Executing GotoIf("SIP/501-0841a378", "0?report") in new stack
     -- Executing GotoIf("SIP/501-0841a378", "0?start") in new stack
     -- Executing Set("SIP/501-0841a378", "REALCALLERIDNUM=501") in new stack
     -- Executing NoOp("SIP/501-0841a378", "REALCALLERIDNUM is 501") in new stack
     -- Executing Set("SIP/501-0841a378", "AMPUSER=501") in new stack
     -- Executing Set("SIP/501-0841a378", "AMPUSERCIDNAME=Anneke SIP freePBX") in new stack
     -- Executing GotoIf("SIP/501-0841a378", "0?report") in new stack
     -- Executing Set("SIP/501-0841a378", "CALLERID(all)=Anneke SIP freePBX <501>") in new stack
     -- Executing NoOp("SIP/501-0841a378", "Using CallerID "Anneke SIP freePBX" <501>") in new stack
     -- Executing Set("SIP/501-0841a378", "FROMCONTEXT=exten-vm") in new stack
     -- Executing Set("SIP/501-0841a378", "VMBOX=novm") in new stack
     -- Executing Set("SIP/501-0841a378", "EXTTOCALL=602") in new stack
     -- Executing Set("SIP/501-0841a378", "CFUEXT=") in new stack
     -- Executing Set("SIP/501-0841a378", "RT=") in new stack
     -- Executing Macro("SIP/501-0841a378", "record-enable|602|IN") in new stack
     -- Executing GotoIf("SIP/501-0841a378", "0 > 0?2:4") in new stack
     -- Goto (macro-record-enable,s,4)
     -- Executing AGI("SIP/501-0841a378", "recordingcheck|20070226-192222|1172514142.0") in new stack
     -- Launched AGI Script /var/lib/asterisk/agi-bin/recordingcheck
 PHP Warning:  Unknown(): Unable to load dynamic library '/usr/lib/php4/imap.so' - libc-client.so.0:    cannot open shared object file: No such  file or directory in Unknown on line 0 
  recordingcheck|20070226-192222|1172514142.0: Inbound recording not enabled 
     -- AGI Script recordingcheck completed, returning 0 
     -- Executing NoOp("SIP/501-0841a378", "No recording needed") in new stack
     -- Executing GotoIf("SIP/501-0841a378", "0?dolocaldial|1") in new stack
     -- Executing Macro("SIP/501-0841a378", "dial||tr|602") in new stack
     -- Executing AGI("SIP/501-0841a378", "dialparties.agi") in new stack
     -- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
 PHP Warning:  Unknown(): Unable to load dynamic library '/usr/lib/php4/imap.so' - libc-client.so.0:  cannot open shared object file: No such  file or directory in Unknown on line 0 
  dialparties.agi: Starting New Dialparties.agi 
    --  dialparties.agi: priority is 1 
   dialparties.agi: Caller ID name is 'Anneke SIP freePBX' number is '501'
   dialparties.agi: Methodology of ring is  'none'
     --  dialparties.agi: Added extension 602 to extension map
     --  dialparties.agi: Extension 602 cf is disabled
     --  dialparties.agi: Extension 602 do not disturb is disabled
   == Parsing '/etc/asterisk/manager.conf': Found
   == Parsing '/etc/asterisk/manager_custom.conf': Found
   == Manager 'admin' logged on from 127.0.0.1
   == Manager 'admin' logged off from 127.0.0.1
     --  dialparties.agi: Checking CW and CFB status for extension 602
     --  dialparties.agi: DbSet CALLTRACE/602 to 501
     -- AGI Script dialparties.agi completed, returning 0
     -- Executing Dial("SIP/501-0841a378", "OOH323/602||tr") in new stack
 ---   ooh323_request - data 602 format 0x4 (ulaw)
 ---   find_peer
 +++   find_peer
 +++   ooh323_request
 ---   ooh323_call- 602
 +++   ooh323_call
     -- Called 602
 ---   onNewCallCreated ooh323c_o_1
 ---   find_call
 +++   find_call
 setting callid number 501
  Outgoing call 602(ooh323c_o_1) - Codec prefs - ()
         Adding capabilities to call(outgoing, ooh323c_o_1)
 ---   configure_local_rtp
 +++   configure_local_rtp
 +++   onNewCallCreated ooh323c_o_1
 --- onAlerting ooh323c_o_1
 ---   find_call
 +++   find_call
 +++ onAlerting ooh323c_o_1
     -- OOH323/602-ed80 is ringing
 ---   onCallEstablished ooh323c_o_1
 ---   find_call
 +++   find_call
 +++   onCallEstablished ooh323c_o_1
     -- OOH323/602-ed80 answered SIP/501-0841a378
 ---   onCallCleared ooh323c_o_1
 ---   find_call
 +++   find_call
 ---   ooh323_hangup
     hanging 602
 +++   ooh323_hangup
   == Spawn extension (macro-dial, s, 10) exited non-zero on 'SIP/501-0841a378' in macro 'dial'
   == Spawn extension (macro-dial, s, 10) exited non-zero on 'SIP/501-0841a378' in macro 'exten-vm'
   == Spawn extension (macro-dial, s, 10) exited non-zero on 'SIP/501-0841a378'
 ---   ooh323_destroy
  Destroying 602
 +++   ooh323_destroy

This output describes the situation where SIP extension 501 tries to call the H323 extension 602. In this experiment the callee's softphone rings, but after accepting the connection on the softphone, the connection is mysteriously dropped.

Because the telephone do ring, we can conclude that the H323 name resolution part is correctly carried out by the H323 gatekeeper GnuGK.

The next step for a h323 terminal then is to route a connection through the gateway, in this case the h323 channel driver implemented in Asterisk.

By carefully looking at the ooh323c channel driver's output, we notice that for both extensions the data declared in freePBX is found and a connection is set up.

When the called softphone tries to answer, the connection seems to get established; then the sudden hangup seems to originate in the macro-dial but the exact cause is uncertain (exited non-zero on "SIP/501-0841a378" ).

Using Ekiga with GnuGK and TrixBox 1.2.3 - Update

Another trial was done with almost the same setup: we suspect that the inbound/outbound routes do not play any role when routing calls locally on a Trixbox, even if between SIP and H323. Moreover, we applied a couple of changes:

1.in ooh323.conf check;

h245tunneling=no
faststart=no

2.in sip.conf under the line "tos=0x68" check;

notransfer=yes
canreinvite=no

We also activated both SIP and ooh323c debug messages on Asterisk; unluckily the end result is the very same: the phones ring but the voice connection is dropped when answering. This is the combined debug log:

<-- SIP read from 129.125.71.172:5060:
INVITE sip:602@129.125.21.241 SIP/2.0
Via: SIP/2.0/UDP 129.125.71.172:5060;rport;branch=z9hG4bK608ACE08141F5E878FB9EED02E9157D0
From: "Anneke X-lite@wingtip112" <sip:501@129.125.21.241>;tag=738462257
To: <sip:602@129.125.21.241>
Contact: <sip:501@129.125.71.172:5060>
Call-ID: 443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172
CSeq: 18831 INVITE
Max-Forwards: 70
Content-Type: application/sdp
User-Agent: X-Lite release 1105d
Content-Length: 310

v=0
o=501 232538645 232538662 IN IP4 129.125.71.172
s=X-Lite
c=IN IP4 129.125.71.172
t=0 0
m=audio 8000 RTP/AVP 0 8 3 98 97 101
a=rtpmap:0 pcmu/8000
a=rtpmap:8 pcma/8000
a=rtpmap:3 gsm/8000
a=rtpmap:98 iLBC/8000
a=rtpmap:97 speex/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=sendrecv

--- (11 headers 14 lines)---
Using INVITE request as basis request - 443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172
Sending to 129.125.71.172 : 5060 (NAT)
Reliably Transmitting (no NAT) to 129.125.71.172:5060:
SIP/2.0 407 Proxy Authentication Required
Via: SIP/2.0/UDP 129.125.71.172:5060;rport;branch=z9hG4bK608ACE08141F5E878FB9EED02E9157D0;received=129.125.71.172
From: "Anneke X-lite@wingtip112" <sip:501@129.125.21.241>;tag=738462257
To: <sip:602@129.125.21.241>;tag=as7d1966a3
Call-ID: 443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172
CSeq: 18831 INVITE
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Contact: <sip:602@129.125.21.241>
Proxy-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="4333ac79"
Content-Length: 0


---
Scheduling destruction of call '443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172' in 15000 ms
Found user '501'

<-- SIP read from 129.125.71.172:5060:
ACK sip:602@129.125.21.241 SIP/2.0
Via: SIP/2.0/UDP 129.125.71.172:5060;rport;branch=z9hG4bK608ACE08141F5E878FB9EED02E9157D0
From: "Anneke X-lite@wingtip112" <sip:501@129.125.21.241>;tag=738462257
To: <sip:602@129.125.21.241>;tag=as7d1966a3
Contact: <sip:501@129.125.71.172:5060>
Call-ID: 443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172
CSeq: 18831 ACK
Max-Forwards: 70
Content-Length: 0


--- (9 headers 0 lines)---

<-- SIP read from 129.125.71.172:5060:
INVITE sip:602@129.125.21.241 SIP/2.0
Via: SIP/2.0/UDP 129.125.71.172:5060;rport;branch=z9hG4bK54C0A2207F8FC2C3D514805AC6CF3749
From: "Anneke X-lite@wingtip112" <sip:501@129.125.21.241>;tag=738462257
To: <sip:602@129.125.21.241>
Contact: <sip:501@129.125.71.172:5060>
Call-ID: 443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172
CSeq: 18832 INVITE
Proxy-Authorization: Digest  username="501",realm="asterisk",nonce="4333ac79",response="68a8dd8168ca34280e2fb56aceb8cdc9",uri="sip:602@129.125.21.241",algorithm=MD5
Max-Forwards: 70
Content-Type: application/sdp
User-Agent: X-Lite release 1105d
Content-Length: 310

v=0
o=501 232538645 232538662 IN IP4 129.125.71.172
s=X-Lite
c=IN IP4 129.125.71.172
t=0 0
m=audio 8000 RTP/AVP 0 8 3 98 97 101
a=rtpmap:0 pcmu/8000
a=rtpmap:8 pcma/8000
a=rtpmap:3 gsm/8000
a=rtpmap:98 iLBC/8000
a=rtpmap:97 speex/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=sendrecv

--- (12 headers 14 lines)---
Using INVITE request as basis request - 443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172
Sending to 129.125.71.172 : 5060 (NAT)
Found user '501'
Found RTP audio format 0
Found RTP audio format 8
Found RTP audio format 3
Found RTP audio format 98
Found RTP audio format 97
Found RTP audio format 101
Peer audio RTP is at port 129.125.71.172:8000
Found description format pcmu
Found description format pcma
Found description format gsm
Found description format iLBC
Found description format speex
Found description format telephone-event
Capabilities: us - 0xc (ulaw|alaw), peer - audio=0x60e (gsm|ulaw|alaw|speex|ilbc)/video=0x0 (nothing), combined - 0xc (ulaw|alaw)
Non-codec capabilities: us - 0x1 (telephone-event), peer - 0x1 (telephone-event), combined - 0x1 (telephone-event)
Looking for 602 in from-internal (domain 129.125.21.241)
list_route: hop: <sip:501@129.125.71.172:5060>
Transmitting (no NAT) to 129.125.71.172:5060:
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 129.125.71.172:5060;rport;branch=z9hG4bK54C0A2207F8FC2C3D514805AC6CF3749;received=129.125.71.172
From: "Anneke X-lite@wingtip112" <sip:501@129.125.21.241>;tag=738462257
To: <sip:602@129.125.21.241>
Call-ID: 443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172
CSeq: 18832 INVITE
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Contact: <sip:602@129.125.21.241>
Content-Length: 0


---
    -- Executing Macro("SIP/501-09b4e060", "exten-vm|novm|602") in new stack
    -- Executing Macro("SIP/501-09b4e060", "user-callerid") in new stack
    -- Executing GotoIf("SIP/501-09b4e060", "0?report") in new stack
    -- Executing GotoIf("SIP/501-09b4e060", "0?start") in new stack
    -- Executing Set("SIP/501-09b4e060", "REALCALLERIDNUM=501") in new stack
    -- Executing NoOp("SIP/501-09b4e060", "REALCALLERIDNUM is 501") in new stack
    -- Executing Set("SIP/501-09b4e060", "AMPUSER=501") in new stack
    -- Executing Set("SIP/501-09b4e060", "AMPUSERCIDNAME=Anneke SIP freePBX") in new stack
    -- Executing GotoIf("SIP/501-09b4e060", "0?report") in new stack
    -- Executing Set("SIP/501-09b4e060", "CALLERID(all)=Anneke SIP freePBX <501>") in new stack
    -- Executing NoOp("SIP/501-09b4e060", "Using CallerID "Anneke SIP freePBX" <501>") in new stack
    -- Executing Set("SIP/501-09b4e060", "FROMCONTEXT=exten-vm") in new stack
    -- Executing Set("SIP/501-09b4e060", "VMBOX=novm") in new stack
    -- Executing Set("SIP/501-09b4e060", "EXTTOCALL=602") in new stack
    -- Executing Set("SIP/501-09b4e060", "CFUEXT=") in new stack
    -- Executing Set("SIP/501-09b4e060", "RT=") in new stack
    -- Executing Macro("SIP/501-09b4e060", "record-enable|602|IN") in new stack
    -- Executing GotoIf("SIP/501-09b4e060", "0 > 0?2:4") in new stack
    -- Goto (macro-record-enable,s,4)
    -- Executing AGI("SIP/501-09b4e060", "recordingcheck|20070301-155204|1172760724.6") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/recordingcheck
PHP Warning:  Unknown(): Unable to load dynamic library '/usr/lib/php4/imap.so' - libc-client.so.0: cannot open shared object file: No such file  or directory in Unknown on line 0
  recordingcheck|20070301-155204|1172760724.6: Inbound recording not enabled
    -- AGI Script recordingcheck completed, returning 0
    -- Executing NoOp("SIP/501-09b4e060", "No recording needed") in new stack
    -- Executing GotoIf("SIP/501-09b4e060", "0?dolocaldial|1") in new stack
    -- Executing Macro("SIP/501-09b4e060", "dial||tr|602") in new stack
    -- Executing AGI("SIP/501-09b4e060", "dialparties.agi") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
PHP Warning:  Unknown(): Unable to load dynamic library '/usr/lib/php4/imap.so' - libc-client.so.0: cannot open shared object file: No such file   or directory in Unknown on line 0
  dialparties.agi: Starting New Dialparties.agi
    --  dialparties.agi: priority is 1
  dialparties.agi: Caller ID name is 'Anneke SIP freePBX' number is '501'
  dialparties.agi: Methodology of ring is  'none'
    --  dialparties.agi: Added extension 602 to extension map
    --  dialparties.agi: Extension 602 cf is disabled
    --  dialparties.agi: Extension 602 do not disturb is disabled
  == Parsing '/etc/asterisk/manager.conf': Found
  == Parsing '/etc/asterisk/manager_custom.conf': Found
  == Manager 'admin' logged on from 127.0.0.1
  == Manager 'admin' logged off from 127.0.0.1
    --  dialparties.agi: Checking CW and CFB status for extension 602
    --  dialparties.agi: DbSet CALLTRACE/602 to 501
    -- AGI Script dialparties.agi completed, returning 0
    -- Executing Dial("SIP/501-09b4e060", "OOH323/602||tr") in new stack
---   ooh323_request - data 602 format 0x4 (ulaw)
---   find_peer
+++   find_peer
+++   ooh323_request
---   ooh323_call- 602
+++   ooh323_call
    -- Called 602
Transmitting (no NAT) to 129.125.71.172:5060:
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 129.125.71.172:5060;rport;branch=z9hG4bK54C0A2207F8FC2C3D514805AC6CF3749;received=129.125.71.172
From: "Anneke X-lite@wingtip112" <sip:501@129.125.21.241>;tag=738462257
To: <sip:602@129.125.21.241>;tag=as4303820b
Call-ID: 443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172
CSeq: 18832 INVITE
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Contact: <sip:602@129.125.21.241>
Content-Length: 0


---
---   onNewCallCreated ooh323c_o_4
---   find_call
+++   find_call
setting callid number 501
 Outgoing call 602(ooh323c_o_4) - Codec prefs - ()
        Adding capabilities to call(outgoing, ooh323c_o_4)
---   configure_local_rtp
+++   configure_local_rtp
+++   onNewCallCreated ooh323c_o_4
--- onAlerting ooh323c_o_4
---   find_call
+++   find_call
+++ onAlerting ooh323c_o_4
    -- OOH323/602-bf43 is ringing

<-- SIP read from 129.125.71.172:5060:


--- (0 headers 0 lines) Nat keepalive ---
---   onCallEstablished ooh323c_o_4
---   find_call
+++   find_call
+++   onCallEstablished ooh323c_o_4
    -- OOH323/602-bf43 answered SIP/501-09b4e060
We're at 129.125.21.241 port 17612
Adding codec 0x4 (ulaw) to SDP
Adding codec 0x8 (alaw) to SDP
Adding non-codec 0x1 (telephone-event) to SDP
Reliably Transmitting (no NAT) to 129.125.71.172:5060:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 129.125.71.172:5060;rport;branch=z9hG4bK54C0A2207F8FC2C3D514805AC6CF3749;received=129.125.71.172
From: "Anneke X-lite@wingtip112" <sip:501@129.125.21.241>;tag=738462257
To: <sip:602@129.125.21.241>;tag=as4303820b
Call-ID: 443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172
CSeq: 18832 INVITE
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Contact: <sip:602@129.125.21.241>
Content-Type: application/sdp
Content-Length: 244

v=0
o=root 11555 11555 IN IP4 129.125.21.241
s=session
c=IN IP4 129.125.21.241
t=0 0
m=audio 17612 RTP/AVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -

---

<-- SIP read from 129.125.71.172:5060:
ACK sip:602@129.125.21.241 SIP/2.0
Via: SIP/2.0/UDP 129.125.71.172:5060;rport;branch=z9hG4bK2453C8D95BA5E050AEB9D10880A040C9
From: "Anneke X-lite@wingtip112" <sip:501@129.125.21.241>;tag=738462257
To: <sip:602@129.125.21.241>;tag=as4303820b
Contact: <sip:501@129.125.71.172:5060>
Call-ID: 443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172
CSeq: 18832 ACK
Max-Forwards: 70
Content-Length: 0


--- (9 headers 0 lines)---
---   onCallCleared ooh323c_o_4
---   find_call
+++   find_call
---   ooh323_hangup
    hanging 602
+++   ooh323_hangup
  == Spawn extension (macro-dial, s, 10) exited non-zero on 'SIP/501-09b4e060' in macro 'dial'
  == Spawn extension (macro-dial, s, 10) exited non-zero on 'SIP/501-09b4e060' in macro 'exten-vm'
  == Spawn extension (macro-dial, s, 10) exited non-zero on 'SIP/501-09b4e060'
Scheduling destruction of call '443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172' in 32000 ms
set_destination: Parsing <sip:501@129.125.71.172:5060> for address/port to send to
set_destination: set destination to 129.125.71.172, port 5060
Reliably Transmitting (no NAT) to 129.125.71.172:5060:
BYE sip:501@129.125.71.172:5060 SIP/2.0
Via: SIP/2.0/UDP 129.125.21.241:5060;branch=z9hG4bK02074b63
From: <sip:602@129.125.21.241>;tag=as4303820b
To: "Anneke X-lite@wingtip112" <sip:501@129.125.21.241>;tag=738462257
Contact: <sip:602@129.125.21.241>
Call-ID: 443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172
CSeq: 102 BYE
User-Agent: Asterisk PBX
Max-Forwards: 70
Content-Length: 0


---
---   ooh323_destroy
 Destroying 602
+++   ooh323_destroy

<-- SIP read from 129.125.71.172:5060:
SIP/2.0 200 Ok
Via: SIP/2.0/UDP 129.125.21.241:5060;branch=z9hG4bK02074b63
From: <sip:602@129.125.21.241>;tag=as4303820b
To: "Anneke X-lite@wingtip112" <sip:501@129.125.21.241>;tag=738462257
Contact: <sip:501@129.125.71.172:5060>
Call-ID: 443E55E1-9961-48C7-B5AA-D58BA21F6B66@129.125.71.172
CSeq: 102 BYE
Server: X-Lite release 1105d
Content-Length: 0

Common codecs among Ekiga and X-Lite

As recommended on the TrixBox.org fora, we try to limit the codecs set to the common ones. to do so, we register Ekiga as a SIP phone to the TrixBox and make a call; the Ekiga log shows then the following:

10:07:42 Started Ekiga 2.0.3 for user fabio
10:07:47 Registered to 129.125.21.241
10:07:57 Call from Anneke SIP freePBX
10:07:59 Answering incoming call
10:08:00 Opened Intel ICH5 for recording with plugin ALSA
10:08:00 Opened codec PCMU for transmission
10:08:00 Opened Intel ICH5 for playing with plugin ALSA
10:08:00 Opened codec PCMU for reception
10:08:00 Connected with Anneke SIP freePBX using Asterisk PBX
10:08:10 Closed codec PCMU which was opened for transmission
10:08:10 Closed codec PCMU which was opened for reception
10:08:11 Local user cleared the call 

The X-Lite unluckily doesn't report any codec information.

From this log we can conclude that the used codec is the Ekiga's PCMU, which is likely to be X-Lite's G711u.

Ekiga SIP/H323 capabilities

Ekiga is basically gnomemeeting with SIP capabilities added. Ekiga was used at a certain point in order to discover codec-related problems and to conveniently test Asterisk's setup.

At a certain point it was not clear any more which protocols Ekiga was using: removing the gatekeeper parameters made impossible to make any calls (even despite the problem that when the gateway parameter is set, peer-to-peer H323 calls cannot be made any more). Moreover, Once a SIP account is cearted and used, Ekiga starts to listen to all the SIP ports even if the SIP account is disabled.

These and other fuzzy behaviors led us back to gnomemeeting, which can only support H323.

A small experiment with Ohphone -> Asterisk -> X-Lite

Inspired by a test found on the ooh323c-devel mailing list, we tried shortly to call a SIP extension of Asterisk by using Ohphone:

As a test first we start the gatekeeper gnugk:

gnugk -ttt

We then start GnomeMeeting on another linux workstation.

On a third linux workstation we dial

ohphone -g 129.125.71.171 -u 601 -e -f -T 602

this succeeds in calling the GnomeMeeting. see the log:

15:21:28 Started GnomeMeeting 1.2.3 for user fabio
15:28:58 Gatekeeper set to GNU Gatekeeper@129.125.71.171
16:31:55 Call from 601
16:32:03 Answering incoming call
16:32:03 Opened Intel ICH5 for recording with plugin ALSA
16:32:03 Opened codec MS-GSM{sw} for transmission
16:32:03 Connected with 601 using Open H323 Project OhPhone	1.4.5
16:32:03 Closed codec MS-GSM{sw} which was opened for transmission

On the other side, Ohphone reports:

OhPhone Version 1.4.5 by Open H323 Project on Unix Linux (2.6.18-3-686-i686)

Incoming channel port ranges 5000 to 5999
Local username: 601
TerminateOnHangup is 1
Auto answer is 0
DialAfterHangup is 0
FastStart is 0
H245Tunnelling is 0
SilenceSupression is 0
H245InSetup is 1
Jitter buffer: 50-250 ms
Connect port: 1720

Video receive disabled

Video transmit disabled


Sound output device: "Default"
Sound  input device: "Default"
User Input Send Mode: as H.245 string
Codecs (in preference order):
 Table:
   G.711-ALaw-64k <1>
   G.711-uLaw-64k <2>
   G.726-16k{sw} <3>
   G.726-24k{sw} <4>
   G.726-32k{sw} <5>
   G.726-40k{sw} <6>
   GSM-06.10{sw} <7>
   LPC-10{sw} <8>
   MS-GSM{sw} <9>
   MS-IMA-ADPCM{sw} <10>
   SpeexIETFNarrow-11k{sw} <11>
   SpeexIETFNarrow-15k{sw} <12>
   SpeexIETFNarrow-18.2k{sw} <13>
   SpeexIETFNarrow-24.6k{sw} <14>
   SpeexIETFNarrow-5.95k{sw} <15>
   SpeexIETFNarrow-8k{sw} <16>
   SpeexIETFWide-11.55k{sw} <17>
   SpeexIETFWide-17.6k{sw} <18>
   SpeexIETFWide-28.6k{sw} <19>
   SpeexNarrow-11k{sw} <20>
   SpeexNarrow-15k{sw} <21>
   SpeexNarrow-18.2k{sw} <22>
   SpeexNarrow-24.6k{sw} <23>
   SpeexNarrow-5.95k{sw} <24>
   SpeexNarrow-8k{sw} <25>
   SpeexWNarrow-8k{sw} <26>
   SpeexWide-11.55k{sw} <27>
   SpeexWide-17.6k{sw} <28>
   SpeexWide-28.6k{sw} <29>
   T.38-UDP <30>
   UserInput/hookflash <31>
   UserInput/basicString <32>
   UserInput/dtmf <33>
   UserInput/RFC2833 <34>
 Set:
   0:
     0:
       G.711-ALaw-64k <1>
       G.711-uLaw-64k <2>
       G.726-16k{sw} <3>
       G.726-24k{sw} <4>
       G.726-32k{sw} <5>
       G.726-40k{sw} <6>
       GSM-06.10{sw} <7>
       LPC-10{sw} <8>
       MS-GSM{sw} <9>
       MS-IMA-ADPCM{sw} <10>
       SpeexIETFNarrow-11k{sw} <11>
       SpeexIETFNarrow-15k{sw} <12>
       SpeexIETFNarrow-18.2k{sw} <13>
       SpeexIETFNarrow-24.6k{sw} <14>
       SpeexIETFNarrow-5.95k{sw} <15>
       SpeexIETFNarrow-8k{sw} <16>
       SpeexIETFWide-11.55k{sw} <17>
       SpeexIETFWide-17.6k{sw} <18>
       SpeexIETFWide-28.6k{sw} <19>
       SpeexNarrow-11k{sw} <20>
       SpeexNarrow-15k{sw} <21>
       SpeexNarrow-18.2k{sw} <22>
       SpeexNarrow-24.6k{sw} <23>
       SpeexNarrow-5.95k{sw} <24>
       SpeexNarrow-8k{sw} <25>
       SpeexWNarrow-8k{sw} <26>
       SpeexWide-11.55k{sw} <27>
       SpeexWide-17.6k{sw} <28>
       SpeexWide-28.6k{sw} <29>
     1:
       T.38-UDP <30>
     2:
       UserInput/hookflash <31>
     3:
       UserInput/basicString <32>
       UserInput/dtmf <33>
       UserInput/RFC2833 <34>


Listening interfaces : ALL:1720
Gatekeeper set: GNU Gatekeeper@129.125.71.171
601 is calling host 602
Command ? Ringing phone for "Fabio Bracci" ...
Call with "Fabio Bracci" established.
Could not open sound device Default - Check permissions or full duplex capability.
"Fabio Bracci" has cleared the call, duration  0:31

Command ? x
Exiting.
OhPhone ended.


We then try to call an extension on Asterisk:

fabio@wingtip112:~$ ohphone -g 129.125.71.171 -u 601 -e -f -T 502
OhPhone Version 1.4.5 by Open H323 Project on Unix Linux (2.6.18-3-686-i686)

Incoming channel port ranges 5000 to 5999
Local username: 601
TerminateOnHangup is 1
Auto answer is 0
DialAfterHangup is 0
FastStart is 0
H245Tunnelling is 0
SilenceSupression is 0
H245InSetup is 1
Jitter buffer: 50-250 ms
Connect port: 1720

Video receive disabled

Video transmit disabled


Sound output device: "Default"
Sound  input device: "Default"
User Input Send Mode: as H.245 string
Codecs (in preference order):
 Table:
   G.711-ALaw-64k <1>
   ...
Listening interfaces : ALL:1720
Gatekeeper set: GNU Gatekeeper@129.125.71.171
601 is calling host 502
Command ? Gatekeeper could not find user "502"

So now the problem seems to be that asterisk doesn't report his extensions to the gatekeeper. Further research is needed.

Note: Scheduling destruction of call ...

Conclusion

After many trial and error runs and following instructions on the web we have not been able to directly add H323 extensions to the Trixbox. Installing a gatekeeper got us a bit further in the sence that a connection can be established but is destroyed as soon as the ringed extension is picked up. All suggestions on the web come from people with large networks with a hardware H323 solution (Cisco Call manager, Alcatel).