/** * Try to connect using ipv4 connection. * * @param service service to determinate * @param sockaddr initialized sockaddr_in for connect * @param port a port to connect to */ bool Connect::examine_ipv4(std::string & service, struct sockaddr_in * sockaddr, port_t port) { // create socket signal(SIGTERM, connect_socket_close); m_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); // estamblish connection... if (connect(m_socket, reinterpret_cast<struct sockaddr *>(sockaddr), sizeof(struct sockaddr_in)) < 0) { // unable connect to given port if (Arg::get_instace().verbose()) std::cerr << "Warn: Cannot connect to given port: " << std::strerror(errno) << std::endl; return false; } // we are connected, print port if (! Arg::get_instace().verbose()) std::cout << port << std::endl; m_established = true; bool ret = read_service(service); // now we can close the socket close_socket(); return ret; }
int parse_service(const char *data, int data_len, service_t **dst) { int res = 0; xmlDocPtr doc; /* the resulting document tree */ doc = xmlReadMemory(data, data_len, NULL, NULL, xml_parser_flags); if (doc == NULL) { ERROR_LOG("can't parse document\n"); return -1; } res = read_service(xmlDocGetRootElement(doc), dst); xmlFreeDoc(doc); return res; }
static int read_rls_services(xmlNode *root, rls_services_t **dst) { /* xmlAttr *a; */ xmlNode *n; service_t *l, *last_l; int res = 0; if (!root) return -1; if (!dst) return -1; if (cmp_node(root, "rls-services", rls_namespace) < 0) { ERROR_LOG("document is not a rls-services\n"); return -1; } *dst = (rls_services_t*)cds_malloc(sizeof(rls_services_t)); if (!(*dst)) return -2; (*dst)->rls_services = NULL; last_l = NULL; n = root->children; while (n) { if (n->type == XML_ELEMENT_NODE) { if (cmp_node(n, "service", rls_namespace) >= 0) { res = read_service(n, &l); if (res == 0) { if (l) SEQUENCE_ADD((*dst)->rls_services, last_l, l); } else break; } } n = n->next; } return res; }