Fossil SCM

Clean up the interface to internal smtp_session_new() routine.

drh 2025-04-07 15:27 trunk
Commit 3fc9b90587ea4885bff869fb87a1cf9013a9c16a343172284b42f3623697c398
2 files changed +1 -1 +24 -18
+1 -1
--- src/alerts.c
+++ src/alerts.c
@@ -641,11 +641,11 @@
641641
emailerGetSetting(p, &zRelay, "email-send-relayhost");
642642
if( zRelay ){
643643
u32 smtpFlags = SMTP_DIRECT;
644644
if( mFlags & ALERT_TRACE ) smtpFlags |= SMTP_TRACE_STDOUT;
645645
p->pSmtp = smtp_session_new(domain_of_addr(p->zFrom), zRelay,
646
- smtpFlags);
646
+ smtpFlags, 0);
647647
smtp_client_startup(p->pSmtp);
648648
}
649649
}
650650
return p;
651651
}
652652
--- src/alerts.c
+++ src/alerts.c
@@ -641,11 +641,11 @@
641 emailerGetSetting(p, &zRelay, "email-send-relayhost");
642 if( zRelay ){
643 u32 smtpFlags = SMTP_DIRECT;
644 if( mFlags & ALERT_TRACE ) smtpFlags |= SMTP_TRACE_STDOUT;
645 p->pSmtp = smtp_session_new(domain_of_addr(p->zFrom), zRelay,
646 smtpFlags);
647 smtp_client_startup(p->pSmtp);
648 }
649 }
650 return p;
651 }
652
--- src/alerts.c
+++ src/alerts.c
@@ -641,11 +641,11 @@
641 emailerGetSetting(p, &zRelay, "email-send-relayhost");
642 if( zRelay ){
643 u32 smtpFlags = SMTP_DIRECT;
644 if( mFlags & ALERT_TRACE ) smtpFlags |= SMTP_TRACE_STDOUT;
645 p->pSmtp = smtp_session_new(domain_of_addr(p->zFrom), zRelay,
646 smtpFlags, 0);
647 smtp_client_startup(p->pSmtp);
648 }
649 }
650 return p;
651 }
652
+24 -18
--- src/smtp.c
+++ src/smtp.c
@@ -184,26 +184,23 @@
184184
}
185185
186186
/*
187187
** Allocate a new SmtpSession object.
188188
**
189
-** Both zFrom and zDest must be specified.
190
-**
191
-** The ... arguments are in this order:
189
+** Both zFrom and zDest must be specified. smtpFlags may not contain
190
+** either SMTP_TRACE_FILE or SMTP_TRACE_BLOB as those settings must be
191
+** added by a subsequent call to smtp_session_config().
192192
**
193
-** SMTP_PORT: int
194
-** SMTP_TRACE_FILE: FILE*
195
-** SMTP_TRACE_BLOB: Blob*
193
+** The iPort option is ignored unless SMTP_PORT is set in smtpFlags
196194
*/
197195
SmtpSession *smtp_session_new(
198196
const char *zFrom, /* Domain for the client */
199197
const char *zDest, /* Domain of the server */
200198
u32 smtpFlags, /* Flags */
201
- ... /* Arguments depending on the flags */
199
+ int iPort /* TCP port if the SMTP_PORT flags is present */
202200
){
203201
SmtpSession *p;
204
- va_list ap;
205202
UrlData url;
206203
207204
p = fossil_malloc( sizeof(*p) );
208205
memset(p, 0, sizeof(*p));
209206
p->zFrom = zFrom;
@@ -210,21 +207,13 @@
210207
p->zDest = zDest;
211208
p->smtpFlags = smtpFlags;
212209
memset(&url, 0, sizeof(url));
213210
url.port = 25;
214211
blob_init(&p->inbuf, 0, 0);
215
- va_start(ap, smtpFlags);
216212
if( smtpFlags & SMTP_PORT ){
217
- url.port = va_arg(ap, int);
218
- }
219
- if( smtpFlags & SMTP_TRACE_FILE ){
220
- p->logFile = va_arg(ap, FILE*);
221
- }
222
- if( smtpFlags & SMTP_TRACE_BLOB ){
223
- p->pTranscript = va_arg(ap, Blob*);
224
- }
225
- va_end(ap);
213
+ url.port = iPort;
214
+ }
226215
if( (smtpFlags & SMTP_DIRECT)!=0 ){
227216
int i;
228217
p->zHostname = fossil_strdup(zDest);
229218
for(i=0; p->zHostname[i] && p->zHostname[i]!=':'; i++){}
230219
if( p->zHostname[i]==':' ){
@@ -246,10 +235,27 @@
246235
p->zErr = socket_errmsg();
247236
socket_close();
248237
}
249238
return p;
250239
}
240
+
241
+/*
242
+** Configure debugging options on SmtpSession. Add all bits in
243
+** smtpFlags to the settings. The following bits can be added:
244
+**
245
+** SMTP_FLAG_FILE: In which case pArg is the FILE* pointer to use
246
+**
247
+** SMTP_FLAG_BLOB: In which case pArg is the Blob* poitner to use.
248
+*/
249
+void smtp_session_config(SmtpSession *p, u32 smtpFlags, void *pArg){
250
+ p->smtpFlags = smtpFlags;
251
+ if( smtpFlags & SMTP_TRACE_FILE ){
252
+ p->logFile = (FILE*)pArg;
253
+ }else if( smtpFlags & SMTP_TRACE_BLOB ){
254
+ p->pTranscript = (Blob*)pArg;
255
+ }
256
+}
251257
252258
/*
253259
** Send a single line of output the SMTP client to the server.
254260
*/
255261
static void smtp_send_line(SmtpSession *p, const char *zFormat, ...){
256262
--- src/smtp.c
+++ src/smtp.c
@@ -184,26 +184,23 @@
184 }
185
186 /*
187 ** Allocate a new SmtpSession object.
188 **
189 ** Both zFrom and zDest must be specified.
190 **
191 ** The ... arguments are in this order:
192 **
193 ** SMTP_PORT: int
194 ** SMTP_TRACE_FILE: FILE*
195 ** SMTP_TRACE_BLOB: Blob*
196 */
197 SmtpSession *smtp_session_new(
198 const char *zFrom, /* Domain for the client */
199 const char *zDest, /* Domain of the server */
200 u32 smtpFlags, /* Flags */
201 ... /* Arguments depending on the flags */
202 ){
203 SmtpSession *p;
204 va_list ap;
205 UrlData url;
206
207 p = fossil_malloc( sizeof(*p) );
208 memset(p, 0, sizeof(*p));
209 p->zFrom = zFrom;
@@ -210,21 +207,13 @@
210 p->zDest = zDest;
211 p->smtpFlags = smtpFlags;
212 memset(&url, 0, sizeof(url));
213 url.port = 25;
214 blob_init(&p->inbuf, 0, 0);
215 va_start(ap, smtpFlags);
216 if( smtpFlags & SMTP_PORT ){
217 url.port = va_arg(ap, int);
218 }
219 if( smtpFlags & SMTP_TRACE_FILE ){
220 p->logFile = va_arg(ap, FILE*);
221 }
222 if( smtpFlags & SMTP_TRACE_BLOB ){
223 p->pTranscript = va_arg(ap, Blob*);
224 }
225 va_end(ap);
226 if( (smtpFlags & SMTP_DIRECT)!=0 ){
227 int i;
228 p->zHostname = fossil_strdup(zDest);
229 for(i=0; p->zHostname[i] && p->zHostname[i]!=':'; i++){}
230 if( p->zHostname[i]==':' ){
@@ -246,10 +235,27 @@
246 p->zErr = socket_errmsg();
247 socket_close();
248 }
249 return p;
250 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
252 /*
253 ** Send a single line of output the SMTP client to the server.
254 */
255 static void smtp_send_line(SmtpSession *p, const char *zFormat, ...){
256
--- src/smtp.c
+++ src/smtp.c
@@ -184,26 +184,23 @@
184 }
185
186 /*
187 ** Allocate a new SmtpSession object.
188 **
189 ** Both zFrom and zDest must be specified. smtpFlags may not contain
190 ** either SMTP_TRACE_FILE or SMTP_TRACE_BLOB as those settings must be
191 ** added by a subsequent call to smtp_session_config().
192 **
193 ** The iPort option is ignored unless SMTP_PORT is set in smtpFlags
 
 
194 */
195 SmtpSession *smtp_session_new(
196 const char *zFrom, /* Domain for the client */
197 const char *zDest, /* Domain of the server */
198 u32 smtpFlags, /* Flags */
199 int iPort /* TCP port if the SMTP_PORT flags is present */
200 ){
201 SmtpSession *p;
 
202 UrlData url;
203
204 p = fossil_malloc( sizeof(*p) );
205 memset(p, 0, sizeof(*p));
206 p->zFrom = zFrom;
@@ -210,21 +207,13 @@
207 p->zDest = zDest;
208 p->smtpFlags = smtpFlags;
209 memset(&url, 0, sizeof(url));
210 url.port = 25;
211 blob_init(&p->inbuf, 0, 0);
 
212 if( smtpFlags & SMTP_PORT ){
213 url.port = iPort;
214 }
 
 
 
 
 
 
 
215 if( (smtpFlags & SMTP_DIRECT)!=0 ){
216 int i;
217 p->zHostname = fossil_strdup(zDest);
218 for(i=0; p->zHostname[i] && p->zHostname[i]!=':'; i++){}
219 if( p->zHostname[i]==':' ){
@@ -246,10 +235,27 @@
235 p->zErr = socket_errmsg();
236 socket_close();
237 }
238 return p;
239 }
240
241 /*
242 ** Configure debugging options on SmtpSession. Add all bits in
243 ** smtpFlags to the settings. The following bits can be added:
244 **
245 ** SMTP_FLAG_FILE: In which case pArg is the FILE* pointer to use
246 **
247 ** SMTP_FLAG_BLOB: In which case pArg is the Blob* poitner to use.
248 */
249 void smtp_session_config(SmtpSession *p, u32 smtpFlags, void *pArg){
250 p->smtpFlags = smtpFlags;
251 if( smtpFlags & SMTP_TRACE_FILE ){
252 p->logFile = (FILE*)pArg;
253 }else if( smtpFlags & SMTP_TRACE_BLOB ){
254 p->pTranscript = (Blob*)pArg;
255 }
256 }
257
258 /*
259 ** Send a single line of output the SMTP client to the server.
260 */
261 static void smtp_send_line(SmtpSession *p, const char *zFormat, ...){
262

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button