virtual EModRet OnModuleLoading(const CString& sModName, const CString& sArgs, CModInfo::EModuleType eType, bool& bSuccess, CString& sRetMsg) { EModRet result = HALT; PSTART; PUSH_STR(sModName); PUSH_STR(sArgs); mXPUSHi(eType); PUSH_PTR(CUser*, GetUser()); PUSH_PTR(CIRCNetwork*, GetNetwork()); PCALL("ZNC::Core::LoadModule"); if (SvTRUE(ERRSV)) { sRetMsg = PString(ERRSV); bSuccess = false; result = HALT; DEBUG("Perl ZNC::Core::LoadModule died: " << sRetMsg); } else if (ret < 1 || 2 < ret) { sRetMsg = "Error: Perl ZNC::Core::LoadModule returned " + CString(ret) + " values."; bSuccess = false; result = HALT; } else { ELoadPerlMod eLPM = static_cast<ELoadPerlMod>(SvUV(ST(0))); if (Perl_NotFound == eLPM) { result = CONTINUE; // Not a Perl module } else { sRetMsg = PString(ST(1)); result = HALT; bSuccess = eLPM == Perl_Loaded; } } PEND; return result; }
void CPerlSocket::ReadData(const char *data, size_t len) { CPerlModule* pMod = AsPerlModule(GetModule()); if (pMod) { SOCKSTART; PUSH_STR("OnReadData"); XPUSHs(sv_2mortal(newSVpvn(data, len))); mXPUSHi(len); SOCKCBCHECK(); } }
Csock* CPerlSocket::GetSockObj(const CString& sHost, unsigned short uPort) { CPerlModule* pMod = AsPerlModule(GetModule()); Csock* result = NULL; if (pMod) { SOCKSTART; PUSH_STR("_Accepted"); PUSH_STR(sHost); mXPUSHi(uPort); SOCKCBCHECK( result = SvToPtr<CPerlSocket>("CPerlSocket*")(ST(0)); ); }
void tmh_cb_doc_footer(hoedown_buffer *ob, int inline_render, const hoedown_renderer_data *data) { dTHX; dSP; bool is_null = 0; SV** rcb = hv_fetchs((HV*)data->opaque, "doc_footer", 0); if (!rcb) { return; } CB_HEADER("doc_footer"); mXPUSHi(inline_render); CB_FOOTER; }
void tmh_cb_listitem(hoedown_buffer *ob, const hoedown_buffer *text, hoedown_list_flags flags, const hoedown_renderer_data *data) { dTHX; dSP; bool is_null = 0; SV** rcb = hv_fetchs((HV*)data->opaque, "listitem", 0); if (!rcb) { return; } CB_HEADER("listitem"); PUSHBUF(text); mXPUSHi(flags); CB_FOOTER; }
void tmh_cb_header(hoedown_buffer *ob, const hoedown_buffer *text, int level, const hoedown_renderer_data *data) { dTHX; dSP; bool is_null = 0; SV** rcb = hv_fetchs((HV*)data->opaque, "header", 0); if (!rcb) { return; } CB_HEADER("header"); PUSHBUF(text); mXPUSHi(level); CB_FOOTER; }
void tmh_cb_table_cell(hoedown_buffer *ob, const hoedown_buffer *content, hoedown_table_flags flags, const hoedown_renderer_data *data) { dTHX; dSP; bool is_null = 0; SV** rcb = hv_fetchs((HV*)data->opaque, "table_cell", 0); if (!rcb) { return; } CB_HEADER("table_cell"); PUSHBUF(content); mXPUSHi(flags); CB_FOOTER; }
int tmh_cb_math(hoedown_buffer *ob, const hoedown_buffer *text, int displaymode, const hoedown_renderer_data *data) { dTHX; dSP; bool is_null = 0; SV** rcb = hv_fetchs((HV*)data->opaque, "math", 0); if (!rcb) { return 0; } CB_HEADER("math"); PUSHBUF(text); mXPUSHi(displaymode); CB_FOOTER; return is_null ? 0 : 1; }
int tmh_cb_autolink(hoedown_buffer *ob, const hoedown_buffer *link, hoedown_autolink_type type, const hoedown_renderer_data *data) { dTHX; dSP; bool is_null = 0; SV** rcb = hv_fetchs((HV*)data->opaque, "autolink", 0); if (!rcb) { return 0; } CB_HEADER("autolink"); PUSHBUF(link); mXPUSHi(type); CB_FOOTER; return is_null ? 0 : 1; }