115 lines
3.2 KiB
C
115 lines
3.2 KiB
C
|
/*
|
||
|
* This function will list the contents that we have stored with tsmpipe
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
#include "dsmrc.h"
|
||
|
#include "dsmapitd.h"
|
||
|
#include "../tsmpipe.h"
|
||
|
|
||
|
dsBool_t headerPrinted=bFalse; // Have we rendered the heading row yet
|
||
|
|
||
|
extern char *dsmDateToStr(dsmDate date);
|
||
|
extern char *dsmObjnameToStr(dsmObjName objName);
|
||
|
extern double dsmSizeToNum(dsStruct64_t dsStruct64);
|
||
|
extern dsmObjName dsmNameToObjname(char *fsname, char *filename, int verbose);
|
||
|
extern dsInt16_t tsm_queryfile(dsUint32_t sesshandle, dsmObjName *objName, char *description, dsmSendType sendtype, char verbose, tsm_query_callback usercb, void * userdata, char *pitdate, int querytype);
|
||
|
|
||
|
/*
|
||
|
* Our Callback to show what is in TSM
|
||
|
*/
|
||
|
int tsm_listfile_cb(dsmQueryType qType, DataBlk *qResp, void *userdata) {
|
||
|
char stor[1]="?";
|
||
|
char state[2]="??";
|
||
|
char ced[3]="---";
|
||
|
|
||
|
qryRespBackupData respBackup;
|
||
|
qryRespArchiveData respArchive;
|
||
|
|
||
|
if (userdata != NULL ) {
|
||
|
fprintf(stderr, "tsm_listfile_cb: Internal error: userdate != NULL");
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
if (! headerPrinted++)
|
||
|
printf("%40s %2s %s %3s %19s %10s %s\n",
|
||
|
"NAME",
|
||
|
"ST",
|
||
|
"L",
|
||
|
"CED",
|
||
|
"BACKUP",
|
||
|
"EST SIZE",
|
||
|
"ID"
|
||
|
);
|
||
|
|
||
|
if (qType == qtArchive) {
|
||
|
memset(&respArchive,0x00,sizeof(qryRespArchiveData));
|
||
|
qryRespArchiveData *qr = (void *) qResp->bufferPtr;
|
||
|
respArchive = *qr;
|
||
|
|
||
|
|
||
|
} else if (qType ==qtBackup) {
|
||
|
memset(&respBackup,0x00,sizeof(qryRespBackupData));
|
||
|
qryRespBackupData *qr = (void *) qResp->bufferPtr;
|
||
|
respBackup = *qr;
|
||
|
|
||
|
// The Object Status
|
||
|
switch (respBackup.objName.objType) {
|
||
|
case (DSM_OBJ_FILE) : strcpy(state,"F"); break;
|
||
|
case (DSM_OBJ_DIRECTORY) : strcpy(state,"D"); break;
|
||
|
default : strcpy(state,"?");
|
||
|
}
|
||
|
|
||
|
switch (respBackup.objState) {
|
||
|
case (DSM_ACTIVE) : strcat(state,"A"); break;
|
||
|
case (DSM_INACTIVE) : strcat(state,"I"); break;
|
||
|
default : strcat(state,"?");
|
||
|
}
|
||
|
|
||
|
// Location
|
||
|
switch (respBackup.mediaClass) {
|
||
|
case (MEDIA_FIXED) : strcpy(stor,"D"); break;
|
||
|
case (MEDIA_LIBRARY) : strcpy(stor,"T"); break;
|
||
|
default : strcpy(stor,"?");
|
||
|
}
|
||
|
|
||
|
// Compression, Encryption, De-Duplication
|
||
|
strcpy(ced,(respBackup.compressType == DSM_OBJ_COMPRESSED_YES ? "C" :
|
||
|
(respBackup.compressType == DSM_OBJ_COMPRESSED_NO ? "-" : "?")));
|
||
|
|
||
|
strcat(ced,(respBackup.encryptionType & DSM_ENCRYPT_CLIENTENCRKEY ? "C" :
|
||
|
(respBackup.encryptionType & DSM_ENCRYPT_USER ? "U" : "-")));
|
||
|
|
||
|
strcat(ced,respBackup.clientDeduplicated ? "D" : "-");
|
||
|
|
||
|
} else {
|
||
|
fprintf(stderr,"tsm_listfile_cb: Internal error: Unknown qType %d\n",qType);
|
||
|
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
printf("%40s|%2s|%s|%3s|%19s|%7.3f MB|%u-%u\n",dsmObjnameToStr(respBackup.objName),state,stor,ced,dsmDateToStr(respBackup.insDate),dsmSizeToNum(respBackup.sizeEstimate),respBackup.objId.hi,respBackup.objId.lo);
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* List objects that are in TSM
|
||
|
*/
|
||
|
int tsm_listfile(dsUint32_t sesshandle, char *fsname, char *filename, char *description, dsmSendType sendtype, char verbose, char *pitdate) {
|
||
|
dsInt16_t rc=0;
|
||
|
dsmObjName objName;
|
||
|
|
||
|
objName = dsmNameToObjname(fsname,filename,verbose);
|
||
|
|
||
|
rc = tsm_queryfile(sesshandle, &objName, description, sendtype, verbose, tsm_listfile_cb, NULL, pitdate, DSM_ANY_MATCH);
|
||
|
|
||
|
if (rc != DSM_RC_OK && rc != DSM_RC_ABORT_NO_MATCH)
|
||
|
return 0;
|
||
|
|
||
|
return 1;
|
||
|
}
|