PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB`/* * ProFTPD - FTP server daemon * Copyright (c) 2003-2016 The ProFTPD Project team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA. * * As a special exemption, The ProFTPD Project team and other respective * copyright holders give permission to link this program with OpenSSL, and * distribute the resulting executable, without including the source code for * OpenSSL in the source distribution. */ /* Event management */ #ifndef PR_EVENT_H #define PR_EVENT_H /* Register a handler for the given event. The registered handler * callback function takes two arguments: a pointer to some event-specific * data and a pointer to some user-defined data. This user-defined data * is set as the last argument in this registration function, and may be * NULL. * * The return value is zero if the registration succeeded, and -1 if * there was an error (in which case, errno will be set appropriately). * * Note that the registered event name is assumed to be a string constant; * the Event API stores a pointer to the given string, not a duplicate * of it. */ int pr_event_register(module *m, const char *event, void (*cb)(const void *, void *), void *user_data); /* Remove the given event handler from the event registration lists. The * return value is zero if successful, and -1 if there was an error (in * which case, errno will be set appropriately). * * If the module pointer is non-NULL, the event handler being unregistered * must have been registered by that module. If the event name is * non-NULL, then only the handler for that specific event is unregistered; * otherwise, all events for the given module will be unregistered. If the * callback pointer is non-NULL, the event handler being unregistered must be * that specific handler. * * This arrangement means that it is possible, though considered terribly * impolite, for the caller to unregister all handlers for a given event, * regardless of registree, using: * * pr_event_unregister(NULL, event_name, NULL); * * Although rare, there are cases where this kind of blanket unregistration * is necessary. More common will be the case where a module needs to * unregister all of its event listeners at once: * * pr_event_unregister(&my_module, NULL, NULL); */ int pr_event_unregister(module *m, const char *event, void (*cb)(const void *, void *)); /* Generate an event. The named event is dispatched to any handlers that * have registered an interest in handling this event. Any event-specific * data is sent to the registered handlers. */ void pr_event_generate(const char *event, const void *event_data); /* Returns the number of registered listeners for the given event, * or -1 (with errno set appropriately) if there was an error. */ int pr_event_listening(const char *event); /* Dump Events information. */ void pr_event_dump(void (*)(const char *, ...)); #endif /* PR_EVENT_H */