SEXP R_handle_reset(SEXP ptr){ //reset all fields reference *ref = get_ref(ptr); set_form(ref, NULL); set_headers(ref, NULL); curl_easy_reset(ref->handle); //restore default settings set_handle_defaults(ref); return ScalarLogical(1); }
SEXP R_new_handle(){ reference *ref = calloc(1, sizeof(reference)); ref->refCount = 1; ref->handle = curl_easy_init(); set_handle_defaults(ref); SEXP ptr = PROTECT(R_MakeExternalPtr(ref, R_NilValue, R_NilValue)); R_RegisterCFinalizerEx(ptr, fin_handle, 1); setAttrib(ptr, R_ClassSymbol, mkString("curl_handle")); UNPROTECT(1); ref->handleptr = ptr; return ptr; }
SEXP R_new_handle(){ reference *ref = calloc(1, sizeof(reference)); ref->refCount = 1; ref->handle = curl_easy_init(); total_handles++; set_handle_defaults(ref); SEXP prot = PROTECT(allocVector(VECSXP, 5)); //for protecting callback functions SEXP ptr = PROTECT(R_MakeExternalPtr(ref, R_NilValue, prot)); R_RegisterCFinalizerEx(ptr, fin_handle, TRUE); setAttrib(ptr, R_ClassSymbol, mkString("curl_handle")); UNPROTECT(2); ref->handleptr = ptr; return ptr; }