#include #include #include #include "showinfo.h" #include "util.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); }