status=true;
(void) strftime(temps,sizeof(temps),"#%Y-%m-%d %H:%M:%S",
localtime(&(tra->date)));
- (void) snprintf(line,sizeof(line),"%c\t%lu\t%05u%*s %*s %*s \"%*s\"",
+ (void) snprintf(line,sizeof(line),"%c\t%lu\t%05u%*s %*s %*s \"%*s\" %s",
tra->code,
tra->date,
tra->delay,
32,tra->sessid,
30,tra->rcptto,
30,tra->sfrom,
- 30,tra->hfrom
+ 30,tra->hfrom,
+ tra->hsubject
);
(void) print_tra(qfile,line,temps);
if (tra->resp!=(char **)0) {
{
#define OPEP "geseml.c:eml_scanqfile,"
-#define FMT "%c %ld %d %s %s %s \"%[^\"]\""
+#define FMT "%c %ld %d %s %s %s \"%[^\"]\" %99[^\n]"
TRATYP *cur; //previous trans record
char *ptr;
char id[300];
char sfrom[100];
char hfrom[100];
+ char hsubject[100];
char to[100];
char code;
u_long date;
case 'R' :
case 'W' :
(void) memset(hfrom,'\000',sizeof(hfrom));
- if (sscanf(line,FMT,&code,&date,&delay,id,to,sfrom,hfrom)!=7) {
+ (void) memset(hsubject,'\000',sizeof(hsubject));
+ if (sscanf(line,FMT,&code,&date,&delay,id,to,sfrom,hfrom,hsubject)!=8) {
(void) rou_alert(0,"%s Unable to scan <line=%s> (config?)",OPEP,line);
phase=999; //No data within line
}
cur->rcptto=strdup(to);
cur->sfrom=strdup(sfrom);
cur->hfrom=strdup(hfrom);
- (void) rou_alert(0,"%s hfrom=<%s>",OPEP,cur->hfrom);
+ cur->hsubject=strdup(hsubject);
list=(TRATYP **)rou_addlist((void **)list,(void *)cur);
}
break;
session->hfrom=strdup(line+max);
break;
case 1 : //Inserting the header from in session
- session->title=rou_freestr(session->title);
- session->title=strdup(line+max);
+ session->hsubject=rou_freestr(session->hsubject);
+ session->hsubject=strdup(line+max);
break;
default :
(void) rou_alert(0,"%s Code missing for Head entrey <%s> (Bug?!)",
case 0 : //session ID
break; //nothing to do
case 1 : //title
- data=sql_gooddata(sqlptr,(*ses)->title);
+ data=sql_gooddata(sqlptr,(*ses)->hsubject);
break; //nothing to do
case 2 : //sfrom
data=sql_gooddata(sqlptr,(*ses)->sfrom);
tra->sessid=strdup(contact->session->sessid);
tra->sfrom=strdup(contact->mailfrom);
tra->rcptto=strdup(data);
- (void) strcpy(data,"hfrom missing");
+ (void) strcpy(data,"email header, 'From:' missing");
if (contact->session->hfrom!=(char *)0)
- (void) strcpy(data,contact->session->hfrom);
+ (void) strncpy(data,contact->session->hfrom,sizeof(data));
tra->hfrom=strdup(data);
+ (void) strcpy(data,"email header, 'Subject:' missing");
+ if (contact->session->hsubject!=(char *)0)
+ (void) strncpy(data,contact->session->hsubject,sizeof(data));
+ tra->hsubject=strdup(data);
tralist=(TRATYP **)rou_addlist((void **)tralist,(void *)tra);
ptr++;
}
(void) eml_freetra_resp(tra);
tra->rcptto=rou_freestr(tra->rcptto);
tra->sfrom=rou_freestr(tra->sfrom);
+ tra->hsubject=rou_freestr(tra->hsubject);
tra->hfrom=rou_freestr(tra->hfrom);
tra->rcptto=rou_freestr(tra->rcptto);
tra->sessid=rou_freestr(tra->sessid);
char *sessid; //session id
char *sfrom; //Email SMTP Originator
char *hfrom; //Email HEADER originator
+ char *hsubject; //Email HEADER subject
char *rcptto; //Email Recipient
int sendcode; //Email sending status;
char **resp; //Transfer response status
{
if (ses!=(SESTYP *)0) {
ses->duration=rou_freestr(ses->duration);
+ ses->hsubject=rou_freestr(ses->hsubject);
ses->hfrom=rou_freestr(ses->hfrom);
ses->sfrom=rou_freestr(ses->sfrom);
ses->sessid=rou_freestr(ses->sessid);
- ses->title=rou_freestr(ses->title);
(void) free(ses);
ses=(SESTYP *)0;
}
//with a remote server
typedef struct {
char *sessid; //session id
- char *title; //the email title
- char *sfrom; //the "mail from" comming from SMTP exchange
- char *hfrom; //the "mail from" as within the email header
+ char *sfrom; //the "mail from" coming from SMTP exchange
+ char *hsubject; //the "Subject:" as within the email header
+ char *hfrom; //the "From:" as within the email header
char *duration; //Session duration un millisec
u_long taille; //Email size
}SESTYP;