/* * This function will list the contents that we have stored with tsmpipe */ #include #include #include #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; }