* Europagate, 1995
*
* $Log: main.c,v $
- * Revision 1.22 1995/05/03 07:37:39 adam
+ * Revision 1.23 1995/05/03 16:34:18 adam
+ * CCL def command, i.e. user definitions - saved as resource files.
+ *
+ * Revision 1.22 1995/05/03 07:37:39 adam
* CCL commands stop/continue implemented. New functions gw_res_{int,bool}
* are used when possible.
*
struct gw_kernel_info info;
-static void kernel_events (struct str_queue *queue, int userid)
+static void kernel_events (struct str_queue *queue)
{
char fifo_client_name[1024];
char fifo_server_name[1024];
timeout = gw_res_int (info.kernel_res, "gw.timeout", 600);
gw_log (GW_LOG_DEBUG, KERNEL_LOG, "event loop");
- sprintf (fifo_client_name, "fifo.c.%d", userid);
- sprintf (fifo_server_name, "fifo.s.%d", userid);
+ sprintf (fifo_client_name, "fifo.c.%d", info.userid);
+ sprintf (fifo_server_name, "fifo.s.%d", info.userid);
gip = gips_initialize (fifo_server_name);
gips_open (gip, fifo_client_name);
gw_log (GW_LOG_STAT, KERNEL_LOG, "Timeout after %d seconds",
timeout);
if (info.zass && persist_flag)
- save_p_state (userid);
+ save_p_state (info.userid);
break;
}
if (FD_ISSET (gip_fd, &set_r))
str_queue_enq (queue, line_buf);
urp_start (continuation, queue);
if (persist_flag && !continuation)
- load_p_state (userid);
+ load_p_state (info.userid);
r = urp_command (queue);
if (persist_flag && r == 1)
- del_p_state (userid);
+ del_p_state (info.userid);
urp_end ();
while (str_queue_deq (queue, 0, 0))
;
close (extra_fd);
gips_close (gip);
gips_destroy (gip);
+
unlink (fifo_client_name);
unlink (fifo_server_name);
}
int main (int argc, char **argv)
{
- int userid = -1;
struct str_queue *queue;
info.kernel_res = NULL;
info.databases = NULL;
info.database = NULL;
info.setno = -1;
+ info.userid = -1;
#if USE_FML
info.fml = NULL;
#endif
break;
case 'i':
if (argv[0][2])
- userid = atoi (argv[0]+2);
+ info.userid = atoi (argv[0]+2);
else if (argc > 0)
{
--argc;
- userid = atoi (*++argv);
+ info.userid = atoi (*++argv);
}
else
{
gw_log (GW_LOG_FATAL|GW_LOG_ERRNO, KERNEL_LOG, "str_queue_mk");
exit (1);
}
- if (userid != -1)
+ if (info.userid != -1)
{
read_kernel_res ();
- kernel_events (queue, userid);
+ kernel_events (queue);
}
else
{
gw_log (GW_LOG_DEBUG, KERNEL_LOG, "reading kernel resource, lang %s",
info.lang);
+ /* read default resources. These should exist */
if (gw_res_merge (info.kernel_res, info.default_res))
{
gw_log (GW_LOG_WARN, KERNEL_LOG, "Couldn't read resource file %s",
}
strcpy (path_prefix, gw_res_get (info.kernel_res, "gw.path", "."));
+ /* fetch target definitions (if defined at all) */
if (*info.target)
{
sprintf (resource_name, "gw.target.%s", info.target);
gw_res_merge (info.kernel_res, fname);
}
}
- if (info.lang)
+ /* fetch user definitions (if user-id is specified) */
+ if (info.userid >= 0)
+ {
+ sprintf (fname, "%s/user.%d.r", path_prefix, info.userid);
+ gw_res_merge (info.kernel_res, fname);
+ }
+ /* fetch language definitions (if specified at all) */
+ v = gw_res_get (info.kernel_res, "gw.language", info.lang);
+ if (v)
{
- sprintf (resource_name, "gw.lang.%s", info.lang);
+ sprintf (resource_name, "gw.lang.%s", v);
v = gw_res_get (info.kernel_res, resource_name, NULL);
if (v)
{
gw_res_merge (info.kernel_res, fname);
}
}
+ /* fetch overriding resources from file (if specified) */
if (info.override_res)
{
sprintf (fname, "%s/%s", path_prefix, info.override_res);
gw_res_merge (info.kernel_res, fname);
}
+
+ /* read bibset definition for ccl */
v = gw_res_get (info.kernel_res, "gw.bibset", NULL);
if (v)
{
fclose (bib_inf);
}
}
+
+ /* determine host name and port no */
sprintf (resource_name, "gw.target.%s", info.target);
if (*info.target && ! gw_res_get (info.kernel_res, resource_name, NULL))
{
- /* target is there, and there is no sub-resource for it... */
+ /* target is specified, and there is no sub-resource for it... */
const char *split;
if ((split = strchr (info.target, ':')))
}
}
else
- {
+ { /* resources gw.hostname and gw.portno will be used */
strncpy (info.hostname, gw_res_get (info.kernel_res,
"gw.hostname", "localhost"),
sizeof(info.hostname)-1);
info.port = gw_res_int (info.kernel_res, "gw.portno", 210);
strcpy (info.account, gw_res_get (info.kernel_res, "gw.account", ""));
}
+ /* set info.databases (all available databases for target) */
+ /* set info.database (first database for target) */
if (info.databases)
free (info.databases);
if (info.database)
for (cp = info.database; (cp = strchr (cp, ' ')); cp++)
*cp = ',';
}
+
+ /* the port no can be explicitly overridden by a command line option */
if (info.override_portno)
info.port = atoi (info.override_portno);
+
+ /* the hostname can be explicitly overridden by a command line option */
if (info.override_hostname)
strncpy (info.hostname, info.override_hostname,
sizeof(info.hostname)-1);
+
+ /* determine if more than one result-set names is supported */
if (gw_res_bool (info.kernel_res, "gw.result.set", 1))
info.setno = 0;
else