Annotation of embedaddon/rsync/srvloc.c, revision 1.1.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>