NAME
zx25callout - Initiate an out-going call
SYNOPSIS
#include <zcom/zcomsys.h>
#include <zcom/zcomx25.h>
int zx25callout (zxip, vzap, fbuf, flen,
ubuf, ulen, dbit, clngaddr, caldaddr)
zx25info_type *zxip;
zaddr_type *vzap;
char *fbuf;
int flen;
char *ubuf;
int ulen;
int dbit;
char *clngaddr;
char *caldaddr;
DESCRIPTION
Routine zx25callout is
used to initiate an outgoing call on the SVC ZLU supplied in vzap. The SVC.IN, SVC.AUTO, SVC.IO
configuration is ignored for the purposes of this function (that
is, a call will be transmitted even if the V.C. terminal ZLU is
an SVC.IN). The called and calling addresses and the user data will
be obtained from the terminal ZLU configuration unless overridden
by this routine.
The libraries libzx25.a, libzcom_c.a and libpthread.a must
be linked into the calling program by giving the "-lzx25
-lzcom_c -lpthread" options to cc(1) or ld(1).
Threads Considerations
This routine may be called from a multi-threaded application
using the POSIX (1003.1c) kernel threads API package. It has the
following characteristics when called by multi-threaded applications:
- cancellation point
Thread cancellation can occur when a thread calls
this routine.
- async-cancel unsafe
The calling thread's cancelability type
must be PTHREAD_CANCEL_DEFERRED if cancellation is enabled.
- async-signal unsafe
It cannot be called from a signal handler.
- fork unsafe
It cannot be called by a child process after fork(2) but before exec(2)
See the NOTES section that follows for more information on
using this routine in a multi-threaded application.
PARAMETERS:
- zxip
ZCOM X.25 access data structure (from zx25info call).
- vzap
ZCOM address of the Virtual Circuit terminal.
- fbuf
Facilities data buffer.
- flen
Facilities data length (in bytes).
- ubuf
Call user data buffer.
- ulen
Call user data length (in bytes).
- dbit
D-bit (Used only for 1984 D-bit negotiation).
0 -
no D-bit
non-zero - D-bit set to 1
- clngaddr
User-supplied calling address buffer (if NULL, calling address
not supplied). See Notes below for its format.
- caldaddr
User-supplied called address buffer (if NULL, called address
not supplied). See Notes below for its format.
RETURN VALUE
Routine zx25callout returns
a 0 when successful. If there
was a ZCOM error, it returns a negative value.
See /opt/acc/include/zcom/zcomsys.h for
the list of ZCOM error codes and their meanings. If zx25callout itself failed, one of
the following positive error
codes is returned:
- ZxeUNKNOWN_L2_ZLU (02)
Unable to find the X.25 link ZLU for this SVC ZLU.
- ZxeREQ_TIMEOUT (04)
The remote ZCOM system did not respond within 30
seconds.
- ZxeNOT_A_SVC (05)
The ZLU specified is a PVC ZLU. You must specify
an SVC ZLU with this routine.
- ZxeSVC_NOT_IDLE (08)
The ZLU specified is already in use. That is, it
is not in the idle state and therefore can not be used to place
an outbound call request.
- ZxeLINK_IS_DOWN (11)
The X.25 link is down. Unable to accept call.
- ZxeALL_LCNs_IN_USE (12)
All of the available Logical Channels (as determined
by your subscription) are in use. Try again later.
- ZxeUNKNOWN_VC_ZLU (13)
The ZLU specified is not an X.25 Virtual Circuit
ZLU.
- ZxeINVALID_CUD_LEN (14)
The length specified for the Call User data is longer
than the maximum permissible value (usually 128 bytes).
- ZxeINVALID_FAC_LEN (15)
The length specified for the Facilities data is
longer than the maximum permissible value (usually 109 bytes).
- ZxeMUST_CALL_ZX25INFO
(17)
The zx25info() routine
has not been called. You must call zx25info before issuing
any other zx25...() calls.
- ZxeBAD_ZX25INFO_ADDR
(18)
The pointer to the zx25info_type structure does
not contain the same address that was passed to the zx25info() routine.
- ZxeX25_NOT_INITIALIZED
(98)
The ACC X.25 subsystem has not been initialized.
You must run zx25d_init before
issuing any zx25...() calls.
- ZxeX25_TBL_FULL (99)
The X.25 routines maintain an internal table for
accessing remote ZCOM nodes. This table has room to access up to
20 different ZCOM nodes (including the local node). This request
attempted to access the 21st ZCOM remote node and the internal table
used had insufficient space to save the routing data.
NOTES
The X.121 call address consists of
8 bytes, and it is used a a 15-digit BCD number plus a length digit
in the last position. For example, in hex:
DD DD DD DD DD DD DD DL
where D is a 4-bit BCD digit, whose range is from 0 to 9
L is a 4-bit length digit, whose range is from 1 to 15
The 15 address digits should be left-justified and without
leading zero. The length digit indicates the number of address digits.
For example, to specify addresses "1773648" and "123456789012",
the hex values of the address buffer should be:
17 73 64 8X XX XX XX X7 for 1773648
12
34 56 78 90 12 XX XC for 123456789012
where X is unused digit (normally should
be set to zero).
The calling program (or thread) must call zx25info before calling this routine.
In a multi-threaded application, each thread must make a separate
call to zx25info using a per-thread
ZCOM X.25 access data buffer zxip.
The per-thread data buffer can then be used to call this routine.
EXAMPLE
#include <zcom/zcomsys.h>
#include <zcom/zcomx25.h>
int ierr;
zx25info_type zxi;
zaddr_type vzaddr;
char fbuf[size]; /* user-defined size */
int flen;
char ubuf[size]; /* user-defined size */
int ulen;
int dbit;
unsigned char clngaddr[8];
unsigned char caldaddr[8];
if (ierr = zx25callout (&zxi, &vzaddr, fbuf, flen, ubuf, ulen,
dbit, clngaddr, caldaddr)) {
/* error return code */
}
else {
/* good return code */
}
FILES
- /opt/acc/include/zcom/zcomsys.h
ZCOM subsystem general include file, containing
data types, data structures, constants, error codes, masks, etc.
Note that this must be the first include file before any other ZCOM
include files.
- /opt/acc/include/zcom/zcomx25.h
ZCOM X.25 access data structure declarations.
SEE ALSO
zx25info(3x)