diff options
author | Eduardo Chappa <echappa@gmx.com> | 2013-02-03 00:59:38 -0700 |
---|---|---|
committer | Eduardo Chappa <echappa@gmx.com> | 2013-02-03 00:59:38 -0700 |
commit | 094ca96844842928810f14844413109fc6cdd890 (patch) | |
tree | e60efbb980f38ba9308ccb4fb2b77b87bbc115f3 /pith/send.h | |
download | alpine-094ca96844842928810f14844413109fc6cdd890.tar.xz |
Initial Alpine Version
Diffstat (limited to 'pith/send.h')
-rw-r--r-- | pith/send.h | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/pith/send.h b/pith/send.h new file mode 100644 index 00000000..69d763fc --- /dev/null +++ b/pith/send.h @@ -0,0 +1,271 @@ +/* + * $Id: send.h 1142 2008-08-13 17:22:21Z hubert@u.washington.edu $ + * + * ======================================================================== + * Copyright 2006-2008 University of Washington + * Copyright 2013 Eduardo Chappa + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * ======================================================================== + */ + +#ifndef PITH_SEND_INCLUDED +#define PITH_SEND_INCLUDED + + +#include "../pith/context.h" +#include "../pith/pattern.h" +#include "../pith/repltype.h" +#include "../pith/store.h" +#include "../pith/osdep/pipe.h" + + +#ifndef TCPSTREAM +#define TCPSTREAM void +#endif + +#define MIME_VER "MIME-Version: 1.0\015\012" + +#define UNKNOWN_CHARSET "X-UNKNOWN" + +#define OUR_HDRS_LIST "X-Our-Headers" + + +/* + * Redraft flags... + */ +#define REDRAFT_NONE 0 +#define REDRAFT_PPND 0x01 +#define REDRAFT_DEL 0x02 +#define REDRAFT_HTML 0x04 + + +/* + * Child posting control structure + */ +typedef struct post_s { + int pid; /* proc id of child doing posting */ + int status; /* child's exit status */ + char *fcc; /* fcc we may have copied */ +} POST_S; + + +/*------------------------------ + Structures and enum used to expand the envelope structure to + support user defined headers. PINEFIELDs are sort of used for two + different purposes. The main use is to store information about headers + in pine_send. There is a pf for every header. It is also used for the + related task of parsing the customized-hdrs and role->cstm headers and + storing information about those. + ----*/ + +typedef enum {FreeText, Address, Fcc, + Attachment, Subject, TypeUnknown} FieldType; +typedef enum {NoMatch = 0, /* no match for this header */ + UseAsDef=1, /* use only if no value set yet */ + Combine=2, /* combine if News, To, Cc, Bcc, else + replace existing value */ + Replace=3} CustomType; /* replace existing value */ + +typedef struct pine_field { + char *name; /* field's literal name */ + FieldType type; /* field's type */ + unsigned canedit:1; /* allow editing of this field */ + unsigned writehdr:1; /* write rfc822 header for field */ + unsigned localcopy:1; /* copy to fcc or postponed */ + unsigned rcptto:1; /* send to this if type Address */ + unsigned posterr:1; /* posting error occured in field */ + /* the next three fields are used only for customized-hdrs and friends */ + unsigned standard:1; /* this hdr already in pf_template */ + CustomType cstmtype; /* for customized-hdrs and r->cstm */ + char *val; /* field's config'd value */ + ADDRESS **addr; /* used if type is Address */ + char *scratch; /* scratch pointer for Address type */ + char **text; /* field's free text form */ + char *textbuf; /* need to free this when done */ + void *extdata; /* hook for extra data pointer */ + struct pine_field *next; /* next pine field */ +} PINEFIELD; + + +typedef struct { + ENVELOPE *env; /* standard c-client envelope */ + PINEFIELD *local; /* this is all of the headers */ + PINEFIELD *custom; /* ptr to start of custom headers */ + PINEFIELD **sending_order; /* array giving writing order of hdrs */ +} METAENV; + + +/* + * Return values for check_address() + */ +#define CA_OK 0 /* Address is OK */ +#define CA_EMPTY 1 /* Address is OK, but no deliverable addrs */ +#define CA_BAD -1 /* Address is bogus */ + + + +/* + * call_mailer bigresult_f flags + */ +#define CM_BR_VERBOSE 0x01 +#define CM_BR_ERROR 0x02 + + +/* + * call_mailer flags + */ +#define CM_NONE 0x00 +#define CM_VERBOSE 0x01 /* request verbose mode */ +#define CM_DSN_NEVER 0x02 /* request NO DSN */ +#define CM_DSN_DELAY 0x04 /* DSN delay notification */ +#define CM_DSN_SUCCESS 0x08 /* DSN success notification */ +#define CM_DSN_FULL 0x10 /* DSN full notificiation */ +#define CM_DSN_SHOW 0x20 /* show DSN result (place holder) */ + + +#ifdef DEBUG_PLUS +#define TIME_STAMP(str, l) { \ + struct timeval tp; \ + struct timezone tzp; \ + if(gettimeofday(&tp, &tzp) == 0) \ + dprint((l, \ + "\nKACHUNK (%s) : %.8s.%3.3ld\n", \ + str, ctime(&tp.tv_sec) + 11, \ + tp.tv_usec));\ + } +#else /* !DEBUG_PLUS */ +#define TIME_STAMP(str, l) +#endif /* !DEBUG_PLUS */ + +/* + * Most number of errors call_mailer should report + */ +#define MAX_ADDR_ERROR 2 /* Only display 2 address errors */ + + +#define FCC_SOURCE CharStar + + +struct local_message_copy { + STORE_S *so; + unsigned text_only:1; + unsigned all_written:1; + unsigned text_written:1; +}; + + +#define TONAME "To" +#define CCNAME "cc" +#define SUBJNAME "Subject" +#define PRIORITYNAME "X-Priority" + + +/* + * Note, these are in the same order in the he_template and pf_template arrays. + * The typedef is just a way to get these variables automatically defined in order. + */ +typedef enum { N_AUTHRCVD = 0 + , N_FROM + , N_REPLYTO + , N_TO + , N_CC + , N_BCC + , N_NEWS + , N_FCC + , N_LCC + , N_ATTCH + , N_SUBJ + , N_REF + , N_DATE + , N_INREPLY + , N_MSGID + , N_PRIORITY + , N_USERAGENT + , N_NOBODY + , N_POSTERR + , N_RPLUID + , N_RPLMBOX + , N_SMTP + , N_NNTP + , N_CURPOS + , N_OURREPLYTO + , N_OURHDRS + , N_SENDER +} dummy_enum; + + +typedef struct { + int val; + char *desc; +} PRIORITY_S; + + +/* ugly globals we'd like to get rid of */ +extern struct local_message_copy lmc; +extern char verbose_requested; +extern unsigned char dsn_requested; +extern PRIORITY_S priorities[]; +extern PINEFIELD pf_template[]; + + +/* exported protoypes */ +int postponed_stream(MAILSTREAM **, char *, char *, int); +int redraft_work(MAILSTREAM **, long, ENVELOPE **, BODY **, char **, char **, + REPLY_S **, REDRAFT_POS_S **, PINEFIELD **, ACTION_S **, int, STORE_S *); +int redraft_cleanup(MAILSTREAM **, int, int); +void simple_header_parse(char *, char **, char **); +REPLY_S *build_reply_uid(char *); +METAENV *pine_new_env(ENVELOPE *, char **, char ***, PINEFIELD *); +void pine_free_env(METAENV **); +int check_addresses(METAENV *); +void update_answered_flags(REPLY_S *); +ADDRESS *phone_home_from(void); +unsigned int phone_home_hash(char *); +int call_mailer(METAENV *, BODY *, char **, int, void (*)(char *, int), + void (*)(PIPE_S *, int, void *)); +int write_postponed(METAENV *, BODY *); +int commence_fcc(char *, CONTEXT_S **, int); +int wrapup_fcc(char *, CONTEXT_S *, METAENV *, BODY *); +STORE_S *open_fcc(char *, CONTEXT_S **, int, char *, char *); +int write_fcc(char *, CONTEXT_S *, STORE_S *, MAILSTREAM *, char *, char *); +BODY *first_text_8bit(BODY *); +ADDRESS *generate_from(void); +void set_mime_type_by_grope(BODY *); +void set_charset_possibly_to_ascii(BODY *, char *); +void set_parameter(PARAMETER **, char *, char *); +void pine_encode_body(BODY *); +int pine_header_line(char *, METAENV *, char *, soutr_t, TCPSTREAM *, int, int); +char *encode_header_value(char *, size_t, unsigned char *, char *, int); +int pine_address_line(char *, METAENV *, ADDRESS *, soutr_t, TCPSTREAM *, int, int); +long pine_rfc822_header(METAENV *, BODY *, soutr_t, TCPSTREAM *); +long pine_rfc822_output(METAENV *, BODY *, soutr_t, TCPSTREAM *); +void pine_free_body(BODY **); +long send_body_size(BODY *); +void pine_smtp_verbose_out(char *); +int pine_header_forbidden(char *); +int hdr_is_in_list(char *, PINEFIELD *); +int count_custom_hdrs_pf(PINEFIELD *, int); +int count_custom_hdrs_list(char **); +CustomType set_default_hdrval(PINEFIELD *, PINEFIELD *); +FieldType pine_header_standard(char *); +void customized_hdr_setup(PINEFIELD *, char **, CustomType); +void add_defaults_from_list(PINEFIELD *, char **); +PINEFIELD *parse_custom_hdrs(char **, CustomType); +PINEFIELD *combine_custom_headers(PINEFIELD *, PINEFIELD *); +void free_customs(PINEFIELD *); +int encode_whole_header(char *, METAENV *); +int news_poster(METAENV *, BODY *, char **, void (*)(PIPE_S *, int, void *)); +PINEFIELD *set_priority_header(METAENV *header, char *value); +void pine_free_body_data(BODY *); +void free_charsetchecker(void); +long pine_rfc822_output_body(BODY *,soutr_t,TCPSTREAM *); +int pine_write_body_header(BODY *, soutr_t, TCPSTREAM *); + + +#endif /* PITH_SEND_INCLUDED */ |