Logo Search packages:      
Sourcecode: pan version File versions  Download package

uuint.h

/*
 * This file is part of uudeview, the simple and friendly multi-part multi-
 * file uudecoder  program  (c) 1994-2001 by Frank Pilhofer. The author may
 * be contacted at fp@fpx.de
 *
 * This program 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 of the License, or
 * (at your option) any later version.
 *
 * This program 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.
 */

#ifndef __UUINT_H__
#define __UUINT_H__

/*
 * This file describes the internal structures, variables and definitions
 * of UUDeview. It should not be included from other packages. Subject to
 * change without notice. Do not depend on anything here.
 *
 * $Id: uuint.h 2 2006-10-02 20:45:58Z csk $
 */

#ifndef _ANSI_ARGS_
#ifdef PROTOTYPES
#define _ANSI_ARGS_(c)  c
#else
#define _ANSI_ARGS_(c)  ()
#endif
#endif

/*
 * Busy Polls will be made after processing ... lines
 */

#define BUSY_LINE_TICKS       50

/*
 * States of MIME scanner
 */

#define MS_HEADERS      1     /* still inside of headers      */
#define MS_BODY         2     /* body of `simple' messages    */
#define MS_PREAMBLE     3     /* preamble of Multipart/Mixed  */
#define MS_SUBPART      4     /* within one of the Multiparts */
#define MS_EPILOGUE     5     /* epilogue of Multipart/Mixed  */

/*
 * Number of subsequent encoded lines we require to believe this
 * is valid data.
 */

#define ELC_COUNT 4

/*
 * Flags a part may have. FL_PROPER means that we are sure about the file's
 * encoding, beginning and end, and don't have to use special care when de-
 * coding.
 */

#define FL_NONE         0     /* no flag, just plain normal   */
#define FL_SINGLE 1     /* standalone MSG, do not mix   */
#define FL_PARTIAL      2     /* from Message/Partial         */
#define FL_PROPER 4     /* proper MIME part             */
#define FL_TOEND  8     /* part continues to EOF        */

/*
 * Auxiliary macro: compute the percentage of a against b.
 * The obvious answer is (100*a)/b, but this overflows for large a.
 * a/(b/100) is better; we use a/((b/100)+1) so that we don't divide
 * by zero for b<100 and the result doesn't become larger than 100%
 */

#define UUPERCENT(a,b)  ((int) ((unsigned long)(a) / \
                        (((unsigned long)(b)/100)+1)))
     
/*
 * Make the Busy Callback easier. The macro returns true if the BusyCallback
 * wants us to terminate.
 */

extern unsigned long uuyctr;
#define UUBUSYPOLL(a,b) (((++uuyctr%BUSY_LINE_TICKS)==0) ? (progress.percent=UUPERCENT((a),(b)),UUBusyPoll()):0)

/*
 * How many lines of headers do we need to believe another mail
 * header is approaching? Use more restrictive values for MIME
 * mails, less restrictive for Freestyle
 */

00095 typedef struct {
  int restart;          /* restarting after a MIME body (not subpart) */
  int afterdata;  /* after we had useful data in freestyle mode */
  int afternl;          /* after an empty line in freestyle mode      */
} headercount;

extern headercount hlcount;

/*
 * Information from the headers of a message. Each instance must
 * have its very own copy of the strings. If `mimevers' is NULL,
 * then this message does not comply to the MIME standard.
 */

00109 typedef struct _headers {
  char *from;           /* From:                                          */
  char *subject;  /* Subject:                                       */
  char *rcpt;           /* To:                                            */
  char *date;           /* Date:                                          */
  char *mimevers; /* MIME-Version:                                  */
  char *ctype;          /* Content-Type:                                  */
  char *ctenc;          /* Content-Transfer-Encoding:                     */
  char *fname;          /* Potential Filename from Content-Type Parameter */
  char *boundary; /* MIME-Boundary from Content-Type Parameter      */
  char *mimeid;         /* MIME-Id for Message/Partial                    */
  int partno;           /* part number for Message/Partial                */
  int numparts;         /* number of parts for Message/Partial            */
} headers;

/*
 * Scanner state
 */

00128 typedef struct _scanstate {
  int isfolder;         /* if we think this is a valid email folder       */
  int ismime;           /* if we are within a valid MIME message          */
  int mimestate;  /* state of MIME scanner                          */
  int mimeenc;          /* encoding of this MIME file                     */
  char *source;         /* source filename                                */
  headers envelope;     /* mail envelope headers                          */
} scanstate;

/*
 * Structure that holds the information for a single file / part of
 * a file. If a subject line is encountered, it is copied to subject;
 * if a begin is found, the mode and name of the file is extracted.
 * flags are set if 'begin' or 'end' is detected and 'uudet' if valid
 * uuencoded data is found. If the file contains a 'From:' line with
 * a '@' in it (indicating an origin email address), it is preserved
 * in 'origin'.
 **/

00147 typedef struct _fileread {
  char *subject;  /* Whole subject line */
  char *filename; /* Only filled in if begin detected */
  char *origin;         /* Whole 'From:' line */
  char *mimeid;         /* the ID for Mime-encoded files */
  char *mimetype; /* Content-Type */
  short mode;           /* Mode of File (from 'begin') */
  int   begin;          /* begin detected */
  int   end;            /* end detected */
  int   flags;          /* associated flags */

  short uudet;          /* valid encoded data. value indicates encoding */
  short partno;         /* Mime-files have a part number within */
  short maxpno;         /* ... plus the total number of parts   */

  char *sfname;         /* Associated source file */
  long startpos;  /* ftell() position where data starts */
  long length;          /* length of data */
} fileread;

/*
 * Structure for holding one part of a file, with some more information
 * about it. The UUPreProcessPart() function takes one a fileread structure
 * and produces this uufile structure.
 * Linked List, ordered by partno.
 **/

00174 typedef struct _uufile {
  char     *filename;
  char     *subfname;
  char     *mimeid;
  char     *mimetype;
  short     partno;
  fileread *data;
  struct _uufile *NEXT;
} uufile;

extern void *uu_MsgCBArg;
extern void *uu_BusyCBArg;
extern void *uu_FileCBArg;
extern void *uu_FFCBArg;

/*
 * variables
 */

extern int uu_fast_scanning;
extern int uu_bracket_policy;
extern int uu_verbose;
extern int uu_desperate;
extern int uu_ignreply;
extern int uu_debug;
extern int uu_errno;
extern int uu_dumbness;
extern int uu_overwrite;
extern int uu_ignmode;
extern int uu_headercount;
extern int uu_usepreamble;
extern int uu_handletext;
extern int uu_tinyb64;
extern int uu_remove_input;
extern int uu_more_mime;

extern char *uusavepath;
extern char *uuencodeext;

/*
 * Encoding/Decoding tables
 */

extern unsigned char UUEncodeTable[];
extern unsigned char XXEncodeTable[];
extern unsigned char B64EncodeTable[];
extern unsigned char BHEncodeTable[];

/*
 * String tables from uustring.c
 */

extern char *msgnames[];
extern char *codenames[];
extern char *uuretcodes[];

extern uulist *UUGlobalFileList;

/*
 * State of MIME variables and current progress
 */

extern int nofnum, mssdepth;
extern int mimseqno, lastvalid;
extern int lastenc;
extern scanstate  multistack[];
extern headers    localenv;
extern scanstate  sstate;
extern uuprogress progress;

/*
 * mallocable areas
 */

extern char *uugen_fnbuffer, *uugen_inbuffer;
extern char *uucheck_lastname, *uucheck_tempname;
extern char *uuestr_itemp, *uuestr_otemp;
extern char *uulib_msgstring, *uuncdl_fulline;
extern char *uuncdp_oline, *uuscan_shlline, *uuscan_shlline2;
extern char *uuscan_pvvalue, *uuscan_phtext;
extern char *uuscan_sdline, *uuscan_sdbhds1;
extern char *uuscan_sdbhds2;
extern char *uuscan_spline;
extern char *uuutil_bhwtmp;
extern char *uunconc_UUxlat, *uunconc_UUxlen;
extern char *uunconc_B64xlat, *uunconc_XXxlat;
extern char *uunconc_BHxlat, *uunconc_save;

#define UUSCAN_SPLINE_LEN 4096
#define UUSCAN_SDLINE_LEN 4096
#define UUGEN_FNBUFFER_LEN 4096

#ifdef __cplusplus
extern "C" {
#endif

extern void   (*uu_MsgCallback)  _ANSI_ARGS_((void *, char *, int));
extern int    (*uu_BusyCallback) _ANSI_ARGS_((void *, uuprogress *));
extern int    (*uu_FileCallback) _ANSI_ARGS_((void *, char *, char *, int));
extern char * (*uu_FNameFilter)  _ANSI_ARGS_((void *, char *));

/*
 * Functions from uulib.c that aren't defined in <uudeview.h>
 * Be careful about the definition with variable arguments.
 */

#if defined(STDC_HEADERS) || defined(HAVE_STDARG_H)
int         UUMessage         _ANSI_ARGS_((char *, int,
                                         int, char *, ...));
#else
int         UUMessage         ();
#endif
int         UUBusyPoll        _ANSI_ARGS_((void));

/*
 * Functions from uucheck.c
 */

uufile *    UUPreProcessPart  _ANSI_ARGS_((fileread *, int *));
int         UUInsertPartToList      _ANSI_ARGS_((uufile *));
uulist *    UUCheckGlobalList _ANSI_ARGS_((void));

/*
 * Functions from uuutil.c
 */

void        UUkillfread             _ANSI_ARGS_((fileread *));
void        UUkillfile        _ANSI_ARGS_((uufile *));
void        UUkilllist        _ANSI_ARGS_((uulist *));
void        UUkillheaders           _ANSI_ARGS_((headers *));

fileread *  ScanPart          _ANSI_ARGS_((FILE *, char *, int *));

int         UUbhdecomp        _ANSI_ARGS_((char *, char *,
                                         char *, int *,
                                         size_t, size_t, 
                                         size_t *));
size_t            UUbhwrite         _ANSI_ARGS_((char *, size_t, size_t,
                                         FILE *));

/*
 * Functions from uunconc.c
 */

int         UURepairData            _ANSI_ARGS_((FILE *, char *,
                                         int, int *));

void        UUInitConc        _ANSI_ARGS_((void));
int         UUValidData       _ANSI_ARGS_((char *, int, int *));
size_t            UUDecodeLine            _ANSI_ARGS_((char *, char *, int));
int         UUDecodeField           _ANSI_ARGS_((char *, char *, int));
int         UUDecodePart            _ANSI_ARGS_((FILE *, FILE *, int *,
                                         long, int, int, char *));
int         UUDecode          _ANSI_ARGS_((uulist *));

/*
 * Message retrieval from uustring.c
 */

char *            uustring          _ANSI_ARGS_((int));

/*
 * From uuscan.c
 */

int         UUScanHeader            _ANSI_ARGS_((FILE *, headers *));

#ifdef __cplusplus
}
#endif
#endif

Generated by  Doxygen 1.6.0   Back to index