177 lines
7.5 KiB
C
177 lines
7.5 KiB
C
/*****************************************************************************
|
|
*
|
|
* $Id$
|
|
* Purpose ...............: Dump Bluewave packets
|
|
*
|
|
*****************************************************************************
|
|
* Copyright (C) 1997-2006
|
|
*
|
|
* Michiel Broek FIDO: 2:280/2802
|
|
* Beekmansbos 10
|
|
* 1971 BV IJmuiden
|
|
* the Netherlands
|
|
*
|
|
* This file is part of MBSE BBS.
|
|
*
|
|
* This BBS is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2, or (at your option) any
|
|
* later version.
|
|
*
|
|
* MBSE BBS is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with MBSE BBS; see the file COPYING. If not, write to the Free
|
|
* Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
|
|
*****************************************************************************/
|
|
|
|
#include "../config.h"
|
|
#include "../lib/mbselib.h"
|
|
#include "../lib/bluewave.h"
|
|
|
|
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
char *bwname, *temp;
|
|
FILE *fp;
|
|
INF_HEADER Inf;
|
|
INF_AREA_INFO AreaInf;
|
|
MIX_REC Mix;
|
|
FTI_REC Fti;
|
|
int i, pos;
|
|
|
|
printf("\nMBBW: MBSE BBS %s Bluewave Dump\n", VERSION);
|
|
printf(" %s\n\n", COPYRIGHT);
|
|
|
|
if (argc != 2) {
|
|
printf("Usage: mbbw [packetname]\n\n");
|
|
return 0;
|
|
}
|
|
|
|
bwname = xstrcpy(argv[1]);
|
|
temp = calloc(PATH_MAX, sizeof(char));
|
|
snprintf(temp, PATH_MAX, "%s.INF", bwname);
|
|
|
|
if ((fp = fopen(temp, "r"))) {
|
|
printf("---- %s.INF -------------------------------------------------------\n", bwname);
|
|
if (fread(&Inf, sizeof(INF_HEADER), 1, fp) == 1) {
|
|
printf("\n");
|
|
printf("Packet version %d\n", Inf.ver);
|
|
for (i = 0; i < 5; i++)
|
|
if (strlen(Inf.readerfiles[i]))
|
|
printf("Display file %d %s\n", i+1, Inf.readerfiles[i]);
|
|
printf("Registration number %s\n", Inf.regnum);
|
|
printf("Login name %s\n", Inf.loginname);
|
|
printf("Aliasname %s\n", Inf.aliasname);
|
|
printf("Password type %d\n", Inf.passtype);
|
|
printf("Network address %d:%d/%d.%d\n", Inf.zone, Inf.net, Inf.node, Inf.point);
|
|
printf("Sysop %s\n", Inf.sysop);
|
|
printf("Control %sConfig %sFreq\n", (Inf.ctrl_flags & INF_NO_CONFIG) ? "No":"",
|
|
(Inf.ctrl_flags & INF_NO_FREQ) ? "No":"");
|
|
printf("System name %s\n", Inf.systemname);
|
|
printf("Max freqs %d\n", Inf.maxfreqs);
|
|
printf("Is QWK %s\n", Inf.is_QWK ? "Yes":"No");
|
|
printf("User flags %s%s%s%s%s%s\n", (Inf.uflags & INF_HOTKEYS) ? "Hotkeys ":"",
|
|
(Inf.uflags & INF_XPERT) ? "Expert ":"",
|
|
(Inf.uflags & INF_GRAPHICS) ? "ANSI ":"",
|
|
(Inf.uflags & INF_NOT_MY_MAIL) ? "Not-my-mail ":"",
|
|
(Inf.uflags & INF_EXT_INFO) ? "Ext-info ":"",
|
|
(Inf.uflags & INF_NUMERIC_EXT) ? "Numeric-ext":"");
|
|
for (i = 0; i < 10; i++)
|
|
if (strlen(Inf.keywords[i]))
|
|
printf("Keywords %2d %s\n", i+1, Inf.keywords[i]);
|
|
for (i = 0; i < 10; i++)
|
|
if (strlen(Inf.filters[i]))
|
|
printf("Filters %2d %s\n", i+1, Inf.filters[i]);
|
|
for (i = 0; i < 3; i++)
|
|
if (strlen(Inf.macros[i]))
|
|
printf("Macro %d %s\n", i+1, Inf.macros[i]);
|
|
printf("Netmail flags %s%s%s%s%s%s%s\n", (Inf.netmail_flags & INF_CAN_CRASH) ? "Crash ":"",
|
|
(Inf.netmail_flags & INF_CAN_ATTACH) ? "Attach ":"",
|
|
(Inf.netmail_flags & INF_CAN_KSENT) ? "KSent ":"",
|
|
(Inf.netmail_flags & INF_CAN_HOLD) ? "Hold ":"",
|
|
(Inf.netmail_flags & INF_CAN_IMM) ? "Immediate ":"",
|
|
(Inf.netmail_flags & INF_CAN_FREQ) ? "Freq ":"",
|
|
(Inf.netmail_flags & INF_CAN_DIRECT) ? "Direct ":"");
|
|
printf("Credits %d\n", Inf.credits);
|
|
printf("Debits %d\n", Inf.debits);
|
|
printf("Can forward %s\n", Inf.can_forward ? "Yes":"No");
|
|
printf("INF header length (1230) %d\n", Inf.inf_header_len);
|
|
printf("INF areainfo len (80) %d\n", Inf.inf_areainfo_len);
|
|
printf("MIX structlen (14) %d\n", Inf.mix_structlen);
|
|
printf("FTI structlen (186) %d\n", Inf.fti_structlen);
|
|
printf("Uses UPL file %s\n", Inf.uses_upl_file ? "Yes":"No");
|
|
printf("From/To length %d\n", Inf.from_to_len);
|
|
printf("Subject length %d\n", Inf.subject_len);
|
|
printf("Packet ID %s\n", Inf.packet_id);
|
|
printf("File list type %d\n", Inf.file_list_type);
|
|
printf("Max packet size %d\n", Inf.max_packet_size);
|
|
|
|
fseek(fp, (long)Inf.inf_header_len, SEEK_SET);
|
|
while (fread(&AreaInf, sizeof(INF_AREA_INFO), 1, fp)) {
|
|
printf("\n");
|
|
printf("Area number %s\n", AreaInf.areanum);
|
|
printf("Area tag %s\n", AreaInf.echotag);
|
|
printf("Area title %s\n", AreaInf.title);
|
|
printf("Area flags %s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
|
|
(AreaInf.area_flags & INF_SCANNING) ? "Active ":"",
|
|
(AreaInf.area_flags & INF_ALIAS_NAME) ? "Aliases ":"",
|
|
(AreaInf.area_flags & INF_ANY_NAME) ? "Any-name ":"",
|
|
(AreaInf.area_flags & INF_ECHO) ? "Echo ":"",
|
|
(AreaInf.area_flags & INF_NETMAIL) ? "Netmail ":"",
|
|
(AreaInf.area_flags & INF_POST) ? "Post ":"",
|
|
(AreaInf.area_flags & INF_NO_PRIVATE) ? "No-private ":"",
|
|
(AreaInf.area_flags & INF_NO_PUBLIC) ? "No-public ":"",
|
|
(AreaInf.area_flags & INF_NO_TAGLINE) ? "No-tagline ":"",
|
|
(AreaInf.area_flags & INF_NO_HIGHBIT) ? "No-highbit ":"",
|
|
(AreaInf.area_flags & INF_NOECHO) ? "No-echo ":"",
|
|
(AreaInf.area_flags & INF_HASFILE) ? "Hasfile ":"",
|
|
(AreaInf.area_flags & INF_PERSONAL) ? "Personal ":"",
|
|
(AreaInf.area_flags & INF_TO_ALL) ? "To-all ":"");
|
|
printf("Network type %s\n", AreaInf.network_type ? "Internet":"Fidonet");
|
|
}
|
|
printf("\n");
|
|
} else {
|
|
printf("Cannot read info header\n");
|
|
}
|
|
fclose(fp);
|
|
}
|
|
|
|
snprintf(temp, PATH_MAX, "%s.MIX", bwname);
|
|
if ((fp = fopen(temp, "r"))) {
|
|
printf("---- %s.MIX -------------------------------------------------------\n\n", bwname);
|
|
printf(" Area Total Pers. FTI ptr\n");
|
|
printf("------ ------ ------ ---------\n");
|
|
while (fread(&Mix, ORIGINAL_MIX_STRUCT_LEN, 1, fp)) {
|
|
printf("%6s %6d %6d %9d\n", Mix.areanum, Mix.totmsgs, Mix.numpers, Mix.msghptr);
|
|
}
|
|
printf("\n");
|
|
fclose(fp);
|
|
}
|
|
|
|
snprintf(temp, PATH_MAX, "%s.FTI", bwname);
|
|
pos = 0;
|
|
if ((fp = fopen(temp, "r"))) {
|
|
printf("---- %s.FTI -------------------------------------------------------\n\n", bwname);
|
|
printf(" Pos From Date Msgnum Replto Replat Ptr Length\n");
|
|
printf("------ ------------------------------------- ------------------- ------ ------ ------ ------ ------\n");
|
|
while (fread(&Fti, ORIGINAL_FTI_STRUCT_LEN, 1, fp)) {
|
|
printf("%6d %-36s %20s %6d %6d %6d %6d %6d\n", pos, Fti.from, Fti.date, Fti.msgnum, Fti.replyto, Fti.replyat,
|
|
Fti.msgptr, Fti.msglength);
|
|
|
|
pos += ORIGINAL_FTI_STRUCT_LEN;
|
|
}
|
|
fclose(fp);
|
|
}
|
|
|
|
free(bwname);
|
|
free(temp);
|
|
return 0;
|
|
}
|
|
|
|
|