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

📄 libslp_reg.c

📁 SLP协议在linux下的实现。此版本为1.2.1版。官方网站为www.openslp.org
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************//*                                                                         *//* Project:     OpenSLP - OpenSource implementation of Service Location    *//*              Protocol Version 2                                         *//*                                                                         *//* File:        slplib_reg.c                                               *//*                                                                         *//* Abstract:    Implementation for functions register and deregister       *//*              services -- SLPReg() call.                                 *//*                                                                         *//*-------------------------------------------------------------------------*//*                                                                         *//*     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.    *//*                                                                         *//***************************************************************************/#include "slp.h"#include "libslp.h"/*-------------------------------------------------------------------------*/SLPBoolean CallbackSrvReg(SLPError errorcode,                          struct sockaddr_in* peerinfo,                          SLPBuffer replybuf,                           void* cookie)/*-------------------------------------------------------------------------*/{    SLPMessage      replymsg;    PSLPHandleInfo  handle      = (PSLPHandleInfo) cookie;    /*-------------------------------------------*/    /* Check the errorcode and bail if it is set */    /*-------------------------------------------*/    if(errorcode == 0)    {        /*--------------------*/        /* Parse the replybuf */        /*--------------------*/        replymsg = SLPMessageAlloc();        if(replymsg)        {            errorcode = SLPMessageParseBuffer(peerinfo,replybuf,replymsg);            if(errorcode == 0)            {                if(replymsg->header.functionid == SLP_FUNCT_SRVACK)                {                    errorcode = replymsg->body.srvack.errorcode * - 1;                }            }                SLPMessageFree(replymsg);        }        else        {            errorcode = SLP_MEMORY_ALLOC_FAILED;        }    }    /*----------------------------*/    /* Call the callback function */    /*----------------------------*/    handle->params.reg.callback((SLPHandle)handle,                                errorcode,                                handle->params.reg.cookie);        return SLP_FALSE;}/*-------------------------------------------------------------------------*/ SLPError ProcessSrvReg(PSLPHandleInfo handle)/*-------------------------------------------------------------------------*/{    int                 sock;    struct sockaddr_in  peeraddr;    int                 bufsize     = 0;    char*               buf         = 0;    char*               curpos      = 0;    SLPError            result      = 0;    int                 extoffset   = 0;#ifdef ENABLE_SLPv2_SECURITY    int                 urlauthlen  = 0;    unsigned char*      urlauth     = 0;    int                 attrauthlen = 0;    unsigned char*      attrauth    = 0;        if(SLPPropertyAsBoolean(SLPGetProperty("net.slp.securityEnabled")))    {        result = SLPAuthSignUrl(handle->hspi,                                0,                                0,                                handle->params.reg.urllen,                                handle->params.reg.url,                                &urlauthlen,                                &urlauth);        if(result == 0)        {            result = SLPAuthSignString(handle->hspi,                                       0,                                       0,                                       handle->params.reg.attrlistlen,                                       handle->params.reg.attrlist,                                       &attrauthlen,                                       &attrauth);        }        bufsize += urlauthlen;        bufsize += attrauthlen;    }#endif    /*-------------------------------------------------------------------*/    /* determine the size of the fixed portion of the SRVREG             */    /*-------------------------------------------------------------------*/    bufsize += handle->params.reg.urllen + 6;       /*  1 byte for reserved  */                                                    /*  2 bytes for lifetime */                                                    /*  2 bytes for urllen   */                                                    /*  1 byte for authcount */    bufsize += handle->params.reg.srvtypelen + 2;   /*  2 bytes for len field */    bufsize += handle->params.reg.scopelistlen + 2; /*  2 bytes for len field */    bufsize += handle->params.reg.attrlistlen + 2;  /*  2 bytes for len field */    bufsize += 1;                                   /*  1 byte for authcount */    if(SLPPropertyAsBoolean(SLPGetProperty("net.slp.watchRegistrationPID")))    {        bufsize += 9; /* 2 bytes for extid      */                      /* 3 bytes for nextoffset */                      /* 4 bytes for pid        */    }    buf = curpos = (char*)xmalloc(bufsize);    if(buf == 0)    {        result = SLP_MEMORY_ALLOC_FAILED;        goto FINISHED;    }    /*------------------------------------------------------------*/    /* Build a buffer containing the fixed portion of the SRVREG  */    /*------------------------------------------------------------*/    /* url-entry reserved */    *curpos= 0;            curpos = curpos + 1;    /* url-entry lifetime */    ToUINT16(curpos,handle->params.reg.lifetime);    curpos = curpos + 2;    /* url-entry urllen */    ToUINT16(curpos,handle->params.reg.urllen);    curpos = curpos + 2;    /* url-entry url */    memcpy(curpos,           handle->params.reg.url,           handle->params.reg.urllen);    curpos = curpos + handle->params.reg.urllen;    /* url-entry authblock */#ifdef ENABLE_SLPv2_SECURITY    if(urlauth)    {        /* authcount */        *curpos = 1;        curpos = curpos + 1;        /* authblock */        memcpy(curpos,urlauth,urlauthlen);        curpos = curpos + urlauthlen;    }    else#endif    {        /* authcount */        *curpos = 0;        curpos = curpos + 1;    }     /* service type */    ToUINT16(curpos,handle->params.reg.srvtypelen);    curpos = curpos + 2;    memcpy(curpos,           handle->params.reg.srvtype,           handle->params.reg.srvtypelen);    curpos = curpos + handle->params.reg.srvtypelen;    /* scope list */    ToUINT16(curpos,handle->params.reg.scopelistlen);    curpos = curpos + 2;    memcpy(curpos,           handle->params.reg.scopelist,           handle->params.reg.scopelistlen);    curpos = curpos + handle->params.reg.scopelistlen;    /* attr list */    ToUINT16(curpos,handle->params.reg.attrlistlen);    curpos = curpos + 2;    memcpy(curpos,           handle->params.reg.attrlist,           handle->params.reg.attrlistlen);

⌨️ 快捷键说明

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