int xmsg_plugin_init(int prio) { PLUGIN_CHECK_VER("xmsg"); #ifdef HAVE_INOTIFY if ((in_fd = inotify_init()) == -1) xerrn("unable to init inotify"); #endif /*HAVE_INOTIFY*/ xdebug("inotify fd = %d", in_fd); xmsg_plugin.params = xmsg_plugin_vars; xmsg_plugin.priv = &xmsg_priv; plugin_register(&xmsg_plugin, prio); query_connect_id(&xmsg_plugin, PROTOCOL_VALIDATE_UID, xmsg_validate_uid, NULL); query_connect_id(&xmsg_plugin, EKG_SIGUSR1, xmsg_handle_sigusr, NULL); #define XMSG_CMDFLAGS SESSION_MUSTBELONG #define XMSG_CMDFLAGS_TARGET SESSION_MUSTBELONG|COMMAND_ENABLEREQPARAMS|COMMAND_PARAMASTARGET|SESSION_MUSTBECONNECTED command_add(&xmsg_plugin, "xmsg:", "?", xmsg_inline_msg, XMSG_CMDFLAGS, NULL); command_add(&xmsg_plugin, "xmsg:chat", "!uU !", xmsg_msg, XMSG_CMDFLAGS_TARGET, NULL); command_add(&xmsg_plugin, "xmsg:connect", NULL, xmsg_connect, XMSG_CMDFLAGS, NULL); command_add(&xmsg_plugin, "xmsg:disconnect", NULL, xmsg_disconnect, XMSG_CMDFLAGS, NULL); command_add(&xmsg_plugin, "xmsg:msg", "!uU !", xmsg_msg, XMSG_CMDFLAGS_TARGET, NULL); command_add(&xmsg_plugin, "xmsg:reconnect", NULL, xmsg_reconnect, XMSG_CMDFLAGS, NULL); #undef XMSG_CMDFLAGS_TARGET #undef XMSG_CMDFLAGS #ifdef HAVE_INOTIFY variable_add(&xmsg_plugin, "max_inotifycount", VAR_INT, 1, &config_maxinotifycount, NULL, NULL, NULL); watch_add(&xmsg_plugin, in_fd, WATCH_READ, xmsg_handle_data, NULL); #endif /*HAVE_INOTIFY*/ return 0; }
static TIMER(gg_dcc_handler_timeout) { struct gg_common *gd = (struct gg_common *) data; if (type) { return 0; } debug("gg_dcc_handler_timeout() type: %d state: %d\n", gd->type, gd->state); if (gd->type == GG_SESSION_DCC7_GET) { if (gd->fd != -1) { debug("gg_dcc_handler_timeout() gd->fd: %d\n", gd->fd); /* great! */ watch_add(&gg_plugin, gd->fd, gd->check, gg_dcc7_handler, gd); /* add watch */ return -1; /* destroy timer */ } } else { if (gd->state == GG_STATE_REQUESTING_ID) { /* timeoutnelo na zadaniu id */ /* here destroy dcc */ return -1; } if (gd->state == GG_STATE_WAITING_FOR_ACCEPT) /* timeoutnelo na oczekiwnaiu na uzytkownika */ return 0; } return 0; }
/* zwraca watcha */ static watch_t *jabber_dcc_init(int port) { struct sockaddr_in sin; int fd; if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { debug_error("jabber_dcc_init() socket() FAILED (%s)\n", strerror(errno)); return NULL; } sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = g_htons(port); while (bind(fd, (struct sockaddr *) &sin, sizeof(struct sockaddr_in))) { debug_error("jabber_dcc_init() bind() port: %d FAILED (%s)\n", port, strerror(errno)); port++; if (port > 65535) { close(fd); return NULL; } sin.sin_port = g_htons(port); } if (listen(fd, 10)) { debug_error("jabber_dcc_init() listen() FAILED (%s)\n", strerror(errno)); close(fd); return NULL; } debug_function("jabber_dcc_init() SUCCESSED fd:%d port:%d\n", fd, port); jabber_dcc_port = port; jabber_dcc_fd = fd; return watch_add(&jabber_plugin, fd, WATCH_READ, jabber_dcc_handle_accept, NULL); }
static void watch_toggled (DBusWatch * dbus_watch, void *data) { /* Simply add/remove the watch completely */ if (dbus_watch_get_enabled (dbus_watch)) { watch_add (dbus_watch, data); } else { watch_remove (dbus_watch, data); } }
watch_t *watch_add_session(session_t *session, int fd, watch_type_t type, watcher_session_handler_func_t *handler) { watch_t *w; if (!session || !session->plugin) { debug_error("watch_add_session() s: 0x%x s->plugin: 0x%x\n", session, session ? session->plugin : NULL); return NULL; } w = watch_add(session->plugin, fd, type, (watcher_handler_func_t *) handler, session); w->is_session = 1; return w; }
/* * gg_dcc_socket_open() */ int gg_dcc_socket_open(int port) { if (gg_dcc_socket) return 0; if (!(gg_dcc_socket = gg_dcc_socket_create(1, port))) return -1; watch_add(&gg_plugin, gg_dcc_socket->fd, gg_dcc_socket->check, gg_dcc_handler_open, gg_dcc_socket); return 0; }
int command_init() { struct sockaddr_un sa = { AF_UNIX, COMMAND_SOCKET }; if ((Command_sock = socket(PF_UNIX, SOCK_DGRAM, 0)) < 0) return Command_sock; if (fcntl(Command_sock, F_SETFL, O_NONBLOCK) < 0 || fcntl(Command_sock, F_SETFD, FD_CLOEXEC) < 0) return -1; unlink(sa.sun_path); mode_t omask = umask(0177); int r = bind(Command_sock, (struct sockaddr *)&sa, SUN_LEN(&sa)); umask(omask); if (r < 0) return r; Command_watch.fd = Command_sock; watch_add(&Command_watch); return 0; }
EXPORTNOT int ekg_write(int fd, const char *buf, int len) { watch_t *wl = NULL; list_t l; if (fd == -1) return -1; /* first check if we have watch for this fd */ for (l = watches; l; l = l->next) { watch_t *w = l->data; if (w && w->fd == fd && w->type == WATCH_WRITE && w->buf) { wl = w; break; } } if (!wl) { /* if we have no watch, let's create it. */ /* XXX, first try write() ? */ wl = watch_add(NULL, fd, WATCH_WRITE_LINE, NULL, NULL); } return watch_write(wl, buf, len); }
int main(const int argc, const char * argv[]) { watch_t w; watch_init(&w); watch_callback_t wc = { .data = NULL, .func = NULL, }; watch_add(&w, "/dev/mqueue", IN_CREATE | IN_ATTRIB, &wc); dispatch_t d; dispatch_init(&d); dispatch_callback_t dc = { .data = NULL, .func = callback, }; dispatch_add(&d, watch_fileno(&w), EPOLLIN, &dc); dispatch_wait(&d); return 0; }
static void on_popup_watch(G_GNUC_UNUSED const MenuItem *menu_item) { gchar *expr = utils_get_default_selection(); watch_add(expr); g_free(expr); }