vmod_geoip2__init(VRT_CTX, struct vmod_geoip2_geoip2 **vpp, const char *vcl_name, VCL_STRING filename) { struct vmod_geoip2_geoip2 *vp; MMDB_s mmdb; int error; (void)vcl_name; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); AN(vpp); AZ(*vpp); VSL(SLT_Debug, 0, "geoip2.geoip2: Using maxminddb %s", MMDB_lib_version()); error = MMDB_open(filename, MMDB_MODE_MMAP, &mmdb); if (error != MMDB_SUCCESS) { VSL(SLT_Error, 0, "geoip2.geoip2: %s", MMDB_strerror(error)); return; } ALLOC_OBJ(vp, VMOD_GEOIP2_MAGIC); AN(vp); *vpp = vp; vp->mmdb = mmdb; }
void gdgeoip2_init(void) { unsigned x, y, z; if(sscanf(MMDB_lib_version(), "%3u.%3u.%3u", &x, &y, &z) == 3) if(x > 1 || (x == 1 && (y > 1 || (y == 1 && z > 4)))) libmmdb_gt_114 = true; }
CAMLprim value mmdb_ml_version(void) { return caml_copy_string(MMDB_lib_version()); }