com.ibm.as400.access.AS400CertificateUtilImplRemote 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
The newest version!
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: AS400CertificateUtilImplRemote.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.InterruptedIOException;
import java.io.IOException;
import java.beans.PropertyVetoException;
import java.net.UnknownHostException;
import java.io.UnsupportedEncodingException;
/**
Provides the implementation of the remote methods for accessing certificates from an AS400CertificateUtil object.
**/
class AS400CertificateUtilImplRemote extends AS400CertificateUtilImpl
{
//********************************************************************/
//* methods for remote invocation */
//* */
//* @return Return code mapped to CPFxxxx error message. */
//********************************************************************/
int callgetCertificates(String usrSpaceName,
int buffSize,
int nextCertificateToReturn,
int nextCertificateOffsetIn)
throws AS400SecurityException,
ErrorCompletingRequestException,
InterruptedException,
IOException,
ObjectDoesNotExistException
{
int rc;
int i, j;
int length, certoffset;
// **** Setup the parameter list ****
ProgramParameter[] parmlist = new ProgramParameter[11];
// First parameter: input, is the pgm entry number
byte[] pgmEntry = new byte[4];
BinaryConverter.intToByteArray(CALL_GETCERT, pgmEntry, 0);
parmlist[0] = new ProgramParameter(pgmEntry);
// 2 parameter: input, is user space native name
byte[] usrSpaceNameB = new byte[20];
converter_.stringToByteArray(usrSpaceName, usrSpaceNameB);
parmlist[1] = new ProgramParameter(usrSpaceNameB);
// 3 parameter: input, is the user's buff size
byte[] buffSizeB = new byte[4];
BinaryConverter.intToByteArray(buffSize, buffSizeB, 0);
parmlist[2] = new ProgramParameter(buffSizeB);
// 4 parameter: input, is the next certificate to return
byte[] nextCertificateToReturnB = new byte[4];
BinaryConverter.intToByteArray(nextCertificateToReturn,
nextCertificateToReturnB, 0);
parmlist[3] = new ProgramParameter(nextCertificateToReturnB);
// 5 parameter: input, is the cert offset
byte[] nextCertificateOffsetInB = new byte[4];
BinaryConverter.intToByteArray(nextCertificateOffsetIn,
nextCertificateOffsetInB, 0);
parmlist[4] = new ProgramParameter(nextCertificateOffsetInB);
// 6 parameter: output, is the next cert offset to return
parmlist[5] = new ProgramParameter(4);
// 7 parameter: output, is the number certs found
byte[] numberCertificatesFoundB = new byte[4];
parmlist[6] = new ProgramParameter(4);
// 8 parameter: output, is the number complete certs
byte[] numberCompleteCertsB = new byte[4];
parmlist[7] = new ProgramParameter(4);
// 9 parameter: output, is the certificate buffer
parmlist[8] = new ProgramParameter(buffSize);
// 10 parameter: output, is the cpf error id array
byte[] errorInfoB = new byte[ ERR_STRING_LEN ];
parmlist[9] = new ProgramParameter( ERR_STRING_LEN );
// 11 parameter: input/output, is the return code
byte[] retcodeB = new byte[4];
BinaryConverter.intToByteArray(-1, retcodeB, 0);
parmlist[10] = new ProgramParameter(retcodeB, 4 );
//program lib and name
ProgramCall pgmCall = new ProgramCall(system_);
try {
pgmCall.setProgram("/QSYS.LIB/QYJSPCTU.PGM", parmlist );
}
// PropertyVetoException should never happen
catch (PropertyVetoException pve) { Trace.log(Trace.ERROR, pve); }
pgmCall.suggestThreadsafe(); //@A1A
// Run the program. Failure returns message list
if(pgmCall.run() != true)
{
numberCertificatesFound_ = 0;
AS400Message[] messagelist = pgmCall.getMessageList();
cpfError_ = messagelist[0].toString();
return -1;
}
else
{
// get the retcode returned from the program
retcodeB = parmlist[10].getOutputData();
rc = BinaryConverter.byteArrayToInt(retcodeB, 0);
if (0 != rc)
{
numberCertificatesFound_ = 0;
//unexpected error
if (-1 == rc) return rc;
//get cpf error id
errorInfoB = parmlist[9].getOutputData();
cpfError_ = converter_.byteArrayToString(errorInfoB, 0).trim();
return rc;
}
//return output parms, 1st get next certificate's offset
byte[] nextCertificateOffsetOutB = parmlist[5].getOutputData();
nextCertificateOffsetOut_ =
BinaryConverter.byteArrayToInt(nextCertificateOffsetOutB, 0);
//return output parms, get number of certs found
numberCertificatesFoundB = parmlist[6].getOutputData();
numberCertificatesFound_ =
BinaryConverter.byteArrayToInt(numberCertificatesFoundB, 0);
//get number of complete certs in user buffer
numberCompleteCertsB = parmlist[7].getOutputData();
int numberCompleteCerts =
BinaryConverter.byteArrayToInt(numberCompleteCertsB, 0);
//load returned certs into AS400Certificate array
if (0 < numberCompleteCerts)
{
certificates_ = new AS400Certificate[numberCompleteCerts];
}
int returnedLen;
int certLen;
length = 0;
byte[] returnedBytes = parmlist[8].getOutputData();
//hdr format => cert returned length, cert offset, cert len
for (i = 0; i < numberCompleteCerts; ++i)
{
returnedLen = BinaryConverter.byteArrayToInt(returnedBytes,
length);
certoffset = BinaryConverter.byteArrayToInt(returnedBytes,
length + 4);
certLen = BinaryConverter.byteArrayToInt(returnedBytes,
length + 8);
byte[] certdata = new byte[certLen];
System.arraycopy(returnedBytes, certoffset,
certdata, 0,
certLen);
certificates_[i] = new AS400Certificate(certdata);
//calc offset to next cert header
length = length + returnedLen;
}
}//end else (pgmCall ran OK)
return SUCCESS;
}
int callgetHandle(byte[] certificate,
int len)
throws AS400SecurityException,
ErrorCompletingRequestException,
InterruptedException,
IOException,
ObjectDoesNotExistException
{
int rc;
int i, j;
int length;
// **** Setup the parameter list ****
ProgramParameter[] parmlist = new ProgramParameter[6];
// First parameter: input, is the pgm entry number
byte[] pgmEntry = new byte[4];
BinaryConverter.intToByteArray(CALL_GETHANDLE, pgmEntry, 0);
parmlist[0] = new ProgramParameter(pgmEntry);
// 2 parameter: input, is the certificate array
parmlist[1] = new ProgramParameter(certificate);
// 3 parameter: input, is the length of the cert array
byte[] lenB = new byte[4];
BinaryConverter.intToByteArray(certificate.length, lenB, 0);
parmlist[2] = new ProgramParameter(lenB);
// 4 parameter: out, is the certificate handle
parmlist[3] = new ProgramParameter(HANDLE_LEN);
// 5 parameter: output, is the cpf error id array
parmlist[4] = new ProgramParameter( 7 );
// 6 parameter: input/output, is the return code
byte[] retcodeB = new byte[4];
BinaryConverter.intToByteArray(-1, retcodeB, 0);
parmlist[5] = new ProgramParameter(retcodeB, 4 );
//program lib and name
ProgramCall pgmCall = new ProgramCall(system_);
try {
pgmCall.setProgram("/QSYS.LIB/QYJSPCTU.PGM", parmlist );
}
// PropertyVetoException should never happen
catch (PropertyVetoException pve) { Trace.log(Trace.ERROR, pve); }
pgmCall.suggestThreadsafe(); //@A1A
// Run the program. Failure returns message list
if(pgmCall.run() != true)
{
AS400Message[] messagelist = pgmCall.getMessageList();
cpfError_ = messagelist[0].toString();
return -1;
}
else
{
// get the retcode returned from the program
retcodeB = parmlist[5].getOutputData();
rc = BinaryConverter.byteArrayToInt(retcodeB, 0);
if (0 != rc)
{
//unexpected error
if (-1 == rc) return rc;
//get cpf error id
byte[] errorInfoB = parmlist[4].getOutputData();
cpfError_ = converter_.byteArrayToString(errorInfoB, 0).trim();
return rc;
}
//return output parms, get cert handle
handle_ = parmlist[3].getOutputData();
}//end else (pgmCall ran)
return SUCCESS;
}
} // End of AS400CertificateUtilImplRemote class
© 2015 - 2025 Weber Informatics LLC | Privacy Policy