コード例 #1
0
ファイル: xmsg.c プロジェクト: dmilith/ekg2-bsd
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;
}
コード例 #2
0
ファイル: dcc.c プロジェクト: hiciu/ekg2
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;
}
コード例 #3
0
ファイル: jabber_dcc.c プロジェクト: hiciu/ekg2
/* 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);
}
コード例 #4
0
ファイル: dbus-pcbmain.c プロジェクト: majenkotech/pcb
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);
    }
}
コード例 #5
0
ファイル: plugins.c プロジェクト: dmilith/ekg2-bsd
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;
}
コード例 #6
0
ファイル: dcc.c プロジェクト: hiciu/ekg2
/*
 * 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;
}
コード例 #7
0
ファイル: command.c プロジェクト: dylex/blink
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;
}
コード例 #8
0
ファイル: stuff.c プロジェクト: dmilith/ekg2-bsd
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);
}
コード例 #9
0
ファイル: dispatch.c プロジェクト: gdhh/ffs
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;
}
コード例 #10
0
ファイル: menu.c プロジェクト: annebardtke/geany-plugins
static void on_popup_watch(G_GNUC_UNUSED const MenuItem *menu_item)
{
	gchar *expr = utils_get_default_selection();
	watch_add(expr);
	g_free(expr);
}