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; }