⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libslpattr_tiny.c

📁 SLP协议在linux下的实现。此版本为1.2.1版。官方网站为www.openslp.org
💻 C
字号:
/***************************************************************************//*                                                                         *//* 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;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -