AnyEvent-YACurl
view release on metacpan or search on metacpan
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
EXTEND(SP, 3);
PUSHs((SV*)userp); /* XXX This is a weakened reference, will it ever be undef? */
PUSHs(sv_2mortal(newSViv(s)));
PUSHs(sv_2mortal(newSViv(what)));
PUTBACK;
call_sv(MY_CXT.watchset_fn, G_DISCARD | G_VOID);
FREETMPS;
LEAVE;
return 0;
}
int mcurl_timer_callback(CURLM* multi,
dMY_CXT;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
EXTEND(SP, 2);
PUSHs((SV*)userp); /* XXX This is a weakened reference, will it ever be undef? */
PUSHs(sv_2mortal(newSViv(timeout_ms)));
PUTBACK;
call_sv(MY_CXT.timerset_fn, G_DISCARD | G_VOID);
FREETMPS;
LEAVE;
return 0;
}
/* write callback: used for WRITEFUNCTION and HEADERFUNCTION */
{
dTHX;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
EXTEND(SP, 1);
PUSHs(sv_2mortal(newSVpvn(ptr, size*nmemb)));
PUTBACK;
call_sv((SV*)userdata, G_DISCARD | G_VOID | G_EVAL);
SPAGAIN;
maybe_warn_eval(aTHX);
PUTBACK;
FREETMPS;
LEAVE;
return size * nmemb;
}
size_t mcurl_read_callback(char *buffer,
size_t size,
size_t nitems,
dTHX;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
EXTEND(SP, 1);
PUSHs(sv_2mortal(newSViv(size * nitems)));
PUTBACK;
call_sv((SV*)userdata, G_SCALAR | G_EVAL);
SPAGAIN;
maybe_warn_eval(aTHX);
SV *data = POPs;
if (!SvOK(data)) {
/* undef. We also go here if the callback croaked... how convenient */
result = CURL_READFUNC_ABORT;
} else {
if (pvlen > size*nitems) {
warn("Read callback returned more data than allowed; aborting stream");
result = CURL_READFUNC_ABORT;
} else {
result = pvlen;
Copy(pv, buffer, pvlen, char);
}
}
PUTBACK;
FREETMPS;
LEAVE;
return result;
}
int mcurl_debug_callback(CURL *handle,
curl_infotype type,
char *data,
dTHX;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
EXTEND(SP, 2);
PUSHs(sv_2mortal(newSViv(type)));
PUSHs(sv_2mortal(newSVpvn(data, size)));
PUTBACK;
call_sv((SV*)userdata, G_DISCARD | G_VOID | G_EVAL);
SPAGAIN;
maybe_warn_eval(aTHX);
PUTBACK;
FREETMPS;
LEAVE;
return 0;
}
int mcurl_trailer_callback(struct curl_slist **output, void *userdata)
{
dTHX;
return_result = CURL_TRAILERFUNC_ABORT;
} else if (!SvROK(returned) || SvTYPE(SvRV(returned)) != SVt_PVAV) {
/* This codepath: return "something"; */
warn("Cannot convert %s to ARRAY reference", SvPV_nolen(returned));
return_result = CURL_TRAILERFUNC_ABORT;
} else {
/* This codepath: return [..trailers..]; */
*output = slist_from_av(aTHX_ *output, (AV*)SvRV(returned));
return_result = CURL_TRAILERFUNC_OK;
}
PUTBACK;
FREETMPS;
LEAVE;
return return_result;
}
int finish_request(pTHX_ AnyEvent__YACurl* client, CURL* easy, CURLcode code)
{
AnyEvent__YACurl__Response *response;
PUSHs(&PL_sv_undef);
} else {
PUSHs(&PL_sv_undef);
if (strlen(response->errbuf)) {
PUSHs(sv_2mortal(newSVpv(response->errbuf, 0)));
} else {
PUSHs(sv_2mortal(newSVpv(curl_easy_strerror(code), 0)));
}
}
PUTBACK;
call_sv(response->callback, G_DISCARD | G_VOID | G_EVAL);
SPAGAIN;
maybe_warn_eval(aTHX);
PUTBACK;
FREETMPS;
LEAVE;
/* Clean some fields we don't need anymore. We do this now instead of via DESTROY, to break
* potential reference cycles. */
SvREFCNT_dec(response->held_references);
response->held_references = NULL;
SvREFCNT_dec(response->callback);
response->callback = NULL;
update_running(aTHX_ client, running);
do_post_work(aTHX_ client);
HV*
_get_known_constants()
CODE:
RETVAL = newHV();
sv_2mortal((SV*)RETVAL); /* hehe, perl bugs! */
fill_hv_with_constants(aTHX_ RETVAL);
OUTPUT:
RETVAL
void
DESTROY(self)
SV* self
CODE:
AnyEvent__YACurl *client = sv_to_client(aTHX_ self);
if (client->last_running)
warn("Destroying with %d requests active", client->last_running);
croak("%s", curl_easy_strerror(ccode));
}
RETVAL = newSVnv(result);
} else if (opt_from_str) {
croak("Don't know what to do with curl's %d (%s)", opt, SvPV_nolen(option));
} else {
croak("Don't know what to do with curl's %d", opt);
}
OUTPUT:
RETVAL
void
DESTROY(self)
SV* self
CODE:
AnyEvent__YACurl__Response *response = sv_to_response(aTHX_ self);
if (response->easy) {
curl_easy_cleanup(response->easy);
constants.inc view on Meta::CPAN
#endif
#if LIBCURL_HAS(CURLOPT_PROXY_TLSAUTH_TYPE)
hv_stores(the_hv, "CURLOPT_PROXY_TLSAUTH_TYPE", newSViv(CURLOPT_PROXY_TLSAUTH_TYPE));
#endif
#if LIBCURL_HAS(CURLOPT_PROXY_TLSAUTH_USERNAME)
hv_stores(the_hv, "CURLOPT_PROXY_TLSAUTH_USERNAME", newSViv(CURLOPT_PROXY_TLSAUTH_USERNAME));
#endif
#if LIBCURL_HAS(CURLOPT_PROXY_TRANSFER_MODE)
hv_stores(the_hv, "CURLOPT_PROXY_TRANSFER_MODE", newSViv(CURLOPT_PROXY_TRANSFER_MODE));
#endif
#if LIBCURL_HAS(CURLOPT_PUT)
hv_stores(the_hv, "CURLOPT_PUT", newSViv(CURLOPT_PUT));
#endif
#if LIBCURL_HAS(CURLOPT_QUICK_EXIT)
hv_stores(the_hv, "CURLOPT_QUICK_EXIT", newSViv(CURLOPT_QUICK_EXIT));
#endif
#if LIBCURL_HAS(CURLOPT_QUOTE)
hv_stores(the_hv, "CURLOPT_QUOTE", newSViv(CURLOPT_QUOTE));
#endif
#if LIBCURL_HAS(CURLOPT_RANDOM_FILE)
hv_stores(the_hv, "CURLOPT_RANDOM_FILE", newSViv(CURLOPT_RANDOM_FILE));
#endif
constants.inc view on Meta::CPAN
#endif
#if LIBCURL_HAS(CURLUE_BAD_SLASHES)
hv_stores(the_hv, "CURLUE_BAD_SLASHES", newSViv(CURLUE_BAD_SLASHES));
#endif
#if LIBCURL_HAS(CURLUE_BAD_USER)
hv_stores(the_hv, "CURLUE_BAD_USER", newSViv(CURLUE_BAD_USER));
#endif
#if LIBCURL_HAS(CURLUE_LACKS_IDN)
hv_stores(the_hv, "CURLUE_LACKS_IDN", newSViv(CURLUE_LACKS_IDN));
#endif
#if LIBCURL_HAS(CURLUE_MALFORMED_INPUT)
hv_stores(the_hv, "CURLUE_MALFORMED_INPUT", newSViv(CURLUE_MALFORMED_INPUT));
#endif
#if LIBCURL_HAS(CURLUE_NO_FRAGMENT)
hv_stores(the_hv, "CURLUE_NO_FRAGMENT", newSViv(CURLUE_NO_FRAGMENT));
#endif
#if LIBCURL_HAS(CURLUE_NO_HOST)
hv_stores(the_hv, "CURLUE_NO_HOST", newSViv(CURLUE_NO_HOST));
#endif
#if LIBCURL_HAS(CURLUE_NO_OPTIONS)
hv_stores(the_hv, "CURLUE_NO_OPTIONS", newSViv(CURLUE_NO_OPTIONS));
#endif
libcurl-symbols.h view on Meta::CPAN
#define CURLOPT_PROXY_TLSAUTH_TYPE_FIRST 0x073400 /* Added in 7.52.0 */
#define CURLOPT_PROXY_TLSAUTH_USERNAME_FIRST 0x073400 /* Added in 7.52.0 */
#define CURLOPT_PROXY_TRANSFER_MODE_FIRST 0x071200 /* Added in 7.18.0 */
#define CURLOPT_PROXYAUTH_FIRST 0x070a07 /* Added in 7.10.7 */
#define CURLOPT_PROXYHEADER_FIRST 0x072500 /* Added in 7.37.0 */
#define CURLOPT_PROXYPASSWORD_FIRST 0x071301 /* Added in 7.19.1 */
#define CURLOPT_PROXYPORT_FIRST 0x070100 /* Added in 7.1 */
#define CURLOPT_PROXYTYPE_FIRST 0x070a00 /* Added in 7.10 */
#define CURLOPT_PROXYUSERNAME_FIRST 0x071301 /* Added in 7.19.1 */
#define CURLOPT_PROXYUSERPWD_FIRST 0x070100 /* Added in 7.1 */
#define CURLOPT_PUT_FIRST 0x070100 /* Added in 7.1 */
#define CURLOPT_QUOTE_FIRST 0x070100 /* Added in 7.1 */
#define CURLOPT_RANDOM_FILE_FIRST 0x070700 /* Added in 7.7 */
#define CURLOPT_RANGE_FIRST 0x070100 /* Added in 7.1 */
#define CURLOPT_READDATA_FIRST 0x070907 /* Added in 7.9.7 */
#define CURLOPT_READFUNCTION_FIRST 0x070100 /* Added in 7.1 */
#define CURLOPT_REDIR_PROTOCOLS_FIRST 0x071304 /* Added in 7.19.4 */
#define CURLOPT_REDIR_PROTOCOLS_STR_FIRST 0x075500 /* Added in 7.85.0 */
#define CURLOPT_REFERER_FIRST 0x070100 /* Added in 7.1 */
#define CURLOPT_REQUEST_TARGET_FIRST 0x073700 /* Added in 7.55.0 */
#define CURLOPT_RESOLVE_FIRST 0x071503 /* Added in 7.21.3 */
libcurl-symbols.h view on Meta::CPAN
#define CURLUE_BAD_LOGIN_FIRST 0x075100 /* Added in 7.81.0 */
#define CURLUE_BAD_PARTPOINTER_FIRST 0x073e00 /* Added in 7.62.0 */
#define CURLUE_BAD_PASSWORD_FIRST 0x075100 /* Added in 7.81.0 */
#define CURLUE_BAD_PATH_FIRST 0x075100 /* Added in 7.81.0 */
#define CURLUE_BAD_PORT_NUMBER_FIRST 0x073e00 /* Added in 7.62.0 */
#define CURLUE_BAD_QUERY_FIRST 0x075100 /* Added in 7.81.0 */
#define CURLUE_BAD_SCHEME_FIRST 0x075100 /* Added in 7.81.0 */
#define CURLUE_BAD_SLASHES_FIRST 0x075100 /* Added in 7.81.0 */
#define CURLUE_BAD_USER_FIRST 0x075100 /* Added in 7.81.0 */
#define CURLUE_LACKS_IDN_FIRST 0x075800 /* Added in 7.88.0 */
#define CURLUE_MALFORMED_INPUT_FIRST 0x073e00 /* Added in 7.62.0 */
#define CURLUE_NO_FRAGMENT_FIRST 0x073e00 /* Added in 7.62.0 */
#define CURLUE_NO_HOST_FIRST 0x073e00 /* Added in 7.62.0 */
#define CURLUE_NO_OPTIONS_FIRST 0x073e00 /* Added in 7.62.0 */
#define CURLUE_NO_PASSWORD_FIRST 0x073e00 /* Added in 7.62.0 */
#define CURLUE_NO_PORT_FIRST 0x073e00 /* Added in 7.62.0 */
#define CURLUE_NO_QUERY_FIRST 0x073e00 /* Added in 7.62.0 */
#define CURLUE_NO_SCHEME_FIRST 0x073e00 /* Added in 7.62.0 */
#define CURLUE_NO_USER_FIRST 0x073e00 /* Added in 7.62.0 */
#define CURLUE_NO_ZONEID_FIRST 0x075100 /* Added in 7.81.0 */
#define CURLUE_OK_FIRST 0x073e00 /* Added in 7.62.0 */
PTR2ul|5.007001||p
PTRV|5.006000||p
PUSHMARK|||
PUSH_MULTICALL||5.014000|
PUSHi|||
PUSHmortal|5.009002||p
PUSHn|||
PUSHp|||
PUSHs|||
PUSHu|5.004000||p
PUTBACK|||
PerlIO_clearerr||5.007003|
PerlIO_close||5.007003|
PerlIO_context_layers||5.009004|
PerlIO_eof||5.007003|
PerlIO_error||5.007003|
PerlIO_fileno||5.007003|
PerlIO_fill||5.007003|
PerlIO_flush||5.007003|
PerlIO_get_base||5.007003|
PerlIO_get_bufsiz||5.007003|
{
dSP;
SV* sv = newSVpv(p, 0);
PUSHMARK(sp);
eval_sv(sv, G_SCALAR);
SvREFCNT_dec(sv);
SPAGAIN;
sv = POPs;
PUTBACK;
if (croak_on_error && SvTRUE(GvSV(errgv)))
croak(SvPVx(GvSV(errgv), na));
return sv;
}
#endif
#endif
( run in 0.420 second using v1.01-cache-2.11-cpan-4e96b696675 )