//SQL database request
#define EMAILS "emails" //emails tables
-#define SESSIONS "sessions" //session tabbles
+#define SESSIONS "sessions" //session tables
+#define ACTIONS "actions" //action tables
//field available in table "emails"
const char *usrfield[]={
PUBLIC _Bool sql_mngact(SQLPTR *sqlptr,SQLENUM action,ACTTYP *act)
{
+#define OPEP "devsql.c:sql_mngact,"
+#define DELACT "DELETE * FROM "ACTIONS" WHERE sessid=%s AND rcptto=%s"
+
_Bool isok;
isok=false;
if (act!=(ACTTYP *)0) {
- (void) rou_alert(0,"JMPDBG ses=<%s>d rcpt=<%s>",act->sessid,act->rcptto);
- if (act->resp!=(char **)0) {
- char **resp;
- int num;
+ char *goodid;
+ char *goodrcpt;
+
+ goodid=sql_gooddata(sqlptr,act->sessid);
+ goodrcpt=sql_gooddata(sqlptr,act->rcptto);
+ if (act->resp==(char **)0)
+ (void) sqlrequest(sqlptr,DELACT,goodid,goodrcpt);
+ else {
+ if (act->resp!=(char **)0) {
+ char **resp;
- resp=act->resp;
- num=0;
- while (*resp!=(char *)0) {
- num++;
- (void) rou_alert(0,"\tRESP[%0d]=<%s>",num,*resp);
- resp++;
+ resp=act->resp;
+ while (*resp!=(char *)0) {
+ resp++;
+ }
}
}
+ goodrcpt=rou_freestr(goodrcpt);
+ goodid=rou_freestr(goodid);
+ isok=true;
}
return isok;
+
+#undef DELACT
+#undef OPEP
}
PUBLIC int eml_update_tradb(TRATYP **tra)
{
+#define OPEP "geseml.c:eml_update_tradb,"
+
int num;
-SQLPTR *sqlptr;
num=0;
-sqlptr=(SQLPTR *)0;
if (tra!=(TRATYP **)0) {
- while (*tra!=(TRATYP *)0) {
- ACTTYP action;
+ SQLPTR *sqlptr;
+ int phase;
+ _Bool proceed;
- action.sessid=(*tra)->sessid;
- action.rcptto=(*tra)->rcptto;
- action.resp=(*tra)->resp;
- (void) sql_mngact(sqlptr,sql_delete,&action);
- num++;
- tra++;
+ sqlptr=(SQLPTR *)0;
+ phase=0;
+ proceed=(*tra!=(TRATYP *)0);
+ while (proceed==true) {
+ switch (phase) {
+ case 0 : //opening the database
+ if ((sqlptr=sql_opensql())==(SQLPTR *)0) {
+ (void) rou_alert(0,"%s Unable to open database (system?)",OPEP);
+ phase=999;
+ }
+ break;
+ case 1 : //checking all transation
+ while (*tra!=(TRATYP *)0) {
+ ACTTYP action;
+
+ action.sessid=(*tra)->sessid;
+ action.rcptto=(*tra)->rcptto;
+ action.resp=(*tra)->resp;
+ (void) sql_mngact(sqlptr,sql_delete,&action);
+ num++;
+ tra++;
+ }
+ break;
+ case 2 : //closing the database
+ sqlptr=sql_closesql(sqlptr);
+ break;
+ default : //SAFE Guard
+ proceed=false;
+ break;
+ }
+ phase++;
}
}
return num;
+
+#undef OPEP
}