home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
-
- #include "xp.h"
- #include "mime.h"
- #include "mkutils.h"
- /* there used to be problems including msgcom.h with mime.h having to do with
- differing prototypes for some of the msg_linebuffer calls, but that
- seems to be fixed.And we need msgcom.h for win16
- */
- #include "msgcom.h"
- #include "libi18n.h"
-
- /* for XP_GetString() */
- #include "xpgetstr.h"
- extern int MK_MSG_NO_RETURN_ADDRESS;
- extern int MK_MSG_NO_RETURN_ADDRESS_AT;
- extern int MK_MSG_NO_RETURN_ADDRESS_DOT;
- extern int MK_OUT_OF_MEMORY;
- extern int MK_SIGNATURE_TOO_LONG;
- extern int MK_SIGNATURE_TOO_WIDE;
-
- const int16 default_csid = 0;
- const int address_max_length = 42;
-
- #define mime_enc_7bit 0
- #define mime_enc_8bit 1
- #define mime_enc_qp 2
- #define mime_enc_b64 3
-
- /* build a mailto: url address given a to field
- *
- * returns a malloc'd string
- */
- PUBLIC char *
- MIME_BuildMailtoURLAddress(const char * to)
- {
- char * rv=0;
-
- StrAllocCopy(rv,"mailto:");
- StrAllocCat(rv, to);
-
- return(rv);
- }
-
-
- /* build a news: url address given a partial news post
- * URL and the newsgroups line
- *
- * returns a malloc'd string
- */
- PUBLIC char *
- MIME_BuildNewspostURLAddress(const char *partial_newspost_url,
- const char *newsgroups)
- {
- char * rv=0;
-
- if (!partial_newspost_url)
- partial_newspost_url = "news:";
- StrAllocCopy(rv, partial_newspost_url);
- StrAllocCat(rv, newsgroups);
-
- return(rv);
- }
-
-
- /*
- Returns the appropriate contents of a From: field of a mail message
- originating from the current user. This calls FE_UsersFullName()
- and FE_UsersMailAddress() and correctly munges the values.
-
- A new string is returned, which you must free when you're done with it.
-
- An email address must be provided but a user name is optional. If no
- address has been entered or other errors are encountered return NULL.
- */
- PUBLIC char *
- MIME_MakeFromField (void)
- {
- return MSG_MakeFullAddress(FE_UsersFullName(), FE_UsersMailAddress());
- }
-
- /* Ok, this doesn't really belong here... */
-
- void
- MISC_ValidateSignature (MWContext *context, const char *signature)
- {
- int max_columns = 0;
- int column = 0;
- int newlines = 0;
- const char *sig = signature;
-
- /* ensure that sig is valid */
- if (!sig) return;
-
- for (; *sig; sig++)
- {
- if (*sig == '\n' || *sig == '\r')
- {
- /* Treat CR, LF, CRLF, and LFCR as a single line-break. */
- if ((sig[0] == '\n' && sig[1] == '\r') ||
- (sig[0] == '\r' && sig[1] == '\n'))
- sig++;
-
- if (column > max_columns)
- max_columns = column;
- newlines++;
- column = 0;
- }
- else
- {
- column++;
- }
- }
- /* If the last line doesn't end in a newline, pretend it does. */
- if (column != 0)
- newlines++;
- if (column > max_columns)
- max_columns = column;
-
- /* If the signature begins with "--" followed by whitespace or a newline,
- that means that the pseudo-standard sig delimiter "-- \n" is actually
- in the file, so don't count that as a "line". */
- if (signature [0] == '-' &&
- signature [1] == '-' &&
- (signature [2] == ' ' ||
- (signature [2] == '\012' ||
- signature [2] == '\015')))
- newlines--;
-
- if (newlines > 4)
- {
- FE_Alert (context, XP_GetString (MK_SIGNATURE_TOO_LONG));
- }
- else if (max_columns > 79)
- {
- FE_Alert (context, XP_GetString (MK_SIGNATURE_TOO_WIDE));
- }
- }
-
- int
- MISC_ValidateReturnAddress (MWContext *context, const char *addr)
- {
- char *at;
- char *dot;
- char *fmt = 0;
-
- #if defined(XP_WIN) || defined(XP_OS2)
- if(FE_IsAltMailUsed(context))
- return 0;
- #endif
-
- if (addr)
- while (XP_IS_SPACE (*addr))
- addr++;
-
- if (!addr || !*addr)
- {
- FE_Alert (context, XP_GetString (MK_MSG_NO_RETURN_ADDRESS));
- #ifdef XP_MAC
- FE_EditPreference(PREF_EmailAddress);
- #endif
- return -1;
- }
-
- at = XP_STRRCHR (addr, '@');
- if (!at)
- {
- fmt = XP_GetString (MK_MSG_NO_RETURN_ADDRESS_AT);
- goto FAIL;
- }
- dot = XP_STRCHR (at, '.');
- if (!dot)
- {
- fmt = XP_GetString (MK_MSG_NO_RETURN_ADDRESS_DOT);
- goto FAIL;
- }
-
- return 0;
-
- FAIL:
- {
- char *buf = (char *)XP_ALLOC (XP_STRLEN (addr) + XP_STRLEN (fmt) + 20);
- if (!buf) return MK_OUT_OF_MEMORY;
-
- if ( ( XP_STRLEN (addr) > address_max_length ) && ( context != NULL ) )
- INTL_MidTruncateString( default_csid, addr, addr, address_max_length );
-
- XP_SPRINTF (buf, fmt, addr);
- FE_Alert (context, buf);
- return -1;
- }
- }
-