Exemplo n.º 1
0
void OtrSessionService::endSession(const Contact &contact)
{
    if (!AppOpsService || !OpDataFactory || !UserStateService)
        return;

    OtrOpData opData = OpDataFactory->opDataForContact(contact);
    otrl_message_disconnect_all_instances(
        UserStateService->userState(), AppOpsService->appOps(), &opData, qPrintable(contact.contactAccount().id()),
        qPrintable(contact.contactAccount().protocolName()), qPrintable(contact.id()));

    emit goneInsecure(contact);
}
Exemplo n.º 2
0
void input_stop_otr(char *arg) {
    if (conn->conn == NULL)
        return;

    printf("\n");
    b_echostr_s();
    struct BuddyList *buddy = find_buddy(arg);
    if (buddy) {
        if (buddy->otr == 1) {
            otrl_message_disconnect_all_instances(userstate, &ui_ops, NULL,
                                                  conn->username, otr_proto, buddy->sn);
            buddy->otr = 0;
            printf("[OTR] Ending OTR session with %s\n", buddy->sn);
        } else {
            printf("[OTR] No OTR session found with %s\n", buddy->sn);
        }
    } else {
        printf("[OTR] Buddy not found: %s\n", arg);
    }
}
Exemplo n.º 3
0
/* PROTO */
void
buddy_offline(void *c, const char *who)
{
	char           *sname;
	int             found = 0;
	struct BuddyList *trav;

	sname = simplify_sn(who);

	trav = buddylist;
	while (trav != NULL) {
		if (strcmp(trav->sn, sname) == 0) {
			found = 1;

			if (trav->otr == 1) {
				otrl_message_disconnect_all_instances(userstate, &ui_ops, NULL,
      	                	conn->username, otr_proto, trav->sn);
             			trav->otr = 0;
                        	trav->otr_context = NULL;
                        	printf("[OTR] Ending OTR session with %s\n", trav->sn);
			}

			if (trav->prev == NULL) {
				buddylist = buddylist->next;
				if (buddylist != NULL)
					buddylist->prev = NULL;
				free(trav->sn);
				free(trav->formattedsn);
				free(trav);
				break;
			} else {
				trav->prev->next = trav->next;
				if (trav->next != NULL)
					trav->next->prev = trav->prev;
				free(trav->sn);
				free(trav->formattedsn);
				free(trav);
				break;
			}
		}
		trav = trav->next;
	}

	if (!found) {
		free(sname);
		return;
	}
	conn->buddiesonline--;

	if (conn->squelchconnect) {
		free(sname);
		return;
	}
	eraseline();
	b_echostr();

	if (conn->timestamps) {
		putchar(' ');
		addts();
	}
	set_color(COLOR_BUDDY_SIGNOFF);
	printf(" %s ", who);
	set_color(0);

	printf("has signed off.\n");
	log_event(EVENT_SIGNOFF, sname, NULL);
	free(sname);
	show_prompt();
}