void xenstore_record_dm(const char *subpath, const char *state);
void xenstore_record_dm_state(const char *state);
void xenstore_check_new_media_present(int timeout);
-void xenstore_write_vncport(int vnc_display);
void xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen);
void xenstore_write_vslots(char *vslots);
free(vec);
}
-void xenstore_write_vncport(int display)
+static void xenstore_write_domain_console_item
+ (const char *item, const char *val)
{
- char *buf = NULL, *path;
- char *portstr = NULL;
+ char *dompath;
+ char *path = NULL;
if (xsh == NULL)
return;
- path = xs_get_domain_path(xsh, domid);
- if (path == NULL) {
- fprintf(logfile, "xs_get_domain_path() error\n");
- goto out;
- }
+ dompath = xs_get_domain_path(xsh, domid);
+ if (dompath == NULL) goto out_err;
- if (pasprintf(&buf, "%s/console/vnc-port", path) == -1)
- goto out;
-
- if (pasprintf(&portstr, "%d", display) == -1)
- goto out;
+ if (pasprintf(&path, "%s/console/%s", dompath, item) == -1) goto out_err;
- if (xs_write(xsh, XBT_NULL, buf, portstr, strlen(portstr)) == 0)
- fprintf(logfile, "xs_write() vncport failed\n");
+ if (xs_write(xsh, XBT_NULL, path, val, strlen(val)) == 0)
+ goto out_err;
out:
- free(portstr);
- free(buf);
+ free(path);
+ return;
+
+ out_err:
+ fprintf(logfile, "write console item %s (%s) failed\n", item, path);
+ goto out;
+}
+
+void xenstore_write_vncinfo(int port,
+ const struct sockaddr *addr,
+ socklen_t addrlen,
+ const char *password)
+{
+ char *portstr = NULL;
+ const char *addrstr;
+
+ if (pasprintf(&portstr, "%d", port) != -1) {
+ xenstore_write_domain_console_item("vnc-port", portstr);
+ free(portstr);
+ }
+
+ assert(addr->sa_family == AF_INET);
+ addrstr = inet_ntoa(((const struct sockaddr_in*)addr)->sin_addr);
+ if (!addrstr) {
+ fprintf(logfile, "inet_ntop on vnc-addr failed\n");
+ } else {
+ xenstore_write_domain_console_item("vnc-listen", addrstr);
+ }
+
+ if (password)
+ xenstore_write_domain_console_item("vnc-pass", password);
}
void xenstore_write_vslots(char *vslots)