/** Apply GeoIP country data to a client. * @param[in] cptr Client to apply GeoIP country data to. */ void geoip_apply(struct Client* cptr) { #ifdef USE_GEOIP int gcid = 0; #endif /* USE_GEOIP */ #ifdef USE_GEOIP_GL GeoIPLookup gl; #endif /* USE_GEOIP_GL */ if (!feature_bool(FEAT_GEOIP_ENABLE)) return; if (!(cptr)) return; #ifdef USE_GEOIP if (irc_in_addr_is_ipv4(&cli_ip(cptr))) { /* User is IPv4 so use gi4. */ if (gi4 != NULL) #ifdef USE_GEOIP_GL gcid = GeoIP_id_by_addr_gl(gi4, cli_sock_ip(cptr), &gl); #else gcid = GeoIP_id_by_addr(gi4, cli_sock_ip(cptr)); #endif /* USE_GEOIP_GL */ } else { /* User is IPv6 so use gi6. */ if (gi6 != NULL) #ifdef USE_GEOIP_GL gcid = GeoIP_id_by_addr_v6_gl(gi6, cli_sock_ip(cptr), &gl); #else gcid = GeoIP_id_by_addr_v6(gi6, cli_sock_ip(cptr)); #endif /* USE_GEOIP_GL */ } #endif /* USE_GEOIP */ #ifdef USE_GEOIP if (gcid == 0) { #endif /* USE_GEOIP */ ircd_strncpy((char *)&cli_countrycode(cptr), "--", 3); ircd_strncpy((char *)&cli_countryname(cptr), "Unknown", 8); ircd_strncpy((char *)&cli_continentcode(cptr), "--", 3); ircd_strncpy((char *)&cli_continentname(cptr), "Unknown", 8); #ifdef USE_GEOIP } else { ircd_strncpy((char *)&cli_countrycode(cptr), GeoIP_code_by_id(gcid), 3); ircd_strncpy((char *)&cli_countryname(cptr), GeoIP_name_by_id(gcid), 256); ircd_strncpy((char *)&cli_continentcode(cptr), GeoIP_continent_by_id(gcid), 3); ircd_strncpy((char *)&cli_continentname(cptr), geoip_continent_name_by_code(GeoIP_continent_by_id(gcid)), 256); } #endif /* USE_GEOIP */ SetGeoIP(cptr); }
CslGeoIP::CslGeoIP() : m_type(GEOIP_COUNTRY) { for (wxInt32 i = 0;; i++) { const char *code = GeoIP_code_by_id(i); const char *name = GeoIP_name_by_id(i); if (!code || !name) break; m_countryCodes.push_back(C2U(code)); m_countryNames.push_back(C2U(name)); } }
/** Apply GeoIP country data to a client from a MARK. * @param[in] cptr Client to apply GeoIP country data to. * @param[in] country Country code from MARK. * @param[in] continent Continent code from MARK. */ void geoip_apply_mark(struct Client* cptr, char* country, char* continent) { ircd_strncpy((char *)&cli_countrycode(cptr), (!country ? "--" : country), 3); ircd_strncpy((char *)&cli_continentcode(cptr), (!continent ? "--" : continent), 3); #ifdef USE_GEOIP if (!country || !strcmp(country, "--")) #endif /* USE_GEOIP */ ircd_strncpy((char *)&cli_countryname(cptr), "Unknown", 8); #ifdef USE_GEOIP else ircd_strncpy((char *)&cli_countryname(cptr), GeoIP_name_by_id(GeoIP_id_by_code(country)), 256); if (!continent || !strcmp(continent, "--")) #endif /* USE_GEOIP */ ircd_strncpy((char *)&cli_continentname(cptr), "Unknown", 8); #ifdef USE_GEOIP else ircd_strncpy((char *)&cli_continentname(cptr), geoip_continent_name_by_code(continent), 256); #endif /* USE_GEOIP */ SetGeoIP(cptr); }
char *output(Results results) { json_t *jsonObject = json_object(); json_t *hitsObject = json_object(); json_t *visitsObject = json_object(); json_t *continentsArray = json_array(); json_t *countriesArray = json_array(); json_t *hoursArray = json_array(); json_t *httpStatusArray = json_array(); json_t *methodsArray = json_array(); json_t *protocolsArray = json_array(); for (int loop=0; loop<CONTINENTS; loop++) { if (results.continents[loop]) { json_array_append_new(continentsArray, json_pack("{s:s, s:s, s:i}", "data", continentsId[loop], "name", continentsNames[loop], "hits", results.continents[loop])); } } for (int loop=0; loop<COUNTRIES; loop++) { if (results.countries[loop]) { json_array_append_new(countriesArray, json_pack("{s:s, s:s, s:i}", "data", GeoIP_code_by_id(loop), "name", GeoIP_name_by_id(loop), "hits", results.countries[loop])); } } for (int loop=0; loop<24; loop++) { if (results.hours[loop]) { json_array_append_new(hoursArray, json_pack("{s:i, s:i}", "data", loop, "hits", results.hours[loop])); } } for (int loop=0; loop<STATUS_CODE_MAX; loop++) { if (results.status[loop]) { json_array_append_new(httpStatusArray, json_pack("{s:i, s:i}", "data", loop, "hits", results.status[loop])); } } for (int loop=0; loop<METHODS; loop++) { if (results.methods[loop]) { json_array_append_new(methodsArray, json_pack("{s:s, s:i}", "data", methods[loop], "hits", results.methods[loop])); } } for (int loop=0; loop<PROTOCOLS; loop++) { if (results.protocols[loop]) { json_array_append_new(protocolsArray, json_pack("{s:s, s:i}", "data", protocols[loop], "hits", results.protocols[loop])); } } json_object_set_new(hitsObject, "ipv4", json_integer(results.hitsIPv4)); json_object_set_new(hitsObject, "ipv6", json_integer(results.hitsIPv6)); json_object_set_new(hitsObject, "total", json_integer(results.hits)); json_object_set_new(visitsObject, "ipv4", json_integer(results.visitsIPv4)); json_object_set_new(visitsObject, "ipv6", json_integer(results.visitsIPv6)); json_object_set_new(visitsObject, "total", json_integer(results.visits)); json_object_set_new(jsonObject, "date", json_string(results.timeStamp)); json_object_set_new(jsonObject, "generator", json_string(VERSION)); json_object_set_new(jsonObject, "file_name", json_string(results.fileName)); json_object_set_new(jsonObject, "file_size", json_integer(results.fileSize)); json_object_set_new(jsonObject, "processed_lines", json_integer(results.processedLines)); json_object_set_new(jsonObject, "invalid_lines", json_integer(results.invalidLines)); json_object_set_new(jsonObject, "bandwidth", json_integer(results.bandwidth)); json_object_set_new(jsonObject, "runtime", json_real(results.runtime)); json_object_set_new(jsonObject, "hits", hitsObject); json_object_set_new(jsonObject, "visits", visitsObject); json_object_set_new(jsonObject, "continents", continentsArray); json_object_set_new(jsonObject, "countries", countriesArray); json_object_set_new(jsonObject, "hours", hoursArray); json_object_set_new(jsonObject, "methods", methodsArray); json_object_set_new(jsonObject, "protocols", protocolsArray); json_object_set_new(jsonObject, "status", httpStatusArray); return json_dumps(jsonObject, JSON_INDENT(3) | JSON_PRESERVE_ORDER); }