void *dnsbl_table_search(struct ci_lookup_table *table, void *key, void ***vals) { char dnsname[CI_MAXHOSTNAMELEN + 1]; char *server; ci_str_vector_t *v; struct dnsbl_data *dnsbl_data = table->data; if(table->key_ops != &ci_str_ops) { ci_debug_printf(1,"Only keys of type string allowed in this type of table:\n"); return NULL; } server = (char *)key; if (dnsbl_data->cache && ci_cache_search(dnsbl_data->cache, server, (void **)&v, table->allocator)) { ci_debug_printf(6,"dnsbl_table_search: cache hit for %s value %p\n", server, v); if (!v) { *vals = NULL; return NULL; } *vals = (void **)ci_vector_cast_to_voidvoid(v); return key; } snprintf(dnsname, CI_MAXHOSTNAMELEN, "%s.%s", server, dnsbl_data->check_domain); dnsname[CI_MAXHOSTNAMELEN] = '\0'; v = resolv_hostname(dnsname); if (dnsbl_data->cache) ci_cache_update(dnsbl_data->cache, server, v); if (!v) return NULL; *vals = (void **)ci_vector_cast_to_voidvoid(v); return key; }
int open_connection_to( const char *remote_name, int remote_port ){ int fd; struct sockaddr_in serv_addr; if( (fd = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP )) < 0 ){ perror( "ERROR opening socket" ); return 0; } serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons( remote_port ); if( resolv_hostname( remote_name, &serv_addr ) == -1 ){ return 0; } if( connect( fd, (struct sockaddr *)&serv_addr, sizeof( serv_addr )) == -1 ){ perror( "ERROR connecting" ); return 0; } return fd; }