PERFORCE change 125246 for review
Fredrik Lindberg
fli at FreeBSD.org
Thu Aug 16 16:26:44 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=125246
Change 125246 by fli at 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 */
More information about the p4-projects
mailing list