📄 slpfind.c
字号:
/* * Embedded SLP Find Services Implementation * * ./software/ch10/emslp/slpfind.c * * mtj@cogitollc.com * */#include <stdio.h>#include <string.h>#include "slpapi.h"#include "slppriv.h"/* * slpRequestService() * * Perform an SLP find services command. * */int slpRequestService( slpHandleType *handle, slpParsedServiceReplyType *slpPReply, const char *serviceType, const char *predicates ){ slpMsgType slpMsg; int ret, i; if ((handle == NULL) || (slpPReply == NULL)) return -1; bzero( (void *)slpPReply, sizeof(slpParsedServiceReplyType) ); slpCreateHeader(&slpMsg, SRV_RQST, "en", FRESH); /* Emit the PRLIST */ emitShort(&slpMsg, 0); /* Next, the service string */ emitShort(&slpMsg, strlen(serviceType)); emitString(&slpMsg, serviceType); /* Emit the scope string */ emitShort(&slpMsg, 7); emitString(&slpMsg, "default"); /* Emit the predicates List */ emitShort(&slpMsg, strlen(predicates)); emitString(&slpMsg, predicates); /* Emit null <SLP SPI> */ emitShort(&slpMsg, 0); setSlpHeaderLength( &slpMsg ); slpPrintMessage( &slpMsg ); ret = slpSendMessage( handle, &slpMsg ); for (i = 0 ; i < 5 ; i++) { ret = slpReceiveMessage( handle, &slpMsg, 1 ); if (ret == 0) { slpPrintMessage( &slpMsg ); ret = slpParseServiceReply( &slpMsg, slpPReply );#ifdef SLP_DEBUG printf( "slpReply resulted in %d elements\n", slpPReply->urlCount ); if (1) { int j; for (j = 0 ; j < slpPReply->urlCount ; j++) { printf("URL Record %d\n", j); printf(" Lifetime : %04x\n", slpPReply->urls[j].lifetime); printf(" URL : %s\n", slpPReply->urls[j].url); } printf("\n"); }#endif } } return slpPReply->urlCount;}/* * slpRequestAllServices() * * Perform an SLP find service-types command. * */int slpRequestAllServices( slpHandleType *handle, slpParsedServiceTypeReplyType *slpPReply ){ slpMsgType slpMsg; int ret, i; if ((handle == NULL) || (slpPReply == NULL)) return -1; bzero( (void *)slpPReply, sizeof(slpParsedServiceTypeReplyType) ); slpCreateHeader(&slpMsg, SRV_TYPE_RQST, "en", FRESH); /* Emit the PRLIST */ emitShort(&slpMsg, 0); /* Emit the Naming Authority */ emitShort(&slpMsg, 0xffff); /* Emit the scope string */ emitShort(&slpMsg, 7); emitString(&slpMsg, "default"); setSlpHeaderLength( &slpMsg ); slpPrintMessage( &slpMsg ); ret = slpSendMessage( handle, &slpMsg ); for (i = 0 ; i < 5 ; i++) { ret = slpReceiveMessage( handle, &slpMsg, 1 ); if (ret == 0) { slpPrintMessage( &slpMsg ); ret = slpParseServiceTypesReply( &slpMsg, slpPReply );#ifdef SLP_DEBUG printf( "slpReply resulted in %d elements\n", slpPReply->srvCount );#endif } } return slpPReply->srvCount;}/* * 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 + -