1
0
Files
irix-657m-src/eoe/cmd/sss/console/plugins/semui_plugin/uiserver.rgl
2022-09-29 17:59:04 +03:00

428 lines
17 KiB
Plaintext

#include "ui.h"
/* ----------------------------- rgpgInit ------------------------------------ */
int RGPGAPI rgpgInit(sscErrorHandle hError)
{ /* Try initialize "free list of mySession" mutex */
if(pthread_mutex_init(&seshFreeListmutex,0))
{ sscError(hError,szServerNameErrorPrefix,"Can't initialize mutex");
return 0; /* error */
}
mutex_inited++;
#ifdef INCLUDE_TIME_DATE_STRINGS
sprintf(szVersionStr,"%d.%d %s %s",MYVERSION_MAJOR,MYVERSION_MINOR,__DATE__,__TIME__);
#else
sprintf(szVersionStr,"%d.%d",MYVERSION_MAJOR,MYVERSION_MINOR);
#endif
return 1; /* success */
}
/* ----------------------------- rgpgDone ------------------------------------ */
int RGPGAPI rgpgDone(sscErrorHandle hError)
{ mySession *s;
if(mutex_inited)
{ pthread_mutex_destroy(&seshFreeListmutex);
mutex_inited = 0;
while((s = sesFreeList) != 0)
{ sesFreeList = s->next;
free(s);
}
return 1; /* success */
}
return 0; /* error - not inited */
}
/* -------------------------- rgpgCreateSesion ------------------------------- */
rgpgSessionID RGPGAPI rgpgCreateSesion(sscErrorHandle hError)
{ mySession *s;
pthread_mutex_lock(&seshFreeListmutex);
if((s = sesFreeList) != 0) sesFreeList = s->next;
pthread_mutex_unlock(&seshFreeListmutex);
if(!s) s = (mySession*)malloc(sizeof(mySession));
if(!s)
{ sscError(hError,szServerNameErrorPrefix,"No memory to create session in rgpgCreateSesion()");
return 0;
}
memset(s,0,sizeof(mySession));
s->signature = sizeof(mySession);
return (rgpgSessionID)s;
}
/* ------------------------- rgpgDeleteSesion -------------------------------- */
void RGPGAPI rgpgDeleteSesion(sscErrorHandle hError,rgpgSessionID _s)
{ mySession *s = (mySession *)_s;
if(!s || s->signature != sizeof(mySession))
{ sscError(hError,szServerNameErrorPrefix,"Incorrect session id in rgpgDeleteSesion()");
}
else
{
pthread_mutex_lock(&seshFreeListmutex);
s->next = sesFreeList; sesFreeList = s; s->signature = 0;
pthread_mutex_unlock(&seshFreeListmutex);
}
}
/* ------------------------ rgpgGetAttribute --------------------------------- */
char *RGPGAPI rgpgGetAttribute(sscErrorHandle hError,rgpgSessionID session, const char *attributeID, const char *extraAttrSpec,int *typeattr)
{ char *s;
if(typeattr) *typeattr = RGATTRTYPE_STATIC;
if(!strcasecmp(attributeID,szVersion)) s = (char*)szVersionStr;
else if(!strcasecmp(attributeID,szTitle)) s = (char*)myLogo;
else if(!strcasecmp(attributeID,szUnloadTime)) s = (char*)szUnloadTimeValue;
else if(!strcasecmp(attributeID,szThreadSafe)) s = (char*)szThreadSafeValue;
else if(!strcasecmp(attributeID,szUnloadable)) s = (char*)szUnloadableValue;
else if(!strcasecmp(attributeID,szAcceptRawCmdString)) s = (char*)szAcceptRawCmdStringValue;
else
{ sscError(hError,"%s No such attribute '%s' in rgpgGetAttribute()",szServerNameErrorPrefix,attributeID);
return 0;
}
if(!s) sscError(hError,szServerNameErrorPrefix,"No memory in rgpgGetAttribute()");
return s;
}
/* --------------------- rgpgFreeAttributeString ------------------------------ */
void RGPGAPI rgpgFreeAttributeString(sscErrorHandle hError,rgpgSessionID session,const char *attributeID,const char *extraAttrSpec,
char *attrString,int restype)
{
if(((restype == RGATTRTYPE_SPECIALALLOC) || (restype == RGATTRTYPE_MALLOCED)) && attrString) free(attrString);
}
/*----------------------------------------rgpgSetAttribute---------------------------------------------*/
void RGPGAPI rgpgSetAttribute(sscErrorHandle hError, rgpgSessionID session, const char *attributeID, const char *extraAttrSpec, const char *value)
{ char buff[128]; mySession *sess = session;
if(!strcasecmp(attributeID,szVersion) || !strcasecmp(attributeID,szTitle) ||
!strcasecmp(attributeID,szThreadSafe) || !strcasecmp(attributeID,szUnloadable) ||
!strcasecmp(attributeID,szUnloadTime))
{ sscError(hError,szServerNameErrorPrefix,"Attempt to set read only attribute in rgpgSetAttribute()");
return;
}
if(!strcasecmp(attributeID,"User-Agent") && value)
{ sess->textonly = (strcasecmp(value,"Lynx") == 0) ? 1 : 0;
return;
}
if(!sess || sess->signature != sizeof(mySession))
{ sscError(hError,szServerNameErrorPrefix,"Incorrect session id in rgpgGetAttribute()");
return;
}
}
/*----------------------------------------rgpgGenerateReport---------------------------------------------*/
int RGPGAPI rgpgGenerateReport(sscErrorHandle hError, rgpgSessionID _session, int argc, char* argv[],char *rawCommandString, streamHandle result,
char *accessmask)
{
ssdb_Client_Handle client;
ssdb_Connection_Handle connection;
ssdb_Request_Handle req_handle;
ssdb_Error_Handle error_handle;
int i,cmdpsize,SQL_TYPE;
CMDPAIR cmdp[MAXNUMBERS_OF_KEYS];
mySession *session = _session;
if ((error_handle = ssdbCreateErrorHandle()) == NULL)
{
sscError(hError,"Database API Error: \"%s\" - can't create error handle\n",ssdbGetLastErrorString(0));
return 0;
}
if ((client = ssdbNewClient(error_handle,szDefaultUserName,szDefaultPassword,0)) == NULL)
{
sscError(hError,"Database API Error: \"%s\" - can't create new client handle\n",ssdbGetLastErrorString(error_handle));
ssdbDeleteErrorHandle(error_handle);
return 0;
}
/* Establish a connection to a database */
if ((connection = ssdbOpenConnection(error_handle,client,szDefaultHostName,szDefaultDatabaseName,0)) == NULL)
{
sscError(hError,"Database API Error: \"%s\" - can't open connection\n",ssdbGetLastErrorString(error_handle));
ssdbDeleteErrorHandle(error_handle);
return 0;
}
/* Initialize The HTML Generator */
i = createMyHTMLGenerator(result);
if (i != 0)
{
sscError(hError, "Sample server: Can't open the HTML generator");
ssdbDeleteErrorHandle(error_handle);
return 0;
}
if (argc < 2)
{
sscError(hError, "Invalid Request\n");
ssdbDeleteErrorHandle(error_handle);
return 0;
}
cmdpsize = sscInitPair(rawCommandString,cmdp,MAXNUMBERS_OF_KEYS);
/* Check WEB browser type (Lynx is only tex based) */
for(i = 0;(i = sscFindPairByKey(cmdp,i,szUserAgent)) >= 0;i++)
if(!strcasecmp(cmdp[i].value,"Lynx")) session->textonly = 1;
/* Utility functions */
if (!strcasecmp(argv[1], "actionlist"))
session->report_type = ACTIONLIST;
else if (!strcasecmp(argv[1],"typelist"))
session->report_type = TYPELIST;
else if (!strcasecmp(argv[1],"eventlist"))
session->report_type = EVENTLIST;
else if (!strcasecmp(argv[1],"GETSYSID"))
session->report_type = GETSYSID;
else if (!strcasecmp(argv[1],"GETSYSID_UNHID"))
session->report_type = GETSYSID_UNHID;
/* Action setup */
else if (!strcasecmp(argv[1],"updateaction"))
session->report_type = UPDATEACTION;
else if (!strcasecmp(argv[1],"updtactconfirm"))
session->report_type = UPDTACTCONFIRM;
else if (!strcasecmp(argv[1],"setupdate"))
session->report_type = SETUPDATE;
else if (!strcasecmp(argv[1],"deleteaction"))
session->report_type = DELETEACTION;
else if (!strcasecmp(argv[1],"UPDATE_EVENT"))
session->report_type = UPDATE_EVENT;
else if (!strcasecmp(argv[1],"RETURNHOSTNAME"))
session->report_type = RETURNHOSTNAME;
else if (!strcasecmp(argv[1],"DELETELISTSET"))
session->report_type = DELETELISTSET;
/* Event Reports */
else if (!strcasecmp(argv[1],"EVENT_REPORT_BY_HOST"))
session->report_type = EVENT_REPORT_BY_HOST;
else if (!strcasecmp(argv[1],"EVENT_REPORT_BY_TYPE_HOST"))
session->report_type = EVENT_REPORT_BY_TYPE_HOST;
else if (!strcasecmp(argv[1],"EVENT_REPORT_PAGE"))
session->report_type = EVENT_REPORT_PAGE;
else if (!strcasecmp(argv[1],"EVENT_REPORT_BY_CLASS_HOST"))
session->report_type = EVENT_REPORT_BY_CLASS_HOST;
else if (!strcasecmp(argv[1],"EVENT_REPORT_TYPE_PAGE"))
session->report_type = EVENT_REPORT_TYPE_PAGE;
else if (!strcasecmp(argv[1],"EVREPORT_CONT"))
session->report_type = EVREPORT_CONT;
else if (!strcasecmp(argv[1],"CLASSREPORT_CONT"))
session->report_type = CLASSREPORT_CONT;
else if (!strcasecmp(argv[1],"TYPEREPORT_CONT"))
session->report_type = TYPEREPORT_CONT;
else if (!strcasecmp(argv[1],"EVENT_VIEW_PAGE_CONT"))
session->report_type = EVENT_VIEW_PAGE_CONT;
else if (!strcasecmp(argv[1],"EVENT_VIEW_CLASS_PAGE_CONT"))
session->report_type = EVENT_VIEW_CLASS_PAGE_CONT;
/* Actions Reports */
else if (!strcasecmp(argv[1],"ACTION_VIEW_CONT"))
session->report_type = ACTION_VIEW_CONT;
else if (!strcasecmp(argv[1],"ACTION_TAKEN_REPORT"))
session->report_type = ACTION_TAKEN_REPORT;
else if (!strcasecmp(argv[1],"ACTION_REPORT_BY_ACTION"))
session->report_type = ACTION_REPORT_BY_ACTION;
else if (!strcasecmp(argv[1],"ACTIONS_PAGE"))
session->report_type = ACTIONS_PAGE;
else if (!strcasecmp(argv[1],"EVENT_ACTION_SPECIFIC_REPORT"))
session->report_type = EVENT_ACTION_SPECIFIC_REPORT;
else if (!strcasecmp(argv[1],"EVENT_ACTIONS_PAGE"))
session->report_type = EVENT_ACTIONS_PAGE;
/* Event Setup */
else if (!strcasecmp(argv[1],"EVENT_VIEW_PAGE"))
session->report_type = EVENT_VIEW_PAGE;
else if (!strcasecmp(argv[1],"EVENT_VIEW_TYPE_PAGE"))
session->report_type = EVENT_VIEW_TYPE_PAGE;
else if (!strcasecmp(argv[1],"EVENT_VIEW_REPORT_PAGE"))
session->report_type = EVENT_VIEW_REPORT_PAGE;
else if (!strcasecmp(argv[1],"EVENT_ADD_INFO"))
session->report_type = EVENT_ADD_INFO;
else if (!strcasecmp(argv[1],"EVENT_ADD_CONFIRM"))
session->report_type = EVENT_ADD_CONFIRM;
else if (!strcasecmp(argv[1],"CREATE_CLASS_LIST"))
session->report_type = CREATE_CLASS_LIST;
else if (!strcasecmp(argv[1],"EVENT_UPDT_INFO"))
session->report_type = EVENT_UPDT_INFO;
else if (!strcasecmp(argv[1],"EVENT_UPDT_CONFIRM"))
session->report_type = EVENT_UPDT_CONFIRM;
else if (!strcasecmp(argv[1],"EVENT_UPDATE_ACTION_LIST"))
session->report_type = EVENT_UPDATE_ACTION_LIST;
else if (!strcasecmp(argv[1],"EVENT_ACTION_AUD"))
session->report_type = EVENT_ACTION_AUD;
else if (!strcasecmp(argv[1],"EVENT_ACTION_ADD_CONFIRM"))
session->report_type = EVENT_ACTION_ADD_CONFIRM;
else if (!strcasecmp(argv[1],"EVENT_ACTION_UPD_CONFIRM"))
session->report_type = EVENT_ACTION_UPD_CONFIRM;
else if (!strcasecmp(argv[1],"EVENT_DELETE"))
session->report_type = EVENT_DELETE;
else if (!strcasecmp(argv[1],"EVENT_DELETE_LIST"))
session->report_type = EVENT_DELETE_LIST;
else if (!strcasecmp(argv[1],"ARCHIVE_LIST"))
session->report_type = ARCHIVE_LIST;
else if (!strcasecmp(argv[1],"DELETE_ARCHIVE"))
session->report_type = DELETE_ARCHIVE;
else if (!strcasecmp(argv[1],"ARCHIVE_TABLE"))
session->report_type = ARCHIVE_TABLE;
else
{
sscError(hError, "Invalid Report Request %s",argv[1]);
}
switch (session->report_type)
{
case ACTIONLIST :
create_action_list(hError,session,connection,error_handle,cmdp);
break;
case EVENTLIST :
create_event_list(hError,session,connection,error_handle,cmdp);
break;
case TYPELIST :
create_type_list(hError,session,connection,error_handle,cmdp);
break;
case UPDATEACTION :
action_parameters(hError,session,connection,error_handle,cmdp);
break;
case UPDTACTCONFIRM :
update_action_params(hError,session,connection,error_handle,cmdp);
break;
case DELETEACTION :
delete_action(hError,session,connection,error_handle,cmdp);
break;
case RETURNHOSTNAME :
generate_hostname(hError,session,connection,error_handle);
break;
case GETSYSID:
generate_sysid(hError,session,connection,error_handle);
break;
case GETSYSID_UNHID:
generate_sysid_unhidden(hError,session,connection,error_handle);
break;
case DELETELISTSET:
deletelistset(hError,session,connection,error_handle,cmdp);
break;
case EVENT_REPORT_BY_HOST:
event_report_by_host(hError,session,connection,error_handle,cmdp);
break;
case EVREPORT_CONT:
event_report_by_host(hError,session,connection,error_handle,cmdp);
break;
case CLASSREPORT_CONT:
event_report_by_class_host(hError,session,connection,error_handle,cmdp);
break;
case TYPEREPORT_CONT:
event_report_by_type_host(hError,session,connection,error_handle,cmdp);
break;
case EVENT_REPORT_BY_CLASS_HOST:
event_report_by_class_host(hError,session,connection,error_handle,cmdp);
break;
case EVENT_REPORT_BY_TYPE_HOST:
event_report_by_type_host(hError,session,connection,error_handle,cmdp);
break;
case EVENT_REPORT_PAGE:
event_report_page(hError,session,connection,error_handle,cmdp);
break;
case EVENT_REPORT_TYPE_PAGE:
event_report_type_page(hError,session,connection,error_handle,cmdp);
break;
case ACTION_TAKEN_REPORT:
event_action_report(hError,session,connection,error_handle,cmdp);
break;
case EVENT_ACTION_SPECIFIC_REPORT:
event_action_specific_report(hError,session,connection,error_handle,cmdp);
break;
case EVENT_ACTIONS_PAGE:
event_actions_page(hError, session,connection,error_handle,cmdp);
break;
case ACTION_VIEW_CONT:
view_action_page(hError,session,connection,error_handle,cmdp);
break;
case ACTIONS_PAGE:
view_action_page(hError, session,connection,error_handle,cmdp);
break;
case ACTION_REPORT_BY_ACTION:
action_report_by_action(hError, session,connection,error_handle,cmdp);
break;
case EVENT_VIEW_PAGE:
event_view_page(hError, session,connection,error_handle,cmdp);
break;
case EVENT_VIEW_PAGE_CONT:
event_description_view(hError, session,connection,error_handle,cmdp);
break;
case EVENT_VIEW_CLASS_PAGE_CONT:
event_description_class(hError, session,connection,error_handle,cmdp);
break;
case EVENT_VIEW_TYPE_PAGE:
event_view_type_configuration(hError, session,connection,error_handle,cmdp);
break;
case EVENT_VIEW_REPORT_PAGE:
event_view_report_page(hError, session,connection,error_handle,cmdp);
break;
case EVENT_ADD_INFO:
event_add_info(hError, session,connection,error_handle,cmdp);
break;
case EVENT_ADD_CONFIRM:
event_add_confirm(hError, session,connection,error_handle,cmdp);
break;
case CREATE_CLASS_LIST:
generate_class_list(hError,session,connection,error_handle);
break;
case EVENT_UPDT_INFO:
event_updt_info(hError,session,connection,error_handle,cmdp);
break;
case EVENT_UPDT_CONFIRM:
event_updt_confirm(hError,session,connection,error_handle,cmdp);
break;
case EVENT_UPDATE_ACTION_LIST:
event_update_action_list(hError,session,connection,error_handle,cmdp);
break;
case EVENT_ACTION_AUD:
event_action_aud(hError,session,connection,error_handle,cmdp);
break;
case EVENT_ACTION_ADD_CONFIRM:
event_action_add_confirm(hError,session,connection,error_handle,cmdp);
break;
case EVENT_ACTION_UPD_CONFIRM:
event_action_update_confirm(hError,session,connection,error_handle,cmdp);
break;
case EVENT_DELETE:
event_delete(hError,session,connection,error_handle,cmdp);
break;
case EVENT_DELETE_LIST:
event_delete_list(hError,session,connection,error_handle,cmdp);
break;
case ARCHIVE_LIST:
archive_list(hError,session,connection,error_handle,cmdp);
break;
case DELETE_ARCHIVE:
delete_archive(hError,session,connection,error_handle,cmdp);
break;
case ARCHIVE_TABLE:
archive_table(hError,session,connection,error_handle,cmdp);
break;
}
/* Destroy The HTML Generator */
i = deleteMyHTMLGenerator();
if (i != 0)
{
sscError(hError, "Sample server: Can't destroy the HTML generator");
ssdbDeleteErrorHandle(error_handle);
return 0;
}
if (ssdbIsConnectionValid(error_handle,connection))
ssdbCloseConnection (error_handle,connection);
if (ssdbIsClientValid(error_handle,client))
ssdbDeleteClient(error_handle,client);
if (error_handle)
ssdbDeleteErrorHandle(error_handle);
return 0;
}