Code example of API functions that send data to Tivoli Storage Manager storage
This example demonstrates the use of the API functions that send data to IBM® Tivoli® Storage Manager storage. The dsmSendObj call appears inside a switch statement, so that different parameters can be called depending on whether a backup or archive operation is being performed.
The dsmSendData call is called from inside a loop that repeatedly sends data until a flag is set that permits the program execution to exit the loop. The entire send operation is performed from within the transaction.
The third parameter on the dsmSendObj call is a buffer that contains the archive description. Because backup objects do not have a description, this parameter is NULL when backing up an object.
Figure 1 displays an example that shows the use of the dsmBindMC function call.
if ((rc = dsmBeginTxn(dsmHandle)) ) /* API session handle */
{
printf("*** dsmBeginTxn failed: ");
rcApiOut(dsmHandle, rc);
return;
}
/* Call dsmBindMC if not done previously */
objAttr.sizeEstimate.hi = 0; /* estimate of */
objAttr.sizeEstimate.lo = 32000; /* object size */
switch (send_type)
{
case (Backup_Send) :
rc = dsmSendObj(dsmHandle,stBackup,
NULL,&objName,&objAttr,NULL);
break;
case (Archive_Send) :
archData.stVersion = sndArchiveDataVersion;
archData.descr = desc;
rc = dsmSendObj(dsmHandle,stArchive,
&archData,&objName,&objAttr,NULL);
break;
default : ;
}
if (rc)
{
printf("*** dsmSendObj failed: ");
rcApiOut(dsmHandle, rc);
return;
}
done = bFalse;
while (!done)
{
dataBlk.stVersion = DataBlkVersion;
dataBlk.bufferLen = send_amt;
dataBlk.numBytes = 0;
dataBlk.bufferPtr = bkup_buff;
rc = dsmSendData(dsmHandle,&dataBlk);
if (rc)
{
printf("*** dsmSendData failed: ");
rcApiOut(dsmHandle, rc);
done = bTrue;
}
/* Adjust the dataBlk buffer for the next piece to send */
}
rc = dsmEndSendObj(dsmHandle);
if (rc)
{
printf("*** dsmEndSendObj failed: ");
rcApiOut(dsmHandle, rc);
}
txn_reason = 0;
rc = dsmEndTxn(dsmHandle, /* API session handle */
DSM_VOTE_COMMIT, /* Commit transaction */
&txn_reason); /* Reason if txn aborted */
if (rc || txn_reason)
{
printf("*** dsmEndTxn failed: rc = ");
rcApiOut(dsmHandle, rc);
printf(" reason =
}