Beispiel #1
0
static void print_msg_info(const char* meta, bbus_object* obj)
{
	unsigned char msgtype;
	unsigned char sotype;
	unsigned char errcode;
	unsigned token;
	unsigned psize;
	unsigned char flags;
	char* msgmeta;
	int ret;

	ret = bbus_obj_parse(obj, "bbbuubs", &msgtype, &sotype, &errcode,
					&token, &psize, &flags, &msgmeta);
	if (ret < 0) {
		die("Error extracting message data from object: %s\n",
					bbus_strerror(bbus_lasterror()));
	}

	printf("Message %s\n", meta);
	printf("{\n");
	printf("\tmsgtype\t=\t%s\n", str_msgtype(msgtype));
	printf("\tsotype\t=\t%s\n", str_sotype(sotype));
	printf("\terrcode\t=\t%s\n", str_errcode(errcode));
	printf("\ttoken\t=\t%u\n", token);
	printf("\tpsize\t=\t%u\n", psize);
	printf("\tflags\t=\t%s\n", str_flags(flags));
	printf("\tmeta\t=\t");
	if (strlen(msgmeta) == 0) {
		printf("<no meta>");
	} else {
		printf("\"%s\"", msgmeta);
	}
	printf("\n}\n");
}
int send_monitor_msg(struct rmonitor_msg *msg)
{
	int port;
	int fd;
	char *socket_info;
	struct addrinfo *addr;

	socket_info = getenv(RESOURCE_MONITOR_INFO_ENV_VAR);
	if(!socket_info)
	{
		debug(D_RMON,"couldn't find socket info.\n");
		return -1;
	}

	sscanf(socket_info, "%d", &port);
	debug(D_RMON, "found socket info at %d.\n", port);

	int status = find_localhost_addr(port, &addr);

	if(status != 0) {
		debug(D_RMON,"couldn't read socket information.");
		return -1;
	}

	fd = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
	if(fd < 0)
	{
		debug(D_RMON,"couldn't open socket for writing.");
		freeaddrinfo(addr);
		return -1;
	}

	int count;
	debug(D_RMON, "sending message from %d to port %d: %s(%d)\n", getpid(), port, str_msgtype(msg->type), msg->error);
	count = sendto(fd, msg, sizeof(struct rmonitor_msg), 0, addr->ai_addr, addr->ai_addrlen);
	debug(D_RMON, "message sent from %d to port %d. %d bytes.\n", getpid(), port, count);

	freeaddrinfo(addr);
	close(fd);

	return count;
}