|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T r
Length: 7030 (0x1b76)
Types: TextFile
Names: »rdbmd.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z«
└─⟦de7628f85⟧
└─⟦this⟧ »isode-6.0/others/rdbm/rdbmd.c«
/* rdbmd.c - remote operations dbm -- responder */
#ifndef lint
static char *rcsid = "$Header: /f/osi/others/rdbm/RCS/rdbmd.c,v 7.0 89/11/23 22:10:32 mrose Rel $";
#endif lint
#include <dbm.h>
#undef NULL
#include <stdio.h>
#include "../lookup/ryresponder.h"
#include "RDBM-ops.h"
#include "RDBM-types.h"
/* \f
DATA */
static char *myservice = "dbmstore";
static int execuid = 1;
static int execgid = 1;
/* OPERATIONS */
int op_dbminit (), op_fetch (), op_store (), op_delete (), op_firstkey (),
op_nextkey ();
static struct dispatch dispatches[] = {
"dbminit", operation_RDBM_dbminit, op_dbminit,
"fetch", operation_RDBM_fetch, op_fetch,
"store", operation_RDBM_store, op_store,
"delete", operation_RDBM_delete, op_delete,
"firstkey", operation_RDBM_firstkey, op_firstkey,
"nextkey", operation_RDBM_nextkey, op_nextkey,
NULL
};
/* \f
MAIN */
/* ARGSUSED */
main(argc,argv,envp)
int argc;
char **argv,
**envp;
{
(void) setgid (execgid);
(void) setuid (execuid);
(void) ryresponder(argc, argv, PLocalHostName (), myservice, dispatches,
table_RDBM_Operations, NULLIFP, NULLIFP);
exit(0); /* NOTREACHED */
}
/* \f
OPERATIONS */
static int op_dbminit(sd, ryo, rox, in, roi)
int sd;
struct RyOperation *ryo;
struct RoSAPinvoke *rox;
caddr_t in;
struct RoSAPindication *roi;
{
char *cp;
register struct type_UNIV_PrintableString *arg =
(struct type_UNIV_PrintableString *) in;
struct type_RDBM_Status ress;
register struct type_RDBM_Status *res = &ress;
if (rox->rox_nolinked == 0) {
advise(NULLCP,LLOG_NOTICE,
"RO-INVOKE.INDICATION/%d: %s, unknown linkage %d",
sd, ryo->ryo_name, rox->rox_linkid);
return ureject(sd, ROS_IP_LINKED, rox, roi);
}
if (debug)
advise(NULLCP, LLOG_DEBUG, "RO-INVOKE.INDICATION/%d: %s",
sd, ryo->ryo_name);
cp = qb2str (arg);
res -> parm = dbminit(cp);
free (cp);
if (RyDsResult(sd, rox->rox_id, (caddr_t) res, ROS_NOPRIO, roi) == NOTOK)
ros_adios(&roi->roi_preject,"RESULT");
return OK;
}
/* \f
*/
static int op_fetch(sd, ryo, rox, in, roi)
int sd;
struct RyOperation *ryo;
struct RoSAPinvoke *rox;
caddr_t in;
struct RoSAPindication *roi;
{
register struct type_RDBM_Datum *arg = (struct type_RDBM_Datum *) in;
register struct type_RDBM_Datum *res;
datum arg_datum;
datum res_datum;
if (rox->rox_nolinked == 0) {
advise(NULLCP,LLOG_NOTICE,
"RO-INVOKE.INDICATION/%d: %s, unknown linkage %d",
sd, ryo->ryo_name, rox->rox_linkid);
return ureject(sd, ROS_IP_LINKED, rox, roi);
}
if (debug)
advise(NULLCP,LLOG_DEBUG,"RO-INVOKE.INDICATION/%d: %s",
sd, ryo->ryo_name);
arg_datum.dptr = qb2str (arg), arg_datum.dsize = arg->qb_len;
res_datum = fetch(arg_datum);
free (arg_datum.dptr);
res = str2qb(res_datum.dptr, res_datum.dsize, 1);
if (RyDsResult(sd, rox->rox_id, (caddr_t) res, ROS_NOPRIO, roi) == NOTOK)
ros_adios(&roi->roi_preject,"RESULT");
free_RDBM_Datum (res);
return OK;
}
/* \f
*/
static int op_store(sd, ryo, rox, in, roi)
int sd;
struct RyOperation *ryo;
struct RoSAPinvoke *rox;
caddr_t in;
struct RoSAPindication *roi;
{
register struct type_RDBM_Pair *arg = (struct type_RDBM_Pair *) in;
struct type_RDBM_Status ress;
register struct type_RDBM_Status *res = &ress;
datum key_datum;
datum dat_datum;
if (rox->rox_nolinked == 0) {
advise(NULLCP,LLOG_NOTICE,
"RO-INVOKE.INDICATION/%d: %s, unknown linkage %d",
sd, ryo->ryo_name, rox->rox_linkid);
return ureject(sd, ROS_IP_LINKED, rox, roi);
}
if (debug)
advise(NULLCP, LLOG_DEBUG, "RO-INVOKE.INDICATION/%d: %s",
sd, ryo->ryo_name);
key_datum.dptr = qb2str (arg->key), key_datum.dsize = arg->key->qb_len;
dat_datum.dptr = qb2str (arg->content), dat_datum.dsize = arg->content->qb_len;
res->parm = store(key_datum, dat_datum);
free (key_datum.dptr);
free (dat_datum.dptr);
if (RyDsResult(sd, rox->rox_id, (caddr_t) res, ROS_NOPRIO, roi) == NOTOK)
ros_adios(&roi->roi_preject,"RESULT");
return OK;
}
/* \f
*/
static int op_delete(sd, ryo, rox, in, roi)
int sd;
struct RyOperation *ryo;
struct RoSAPinvoke *rox;
caddr_t in;
struct RoSAPindication *roi;
{
register struct type_RDBM_Datum *arg = (struct type_RDBM_Datum *) in;
struct type_RDBM_Status ress;
register struct type_RDBM_Status *res = &ress;
datum key_datum;
if (rox->rox_nolinked == 0) {
advise(NULLCP,LLOG_NOTICE,
"RO-INVOKE.INDICATION/%d: %s, unknown linkage %d",
sd, ryo->ryo_name, rox->rox_linkid);
return ureject(sd, ROS_IP_LINKED, rox, roi);
}
if (debug)
advise(NULLCP, LLOG_DEBUG, "RO-INVOKE.INDICATION/%d: %s",
sd, ryo->ryo_name);
key_datum.dptr = qb2str (arg), key_datum.dsize = arg->qb_len;
res->parm = delete(key_datum);
free (key_datum.dptr);
if (RyDsResult(sd, rox->rox_id, (caddr_t) res, ROS_NOPRIO, roi) == NOTOK)
ros_adios(&roi->roi_preject,"RESULT");
return OK;
}
/* \f
*/
/* ARGSUSED */
static int op_firstkey(sd, ryo, rox, in, roi)
int sd;
struct RyOperation *ryo;
struct RoSAPinvoke *rox;
caddr_t in;
struct RoSAPindication *roi;
{
register struct type_RDBM_Datum *res;
datum key_datum;
if (rox->rox_nolinked == 0) {
advise(NULLCP,LLOG_NOTICE,
"RO-INVOKE.INDICATION/%d: %s, unknown linkage %d",
sd, ryo->ryo_name, rox->rox_linkid);
return ureject(sd, ROS_IP_LINKED, rox, roi);
}
if (debug)
advise(NULLCP, LLOG_DEBUG, "RO-INVOKE.INDICATION/%d: %s",
sd, ryo->ryo_name);
key_datum = firstkey();
res = str2qb(key_datum.dptr, key_datum.dsize, 1);
if (RyDsResult(sd, rox->rox_id, (caddr_t) res, ROS_NOPRIO, roi) == NOTOK)
ros_adios(&roi->roi_preject,"RESULT");
free_RDBM_Datum (res);
return OK;
}
/* \f
*/
static int op_nextkey(sd, ryo, rox, in, roi)
int sd;
struct RyOperation *ryo;
struct RoSAPinvoke *rox;
caddr_t in;
struct RoSAPindication *roi;
{
register struct type_RDBM_Datum *arg = (struct type_RDBM_Datum *) in;
register struct type_RDBM_Datum *res;
datum key_datum;
datum nkey_datum;
if (rox->rox_nolinked == 0) {
advise(NULLCP,LLOG_NOTICE,
"RO-INVOKE.INDICATION/%d: %s, unknown linkage %d",
sd, ryo->ryo_name, rox->rox_linkid);
return ureject(sd, ROS_IP_LINKED, rox, roi);
}
if (debug)
advise(NULLCP, LLOG_DEBUG, "RO-INVOKE.INDICATION/%d: %s",
sd, ryo->ryo_name);
key_datum.dptr = qb2str (arg), key_datum.dsize = arg->qb_len;
nkey_datum = nextkey(key_datum);
free (key_datum.dptr);
res = str2qb(nkey_datum.dptr, nkey_datum.dsize, 1);
if (RyDsResult(sd, rox->rox_id, (caddr_t) res, ROS_NOPRIO, roi) == NOTOK)
ros_adios(&roi->roi_preject,"RESULT");
free_RDBM_Datum (res);
return OK;
}
/* \f
U-REJECT */
static int ureject(sd, reason, rox, roi)
int sd,
reason;
struct RoSAPinvoke *rox;
struct RoSAPindication *roi;
{
if (RyDsUReject(sd, rox->rox_id,reason,ROS_NOPRIO,roi) == NOTOK)
ros_adios(&roi->roi_preject,"U-REJECT");
return(OK);
}