Copyright © 2003, 2004, 2005 Kevin O'Donnell
Abstract
JVR is an IVR/CT application framework that allows Java applications to control Dialogic telephony hardware. It provides a JNI bridge between the Dialogic System Release Software and the Java Virtual Machine.
This document serves as a programming guide for Java developers. By necessity, it also provides some documentation of the Dialogic software API.
The official location of this document is:
Table of Contents
Before getting into the details of IVR/CT programming, it's probably best to get some of the basics out of the way.
| 1.1. | What is JVR trying to accomplish? What are the goals of the application? |
The goal of the JVR project is to map as much of the Dialogic C API into Java classes as possible. In most cases, this mapping is pretty straightforward, with minor changes like a (char*) pointer is changed to a java.lang.String object. Sometimes it is not possible to extend the API into Java exactly as Dialogic implemented it. For example, everywhere that Dialogic make suse of unsigned short, the Java code needs to use int. Also, you can't register a Java method as a native-context signal handler. Where these issues exist we tried to keep the solutions consistent. If you spot inconsistencies, let us know. We want JVR to be predictable. JVR sometimes introduces constructs that do not exist in the Dialogic API at all. An example would be the event handling system. Here, JVR makes use of the familiar Event Listener pattern to dispatch Event objects to JVR components. JVR takes care of calling all of the relevant event information functions in advance. While this is new in the sense that Dialogic does not have a similiar pattern, it is old news to Java programming in general. | |
| 1.2. | Why does the API look so much like the Dialogic API? |
The API looks like the Dialogic API because that's a primary goal of the project: extending the API into Java. While it is possible to simplify the Dialogic API and still support the most common programming needs, the resulting JVR API would not be as flexible in the long term. Also, by keeping as close as possible to the original API, we negate the need for alot of documentation. For example, consider the function dx_playvox:
| |
| 1.3. | How much of the Dialogic API will you need to learn? |
Only as much as you need to. If all you want to do is answer incoming calls (on regular, analog phone lines) and play the same recorded message to each caller, you'll only need dx_wtring(), dx_sethook(), dx_playvox() and maybe a few other functions. If you want to handle user-input and play back variable content to the user, you'll need dx_getdig() and some other functions. You get the idea. This is another reason why JVR does not impose any ideals on how the Dialogic API should be mapped: You are the only qualified person to decide how your applications should work. Thankfully, there is alot of sample code available in the JVR Unit Test package (net.threebit.jvr.tests). You can browse them online too. | |
| 1.4. | Will you need to know JNI? |
No. Everything is handled internally by JVR. Of course, if there is a part of the Dialogic API that JVR has not implemented yet, then you will have everything you need to start extending the JVR package as you require. |
This section will get you started with JVR. One thing though before we begin: the online copy of this document is updated continously as new development is performed and it may be out-of-sync with the most recent release. If the instructions here seem inconsistent with the version you downloaded, it's probably because the source code has been changed since then and the documentation is synchronized to the code. Just something to keep in mind.
Dialogic System Release Software. Windows users will require 5.1.1 and Service Pack 1. Linux users will require 5.1 and Service Pack 1, as well as the Linux Streams (LIS) software. Consult the Dialogic installation guides for more details.
The Dialogic GlobalCall packages must be installed (GlobalCall is included with the standard Dialogic software - just be sure to select it during installation). JVR uses the GlobalCall event functions internally even if the application does not call any method within the gc class. Windows users should simply choose a complete installation. Linux users should ensure that the GC package is installed.
Optional: To compile JVR, you will require Ant and the GNU Compiler Collection. Since JVR is a Java package, it is assumed you are already familiar with Ant. Most Linux distributions will already include the GNU Compiler Collection (gcc, ld, make, etc). Windows users will need to install the Cygwin "Linux-Like" Environment for Windows.
Notice To Windows Users. The Win32 binary releases of JVR include binary DLL files from the Cygwin project. JVR/Threebit provides a mirror of all of the Cygwin binaries and sources. While you do not need to download any additional files (they are included), we must let you know that the mirror exists in order to comply with the GPL.
JVR should work with any Dialogic card that uses the Dialogic System Release Software. That said, the following cards have been tested with JVR. If your card is not listed please send an email to kevino@threebit.net so I can add your card to the list.
This section documents how to install a binary build of JVR on Linux or Windows. See the developer chapter for information on how to download and build JVR from source.
Download the most recent Linux version of JVR and save it in /tmp. This procedure assumes you opt for the tgz archive.
cd /tmp
# Modify X and Y to reflect appropriate version numbers
wget http://threebit.net/projects/jvr/download/jvr-X-Y-linux.tgz
Extract the TAR file into /usr/local/jvr. If you choose to install JVR into a different directory, that's ok too. Just make substitutions as required.
cd /usr/local tar zxvf /tmp/jvr-X-Y-linux.tgz
Check Your Installation
The first thing you will want to do after installing JVR is check that everything from the Dialogic runtime to the JVR runtime is working properly.
First, run bin/dx_open_test. It should print out OK and exit. If it prints out FAILED then something is wrong with your Dialogic installation. dx_open_test is a simple C program that opens a handle to the first Dialogic Voice Resource (dxxxB1C1). It is an extremely simple test to verify that the Dialogic runtime is working and at least one voice card has been detected. If this test fails, then don't even bother trying to get JVR to work until you've fixed whatever is wrong.
Next we test that JVR can access the Dialogic runtime. To do so we will run an application that does the exact same thing as dx_open_test, except that it will use Java/JVR instead of C. Invoke the test by running bin/jvr_dx_open_test.bat (win32) or bin/jvr_dx_open_test.sh (linux). Once again, OK is good and an exception is bad. You may need to change the JAVA_HOME setting.
Examples
Now that JVR is installed you'll want to poke around a bit before attempting to build your own application. The easiest way to do that is run the JVRConsole and select an example from the drop down menu. From the main JVR directory, run bin/jvrconsole.bat or bin/jvrconsole.sh to run the GUI, then select one of the examples from the Example menu. The purpose of each example is contained in the Javadoc output for each example class. See net.threebit.jvr.console.
This section will document how to write applications using JVR, and how to use JVR itself (invocation, system parameters, OS issues, etc).
Unfortunately, it hasn't been written yet.
This section will document how to write applications using JVR, and how to use JVR itself (invocation, system parameters, OS issues, etc).
Unfortunately, it hasn't been written yet.
## Various factoids that I have not integrated into the
## regular documentation yet.
% make -f Makefile.win32 jnifields.o
g++ -fPIC -w -c \
-I/cygdrive/c/j2sdk1.4.2_01/include \
-I/cygdrive/c/j2sdk1.4.2_01/include/win32 \
-o jnifields.o \
jnifields.cpp
In file included from /cygdrive/c/j2sdk1.4.2_01/include/jni.h:27,
from jnifields.cpp:22:
/cygdrive/c/j2sdk1.4.2_01/include/win32/jni_md.h:16: error: syntax error before
`;' token
See http://ptolemy.eecs.berkeley.edu/ptolemyII/ptII3.0/ptII3.0.2/doc/codeDoc/jni/JNIUtilities.html
##
## When using dx.reciottdata, dx.playiottdata, or any function that
## takes a DX_XPB parameter, use this to record and playback to
## WAV files that work with Windows Media Player, etc.
##
final DX_XPB xpb = new DX_XPB();
xpb.wFileFormat = dx.FILE_FORMAT_WAVE;
xpb.wDataFormat = dx.DATA_FORMAT_PCM;
xpb.nSamplesPerSec = dx.DRT_11KHZ;
xpb.wBitsPerSample = 8;
This section documents the procedure that should be followed when making a release of JVR. Skip this section unless you're trying to build a binary release and uploaded it to the threebit website.
Make final changes to the release notes and perform a final CVS checkin of all code. Start the release-notes for the next release (move the TODO section).
Create a TAG for this release. The tag is created at the tip of HEAD (the development branch). Do this on BOA. Make the tag a branch since we may come back to do maintenance on it.
cd ~/code/jvr; cvs rtag -b jvr-0-1 jvr
On a Linux and Win32 machine:
Edit build.xml and edit the release.tag property to match the name of the tag/branch in the previous step, then run "ant release".
Copy the TGZ and ZIP files to the JVR website:
scp jvr-* kevino@threebit.net:/www/threebit.net/projects/jvr/download
On boa, edit the download page to reflect the new release. Run ~/bin/jvr-www-update.sh to rebuild the documentation, etc.
Send an email to the mailing list with a copy of the release notes attached.
This appendix contains the releases notes for each version of JVR.
* Implemented more Voice API functions. dx_deltones(), dx_chgdur(), dx_chgfreq(), dx_chgrepcnt(), dx_initcallp() * Added new symbol. TID_BUSY1, TID_BUSY2, TID_DIAL_INTL, TID_DIAL_LCL, TID_DIAL_XTRA, TID_FAX1, TID_FAX2, TID_RNGBK1, TID_DISCONNECT, * User I/O functions added to support user supplied input/output stream playback. dx_setuio() implemented internally. * Moved to the LGPL license to allow JVR to be integrated/distributed with non-GPL works. * Increased the number of native-context buffers for DX_XPB, DIGBUF GC_PARM_BLK and DX_IOTT structures to 200. * Completed Javadoc links to the official Dialogic API. * ms.addtoconf() and ms.remfromconf(), ATMS_TSSGBIT(), ms_dsprescount(), ms_setbrdparm(), ms_setcde() * Skeletal support for DCB (Conferencing) functions. * Additional example code (console package). * DX_XPB.getWavFormat(File file) added to simplify the creation of a parameter block for wav files.
Example code for determining available Dialogic hardware.
http://threebit.net/pipermail/jvr-general/2004-April/000167.html
http://threebit.net/pipermail/jvr-general/2004-January/000022.html
dx_fileopen and dx_fileclose provided on Linux platforms to enable use
of dx.playf/dx.recf functions.
dx_wtcallid, though I could not get it to return caller ID information
on my D/41ESC board. Could be my hardware though, so we'll assume
the function is working ok.
dx_getparm, dx_setparm and associated symbols.
dx_open_test native executable. After installing JVR, run this program
to verify that the underlying Dialogic system is functional. Always
make sure that this program reports "OK" before sending in a JVR
problem report.
DxOpenTest JVR class. Once the Dialogic runtime is confirmed, this
JVR based application will do a dx.open test.
Required Cygwin DLLs are included in the Windows release (in JVR/bin).
GlobalCall support expanded considerably.
Critial (show stopper) JNI bugs resolved.
JVR Event model fixes.
ISDN via GlobalCall supported and tested.
T1 via GlobalCall supported and tested.
T1 via "R4 ISDN" programming model supported and tested.
GCOutbound and ImmediateCAP (Call Analysis and Progress) utility classes.
Thanks to Shawn Deleurme for doing the Linux binary build....
Combination of bug fixes, new features and documentation.
New Dialogic API Mappings
ATDT_STATUS
ATDT_TSSGBIT
ATDX_HOOKST
dt_settssig
dt_settssigsim
dt_xmitwink
dx_playwav
dx_recwav
Documentation
net.threebit.jvr.dx Javadocs improved significantly.
Bugs
gc_Start() was not being called before event handling started.
Thanks To:
Andrew Taylor
Kevin W. English
Matt Darnell
Quick bug fixing release.
Global Call
gc_AttachResource
gc_CRN2LineDev
gc_Detach
gc_GetCallState
gc_GetCTInfo
gc_GetResourceH
gc_GetXmitSlot
gc_LoadDxParm
gc_SetChanState
gc_GetCTInfo removed due to compile issues. Will be fixed later.
Documentation
- Added "required software" section to the documentation.
- Added a "readme" that refers the user to the online docs.
Build Process
- By default, and now builds the JAR file and all native libs.
- New task: "prep" will obtain lib/junit.jar automatically.
Examples
- Example1 and Example2 added to JVRConsole.
Misc
- Various bugs, typos and paper bag issues.
Thanks To:
Andrew Taylor - testing, suggestions, and more testing.
This is the first release of the JVR package. I had planned to hold
off on the first release until the GlobaCall support was complete, but
there has been enough interest in the non-GlobalCall portions to
warrant one anyway.
Below is a list of the bindings that have been completed to date.
See the Javadoc, HTML and/or PDF documentation for full details
on how to use JVR.
Device Handling
dt_open, dt_close
dx_open, dx_close
ms_open, ms_close
SC Bus Routing
ag_getxmitslot, ag_listen, ag_unlisten
dt_getxmitslot, dt_listen, dt_unlisten
dx_getxmitslot, dx_listen, dx_unlisten
ms_getxmitslot, ms_listen, ms_unlisten
SRL Event Management
dt_setevtmsk
dx_setevtmsk
ms_setevtmsk
Conferencing / MSI Stations
ms_delconf
ms_estconf
ms_genring
ms_monconf
ms_stopfn
ms_unmonconf
Voice Processing
ATDX_CONNTYPE
ATDX_CPTERM
ATDX_LONGLOW
ATDX_SHORTLOW
ATDX_SIZEHI
ATDX_TERMMSK
ATDX_TRCOUNT
dx_bldtgen
dx_clrdigbuf
dx_dial
dx_fileopen, dx_fileclose, dx_fileerrno (win32 only)
dx_getdig
dx_playtone
dx_playtoneEx
dx_playvox
dx_playwav
dx_rec
dx_recf
dx_sethook
dx_stopch
dx_wtring
Standard Release Library (SRL)
ATDV_ERRMSGP
ATDV_LASTERR
ATDV_NAMEP
sr_getevtdatap
sr_getevtdev
sr_getevtlen
sr_getevttype
sr_waitevt
sr_waitevtEx
Global Call
gc_CCLibStatusEx
gc_DropCall
gc_GetCallInfo
gc_GetMetaEvent, gc_GetMetaEventEx
gc_Listen
gc_MakeCall
gc_ReleaseCallEx
gc_ResetLineDev
gc_Start
gc_Stop
gc_UnListen
gc_WaitCall
gc_AnswerCall
----- Notes ----------------------------------------------------------
* The Global Call package must be installed. The event handling
routines make use of gc_GetMetaEvent() and gc_GetMetaEventEx().
Even if your application will not be using Global Call directly,
it must be installed.
If you are reading this, then you are having trouble getting your ISDN configuration running. This section will bring you through using the ISDIAG program to receive and place an ISDN call. It may not work for you as-is, since one of the things about ISDN is that each telephone company has slightly different needs - but at least you'll have more information than I did the first time I tried to do this.
This tutorial assumes that your ISDN protocol is set already (4ESS/5ESS, DMS, etc).
It's time to run ISDIAG which is located in the Dialogic "bin" directory. This tutorial assumes you are running on Windows - Linux users should adapt filenames as necessary. Running ISDIAG with no parameters gives you a help message:
Dialogic ISDN Diagnostic Utility
Copyright(c) 1998 Dialogic Corporation
Version Package 3 v1.01
USAGE: isdiag <board> <channel> <boardtype> <type> <voice>
board =====> board #
channel ===> 1-23 for T1
===> 1-30 for E1
===> 1-2 for BRI
boardtype => 't' = T1
=> 'e' = E1
=> 'b' = BRI
=> 'b2' = BRI/2VFD
type ======> 'p' = PEB
's' = SCBUS
trace mode =====> 'r' = Trace mode, No waitcall issued at startup
default: Normal mode, waitcall issued at startup
voice =====> 'v' = voice supported(span cards)
default: no voice support(dti cards)
I am using a D/480SC-2T1 card so I will choose the first T1 (board 1) and the first timeslot on that T1 (channel 1). Obviously the board type is T1 and SCBUS.
Thomas Fejes contributes: Regarding the ISDIAG trace mode command line option ('r'): it is used when you want to capture an ISDN trace while another ISDN application is running. For example, you have a commercial Dialogic application running in the field that is misbehaving at the ISDN level and neither it nor the telco provides any ISDN tracing facility. Using the 'r' option, you can use ISDIAG to 'eavesdrop' at the ISDN level without interfering with the commercial app. Run "isdiag 1 1 t s r" in parallel with the commercial app and then choose the normal options to create a trace file. The key thing that the 'r' option does is it avoids interacting with the trunk by not issuing a reset or waitcall (which ISDIAG does without the 'r' option). Note that since ISDIAG only works on Springware boards (e.g. D/xxxSC, D/xxxPCI and D/xxxJCT boards), you cannot use this method with DM3 boards.
Running ISDIAG with parameters this time we get to the opening menu. If you don't get to this screen then you have probably forgotten to start the Dialogic service.
C:\>isdiag 1 1 t s
-----------------------------------------------------------------------------
MAIN MENU ISDIAG Version Package 3 - Beta 1.00
LOS OOF RAI AIS CRC R/E DCH
1. set call parameters 0 0 0 0 0 0 0
2. request calling party number(ANI)
3. send maintenance request
4. display information
5. drop call F1. help menu
6. make call
7. play/record/dial
8. set info
9. send message
10. start/stop/browse trace
11. restart and waitcall
12. shell to DOS
13. change current channel
14. Hold/Retrieve Call
15. dpnss supp service
ESC exit
Please enter choice:
Just under "MAIN MENU" you should see nothing. If you see "RED ALARM" or "YELLOW ALARM" then something is wrong with the T1. Wait two minutes for the alarms to clear (patience is key!). If they don't go away then I recommend you call your telco - they will be able to debug the situation from their side better than you can guess about it from your side.
In the upper-right you will see various status bits about your D channel and the T1 itself. In a perfect world it should be all zeros:
LOS OOF RAI AIS CRC R/E DCH 0 0 0 0 0 0 0
In the end, if DCH is 1 then your D-channel is down. If after two minutes it has not come up (changed to 0) then call your telco.
First, let us document each menu option and it's purpose. For display purposes the submenus that appear under each menu option are displaed 'inline'. There are several parts of ISDIAG I have never used so I haven't bothered documenting them.
MAIN MENU
1. set call parameters
1. change destination number type
0. Unknown
1. International Number
2. National Number
4. Subscriber Number
5. Abbreviated Number
"National Number" is what you want if you are in the US or Canada
and are calling another number in the US or Canada. If you are from
someplace else (or are calling someplace else), please let me know your
settings so I can update this document.
2. change destination number plan
0. Unknown
1. ISDN/Telephony number plan(Rec. E.164/E.163)
2. Telephony number plan(E.163)
9. Private number plan
"ISDN/Telephony" is what you want.
3. change facility coding value
0. Clear coding value
01. SDN
02. MEGACOM 800
03. MEGACOM
06. ACCUNET
08. I800
16. ATT MULTIQUEST
I am unsure what the Facility Coding Value means, but I
can tell you that I had to set it to 0 (Clear Coding Value).
Again - if you can offer an explanation let me know so I can update
this document.
4. change facility feature service
Not used / Not documented.
5. change presentation indicator
0. Presentation allowed
1. Presentation restricted
2. Number not available due to interworking
3. Reserved
This controls what information the phone network will
display to the end user when you make an outgoing call.
6. change calling party number
0. Number is sent en_bloc
1. International number
2. National number
0. Unknown
1. ISDN/Telephony number plan(Rec. E.164/E.163)
2. Telephony number plan(E.163)
9. Private number plan
Again, when calling to/from the US and Canada from within
the US/Canada, you specify the calling number as a National Number
that uses the ISDN/Telephone number plan.
4. Subscriber number
5. Overlap sending
7. do not send calling party number
Not used / Not documented.
8. change info. transfer capability
Not used / Not documented.
9. change user info. layer 1 protocol
01. CCITT standardized rate adaption V.110/X.30
02. Recommendation G.711 Mu-law
03. Recommendation G.711 A-law
04. Recommendation G.721 32kbit/s ADPCM & Recommendation I.460
07. Non-CCITT standardized rate adaption
16. Remove layer 1 protocol field
My PRI is connected to Quest so I had to change this value
to "G.711 Mu-law.
10. change user rate
Not used / Not documented.
11. change called party number
Enter called party number:
I am not certain if you have to set this value but
I have been doing it anyway. Use the full 10 digits.
12. Disable called party Subaddressing
13. Disable calling party Subaddressing
I'm not certain what Subaddressing is, but I disabled
it. After you disable it these menu options change to say
"Enable ..."
2. request calling party number(ANI)
Not used / Not documented.
3. send maintenance request
Not used / Not documented.
4. display information
1. Display Called Party Subaddress
Not used / Not documented.
2. Display User-User Info.
Not used / Not documented.
3. Display B channel information
BOARD: 1
CHAN: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
STATUS: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
CHAN: 17 18 19 20 21 22 23
STATUS: 00 00 00 00 00 00 00
This section will show the status of each B
channel in the PRI. If they are all zeros than you're
all good.
4. Display D channel information
Returns you to the main menu. The D-channel
information is in the upper-right hand corner.
5. drop call
When you have a connected call (either inbound
or outbound, this option hangs up.
6. make call
Call: <enter the phone number to call>
Quest informed me that even if the call is long distance,
I don't need to put a "1" before the area code - just put in the
10 digit number you are calling. Your Telco, or ISDN protocol
if not using 5ESS, may have different requirements.
7. play/record/dial
Not used / Not documented.
8. set info
Not used / Not documented.
9. send message
Not used / Not documented.
10. start/stop/browse trace
1. Start Trace
Please enter the full path name and filename:
Enter a filename "c:\trace.log" then hit
enter. From this point on the messages that are
received and transmitted on the ISDN D-channel will
be recorded in binary form. The ISDTRACE utility is
used afterwards to convert the file to a human-
readable format.
2. Stop Trace
Stops a running trace.
3. Browse Trace
Not used / Not documented.
11. restart and waitcall
Please enter channel to restart:
Before using ISDIAG to receive an incoming
call, you have to tell it what channel to expect the
call on. Enter a B-channel number here (1 to 23).
12. shell to DOS
Not used / Not documented.
13. change current channel
Change current channel to:
When making outbound calls, ISDIAG will
use whatever channel you specified on the command
line until you use this option to select another
B channel. Enter a B-channel number here (1 to 23).
14. Hold/Retrieve Call
Not used / Not documented.
15. dpnss supp service
Not used / Not documented.
Use this procedure to make an outgoing call with ISDIAG. This call was made using a D/480SC-2T1 card connected to a Quest PRI running the 5ESS protocol.
Restart ISDIAG.
Ensure that your D-channel is still up (DCH=0).
1. Set Call Parameters
3. Change facility coding value
0. 0. Clear coding value
5. Change presentation indicator
0. Presentation allowed
6. Change calling party number
2. National number
1. ISDN/Telephony number plan(Rec. E.164/E.163)
Enter the 10-digit number you are calling from.
9. Change user info. layer 1 protocol
2. Recommendation G.711 Mu-law
11. Change called party number
Enter called party number:
Enter the 10-digit number you are calling.
12. Disable called party Subaddressing
13. Disable calling party Subaddressing
Hit ESC to return to the main menu.
10. Start/stop/browse trace
1. Start Trace
Please enter the full path name and filename: c:\trace.log
6. Make call
Call: Enter the 10-digit number you are calling.
When you have hit enter, the status line at the bottom of the
screen will be updated with events as the call is placed.
send SETUP to NETWORK
The first step in making a call.
received PROCEEDING from FW
The SETUP message was accepted and the call
is being routed through the phone network.
received ALERTING message from NETWORK
The remote end is ringing.
received CONNECT message from NETWORK
The remote end has picked up.
If your call did not go through, then skip the "Drop Call" step
and move right to stopping the trace file.
5. Drop call
send DEALLOC to FW
10. Start/stop/browse trace
2. Stop Trace
EXIT.
Convert the trace file from binary to text format:
C:\>isdtrace trace.log trace.txt Dialogic ISDN Trace Utility Copyright (c) 1997 Dialogic Corporation Version 1.00-Alpha-0.10 BINARY TRACE ISDN Protocol: PRI 4ESS/5ESS
And here is the output from the trace file.
RECEIVE
Command=1 SAPI=0x00
TEI=0x00
0x01 0x9b Receive Ready
TIME STAMP: 2/28/2004, 21:12:41.819
TRANSMIT
Response=1 SAPI=0x00
TEI=0x00
0x01 0xa3 Receive Ready
TIME STAMP: 2/28/2004, 21:12:41.819
TRANSMIT
Command=0 SAPI=0x00
TEI=0x00
0x9a 0xa2 Information
Dest=0 CR=0x0015
SETUP(0x05)
1: BEARER CAPABILITY(0x04)
2: IE Length(0x03)
3: 1------- Extension Bit
-00----- Coding Standard
---00000 Info. Transfer Cap.
4: 1------- Extension Bit
-00----- Transfer Mode
---10000 Info. Transfer Rate
5: 1------- Extension Bit
-01----- Layer 1 Indent
---00010 User Info. Layer 1
1: CHANNEL ID(0x18)
2: IE Length(0x03)
3: 1------- Extension Bit
-0------ Interface ID Present
--1----- Interface Type
---0---- Spare
----1--- Preferred/Exclusive
-----0-- D-Channel Indicator
------01 Info. Channel Sel.
3.2: 1------- Extension Bit
-00----- Coding Standard
---0---- Number Map
----0011 Channel/Map Element
4: 1------- Extension Bit
-0000001 Channel Number/Slot Map
1: CALLING PARTY NUM(0x6c)
2: IE Length(0x0c)
3: 0------- Extension Bit
-010---- Type Of Number
----0001 Numbering Plan ID
3a: 1------- Extension Bit
-00----- Presentation Indicator
---000-- Spare
------00 Screening Indicator
6134564561 Number Digit(s)
1: CALLED PARTY NUM(0x70)
2: IE Length(0x0b)
3: 1------- Extension Bit
-010---- Type of Number
----0001 Numbering plan ID
6138672620 Number Digit(s)
TIME STAMP: 2/28/2004, 21:12:41.867
RECEIVE
Response=0 SAPI=0x00
TEI=0x00
0x01 0x9c Receive Ready
TIME STAMP: 2/28/2004, 21:12:41.867
RECEIVE
Command=1 SAPI=0x00
TEI=0x00
0xa2 0x9c Information
Orig=1 CR=0x8015
CALL PROCEEDING(0x02)
1: CHANNEL ID(0x18)
2: IE Length(0x03)
3: 1------- Extension Bit
-0------ Interface ID Present
--1----- Interface Type
---0---- Spare
----1--- Preferred/Exclusive
-----0-- D-Channel Indicator
------01 Info. Channel Sel.
3.2: 1------- Extension Bit
-00----- Coding Standard
---0---- Number Map
----0011 Channel/Map Element
4: 1------- Extension Bit
-0000001 Channel Number/Slot Map
TIME STAMP: 2/28/2004, 21:12:41.883
TRANSMIT
Response=1 SAPI=0x00
TEI=0x00
0x01 0xa4 Receive Ready
TIME STAMP: 2/28/2004, 21:12:41.883
RECEIVE
Command=1 SAPI=0x00
TEI=0x00
0xa4 0x9c Information
Orig=1 CR=0x8015
ALERTING(0x01)
1: PROGRESS INDICATOR(0x1e)
2: IE Length(0x02)
3: 1------- Extension Bit
-00----- Coding Standard
---0---- Spare
----0001 Location
4: 1------- Extension Bit
-0001000 Progress Description
TIME STAMP: 2/28/2004, 21:12:42.803
TRANSMIT
Response=1 SAPI=0x00
TEI=0x00
0x01 0xa6 Receive Ready
TIME STAMP: 2/28/2004, 21:12:42.803
RECEIVE
Command=1 SAPI=0x00
TEI=0x00
0x01 0x9d Receive Ready
TIME STAMP: 2/28/2004, 21:12:44.795
TRANSMIT
Response=1 SAPI=0x00
TEI=0x00
0x01 0xa7 Receive Ready
TIME STAMP: 2/28/2004, 21:12:44.795
RECEIVE
Command=1 SAPI=0x00
TEI=0x00
0xa6 0x9c Information
Orig=1 CR=0x8015
CALL CONNECT(0x07)
TIME STAMP: 2/28/2004, 21:12:46.723
TRANSMIT
Response=1 SAPI=0x00
TEI=0x00
0x01 0xa8 Receive Ready
TIME STAMP: 2/28/2004, 21:12:46.723
TRANSMIT
Command=0 SAPI=0x00
TEI=0x00
0x9c 0xa8 Information
Dest=0 CR=0x0015
CALL CONNECT ACKNOWLEDGE(0x0f)
TIME STAMP: 2/28/2004, 21:12:46.731
RECEIVE
Response=0 SAPI=0x00
TEI=0x00
0x01 0x9e Receive Ready
TIME STAMP: 2/28/2004, 21:12:46.731
RECEIVE
Command=1 SAPI=0x00
TEI=0x00
0x01 0x9f Receive Ready
TIME STAMP: 2/28/2004, 21:12:48.715
TRANSMIT
Response=1 SAPI=0x00
TEI=0x00
0x01 0xa9 Receive Ready
TIME STAMP: 2/28/2004, 21:12:48.715
RECEIVE
Command=1 SAPI=0x00
TEI=0x00
0x01 0x9f Receive Ready
TIME STAMP: 2/28/2004, 21:12:50.715
TRANSMIT
Response=1 SAPI=0x00
TEI=0x00
0x01 0xa9 Receive Ready
TIME STAMP: 2/28/2004, 21:12:50.715
TRANSMIT
Command=0 SAPI=0x00
TEI=0x00
0x9e 0xa8 Information
Dest=0 CR=0x0015
CALL DISCONNECT(0x45)
1: CAUSE(0x08)
2: IE Length(0x02)
3: 1------- Extension Bit
-00----- Coding Standard
---0---- Spare
----0000 Location
4: 1------- Extension Bit
-0010000 Cause Value
TIME STAMP: 2/28/2004, 21:12:51.435
RECEIVE
Response=0 SAPI=0x00
TEI=0x00
0x01 0xa0 Receive Ready
TIME STAMP: 2/28/2004, 21:12:51.443
RECEIVE
Command=1 SAPI=0x00
TEI=0x00
0xa8 0xa0 Information
Orig=1 CR=0x8015
RELEASE(0x4d)
TIME STAMP: 2/28/2004, 21:12:51.443
TRANSMIT
Response=1 SAPI=0x00
TEI=0x00
0x01 0xaa Receive Ready
TIME STAMP: 2/28/2004, 21:12:51.443
TRANSMIT
Command=0 SAPI=0x00
TEI=0x00
0xa0 0xaa Information
Dest=0 CR=0x0015
RELEASE COMPLETE(0x5a)
TIME STAMP: 2/28/2004, 21:12:51.451
RECEIVE
Response=0 SAPI=0x00
TEI=0x00
0x01 0xa2 Receive Ready
Other resources: