/* * Sends a control event with code "code" and selection "selection" * to node "node", packing pkt->body with "data" which must be of * size "len". */ int node_ctrl(merlin_node *node, int code, uint selection, void *data, uint32_t len, int msec) { merlin_event pkt; if (len > sizeof(pkt.body)) { lerr("Attempted to send %u bytes of data when max is %u", len, sizeof(pkt.body)); bt_scan(NULL, 0); return -1; } memset(&pkt.hdr, 0, HDR_SIZE); pkt.hdr.sig.id = MERLIN_SIGNATURE; pkt.hdr.protocol = MERLIN_PROTOCOL_VERSION; gettimeofday(&pkt.hdr.sent, NULL); pkt.hdr.type = CTRL_PACKET; pkt.hdr.len = len; pkt.hdr.code = code; pkt.hdr.selection = selection & 0xffff; if (data) memcpy(&pkt.body, data, len); return node_send_event(node, &pkt, msec); }
/* send a specific packet to a specific host */ static int net_sendto(merlin_node *node, merlin_event *pkt) { if (!pkt || !node) { lerr("net_sendto() called with neither node nor pkt"); return -1; } return node_send_event(node, pkt, 100); }
/* send a specific packet to a specific host */ int net_sendto(merlin_node *node, merlin_event *pkt) { if (!pkt || !node) { lerr("net_sendto() called with neither node nor pkt"); return -1; } /* Do not block in the Naemon event loop, retry on the next iteration. */ return node_send_event(node, pkt, 0); }