torrent-verifier/src/showinfo.c

116 lines
3.4 KiB
C

#include <string.h>
#include <stdio.h>
#include <time.h>
#include "showinfo.h"
#include "util.h"
#include "opts.h"
void showinfo(metainfo_t* m) {
const char* s;
int slen;
long int lint;
char str_buff[100] = {0};
if (metainfo_name(m, &s, &slen) != 0) {
s = "[UNKNOWN (>_<)]";
slen = strlen("[UNKNOWN (>_<)]");
}
printf("Name: %.*s\n", slen, s);
util_byte2hex((const unsigned char*)metainfo_infohash(m), sizeof(sha1sum_t), 0, str_buff);
printf("Info hash: %s\n", str_buff);
lint = metainfo_piece_count(m);
printf("Piece count: %ld\n", lint);
lint = metainfo_piece_size(m);
if (util_byte2human(lint, 1, 0, str_buff, sizeof(str_buff)) == -1)
strncpy(str_buff, "err", sizeof(str_buff));
printf("Piece size: %ld (%s)\n", lint, str_buff);
printf("Is multi file: %s\n", metainfo_is_multi_file(m) ? "Yes" : "No");
if (metainfo_is_multi_file(m)) {
printf("File count is: %ld\n", metainfo_file_count(m));
}
printf("Is private: %s\n", metainfo_is_private(m) ? "Yes" : "No");
if (metainfo_announce(m, &s, &slen) != -1) {
printf("Tracker: %.*s\n", slen, s);
}
lint = metainfo_creation_date(m);
if (lint != -1) {
struct tm* time = localtime(&lint);
if (strftime(str_buff, sizeof(str_buff), "%F %T", time) == 0)
strncpy(str_buff, "overflow", sizeof(str_buff));
printf("Creation date: %s\n", str_buff);
}
if (metainfo_created_by(m, &s, &slen) != -1) {
printf("Created by: %.*s\n", slen, s);
}
if (metainfo_source(m, &s, &slen) != -1) {
printf("Source: %.*s\n", slen, s);
}
printf("Files:\n");
unsigned long total_size = 0;
fileinfo_t f;
if (metainfo_is_multi_file(m)) {
fileiter_t fi;
if (metainfo_fileiter_create(m, &fi) == 0) {
while (metainfo_file_next(&fi, &f) == 0) {
int pathlen = metainfo_fileinfo_path(&f, NULL);
char pathbuff[pathlen];
metainfo_fileinfo_path(&f, pathbuff);
if (util_byte2human(f.size, 1, -1, str_buff, sizeof(str_buff)) == -1) {
strncpy(str_buff, "err", sizeof(str_buff));
}
printf("\t%8s %.*s\n", str_buff, pathlen, pathbuff);
total_size += metainfo_fileinfo_size(&f);
}
}
} else {
metainfo_fileinfo(m, &f);
int pathlen = metainfo_fileinfo_path(&f, NULL);
char pathbuff[pathlen];
metainfo_fileinfo_path(&f, pathbuff);
if (util_byte2human(f.size, 1, -1, str_buff, sizeof(str_buff)) == -1) {
strncpy(str_buff, "err", sizeof(str_buff));
}
printf("\t%8s %.*s\n", str_buff, pathlen, pathbuff);
total_size = metainfo_fileinfo_size(&f);
}
if (util_byte2human(total_size, 1, -1, str_buff, sizeof(str_buff)) == -1)
strncpy(str_buff, "err", sizeof(str_buff));
printf("Total size: %s\n", str_buff);
}
void showinfo_script(metainfo_t* m) {
switch (opt_scriptformat_info) {
case OPT_SCRIPTFORMAT_INFOHASH:
{
char hex_str[sizeof(sha1sum_t)*2+1];
const sha1sum_t* infohash = metainfo_infohash(m);
util_byte2hex((const unsigned char*)infohash, sizeof(sha1sum_t), 0, hex_str);
printf("%s\n", hex_str);
break;
}
default:
printf("Unknown?? [>.<]\n");
break;
}
}