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.
336 lines
8.4 KiB
336 lines
8.4 KiB
/***************************************************************************/
|
|
/* */
|
|
/* Project: OpenSLP - OpenSource implementation of Service Location */
|
|
/* Protocol Version 2 */
|
|
/* */
|
|
/* File: slpd_database.c */
|
|
/* */
|
|
/* Abstract: A "tiny" implementation of slp_attr. Instead of providing */
|
|
/* the full functionality, we give a minimal interface for */
|
|
/* use in slpd. */
|
|
/***************************************************************************/
|
|
|
|
#include <libslpattr.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <assert.h>
|
|
|
|
/*****************************************************************************
|
|
*
|
|
* Implemented functions.
|
|
*
|
|
****************************************************************************/
|
|
|
|
/* The tiny attribute structure. */
|
|
struct xx_TinyAttr
|
|
{
|
|
char *attributes; /* A null terminated attribute string. */
|
|
int attr_len; /* The length of the attributes member. */
|
|
};
|
|
|
|
SLPError SLPAttrAlloc(
|
|
const char *lang,
|
|
const FILE *template_h,
|
|
const SLPBoolean strict,
|
|
SLPAttributes *slp_attr_h
|
|
)
|
|
{
|
|
struct xx_TinyAttr **slp_attr;
|
|
slp_attr = (struct xx_TinyAttr**)slp_attr_h;
|
|
|
|
/* Don't bother sanity checking. */
|
|
/* FIXME Should we check? */
|
|
|
|
(*slp_attr) = (struct xx_TinyAttr*)malloc( sizeof(struct xx_TinyAttr) );
|
|
if(*slp_attr == NULL)
|
|
{
|
|
return SLP_MEMORY_ALLOC_FAILED;
|
|
}
|
|
|
|
(*slp_attr)->attributes = NULL;
|
|
(*slp_attr)->attr_len = 0;
|
|
|
|
return SLP_OK;
|
|
}
|
|
|
|
|
|
void SLPAttrFree(SLPAttributes attr_h)
|
|
{
|
|
struct xx_TinyAttr *slp_attr = (struct xx_TinyAttr*)attr_h;
|
|
|
|
/***** Free data. *****/
|
|
if(slp_attr->attributes)
|
|
{
|
|
free(slp_attr->attributes);
|
|
}
|
|
slp_attr->attr_len = 0;
|
|
|
|
/***** Free struct. *****/
|
|
free(slp_attr);
|
|
slp_attr = NULL;
|
|
}
|
|
|
|
/* TODO/FIXME Does not freshen, instead replaces. */
|
|
SLPError SLPAttrFreshen(SLPAttributes attr_h, const char *new_attrs)
|
|
{
|
|
struct xx_TinyAttr *slp_attr = (struct xx_TinyAttr*)attr_h;
|
|
|
|
/***** Free old data. *****/
|
|
if(slp_attr->attributes)
|
|
{
|
|
free(slp_attr->attributes);
|
|
}
|
|
slp_attr->attr_len = 0;
|
|
|
|
/***** Copy new data. *****/
|
|
slp_attr->attributes = strdup(new_attrs);
|
|
if(slp_attr->attributes == NULL)
|
|
{
|
|
return SLP_MEMORY_ALLOC_FAILED;
|
|
}
|
|
slp_attr->attr_len = strlen(new_attrs);
|
|
|
|
/***** Done. *****/
|
|
return SLP_OK;
|
|
}
|
|
|
|
|
|
SLPError SLPAttrSerialize(SLPAttributes attr_h,
|
|
const char* tags /* NULL terminated */,
|
|
char **out_buffer /* Where to write. if *out_buffer == NULL, space is alloc'd */,
|
|
int bufferlen, /* Size of buffer. */
|
|
int* count, /* Bytes needed/written. */
|
|
SLPBoolean find_delta
|
|
)
|
|
{
|
|
struct xx_TinyAttr *slp_attr = (struct xx_TinyAttr*)attr_h;
|
|
|
|
/* Write the amount of space we need. */
|
|
if(count != NULL)
|
|
{
|
|
*count = slp_attr->attr_len + 1; /* For the null. */
|
|
}
|
|
|
|
/* Check that we have somewhere to write to. */
|
|
if(bufferlen < slp_attr->attr_len + 1)
|
|
{ /* +1 for null. */
|
|
return SLP_BUFFER_OVERFLOW;
|
|
}
|
|
assert(out_buffer != NULL && *out_buffer != NULL); /* Verify we have somewhere to write. */
|
|
|
|
|
|
/* Check for empty string. */
|
|
if(slp_attr->attr_len == 0)
|
|
{
|
|
**out_buffer = 0; /* Empty string. */
|
|
return SLP_OK;
|
|
}
|
|
|
|
/* Copy. */
|
|
strcpy(*out_buffer, slp_attr->attributes);
|
|
|
|
return SLP_OK;
|
|
}
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
*
|
|
* Unimplemented functions.
|
|
*
|
|
****************************************************************************/
|
|
|
|
SLPError SLPAttrAllocStr(
|
|
const char *lang,
|
|
const FILE *template_h,
|
|
const SLPBoolean strict,
|
|
SLPAttributes *slp_attr,
|
|
const char *str
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
/* Attribute manipulation. */
|
|
SLPError SLPAttrSet_bool(
|
|
SLPAttributes attr_h,
|
|
const char *attribute_tag,
|
|
SLPBoolean val
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
SLPError SLPAttrSet_str(
|
|
SLPAttributes attr_h,
|
|
const char *tag,
|
|
const char *val,
|
|
SLPInsertionPolicy pol
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
SLPError SLPAttrSet_keyw(
|
|
SLPAttributes attr_h,
|
|
const char *attribute_tag
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
SLPError SLPAttrSet_int(
|
|
SLPAttributes attr_h,
|
|
const char *tag,
|
|
int val,
|
|
SLPInsertionPolicy policy
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
SLPError SLPAttrSet_opaque(
|
|
SLPAttributes attr_h,
|
|
const char *tag,
|
|
const char *val,
|
|
const unsigned int len,
|
|
SLPInsertionPolicy policy
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
SLPError SLPAttrSet_guess(
|
|
SLPAttributes attr_h,
|
|
const char *tag,
|
|
const char *val,
|
|
SLPInsertionPolicy policy
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
|
|
/* Attribute Querying. */
|
|
SLPError SLPAttrGet_bool(
|
|
SLPAttributes attr_h,
|
|
const char *tag,
|
|
SLPBoolean *val
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
SLPError SLPAttrGet_keyw(
|
|
SLPAttributes attr_h,
|
|
const char *tag
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
SLPError SLPAttrGet_int(
|
|
SLPAttributes attr_h,
|
|
const char *tag,
|
|
int *val[],
|
|
int *size
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
SLPError SLPAttrGet_str(
|
|
SLPAttributes attr_h,
|
|
const char *tag,
|
|
char ***val,
|
|
int *size
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
|
|
SLPError SLPAttrGet_opaque(
|
|
SLPAttributes attr_h,
|
|
const char *tag,
|
|
SLPOpaque ***val,
|
|
int *size
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
|
|
/* Misc. */
|
|
SLPError SLPAttrGetType(SLPAttributes attr_h, const char *tag, SLPType *type)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
/* Functions. */
|
|
SLPError SLPRegAttr(
|
|
SLPHandle slp_h,
|
|
const char* srvurl,
|
|
unsigned short lifetime,
|
|
const char* srvtype,
|
|
SLPAttributes attr_h,
|
|
SLPBoolean fresh,
|
|
SLPRegReport callback,
|
|
void* cookie
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
SLPError SLPFindAttrObj (
|
|
SLPHandle hslp,
|
|
const char* srvurlorsrvtype,
|
|
const char* scopelist,
|
|
const char* attrids,
|
|
SLPAttrObjCallback *callback,
|
|
void* cookie
|
|
)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
*
|
|
* Functions for the iterator struct
|
|
*
|
|
****************************************************************************/
|
|
|
|
SLPError SLPAttrIteratorAlloc(SLPAttributes attr, SLPAttrIterator *iter)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
void SLPAttrIteratorFree(SLPAttrIterator iter)
|
|
{
|
|
return ;
|
|
}
|
|
|
|
|
|
SLPBoolean SLPAttrIterNext(SLPAttrIterator iter_h, char const **tag, SLPType *type)
|
|
{
|
|
return SLP_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
|