From owner-p4-projects@FreeBSD.ORG Thu Aug 16 23:26:44 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 941E916A468; Thu, 16 Aug 2007 23:26:44 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5812B16A417 for ; Thu, 16 Aug 2007 23:26:44 +0000 (UTC) (envelope-from fli@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 467D613C442 for ; Thu, 16 Aug 2007 23:26:44 +0000 (UTC) (envelope-from fli@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l7GNQi8t038434 for ; Thu, 16 Aug 2007 23:26:44 GMT (envelope-from fli@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l7GNQhd3038431 for perforce@freebsd.org; Thu, 16 Aug 2007 23:26:43 GMT (envelope-from fli@FreeBSD.org) Date: Thu, 16 Aug 2007 23:26:43 GMT Message-Id: <200708162326.l7GNQhd3038431@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to fli@FreeBSD.org using -f From: Fredrik Lindberg To: Perforce Change Reviews Cc: Subject: PERFORCE change 125246 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2007 23:26:44 -0000 http://perforce.freebsd.org/chv.cgi?CH=125246 Change 125246 by fli@fli_nexus on 2007/08/16 23:26:19 - Add mdns_cache_flush() - flushes the cache - Add mdns_cache_view() - view cache content Affected files ... .. //depot/projects/soc2007/fli-mdns_sd/libmdns/libmdns.c#3 edit .. //depot/projects/soc2007/fli-mdns_sd/libmdns/mdns.h#3 edit Differences ... ==== //depot/projects/soc2007/fli-mdns_sd/libmdns/libmdns.c#3 (text+ko) ==== @@ -707,6 +707,94 @@ return (0); } +int +mdns_cache_flush(struct mdns *m, unsigned int ifidx) +{ + int mid, error; + struct mdns_msg *mm; + struct mipc_cache_flush mcf; + + mcf.mcf_ifidx = ifidx; + + mid = docmd(m, MIM_CACHE_FLUSH, 1, &mcf, + sizeof(struct mipc_cache_flush)); + if (mid < 0) + return (-1); + + mm = msg_wait(m, mid, NULL); + if (mm == NULL) + return (-1); + + error = errormsg(mm); + msg_free(mm); + if (error >= 0) + return (-1); + return (0); +} + +int +mdns_cache_list(struct mdns *m, unsigned int ifidx, struct mdns_cache **mc) +{ + int mid, offset, error, validres; + char *pkg; + size_t sz; + struct mdns_msg *mm; + struct mdns_cache *mcp; + struct mipc_cache *mic; + struct mipc_cache_list mcl; + + if (ifidx == 0) + return (-1); + + mcl.mcl_ifidx = ifidx; + mid = docmd(m, MIM_CACHE_LIST, 1, &mcl, sizeof(struct mipc_cache_list)); + if (mid < 0) + return (-1); + + sz = 0; + offset = 0; + mcp = NULL; + validres = 1; + do { + mm = msg_wait(m, mid, NULL); + + if (mm->mm_msgtype == MIM_CACHE) { + mic = (struct mipc_cache *)mm->mm_buf; + pkg = mm->mm_buf + sizeof(struct mipc_cache); + + mcp = realloc(mcp, + (offset + 1) * sizeof(struct mdns_cache)); + mcp[offset].mc_rrset.mr_class = mic->mc_class; + mcp[offset].mc_rrset.mr_type = mic->mc_type; + mcp[offset].mc_rrset.mr_ttl = mic->mc_ttl; + mcp[offset].mc_rrset.mr_reslen = mic->mc_reslen; + mcp[offset].mc_rrset.mr_ifidx = ifidx; + mcp[offset].mc_rrset.mr_family = AF_UNSPEC; + mcp[offset].mc_ttl_left = mic->mc_ttl_left; + + memcpy(mcp[offset].mc_rrset.mr_name, pkg, + mic->mc_reclen * sizeof(wchar_t)); + mcp[offset].mc_rrset.mr_name[mic->mc_reclen] = L'\0'; + + pkg += (mic->mc_reclen * sizeof(wchar_t)); + + mcp[offset].mc_rrset.mr_res = malloc(mic->mc_reslen); + memcpy(mcp[offset].mc_rrset.mr_res, pkg, + mic->mc_reslen); + + offset++; + } + else if (mm->mm_msgtype == MIM_ACK) + validres = 0; + else if ((error = errormsg(mm)) >= 0) + validres = 0; + msg_free(mm); + } while (validres); + + *mc = mcp; + return (offset); +} + static int errormsg(struct mdns_msg *mm) { ==== //depot/projects/soc2007/fli-mdns_sd/libmdns/mdns.h#3 (text+ko) ==== @@ -86,6 +86,17 @@ #define MDNS_RES_DEFAULT (0) /* Default resource type */ #define MDNS_RES_POINTER (-1) /* Resource is a resource set pointer */ +/* Cache entry */ +struct mdns_cache { + uint32_t mc_ttl_left; + struct mdns_rrset mc_rrset; +}; + +int mdns_cache_list(struct mdns *, unsigned int, + struct mdns_cache **); +/* Request to flush cache */ +int mdns_cache_flush(struct mdns *, unsigned int); + /* Array to class (integer) translation */ int mdns_atoc(const char *); /* Class (integer) to array translation */