Annotation of embedaddon/rsync/srvloc.c, revision 1.1
1.1 ! misho 1: /* -*- c-file-style: "linux"; -*-
! 2:
! 3: Copyright (C) 2002 by Brad Hards <bradh@frogmouth.net>
! 4:
! 5: This program is free software; you can redistribute it and/or modify
! 6: it under the terms of the GNU General Public License as published by
! 7: the Free Software Foundation; either version 2 of the License, or
! 8: (at your option) any later version.
! 9:
! 10: This program is distributed in the hope that it will be useful,
! 11: but WITHOUT ANY WARRANTY; without even the implied warranty of
! 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 13: GNU General Public License for more details.
! 14:
! 15: You should have received a copy of the GNU General Public License
! 16: along with this program; if not, write to the Free Software
! 17: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
! 18: */
! 19:
! 20: /* This file implements the service location functionality */
! 21: /* Basically, it uses normal Service Location Protocol API */
! 22:
! 23: /* It is really a cheap hack - just to show how it might work
! 24: in a real application.
! 25: */
! 26:
! 27: #include "rsync.h"
! 28:
! 29: #include <slp.h>
! 30: #include <stdio.h>
! 31: #include <string.h>
! 32:
! 33: /* This one just prints out the attributes */
! 34: static SLPBoolean getAttrCallback(UNUSED(SLPHandle hslp), const char *attrlist,
! 35: SLPError errcode, UNUSED(void *cookie))
! 36: {
! 37: char *cleanstr;
! 38:
! 39: if (errcode == SLP_OK) {
! 40: if (!strcmp(attrlist, "(comment=)"))
! 41: rprintf(FINFO, "\t(No description)\n");
! 42: else {
! 43: cleanstr = strrchr(attrlist, ')') ;
! 44: *cleanstr = ' '; /* remove last ')' */
! 45: rprintf(FINFO, "\t%s\n", strchr(attrlist, '=') + 1);
! 46: }
! 47: }
! 48: return SLP_FALSE;
! 49: }
! 50:
! 51: static SLPBoolean getSLPSrvURLCallback(UNUSED(SLPHandle hslp),
! 52: const char *srvurl, UNUSED(unsigned short lifetime),
! 53: SLPError errcode, void *cookie)
! 54: {
! 55: SLPError result;
! 56: SLPHandle attrhslp;
! 57:
! 58: if (errcode == SLP_OK) {
! 59: /* chop service: off the front */
! 60: rprintf(FINFO, " %s ", (strchr(srvurl, ':') + 1));
! 61: /* check for any attributes */
! 62: if (SLPOpen("en", SLP_FALSE,&attrhslp) == SLP_OK) {
! 63: result = SLPFindAttrs(attrhslp, srvurl,
! 64: "", /* return all attributes */
! 65: "", /* use configured scopes */
! 66: getAttrCallback, NULL);
! 67: if (result != SLP_OK) {
! 68: rprintf(FERROR, "errorcode: %i\n",result);
! 69: }
! 70: SLPClose(attrhslp);
! 71: }
! 72: *(SLPError*)cookie = SLP_OK;
! 73: } else
! 74: *(SLPError*)cookie = errcode;
! 75:
! 76: /* Return SLP_TRUE because we want to be called again
! 77: * if more services were found. */
! 78:
! 79: return SLP_TRUE;
! 80: }
! 81:
! 82: int print_service_list(void)
! 83: {
! 84: SLPError err;
! 85: SLPError callbackerr;
! 86: SLPHandle hslp;
! 87:
! 88: err = SLPOpen("en",SLP_FALSE,&hslp);
! 89: if (err != SLP_OK) {
! 90: rprintf(FERROR, "Error opening slp handle %i\n", err);
! 91: return err;
! 92: }
! 93:
! 94: SLPFindSrvs(hslp, "rsync",
! 95: 0, /* use configured scopes */
! 96: 0, /* no attr filter */
! 97: getSLPSrvURLCallback, &callbackerr);
! 98:
! 99: /* Now that we're done using slp, close the slp handle */
! 100: SLPClose(hslp);
! 101:
! 102: return 0;
! 103: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>