com.ibm.as400.access.DDMEXCSATReplyDataStream Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400 Show documentation
Show all versions of jt400 Show documentation
The Open Source version of the IBM Toolbox for Java
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: DDMEXCSATReplyDataStream.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 1997-2000 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.access;
import java.io.IOException;
import java.io.InputStream;
import java.util.Hashtable;
class DDMEXCSATReplyDataStream extends DDMDataStream
{
// Check the reply.
boolean checkReply()
{
if (getCodePoint() != DDMTerm.EXCSATRD)
{
Trace.log(Trace.ERROR, "DDM EXCSAT failed with code point:", data_, 8, 2);
String text;
switch (getCodePoint())
{ // Some common errors, that might be meaningful to user:
case DDMTerm.AGNPRMRM : text = "Permanent agent error."; break;
case DDMTerm.CMDATHRM : text = "Not authorized to command."; break;
case DDMTerm.CMDCHKRM : text = "Command check."; break;
case DDMTerm.CMDNSPRM : text = "Command not supported."; break;
case DDMTerm.PRMNSPRM : text = "Parameter not supported."; break;
case DDMTerm.RDBAFLRM : text = "RDB access failed reply message."; break;
case DDMTerm.RDBATHRM : text = "Not authorized to RDB."; break;
case DDMTerm.SYNTAXRM : text = "Data stream syntax error."; break;
default: text = null;
}
if (text != null) Trace.log(Trace.ERROR, text);
return false;
}
return true;
}
// Parses the returned terms, and returns the value of the EXTNAM term.
// This is the job identifier for the DDM Host Server job.
byte[] getEXTNAM()
{
byte[] extNam = null;
int offset = 6; // Start after header.
int streamLL = get16bit(offset); // LL: Total length of the data stream after the header.
//int streamCP = get16bit(offset+2); // CP: Code point of reply
// Assume we've already verified the datastream code point.
//if (streamCP != DDMTerm.EXCSATRD)
//{
// if (Trace.traceOn_) Trace.log(Trace.WARNING, "Incorrect code point: 0x" + Integer.toHexString(streamCP));
// return new byte[0];
//}
if (streamLL <= 4)
{
if (Trace.traceOn_) Trace.log(Trace.WARNING, "Insufficient reply length: 0x" + Integer.toHexString(streamLL));
return new byte[0];
}
offset += 4; // get past the reply's LL/CP
while (!(offset > (data_.length - 4)))
{
// Note to maintenance programmer: If you are generalizing this loop logic so as to parse any term in any DDM datastream, be aware that there's special DRDA term-parsing logic in the case where the high-order bit of the LL value is turned on.
// Assumption: The high-order LL bit will never be turned on in an EXCSAT reply.
int termLL = get16bit(offset); // Get LL (length of term)
int termCP = get16bit(offset+2); // get CP (code point of this term)
switch(termCP)
{
case DDMTerm.EXTNAM:
{
if (termLL > 4)
{
extNam = new byte[termLL-4];
System.arraycopy(data_, offset+4, extNam, 0, extNam.length);
}
else {
if (Trace.traceOn_) Trace.log(Trace.WARNING, "No data returned in EXTNAM term.");
}
break;
}
}
offset += termLL;
}
return (extNam == null ? new byte[0] : extNam);
}
void read(InputStream in) throws IOException
{
if (Trace.traceOn_) Trace.log(Trace.DIAGNOSTIC, "Receiving DDM EXCSAT Reply...");
// Receive the header.
byte[] header = new byte[6];
if (readFromStream(in, header, 0, 6) < 6)
{
Trace.log(Trace.ERROR, "Failed to read all of the DDM EXCSAT reply header.");
throw new ConnectionDroppedException(ConnectionDroppedException.CONNECTION_DROPPED);
}
// Allocate bytes for datastream.
data_ = new byte[BinaryConverter.byteArrayToUnsignedShort(header, 0)];
System.arraycopy(header, 0, data_, 0, 6);
// Read in the rest of the data.
readAfterHeader(in);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy