Change the prototype for camel_address_get_type to return a CamelType

2001-12-20  Jeffrey Stedfast  <fejj@ximian.com>

	* camel-address.h: Change the prototype for camel_address_get_type
	to return a CamelType (since internally this is what it returns
	and also in case we decide to write a replacement for the current
	CamelObject it'd be easier to drop in).

	* camel-internet-address.h: Same but for
	camel_internet_address_get_type()

	* providers/smtp/camel-smtp-transport.c (smtp_send_to): Updated to
	use a CamelAddress of recipients.
	(smtp_send): Since smtp_send_to now takes a CamelAddress
	recipients argument, our lives have been simplified and we can now
	just concat To/Cc/Bcc into a recipients addr and send away.

	* providers/sendmail/camel-sendmail-transport.c
	(sendmail_send_to): Updated to use a CamelAddress of recipients.

	* camel-transport.c (camel_transport_send_to): Now takes a
	CamelAddress argument for the recipient list rather than a GList.

svn path=/trunk/; revision=15197
This commit is contained in:
Jeffrey Stedfast
2001-12-20 18:45:22 +00:00
committed by Jeffrey Stedfast
parent e97bb59a94
commit 00903a7e0f
7 changed files with 83 additions and 59 deletions

View File

@ -1,3 +1,31 @@
2001-12-20 Jeffrey Stedfast <fejj@ximian.com>
* camel-address.h: Change the prototype for camel_address_get_type
to return a CamelType (since internally this is what it returns
and also in case we decide to write a replacement for the current
CamelObject it'd be easier to drop in).
* camel-internet-address.h: Same but for
camel_internet_address_get_type()
* providers/smtp/camel-smtp-transport.c (smtp_send_to): Updated to
use a CamelAddress of recipients.
(smtp_send): Since smtp_send_to now takes a CamelAddress
recipients argument, our lives have been simplified and we can now
just concat To/Cc/Bcc into a recipients addr and send away.
* providers/sendmail/camel-sendmail-transport.c
(sendmail_send_to): Updated to use a CamelAddress of recipients.
* camel-transport.c (camel_transport_send_to): Now takes a
CamelAddress argument for the recipient list rather than a GList.
2001-12-19 Jeffrey Stedfast <fejj@ximian.com>
* providers/smtp/Makefile.am: Remove the providerdir variable.
* providers/sendmail/Makefile.am: Same.
2001-12-17 Jeffrey Stedfast <fejj@ximian.com>
* camel-charset-map.c (camel_charset_iso_to_windows): New function

View File

@ -52,7 +52,7 @@ struct _CamelAddressClass {
void (*remove) (CamelAddress *, int index);
};
guint camel_address_get_type (void);
CamelType camel_address_get_type (void);
CamelAddress *camel_address_new (void);
CamelAddress *camel_address_new_clone (const CamelAddress *);
int camel_address_length (CamelAddress *);

View File

@ -39,7 +39,7 @@ struct _CamelInternetAddressClass {
CamelAddressClass parent_class;
};
guint camel_internet_address_get_type (void);
CamelType camel_internet_address_get_type (void);
CamelInternetAddress *camel_internet_address_new (void);
int camel_internet_address_add (CamelInternetAddress *, const char *, const char *);

View File

@ -132,7 +132,7 @@ camel_transport_send (CamelTransport *transport, CamelMedium *message,
**/
gboolean
camel_transport_send_to (CamelTransport *transport, CamelMedium *message,
GList *recipients, CamelException *ex)
CamelAddress *recipients, CamelException *ex)
{
gboolean sent;

View File

@ -59,9 +59,8 @@ typedef struct {
gboolean (*can_send) (CamelTransport *transport, CamelMedium *message);
gboolean (*send) (CamelTransport *transport, CamelMedium *message,
CamelException *ex);
gboolean (*send_to) (CamelTransport *transport,
CamelMedium *message, GList *recipients,
CamelException *ex);
gboolean (*send_to) (CamelTransport *transport, CamelMedium *message,
CamelAddress *recipients, CamelException *ex);
} CamelTransportClass;
@ -76,7 +75,7 @@ gboolean camel_transport_send (CamelTransport *transport,
/* FIXME: This should use a camel-address */
gboolean camel_transport_send_to (CamelTransport *transport,
CamelMedium *message,
GList *recipients,
CamelAddress *recipients,
CamelException *ex);
/* Standard Camel function */

View File

@ -45,7 +45,7 @@ static gboolean sendmail_can_send (CamelTransport *transport, CamelMedium *messa
static gboolean sendmail_send (CamelTransport *transport, CamelMedium *message,
CamelException *ex);
static gboolean sendmail_send_to (CamelTransport *transport, CamelMedium *message,
GList *recipients, CamelException *ex);
CamelAddress *recipients, CamelException *ex);
static void
@ -198,37 +198,46 @@ get_from (CamelMedium *message, CamelException *ex)
static gboolean
sendmail_send_to (CamelTransport *transport, CamelMedium *message,
GList *recipients, CamelException *ex)
CamelAddress *recipients, CamelException *ex)
{
GList *r;
const char *from, **argv;
int i, len;
const char *from, *addr, **argv;
gboolean status;
int i, len;
from = get_from (message, ex);
if (!from)
return FALSE;
len = g_list_length (recipients);
len = camel_address_length (recipients);
argv = g_malloc ((len + 6) * sizeof (char *));
argv[0] = "sendmail";
argv[1] = "-i";
argv[2] = "-f";
argv[3] = from;
argv[4] = "--";
for (i = 1, r = recipients; i <= len; i++, r = r->next)
argv[i + 4] = r->data;
argv[i + 4] = NULL;
for (i = 0; i < len; i++) {
if (!camel_internet_address_get (CAMEL_INTERNET_ADDRESS (recipients), i, NULL, &addr)) {
camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM,
_("Could not parse recipient list"));
g_free (argv);
return FALSE;
}
argv[i + 5] = addr;
}
argv[i + 5] = NULL;
status = sendmail_send_internal (message, argv, ex);
g_free (argv);
return status;
}
static gboolean
sendmail_send (CamelTransport *transport, CamelMedium *message,
CamelException *ex)
CamelException *ex)
{
const char *argv[6] = { "sendmail", "-t", "-i", "-f", NULL, NULL };

View File

@ -69,7 +69,8 @@
/* camel smtp transport class prototypes */
static gboolean smtp_can_send (CamelTransport *transport, CamelMedium *message);
static gboolean smtp_send (CamelTransport *transport, CamelMedium *message, CamelException *ex);
static gboolean smtp_send_to (CamelTransport *transport, CamelMedium *message, GList *recipients, CamelException *ex);
static gboolean smtp_send_to (CamelTransport *transport, CamelMedium *message,
CamelAddress *recipients, CamelException *ex);
/* support prototypes */
static void smtp_construct (CamelService *service, CamelSession *session,
@ -566,14 +567,13 @@ smtp_can_send (CamelTransport *transport, CamelMedium *message)
static gboolean
smtp_send_to (CamelTransport *transport, CamelMedium *message,
GList *recipients, CamelException *ex)
CamelAddress *recipients, CamelException *ex)
{
CamelSmtpTransport *smtp_transport = CAMEL_SMTP_TRANSPORT (transport);
const CamelInternetAddress *cia;
char *recipient;
const char *addr;
gboolean has_8bit_parts;
GList *r;
const char *addr;
int i, len;
cia = camel_mime_message_get_from (CAMEL_MIME_MESSAGE (message));
if (!cia) {
@ -603,18 +603,24 @@ smtp_send_to (CamelTransport *transport, CamelMedium *message,
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("Cannot send message: "
"no recipients defined."));
camel_operation_end(NULL);
camel_operation_end (NULL);
return FALSE;
}
for (r = recipients; r; r = r->next) {
recipient = (char *) r->data;
if (!smtp_rcpt (smtp_transport, recipient, ex)) {
g_free (recipient);
len = camel_address_length (recipients);
cia = CAMEL_INTERNET_ADDRESS (recipients);
for (i = 0; i < len; i++) {
if (!camel_internet_address_get (cia, i, NULL, &addr)) {
camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM,
_("Cannot send message: one or more invalid recipients"));
camel_operation_end (NULL);
return FALSE;
}
if (!smtp_rcpt (smtp_transport, addr, ex)) {
camel_operation_end (NULL);
return FALSE;
}
g_free (recipient);
}
/* passing in has_8bit_parts saves time as we don't have to
@ -637,41 +643,23 @@ static gboolean
smtp_send (CamelTransport *transport, CamelMedium *message, CamelException *ex)
{
const CamelInternetAddress *to, *cc, *bcc;
GList *recipients = NULL;
guint index, len;
CamelInternetAddress *recipients = NULL;
gboolean status;
to = camel_mime_message_get_recipients (CAMEL_MIME_MESSAGE (message), CAMEL_RECIPIENT_TYPE_TO);
cc = camel_mime_message_get_recipients (CAMEL_MIME_MESSAGE (message), CAMEL_RECIPIENT_TYPE_CC);
bcc = camel_mime_message_get_recipients (CAMEL_MIME_MESSAGE (message), CAMEL_RECIPIENT_TYPE_BCC);
/* get all of the To addresses into our recipient list */
len = camel_address_length (CAMEL_ADDRESS (to));
for (index = 0; index < len; index++) {
const char *addr;
if (camel_internet_address_get (to, index, NULL, &addr))
recipients = g_list_append (recipients, g_strdup (addr));
}
recipients = camel_internet_address_new ();
camel_address_cat (CAMEL_ADDRESS (recipients), CAMEL_ADDRESS (to));
camel_address_cat (CAMEL_ADDRESS (recipients), CAMEL_ADDRESS (cc));
camel_address_cat (CAMEL_ADDRESS (recipients), CAMEL_ADDRESS (bcc));
/* get all of the Cc addresses into our recipient list */
len = camel_address_length (CAMEL_ADDRESS (cc));
for (index = 0; index < len; index++) {
const char *addr;
if (camel_internet_address_get (cc, index, NULL, &addr))
recipients = g_list_append (recipients, g_strdup (addr));
}
status = smtp_send_to (transport, message, CAMEL_ADDRESS (recipients), ex);
/* get all of the Bcc addresses into our recipient list */
len = camel_address_length (CAMEL_ADDRESS (bcc));
for (index = 0; index < len; index++) {
const char *addr;
if (camel_internet_address_get (bcc, index, NULL, &addr))
recipients = g_list_append (recipients, g_strdup (addr));
}
camel_object_unref (CAMEL_OBJECT (recipients));
return smtp_send_to (transport, message, recipients, ex);
return status;
}
static gboolean