📄 slpreg.c
字号:
/* * Embedded SLP Registration Functions * * ./software/ch10/emslp/slpreg.c * * mtj@cogitollc.com * */#include <stdio.h>#include "slpapi.h"#include "slppriv.h"/* * slpRegisterService() * * Perform an SLP service registration. * */int slpRegisterService( slpHandleType *handle, const char *serviceURL, const char *serviceType, const char *attributes, uint16_t lifetime ){ slpMsgType slpMsg; int ret, i; if ((handle == NULL) || (serviceURL == NULL) || (serviceType == NULL) || (attributes == NULL)) return -1; slpCreateHeader(&slpMsg, SRV_REG, "en", FRESH); /* First, emit the <URL-Entry> */ emitByte(&slpMsg, 0); /* Reserved Field */ emitShort(&slpMsg, lifetime); /* Lifetime */ emitShort(&slpMsg, strlen(serviceURL)); /* URL Length */ emitString(&slpMsg, serviceURL); /* URL */ emitByte(&slpMsg, 0); /* # of URL Auths */ /* Next, the service string */ emitShort(&slpMsg, strlen(serviceType)); emitString(&slpMsg, serviceType); /* Emit the scope string */ emitShort(&slpMsg, 7); emitString(&slpMsg, "default"); /* Emit the attribute List */ emitShort(&slpMsg, strlen(attributes)); emitString(&slpMsg, attributes); /* Emit null AttrAuths */ emitByte(&slpMsg, 0); setSlpHeaderLength( &slpMsg ); slpPrintMessage( &slpMsg ); ret = slpSendMessage( handle, &slpMsg ); for (i = 0 ; i < 5 ; i++) { ret = slpReceiveMessage( handle, &slpMsg, 1 ); if ((ret == 0) && (slpMsg.buffer[1] == SRV_ACK)) { slpPrintMessage( &slpMsg ); ret = 0; break; } } return 0;}int slpDeRegisterService( slpHandleType *handle, const char *serviceURL ){ slpMsgType slpMsg; int ret, i; if ((handle == NULL) || (serviceURL == NULL)) return -1; slpCreateHeader(&slpMsg, SRV_DEREG, "en", FRESH); /* First, emit the scope */ emitShort(&slpMsg, 7); emitString(&slpMsg, "default"); /* Next, emit the <URL-Entry> */ emitByte(&slpMsg, 0); /* Reserved Field */ emitShort(&slpMsg, SLP_LIFETIME); /* Lifetime */ emitShort(&slpMsg, strlen(serviceURL)); /* URL Length */ emitString(&slpMsg, serviceURL); /* URL */ emitByte(&slpMsg, 0); /* # of URL Auths */ /* Next, the null tag list (deregister in all languages) */ emitShort(&slpMsg, 0); /* Emit null AttrAuths */ emitByte(&slpMsg, 0); setSlpHeaderLength( &slpMsg ); slpPrintMessage( &slpMsg ); ret = slpSendMessage( handle, &slpMsg ); for (i = 0 ; i < 5 ; i++) { ret = slpReceiveMessage( handle, &slpMsg, 1 ); if (slpMsg.buffer[2] == SRV_REPLY) { ret = 0; break; } } return 0;}/* * Copyright (c) 2002 Charles River Media. All rights reserved. * * Redistribution and use in source and binary forms, with or * without modification, is hereby granted without fee provided * that the following conditions are met: * * 1. Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * 2. 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. * 3. Neither the name of Charles River Media 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 CHARLES RIVER MEDIA AND CONTRIBUTERS * 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CHARLES * RIVER MEDIA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARAY, 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. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -