You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
302 lines
17 KiB
302 lines
17 KiB
/***************************************************************************/
|
|
/* */
|
|
/* Project: OpenSLP - OpenSource implementation of Service Location */
|
|
/* Protocol Version 2 */
|
|
/* */
|
|
/* File: slpd_database.h */
|
|
/* */
|
|
/* Abstract: Implements database abstraction. Currently a simple */
|
|
/* double linked list (common/slp_database.c) is used for the */
|
|
/* underlying storage. */
|
|
/* */
|
|
/*-------------------------------------------------------------------------*/
|
|
/* */
|
|
/* Please submit patches to http://www.openslp.org */
|
|
/* */
|
|
/*-------------------------------------------------------------------------*/
|
|
/* */
|
|
/* Copyright (C) 2000 Caldera Systems, Inc */
|
|
/* All rights reserved. */
|
|
/* */
|
|
/* Redistribution and use in source and binary forms, with or without */
|
|
/* modification, are permitted provided that the following conditions are */
|
|
/* met: */
|
|
/* */
|
|
/* Redistributions of source code must retain the above copyright */
|
|
/* notice, this list of conditions and the following disclaimer. */
|
|
/* */
|
|
/* Redistributions in binary form must reproduce the above copyright */
|
|
/* notice, this list of conditions and the following disclaimer in */
|
|
/* the documentation and/or other materials provided with the */
|
|
/* distribution. */
|
|
/* */
|
|
/* Neither the name of Caldera Systems nor the names of its */
|
|
/* contributors may be used to endorse or promote products derived */
|
|
/* from this software without specific prior written permission. */
|
|
/* */
|
|
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
|
|
/* `AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
|
|
/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR */
|
|
/* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CALDERA */
|
|
/* SYSTEMS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
|
|
/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
|
|
/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */
|
|
/* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */
|
|
/* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */
|
|
/* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE */
|
|
/* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
|
|
/* */
|
|
/***************************************************************************/
|
|
|
|
#ifndef SLPD_DATABASE_H_INCLUDED
|
|
#define SLPD_DATABASE_H_INCLUDED
|
|
|
|
#include "slpd.h"
|
|
|
|
/*=========================================================================*/
|
|
/* Common code includes */
|
|
/*=========================================================================*/
|
|
#include "slp_database.h"
|
|
|
|
|
|
#define SLPDDATABASE_INITIAL_URLCOUNT 256
|
|
#define SLPDDATABASE_INITIAL_SRVTYPELISTLEN 2048
|
|
|
|
/*=========================================================================*/
|
|
typedef struct _SLPDDatabase
|
|
/*=========================================================================*/
|
|
{
|
|
SLPDatabase database;
|
|
int urlcount;
|
|
int srvtypelistlen;
|
|
}SLPDDatabase;
|
|
|
|
|
|
/*=========================================================================*/
|
|
typedef struct _SLPDDatabaseSrvRqstResult
|
|
/*=========================================================================*/
|
|
{
|
|
void* reserved;
|
|
SLPUrlEntry** urlarray;
|
|
int urlcount;
|
|
}SLPDDatabaseSrvRqstResult;
|
|
|
|
|
|
/*=========================================================================*/
|
|
typedef struct _SLPDDatabaseSrvTypeRqstResult
|
|
/*=========================================================================*/
|
|
{
|
|
void* reserved;
|
|
char* srvtypelist;
|
|
int srvtypelistlen;
|
|
}SLPDDatabaseSrvTypeRqstResult;
|
|
|
|
|
|
/*=========================================================================*/
|
|
typedef struct _SLPDDatabaseAttrRqstResult
|
|
/*=========================================================================*/
|
|
{
|
|
void* reserved;
|
|
char* attrlist;
|
|
int attrlistlen;
|
|
SLPAuthBlock* autharray;
|
|
int authcount;
|
|
int ispartial;
|
|
}SLPDDatabaseAttrRqstResult;
|
|
|
|
|
|
/*=========================================================================*/
|
|
void SLPDDatabaseAge(int seconds, int ageall);
|
|
/* Ages the database entries and clears new and deleted entry lists */
|
|
/* */
|
|
/* seconds (IN) the number of seconds to age each entry by */
|
|
/* */
|
|
/* ageall (IN) age even entries with SLP_LIFETIME_MAXIMUM */
|
|
/* */
|
|
/* Returns - None */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
int SLPDDatabaseReg(SLPMessage msg, SLPBuffer buf);
|
|
/* Add a service registration to the database */
|
|
/* */
|
|
/* msg (IN) SLPMessage of a SrvReg message as returned by */
|
|
/* SLPMessageParse() */
|
|
/* */
|
|
/* buf (IN) Otherwise unreferenced buffer interpreted by the msg */
|
|
/* structure */
|
|
/* */
|
|
/* Returns - Zero on success. Nonzero on error */
|
|
/* */
|
|
/* NOTE: All registrations are treated as fresh */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
int SLPDDatabaseDeReg(SLPMessage msg);
|
|
/* Remove a service registration from the database */
|
|
/* */
|
|
/* msg - (IN) message interpreting an SrvDereg message */
|
|
/* */
|
|
/* Returns - Zero on success. Non-zero on failure */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
int SLPDDatabaseSrvRqstStart(SLPMessage msg,
|
|
SLPDDatabaseSrvRqstResult** result);
|
|
/* Find services in the database */
|
|
/* */
|
|
/* msg (IN) the SrvRqst to find. */
|
|
/* */
|
|
/* result (OUT) pointer result structure */
|
|
/* */
|
|
/* Returns - Zero on success. Non-zero on failure */
|
|
/* */
|
|
/* Note: Caller must pass *result to SLPDDatabaseSrvRqstEnd() to free */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
void SLPDDatabaseSrvRqstEnd(SLPDDatabaseSrvRqstResult* result);
|
|
/* Release resources used to find services in the database */
|
|
/* */
|
|
/* result (IN) pointer result structure previously passed to */
|
|
/* SLPDDatabaseSrvRqstStart */
|
|
/* */
|
|
/* Returns - None */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
int SLPDDatabaseSrvTypeRqstStart(SLPMessage msg,
|
|
SLPDDatabaseSrvTypeRqstResult** result);
|
|
/* Find service types in the database */
|
|
/* */
|
|
/* msg (IN) the SrvTypRqst to find. */
|
|
/* */
|
|
/* result (OUT) pointer result structure */
|
|
/* */
|
|
/* Returns - Zero on success. Non-zero on failure */
|
|
/* */
|
|
/* Note: Caller must pass *result to SLPDDatabaseSrvtypeRqstEnd() to */
|
|
/* free */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
void SLPDDatabaseSrvTypeRqstEnd(SLPDDatabaseSrvTypeRqstResult* result);
|
|
/* Release resources used to find service types in the database */
|
|
/* */
|
|
/* result (IN) pointer result structure previously passed to */
|
|
/* SLPDDatabaseSrvTypeRqstStart */
|
|
/* */
|
|
/* Returns - None */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
int SLPDDatabaseAttrRqstStart(SLPMessage msg,
|
|
SLPDDatabaseAttrRqstResult** result);
|
|
/* Find attributes in the database */
|
|
/* */
|
|
/* msg (IN) the AttrRqst to find. */
|
|
/* */
|
|
/* result (OUT) pointer result structure */
|
|
/* */
|
|
/* Returns - Zero on success. Non-zero on failure */
|
|
/* */
|
|
/* Note: Caller must pass *result to SLPDDatabaseAttrRqstEnd() to */
|
|
/* free */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
void SLPDDatabaseAttrRqstEnd(SLPDDatabaseAttrRqstResult* result);
|
|
/* Release resources used to find attributes in the database */
|
|
/* */
|
|
/* result (IN) pointer result structure previously passed to */
|
|
/* SLPDDatabaseSrvTypeRqstStart */
|
|
/* */
|
|
/* Returns - None */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
void* SLPDDatabaseEnumStart();
|
|
/* Start an enumeration of the entire database */
|
|
/* */
|
|
/* Returns: An enumeration handle that is passed to subsequent calls to */
|
|
/* SLPDDatabaseEnum(). Returns NULL on failure. Returned */
|
|
/* enumeration handle (if not NULL) must be passed to */
|
|
/* SLPDDatabaseEnumEnd() when you are done with it. */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
SLPMessage SLPDDatabaseEnum(void* eh, SLPMessage* msg, SLPBuffer* buf);
|
|
/* Enumerate through all entries of the database */
|
|
/* */
|
|
/* eh (IN) pointer to opaque data that is used to maintain */
|
|
/* enumerate entries. Pass in a pointer to NULL to start */
|
|
/* enumeration. */
|
|
/* */
|
|
/* msg (OUT) pointer to the SrvReg message that discribes buf */
|
|
/* */
|
|
/* buf (OUT) pointer to the SrvReg message buffer */
|
|
/* */
|
|
/* returns: Pointer to enumerated entry or NULL if end of enumeration */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
void SLPDDatabaseEnumEnd(void* eh);
|
|
/* End an enumeration started by SLPDDatabaseEnumStart() */
|
|
/* */
|
|
/* Parameters: eh (IN) The enumeration handle returned by */
|
|
/* SLPDDatabaseEnumStart() */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
int SLPDDatabaseIsEmpty();
|
|
/* Returns an boolean value indicating whether the database is empty */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
int SLPDDatabaseInit(const char* regfile);
|
|
/* Initialize the database with registrations from a regfile. */
|
|
/* */
|
|
/* regfile (IN) the regfile to register. Pass in NULL for no regfile */
|
|
/* */
|
|
/* Returns - zero on success or non-zero on error. */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
int SLPDDatabaseReInit(const char* regfile);
|
|
/* Re-initialize the database with changed registrations from a regfile. */
|
|
/* */
|
|
/* regfile (IN) the regfile to register. */
|
|
/* */
|
|
/* Returns - zero on success or non-zero on error. */
|
|
/*=========================================================================*/
|
|
|
|
#ifdef DEBUG
|
|
/*=========================================================================*/
|
|
void SLPDDatabaseDeinit(void);
|
|
/* Cleans up all resources used by the database */
|
|
/*=========================================================================*/
|
|
|
|
|
|
/*=========================================================================*/
|
|
void SLPDDatabaseDump(void);
|
|
/* Dumps currently valid service registrations present with slpd */
|
|
/*=========================================================================*/
|
|
#endif
|
|
|
|
|
|
#endif /* not defined SLPD_DATABASE_H_INCLUDED */
|