Esempio n. 1
0
static void startup(void *arg)
{
	struct call *call = NULL;
	ua_connect(uag_current(), &call, NULL,
			"stream", NULL, VIDMODE_ON);
	system(command);
}
Esempio n. 2
0
static void mqueue_handler(int id, void *data, void *arg)
{
	struct gtk_mod *mod = arg;
	const char *uri;
	struct call *call;
	int err;
	struct ua *ua = uag_current();
	(void)mod;

	switch ((enum gtk_mod_events)id) {

	case MQ_POPUP:
		gdk_threads_enter();
		popup_menu(mod, NULL, NULL, 0, GPOINTER_TO_UINT(data));
		gdk_threads_leave();
		break;

	case MQ_CONNECT:
		uri = data;
		err = ua_connect(ua, &call, NULL, uri, NULL, VIDMODE_ON);
		if (err) {
			gdk_threads_enter();
			warning_dialog("Call failed",
					"Connecting to \"%s\" failed.\n"
					"Error: %m", uri, err);
			gdk_threads_leave();
			break;
		}
		gdk_threads_enter();
		err = new_call_window(mod, call) == NULL;
		gdk_threads_leave();
		if (err) {
			ua_hangup(ua, call, 500, "Server Error");
		}
		break;

	case MQ_HANGUP:
		call = data;
		ua_hangup(ua, call, 0, NULL);
		break;

	case MQ_QUIT:
		ua_stop_all(false);
		break;

	case MQ_ANSWER:
		call = data;
		err = ua_answer(ua, call);
		if (err) {
			gdk_threads_enter();
			warning_dialog("Call failed",
					"Answering the call "
					"from \"%s\" failed.\n"
					"Error: %m",
					call_peername(call), err);
			gdk_threads_leave();
			break;
		}

		gdk_threads_enter();
		err = new_call_window(mod, call) == NULL;
		gdk_threads_leave();
		if (err) {
			ua_hangup(ua, call, 500, "Server Error");
		}
		break;

	case MQ_SELECT_UA:
		ua = data;
		uag_current_set(ua);
		break;
	}
}
Esempio n. 3
0
static int cmd_contact(struct re_printf *pf, void *arg)
{
    const struct cmd_arg *carg = arg;
    struct contacts *contacts = baresip_contacts();
    struct contact *cnt = NULL;
    struct pl dname, user, pl;
    struct le *le;
    int err = 0;

    pl_set_str(&pl, carg->prm);

    dname.l = user.l = pl.l;

    err |= re_hprintf(pf, "\n");

    for (le = list_head(contact_list(contacts)); le; le = le->next) {

        struct contact *c = le->data;

        dname.p = contact_addr(c)->dname.p;
        user.p  = contact_addr(c)->uri.user.p;

        /* if displayname is set, try to match the displayname
         * otherwise we try to match the username only
         */
        if (dname.p) {

            if (0 == pl_casecmp(&dname, &pl)) {
                err |= re_hprintf(pf, "%s\n", contact_str(c));
                cnt = c;
            }
        }
        else if (user.p) {

            if (0 == pl_casecmp(&user, &pl)) {
                err |= re_hprintf(pf, "%s\n", contact_str(c));
                cnt = c;
            }
        }
    }

    if (!cnt)
        err |= re_hprintf(pf, "(no matches)\n");

    if (carg->complete && cnt) {

        switch (carg->key) {

        case '|':
            err = ua_connect(uag_current(), NULL, NULL,
                             contact_str(cnt), NULL, VIDMODE_ON);
            if (err) {
                warning("contact: ua_connect failed: %m\n",
                        err);
            }
            break;

        case '=':
            chat_peer = contact_str(cnt);
            (void)re_hprintf(pf, "Selected chat peer: %s\n",
                             chat_peer);
            re_snprintf(cmd_desc, sizeof(cmd_desc),
                        "Send MESSAGE to %s", chat_peer);
            break;

        default:
            break;
        }
    }

    return err;
}