#include "geseml.h"
#include "lvleml.h"
+/*
+^L
+*/
+/********************************************************/
+/* */
+/* Procedure to manage curent SMTP session data */
+/* within contact. */
+/* */
+/********************************************************/
+static void getsessid(CONTYP *contact)
+
+{
+if (contact!=(CONTYP *)0) {
+ contact->session=sql_freeses(contact->session);
+ contact->session=(SESTYP *)calloc(1,sizeof(SESTYP));
+ contact->session->sessid=eml_getcursesid(contact->mainsesid,contact->numreset);
+ }
+}
/*
^L
*/
contact->recipients=(RCPTYP **)rou_freelist((void **)contact->recipients,
(genfree_t)eml_freerecipient);
contact->mailfrom=rou_freestr(contact->mailfrom);
- contact->cursesid=rou_freestr(contact->cursesid);
+ contact->session=sql_freeses(contact->session);
contact->mainsesid=rou_freestr(contact->mainsesid);
contact->fqdn=rou_freestr(contact->fqdn);
contact->peername=rou_freestr(contact->peername);
break;
case 3 : //Inserting ID information
(void) fprintf(data,"\tid <%s@%s>;\n",
- contact->cursesid,contact->locname);
+ contact->session->sessid,contact->locname);
break;
case 4 : //date information
(void) fprintf(data,"\t%s\n",rou_ascsysstamp(curtime));
while (proceed==true) {
switch (phase) {
case 0 : //is contact good
- if (contact==(CONTYP *)0) {
- (void) rou_alert(0,"%s contact pointer is NULL (bug?)",OPEP);
+ if ((contact==(CONTYP *)0)||(contact->session==(SESTYP *)0)) {
+ (void) rou_alert(0,"%s contact pointer or session is NULL (bug?)",OPEP);
phase=999;
}
break;
phase=999; //No recipient!
break;
case 2 : //creating the count file
- if ((qfile=eml_createqfile(contact->cursesid,EXTCNT))==(FILE *)0) {
+ if ((qfile=eml_createqfile(contact->session->sessid,EXTCNT))==(FILE *)0) {
(void) rou_alert(0,"%s Unable to open 'count' qfile <%s> (error=<%s>)",
- OPEP,contact->cursesid,strerror(errno));
+ OPEP,contact->session->sessid,strerror(errno));
phase=999;
}
break;
case 3 : //inserting number of receipient
if (fprintf(qfile,"%d\n",num)<1) {
(void) rou_alert(0,"%s Unable to set 'count' in qfile <%s> (error=<%s>)",
- OPEP,contact->cursesid,strerror(errno));
+ OPEP,contact->session->sessid,strerror(errno));
(void) fclose(qfile);
phase=999; //trouble trouble
}
case 4 : //closing count file
if (fclose(qfile)!=0) {
(void) rou_alert(0,"%s Unable to close qfile <%s> (error=<%s>)",
- OPEP,contact->cursesid,strerror(errno));
+ OPEP,contact->session->sessid,strerror(errno));
phase=999; //trouble trouble
}
break;
//(void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase) {
case 0 : //Creating the file
- if ((trans=eml_createqfile(contact->cursesid,ext))==(FILE *)0)
+ if ((trans=eml_createqfile(contact->session->sessid,ext))==(FILE *)0)
phase=999; //trouble trouble
break;
case 1 : //write data to trans file;
}
break;
case 1 : //opening the queue email
- if ((queue=eml_createqfile(contact->cursesid,""))==(FILE *)0)
+ if ((queue=eml_createqfile(contact->session->sessid,""))==(FILE *)0)
phase=999; //trouble trouble
break;
case 2 : //adding received stamp to file
phase=999; //Unable to create count file???
break;
case 7 : //renameing directive
- if (eml_renameqfile(contact->cursesid,EXTMP,EXTRANS)==false)
+ if (eml_renameqfile(contact->session->sessid,EXTMP,EXTRANS)==false)
phase=999; //Trouble trouble
break;
case 8 : //everything fine
total/=1024; //KBytes
delta=rou_getdifftime(&start);
fmt="%d-3.5.3 Session ID=<%s>";
- (void) transmit(contact,false,fmt,CMDOK,contact->cursesid);
+ (void) transmit(contact,false,fmt,CMDOK,contact->session->sessid);
fmt="%d-3.5.3 data stream received: %d Kbytes within %d.%03d seconds)";
(void) transmit(contact,false,fmt,CMDOK,total,delta/1000,delta%1000);
fmt="%d 3.5.3 Message accepted for delivery";
- (void) transmit(contact,true,fmt,CMDOK,contact->cursesid);
+ (void) transmit(contact,true,fmt,CMDOK,contact->session->sessid);
done=true;
proceed=false; //task done
break;
#define LOCSEQ "2.1.0"
(void) transmit(contact,true,"%d-%s flushed session %s",
- CMDOK,LOCSEQ,contact->cursesid);
+ CMDOK,LOCSEQ,contact->session->sessid);
contact->numreset++;
contact->recipients=(RCPTYP **)rou_freelist((void **)(contact->recipients),
(genfree_t)eml_freerecipient);
contact->mailfrom=rou_freestr(contact->mailfrom);
-contact->cursesid=rou_freestr(contact->cursesid);
-contact->cursesid=eml_getcursesid(contact->mainsesid,contact->numreset);
+(void) getsessid(contact);
(void) transmit(contact,true,"%d %s opening new session %s",
- CMDOK,LOCSEQ,contact->cursesid);
+ CMDOK,LOCSEQ,contact->session->sessid);
return true;
#undef LOCSEQ
break;
case 3 : //Preparing contact
contact->mainsesid=eml_getmainsesid();
- contact->cursesid=eml_getcursesid(contact->mainsesid,contact->numreset);
+ (void) getsessid(contact);
contact->locname=soc_getaddrinfo(contact->socptr,true,true);
contact->locip=soc_getaddrinfo(contact->socptr,true,false);
if (contact->locip!=(char *)0) {
tra->code=(*ptr)->code;
tra->date=isnow;
tra->delay=0;
- tra->sessid=strdup(contact->cursesid);
+ tra->sessid=strdup(contact->session->sessid);
tra->mailfrom=strdup(contact->mailfrom);
tra->rcptto=strdup(data);
tralist=(TRATYP **)rou_addlist((void **)tralist,(void *)tra);
#define SSL_CIPHER_LIST "DEFAULT"
static _Bool modopen; //module open/close status
-static AFNTYP **afns; //Binding information as AFN
+//Binding information as AFN
+static AFNTYP **afns=(AFNTYP **)0;
/*
^L
*/
char *newloc;
char host[NI_MAXHOST];
- if (ifa->ifa_addr==(struct sockaddr *)0)
- continue;
- family=ifa->ifa_addr->sa_family;
- switch (family) {
- case AF_INET :
- taille=sizeof(struct sockaddr_in);
- break;
- case AF_INET6 :
- taille=sizeof(struct sockaddr_in6);
- continue; //No scanning for IPV6 Number (Jun 2025)
- break;
- default :
+ if (ifa->ifa_addr==(struct sockaddr *)0)
+ continue;
+ family=ifa->ifa_addr->sa_family;
+ switch (family) {
+ case AF_INET :
+ taille=sizeof(struct sockaddr_in);
+ break;
+ case AF_INET6 :
+ taille=sizeof(struct sockaddr_in6);
+ continue; //No scanning for IPV6 Number (Jun 2025)
+ break;
+ default :
+ continue;
+ break;
+ }
+ er=getnameinfo(ifa->ifa_addr,taille,host,NI_MAXHOST,NULL,0,NI_NUMERICHOST);
+ if (er!=0) {
+ (void) rou_alert(0,"%s etnameinfo() failed: (error=<%s> system?)",
+ OPEP,strerror(errno));
continue;
- break;
- }
- er=getnameinfo(ifa->ifa_addr,taille,host,NI_MAXHOST,NULL,0,NI_NUMERICHOST);
- if (er!=0) {
- (void) rou_alert(0,"%s etnameinfo() failed: (error=<%s> system?)",
- OPEP,strerror(errno));
- continue;
- }
- newloc=(char *)calloc(strlen(localip)+strlen(host)+3,sizeof(char));
- if (strlen(localip)>0) {
+ }
+ newloc=(char *)calloc(strlen(localip)+strlen(host)+3,sizeof(char));
+ if (strlen(localip)>0) {
(void) strcpy(newloc,localip);
(void) strcat(newloc,",");
}
break;
case 2 : //converting interface IP list to AFNTYP list
afns=afn_getipnum(localip);
+ (void) freeifaddrs(ifaddr);
break;
default : //SAFE Guard
proceed=false;
int tls_modeunitls(_Bool mode)
{
-#define OPEP "unidoc.c:soc_modeunisoc"
+#define OPEP "unitls.c:soc_modeunitls,"
int status;