ibm-information-center/dist/eclipse/plugins/i5OS.ic.apis_5.4.0.1/qtobupdt.htm

786 lines
24 KiB
HTML
Raw Normal View History

2024-04-02 14:02:31 +00:00
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Copyright" content="Copyright (c) 2006 by IBM Corporation">
<title>Update DNS API (QTOBUPDT)</title>
<!-- Begin Header Records ========================================== -->
<!-- All rights reserved. Licensed Materials Property of IBM -->
<!-- US Government Users Restricted Rights -->
<!-- Use, duplication or disclosure restricted by -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<!-- COMM4 SCRIPT A converted by B2H R4.1 (346) (CMS) by V2DCIJB at -->
<!-- RCHVMW2 on 1 Jun 1999 at 17:32:50 -->
<!-- Change History: -->
<!-- YYMMDD USERID Change description -->
<!--File Edited December, 2001 =========================================== -->
<!--End Header Records ============================================== -->
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
</head>
<body>
<a name="Top_Of_Page"></a>
<!-- Java sync-link ================================================= -->
<script type="text/javascript" language="Javascript" src="../rzahg/synch.js">
</script>
<h2>Update DNS API (QTOBUPDT)</h2>
<div class="box" style="width: 70%;">
&nbsp;&nbsp;Required Parameter Group:<br>
<!-- iddvc RMBR -->
<br>
<table width="100%">
<tr>
<td align="center" valign="top" width="10%">1</td>
<td align="left" valign="top" width="50%">Update instructions</td>
<td align="left" valign="top" width="20%">Input</td>
<td align="left" valign="top" width="20%">Char(*)</td>
</tr>
<tr>
<td align="center" valign="top">2</td>
<td align="left" valign="top">Length of update instructions</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">3</td>
<td align="left" valign="top">Format name of update instructions</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(8)</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="left" valign="top">Update key override</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(*)</td>
</tr>
<tr>
<td align="center" valign="top">5</td>
<td align="left" valign="top">Length of update key override</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">6</td>
<td align="left" valign="top">Format name of update key override</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(8)</td>
</tr>
<tr>
<td align="center" valign="top">7</td>
<td align="left" valign="top">Update key name</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(*)</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="left" valign="top">Length of update key name</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">9</td>
<td align="left" valign="top">IP address of DNS server</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(15)</td>
</tr>
<tr>
<td align="center" valign="top">10</td>
<td align="left" valign="top">Miscellaneous attributes</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(*)</td>
</tr>
<tr>
<td align="center" valign="top">11</td>
<td align="left" valign="top">Length of miscellaneous attributes</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="left" valign="top">Format name of miscellaneous attributes</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(8)</td>
</tr>
<tr>
<td align="center" valign="top">13</td>
<td align="left" valign="top">Result code</td>
<td align="left" valign="top">Output</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">14</td>
<td align="left" valign="top">Error code</td>
<td align="left" valign="top">I/O</td>
<td align="left" valign="top">Char(*)</td>
</tr>
</table>
<br>
&nbsp;&nbsp;Program Name: QDNS/QTOBUPDT<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Default Public Authority: *USE<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: No<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The <strong>Update DNS API (QTOBUPDT)</strong> allows the caller to send one
or more update instructions to an iSeries dynamic DNS (Domain Name System)
server. The instructions allow for adding or deleting DNS Resource Records
(RRs). The instructions can optionally include any number of prerequisite
conditions that must be true for the actual updates to take place. This API is
based on the Berkeley Internet Name Domain (BIND) version 8.2.x implementation
of dynamic DNS updates. Therefore, it also can be used to send update requests
to DNS servers running on other operating system platforms that conform to BIND
Version 8 update protocols.</p>
<p><strong>i5/OS Option 31 (Domain Name System)</strong> must be installed to
use this API.</p>
<br>
<h3>Authorities and Locks</h3>
<p>If an Integrated File System (IFS) stream file name is specified for any of
the parameters that allow it, then the user will need *R authority to the
stream file and *X authority to the directories in the path of the stream
file.</p>
<br>
<h3>Required Parameter Group</h3>
<dl>
<dt><strong>Update instructions</strong></dt>
<dd>INPUT; CHAR(*)
<p>One or more instructions that define which DNS resource records should be
updated (added or deleted) for a specific DNS domain, as well as any
prerequistes that must be true for those updates to take place. Depending on
which format name for this parameter is chosen, this parameter will either
contain the actual update instructions themselves or the name of an Integrated
File System file that contains the update instructions.</p>
<p>The syntax for the update instructions themselves is the same as that
defined by BIND 8.2.3 for dynamic DNS updates, which it uses as input to its
<strong>nsupdate</strong> program. Please see <a href="#HDRUPDSyn">Update
Instructions Syntax</a> for descriptions of the update instructions
themselves.</p>
</dd>
<dt><strong>Length of update instructions</strong></dt>
<dd>INPUT; BINARY(4)
<p>The length of the data passed in the Update instructions parameter. If the
length is larger than the size of the Update instructions parameter, the
results may not be predictable.</p>
</dd>
<dt><strong>Format name of update instructions</strong></dt>
<dd>INPUT; CHAR(8)
<p>The format of the data being passed in the Update instructions
parameter.</p>
<table cellpadding="3">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>DNSU0100</em></td>
<td align="left" valign="top">Data passed represents the actual data the API should
use.</td>
</tr>
<tr>
<td align="left" valign="top"><em>DNSU0200</em></td>
<td align="left" valign="top">Data passed represents the path name of an Integrated File
System file that contains the data the API should use.</td>
</tr>
<tr>
<td align="left" valign="top"><em>DNSU0300</em></td>
<td align="left" valign="top">Data passed represents the name of a file that contains the
data the API should use. The file name is in an i5/OS API path name structure.
For the format of this structure, see <a href="../apiref/pns.htm">Path name
format</a>.</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Update key override</strong></dt>
<dd>INPUT; CHAR(*)
<p>This API automatically searches the default DNS dynamic update directory
/QIBM/UserData/OS400/DNS/_DYN for a dynamic update transaction signature (TSIG)
key for the specific domain being updated. The caller can override the default
logic and provide a transaction signature key directly to the API by using this
Update key override parameter. Depending on which format name for this
parameter is chosen, this parameter will either contain the actual key itself
or the path name of an Integrated File System file that contains the key.</p>
</dd>
<dt><strong>Length of update key override</strong></dt>
<dd>INPUT; BINARY(4)
<p>The length of the data passed in the Update key override parameter. If the
length is larger than the size of the Update key override parameter, the
results may not be predictable.</p>
</dd>
<dt><strong>Format name of update key override</strong></dt>
<dd>INPUT; CHAR(8)
<p>The format of the data being passed in the Update key override
parameter.</p>
<table cellpadding="3">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>DNSU0100</em></td>
<td align="left" valign="top">Data passed represents the actual data the API should
use.</td>
</tr>
<tr>
<td align="left" valign="top"><em>DNSU0200</em></td>
<td align="left" valign="top">Data passed represents the path name of an Integrated File
System (IFS) file that contains the data the API should use.</td>
</tr>
<tr>
<td align="left" valign="top"><em>DNSU0300</em></td>
<td align="left" valign="top">Data passed represents the name of a file that contains the
data the API should use. The file name is in an i5/OS API path name structure.
For the format of this structure, see <a href="../apiref/pns.htm">Path name
format</a>.</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Update key name</strong></dt>
<dd>INPUT; CHAR(*)
<p>If the caller is providing a transaction signature key in the update key
override parameter, then the update key name parameter must contain the name of
the update key.</p>
</dd>
<dt><strong>Length of update key name</strong></dt>
<dd>INPUT; BINARY(4)
<p>The length of the data passed in the Update key name parameter. If the
length is larger than the size of the Update key name parameter, the results
may not be predictable.</p>
</dd>
<dt><strong>IP address of DNS server</strong></dt>
<dd>INPUT; CHAR(15)
<p>The IP address, in dotted decimal form, of the DNS server where the API
should start searching for the primary master DNS server for the zone being
updated. The parameter must be right padded with blanks if the data does not
take up the entire length.</p>
<p>If this parameter is all blanks on input, the API will automatically search
the network to determine where the primary master DNS server is located for the
zone that contains the domain being updated.</p>
</dd>
<dt><strong>Miscellaneous attributes</strong></dt>
<dd>INPUT; CHAR(*)
<p>Optional miscellaneous runtime attributes.</p>
</dd>
<dt><strong>Length of miscellaneous attributes</strong></dt>
<dd>INPUT; BINARY(4)
<p>The length of the data passed in the Miscellaneous attributes parameter. If
the length is larger than the size of the Miscellaneous attributes parameter,
the results may not be predictable.</p>
</dd>
<dt><strong>Format name of miscellaneous attributes</strong></dt>
<dd>INPUT; CHAR(8)
<p>The format of the data being passed in the Miscellaneous attributes
parameter.</p>
<table cellpassing="3">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>DNSA0100</em></td>
<td align="left" valign="top">Miscellaneous runtime attributes. Refer to <a href=
"#HDRDNSA0100">DNSA0100 Format</a> for details on the format.</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Result code</strong></dt>
<dd>OUTPUT; BINARY(4)
<p>Whether the API processed successfully or not, and if not, what type of
problem was encountered. Any code that is not 0 means that the updates were not
completely successful.</p>
<table cellpadding="3">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">Successful.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">Send error. The authoritative name server could not be
reached.</td>
</tr>
<tr>
<td align="left" valign="top"><em>2</em></td>
<td align="left" valign="top">Failed update packet. The name server has rejected the update,
either because it does not support dynamic update or due to an authentication
failure.</td>
</tr>
<tr>
<td align="left" valign="top"><em>3</em></td>
<td align="left" valign="top">Prerequisite failure. The update was successfully received and
authenticated by the name server. The prerequisites, however, prevented the
update from actually being performed.</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Error code</strong></dt>
<dd>I/O; CHAR(*)
<p>The structure in which to return error information. For the format of the
structure, see <a href="../apiref/error.htm#hdrerrcod">Error Code Parameter</a>.</p>
</dd>
</dl>
<br>
<h3><a name="HDRUPDSyn">Update Instructions Syntax</a></h3>
<p>The syntax of the update instructions for the QTOBUPDT API is the same as
the syntax of the update instructions that are input to the BIND (Berkeley
Internet Name Domain) Version 8.2.x program known as <strong>nsupdate</strong>.
It is a stream file-based input format that requires
carriage-return(&lt;cr&gt;) linefeed (&lt;lf&gt;) characters to define distinct
&quot;lines&quot; of input.</p>
<p>In addition to accepting these instructions using stream files, like
<strong>nsupdate</strong>, the QTOBUPDT API has added the ability (by
specifying format <strong>DNSU0100</strong>) for an application program to
build the lines of input in memory and pass them directly to the API without
first having to write them to a file. It is important to note, however, that
this method still requires that you build the input lines exactly as you would
if you were going to write them to a stream file; that is, separated by the
same &lt;cr&gt;&lt;lf&gt; characters that are described below.</p>
<p>QTOBUPDT reads input records, one per line, each line contributing a
resource record directive to a single update request. As described below, the
directives can be either <em>prerequisite</em> checks or actual resource record
(RR) data <em>update</em> directives. All domain names used in an update
request must belong to the same DNS zone. A blank line causes the accumulated
records to be formatted into a single update request and transmitted to the
zone's authoritative name servers. Additional records may follow, which are
formed into additional, completely independent, update requests for that
domain. For any given call to the API, multiple update requests can be made,
but each group of lines belonging to each single update request must be
separated by a blank line. For the last request to be transmitted, you must
remember to include a blank line as the last line of your input.</p>
<p>Records take one of two general forms. <strong>Prerequisite</strong> records
specify conditions that must be satisfied before the request will be processed.
<strong>Update</strong> records specify actual data changes to be made to the
DNS database. An <em>&quot;update request&quot;</em> consists of zero or more
prerequisites, and one or more updates. Each update request is processed
atomically; that is, all prerequisites must be satisfied, then all updates are
performed. If any of the prerequisites within the specific <em>update
request</em> fail, the actual data update directives following them will not be
attempted.</p>
<p>QTOBUPDT API understands the following input record formats:</p>
<table cellpadding="3">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>prereq nxdomain domain-name
&lt;cr&gt;&lt;lf&gt;</em></td>
<td align="left" valign="top">Requires that no RR of any type exists with name
domain-name.</td>
</tr>
<tr>
<td align="left" valign="top"><em>prereq yxdomain domain-name
&lt;cr&gt;&lt;lf&gt;</em></td>
<td align="left" valign="top">Requires that at least one RR named domain-name must
exist.</td>
</tr>
<tr>
<td align="left" valign="top"><em>prereq nxrrset domain-name [class] type
&lt;cr&gt;&lt;lf&gt;</em></td>
<td align="left" valign="top">Requires that no RR exists of the specified type and
domain-name.</td>
</tr>
<tr>
<td align="left" valign="top"><em>prereq yxrrset domain-name [class] type
[data...] &lt;cr&gt;&lt;lf&gt;</em></td>
<td align="left" valign="top">Requires that a RR exists of the specified type and
domain-name. If data is specified, it must match exactly.</td>
</tr>
<tr>
<td align="left" valign="top"><em>update delete domain-name [class] [type
[data...]] &lt;cr&gt;&lt;lf&gt;</em></td>
<td align="left" valign="top">Deletes RRs named domain-name. If type and/or data is
specified, <strong>only</strong> completely matching records are deleted.</td>
</tr>
<tr>
<td align="left" valign="top"><em>update add domain-name ttl [class] type
data... &lt;cr&gt;&lt;lf&gt;</em></td>
<td align="left" valign="top">Adds a new RR with specified ttl, type, and data.</td>
</tr>
</table>
<p><strong>EXAMPLES</strong></p>
<ol>
<li>The following example illustrates a set of update instructions that could
be sent to the QTOBUPDT API to change an IP address by deleting any existing A
records for a domain name, and then inserting a new A record. Since no
prerequisites are specified, the new record will be added even if there were no
existing records to delete. <em>The trailing blank line is required to process
the request.</em><br>
<br>
<ul>
<li>record 1: <em>update delete test.test.com A &lt;cr&gt;&lt;lf&gt;</em></li>
<li>record 2: <em>update add test.test.com 3600 A 10.1.1.1
&lt;cr&gt;&lt;lf&gt;</em></li>
<li>record 3: <em>&lt;cr&gt;&lt;lf&gt;</em></li>
</ul>
<br>
</li>
<li>In this example, a CNAME alias is added to the database only if there are
no existing A or CNAME records for the domain name.<br>
<br>
<ul>
<li>record 1: <em>prereq nxrrset www.test.com A &lt;cr&gt;&lt;lf&gt;</em></li>
<li>record 2: <em>prereq nxrrset www.test.com CNAME
&lt;cr&gt;&lt;lf&gt;</em></li>
<li>record 3: <em>update add www.test.com 3600 CNAME test.test.com
&lt;cr&gt;&lt;lf&gt;</em></li>
<li>record 4: <em>&lt;cr&gt;&lt;lf&gt;</em></li>
</ul>
<br>
</li>
<li>To accomplish both of the above independent <em>update requests</em> in a
single call to the QTOBUPDT API, the update instructions submitted would
be:<br>
<br>
<ul>
<li>record 1: <em>update delete test.test.com A &lt;cr&gt;&lt;lf&gt;</em></li>
<li>record 2: <em>update add test.test.com 3600 A 10.1.1.1
&lt;cr&gt;&lt;lf&gt;</em></li>
<li>record 3: <em>&lt;cr&gt;&lt;lf&gt;</em></li>
<li>record 4: <em>prereq nxrrset www.test.com A &lt;cr&gt;&lt;lf&gt;</em></li>
<li>record 5: <em>prereq nxrrset www.test.com CNAME
&lt;cr&gt;&lt;lf&gt;</em></li>
<li>record 6: <em>update add www.test.com 3600 CNAME test.test.com
&lt;cr&gt;&lt;lf&gt;</em></li>
<li>record 7: <em>&lt;cr&gt;&lt;lf&gt;</em></li>
</ul>
</li>
</ol>
<br>
<h3><a name="HDRDNSA0100">DNSA0100 Format</a></h3>
<p>The following is the format used for passing miscellaneous runtime
attributes to the dynamic DNS update API. For detailed descriptions of the
fields in this table, see <a href="#HDRSPCA1">Field Descriptions</a>.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="center" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="20%">B</td>
<td align="left" valign="top" width="60%">Debug flag</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="center" valign="top">B</td>
<td align="left" valign="top">Virtual circuit flag</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="center" valign="top">C</td>
<td align="left" valign="top">Reserved for future use</td>
</tr>
</table>
<br>
<br>
<h3><a name="HDRSPCA1">Field Descriptions</a></h3>
<p><strong>Debug flag.</strong> If set on, tells the API to create a spooled
print file (QPRINT) to the caller's userid.</p>
<table cellpadding="3">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">Debug tracing is off (default).</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">Debug tracing is on.</td>
</tr>
</table>
<p><strong>Reserved for future use.</strong> A reserved field that must be set
to hexadecimal zeros.</p>
<p><strong>Virtual circuit flag.</strong> If set on, tells the API to use a TCP
connection instead of the default UDP packets.</p>
<table cellpadding="3">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">Use UDP packets to communicate with the DNS server
(default).</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">Use TCP to communicate with the DNS server.</td>
</tr>
</table>
<br>
<br>
<h3>Error Messages</h3>
<table width="100%" cellpadding="3">
<tr>
<th align="left" valign="top">Message ID</th>
<th align="left" valign="top">Error Message Text</th>
</tr>
<tr>
<td width="15%" valign="top">DNS0300 E</td>
<td width="85%" valign="top">Incorrect number of parameters passed.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0301 E</td>
<td align="left" valign="top">The update instructions parameter was null.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0302 E</td>
<td align="left" valign="top">The length of the update instructions parameter is
incorrect.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0303 E</td>
<td align="left" valign="top">The format name of the update instructions parameter is
incorrect.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0304 E</td>
<td align="left" valign="top">The update key override parameter is null.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0305 E</td>
<td align="left" valign="top">The format name of the update key override parameter is
incorrect.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0306 E</td>
<td align="left" valign="top">The IP address of the DNS server parameter is incorrect.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0307 E</td>
<td align="left" valign="top">The miscellaneous attributes parameter is null.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0308 E</td>
<td align="left" valign="top">The format name of the miscellaneous attributes parameter is
incorrect.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0309 D</td>
<td align="left" valign="top">The transaction signature key file could not be opened.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0310 E</td>
<td align="left" valign="top">The length of miscellaneous attributes parameter is
incorrect.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0311 E</td>
<td align="left" valign="top">The miscellaneous attributes debug flag is incorrect.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0312 E</td>
<td align="left" valign="top">The miscellaneous attributes virtual circuit flag is
incorrect.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0313 E</td>
<td align="left" valign="top">The key name parameter is null.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0314 E</td>
<td align="left" valign="top">The length of the key name parameter is incorrect.</td>
</tr>
<tr>
<td align="left" valign="top">DNS0315 E</td>
<td align="left" valign="top">The transaction signature key file could not be read.</td>
</tr>
<tr>
<td align="left" valign="top">DNS030A D</td>
<td align="left" valign="top">The update instructions parameter was incorrect.</td>
</tr>
<tr>
<td align="left" valign="top">DNS030B D</td>
<td align="left" valign="top">The dynamic DNS update failed.</td>
</tr>
<tr>
<td align="left" valign="top">DNS030C D</td>
<td align="left" valign="top">The dynamic DNS update partially failed.</td>
</tr>
<tr>
<td align="left" valign="top">DNS030D E</td>
<td align="left" valign="top">The miscellaneous attributes reserved field was not
zeros.</td>
</tr>
<tr>
<td align="left" valign="top">DNS030E E</td>
<td align="left" valign="top">The length of the update key override parameter is
incorrect.</td>
</tr>
<tr>
<td align="left" valign="top">DNS030F E</td>
<td align="left" valign="top">The update instructions file could not be opened.</td>
</tr>
</table>
<br>
<hr>
<p>API introduced: V5R1<br>
</p>
<hr>
<table cellpadding="2" cellspacing="2" align="center">
<tr align="center">
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> | <a href=
"comm.htm">Communications APIs</a> | <a href="aplist.htm">APIs by category</a>
</td>
</tr>
</table>
</body>
</html>