[pkg-otr-team] [irssi-plugin-otr] 68/167: * dialogs.c: * dialogs.h: * gtk-dialog.c: * otr-plugin.c: Use the new SMP event callback instead of handling the SMP state machine ourselves.
Holger Levsen
holger at moszumanska.debian.org
Mon Mar 3 21:55:33 UTC 2014
This is an automated email from the git hooks/post-receive script.
holger pushed a commit to tag 4.0.0
in repository irssi-plugin-otr.
commit 24518597dd2bb48544a99034e2623cb9462b955b
Author: cypherpunk <cypherpunk>
Date: Wed Jul 2 15:38:35 2008 +0000
* dialogs.c:
* dialogs.h:
* gtk-dialog.c:
* otr-plugin.c: Use the new SMP event callback instead of
handling the SMP state machine ourselves.
---
ChangeLog | 8 +++++
dialogs.c | 5 +--
dialogs.h | 6 ++--
gtk-dialog.c | 4 +--
otr-plugin.c | 104 ++++++++++++++++++-----------------------------------------
5 files changed, 49 insertions(+), 78 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 771a2d1..64e5ff6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-07-02
+
+ * dialogs.c:
+ * dialogs.h:
+ * gtk-dialog.c:
+ * otr-plugin.c: Use the new SMP event callback instead of
+ handling the SMP state machine ourselves.
+
2008-06-19
* Makefile.static: Forgot to add tooltipmenu.o to
diff --git a/dialogs.c b/dialogs.c
index d36ee02..3f568ef 100644
--- a/dialogs.c
+++ b/dialogs.c
@@ -153,9 +153,10 @@ void otrg_dialog_socialist_millionaires_q(ConnContext *context,
}
/* Update the status of an ongoing socialist millionaires protocol. */
-void otrg_dialog_update_smp(ConnContext *context, double progress_level)
+void otrg_dialog_update_smp(ConnContext *context, OtrlSMPEvent smp_event,
+ double progress_level)
{
- ui_ops->update_smp(context, progress_level);
+ ui_ops->update_smp(context, smp_event, progress_level);
}
/* Call this when a context transitions to ENCRYPTED. */
diff --git a/dialogs.h b/dialogs.h
index 1fad217..a8de431 100644
--- a/dialogs.h
+++ b/dialogs.h
@@ -62,7 +62,8 @@ typedef struct {
void (*socialist_millionaires)(ConnContext *context, char *question,
gboolean responder);
- void (*update_smp)(ConnContext *context, double progress_level);
+ void (*update_smp)(ConnContext *context, OtrlSMPEvent smp_event,
+ double progress_level);
void (*connected)(ConnContext *context);
@@ -146,7 +147,8 @@ void otrg_dialog_socialist_millionaires_q(ConnContext *context,
char *question);
/* Update the status of an ongoing socialist millionaires protocol. */
-void otrg_dialog_update_smp(ConnContext *context, double progress_level);
+void otrg_dialog_update_smp(ConnContext *context, OtrlSMPEvent smp_event,
+ double progress_level);
/* Call this when a context transitions to ENCRYPTED. */
void otrg_dialog_connected(ConnContext *context);
diff --git a/gtk-dialog.c b/gtk-dialog.c
index 65250a0..7bd32bf 100644
--- a/gtk-dialog.c
+++ b/gtk-dialog.c
@@ -1441,7 +1441,7 @@ static void otrg_gtk_dialog_socialist_millionaires(ConnContext *context,
* protocol. Progress_level is a percentage, from 0.0 (aborted) to
* 1.0 (complete). Any other value represents an intermediate state. */
static void otrg_gtk_dialog_update_smp(ConnContext *context,
- double progress_level)
+ OtrlSMPEvent smp_event, double progress_level)
{
PurpleConversation *conv = otrg_plugin_context_to_conv(context, 0);
GtkProgressBar *bar;
@@ -1473,7 +1473,7 @@ static void otrg_gtk_dialog_update_smp(ConnContext *context,
gtk_dialog_set_default_response(GTK_DIALOG(dialog),
GTK_RESPONSE_ACCEPT);
- if (context->smstate->sm_prog_state == OTRL_SMP_PROG_SUCCEEDED) {
+ if (smp_event == OTRL_SMPEVENT_SUCCESS) {
if (context->active_fingerprint->trust &&
context->active_fingerprint->trust[0]) {
gtk_label_set_text(GTK_LABEL(smp_data->smp_progress_label),
diff --git a/otr-plugin.c b/otr-plugin.c
index 0d801b6..f901b50 100644
--- a/otr-plugin.c
+++ b/otr-plugin.c
@@ -308,6 +308,35 @@ static int max_message_size_cb(void *opdata, ConnContext *context)
return *((int*)lookup_result);
}
+static void handle_smp_event(void *opdata, OtrlSMPEvent smp_event,
+ ConnContext *context, unsigned short progress_percent,
+ char *question)
+{
+ if (!context) return;
+ switch (smp_event)
+ {
+ case OTRL_SMPEVENT_ASK_FOR_SECRET :
+ otrg_dialog_socialist_millionaires(context);
+ break;
+ case OTRL_SMPEVENT_ASK_FOR_ANSWER :
+ otrg_dialog_socialist_millionaires_q(context, question);
+ break;
+ case OTRL_SMPEVENT_CHEATED :
+ otrg_plugin_abort_smp(context);
+ /* FALLTHROUGH */
+ case OTRL_SMPEVENT_IN_PROGRESS :
+ case OTRL_SMPEVENT_SUCCESS :
+ case OTRL_SMPEVENT_FAILURE :
+ case OTRL_SMPEVENT_ABORT :
+ otrg_dialog_update_smp(context,
+ smp_event, ((gdouble)progress_percent)/100.0);
+ break;
+ case OTRL_SMPEVENT_ERROR :
+ otrg_plugin_abort_smp(context);
+ break;
+ }
+}
+
static OtrlMessageAppOps ui_ops = {
policy_cb,
create_privkey_cb,
@@ -326,7 +355,9 @@ static OtrlMessageAppOps ui_ops = {
log_message_cb,
max_message_size_cb,
NULL, /* account_name */
- NULL /* account_name_free */
+ NULL, /* account_name_free */
+ NULL, /* received_symkey */
+ handle_smp_event
};
static void process_sending_im(PurpleAccount *account, char *who,
@@ -440,8 +471,6 @@ static gboolean process_receiving_im(PurpleAccount *account, char **who,
gboolean res;
const char *accountname;
const char *protocol;
- ConnContext *context;
- NextExpectedSMP nextMsg;
if (!who || !*who || !message || !*message)
return 0;
@@ -471,75 +500,6 @@ static gboolean process_receiving_im(PurpleAccount *account, char **who,
otrg_ui_update_keylist();
}
- /* Keep track of our current progress in the Socialist Millionaires'
- * Protocol. */
- context = otrl_context_find(otrg_plugin_userstate, username,
- accountname, protocol, 0, NULL, NULL, NULL);
- if (context) {
- nextMsg = context->smstate->nextExpected;
-
- if (context->smstate->sm_prog_state == OTRL_SMP_PROG_CHEATED) {
- otrg_plugin_abort_smp(context);
- otrg_dialog_update_smp(context, 0.0);
- context->smstate->nextExpected = OTRL_SMP_EXPECT1;
- context->smstate->sm_prog_state = OTRL_SMP_PROG_OK;
- } else {
- tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP1Q);
- if (tlv) {
- if (nextMsg != OTRL_SMP_EXPECT1)
- otrg_plugin_abort_smp(context);
- else {
- char *question = (char *)tlv->data;
- char *eoq = memchr(question, '\0', tlv->len);
- if (eoq) {
- otrg_dialog_socialist_millionaires_q(context,
- question);
- }
- }
- }
- tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP1);
- if (tlv) {
- if (nextMsg != OTRL_SMP_EXPECT1)
- otrg_plugin_abort_smp(context);
- else {
- otrg_dialog_socialist_millionaires(context);
- }
- }
- tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP2);
- if (tlv) {
- if (nextMsg != OTRL_SMP_EXPECT2)
- otrg_plugin_abort_smp(context);
- else {
- otrg_dialog_update_smp(context, 0.6);
- context->smstate->nextExpected = OTRL_SMP_EXPECT4;
- }
- }
- tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP3);
- if (tlv) {
- if (nextMsg != OTRL_SMP_EXPECT3)
- otrg_plugin_abort_smp(context);
- else {
- otrg_dialog_update_smp(context, 1.0);
- context->smstate->nextExpected = OTRL_SMP_EXPECT1;
- }
- }
- tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP4);
- if (tlv) {
- if (nextMsg != OTRL_SMP_EXPECT4)
- otrg_plugin_abort_smp(context);
- else {
- otrg_dialog_update_smp(context, 1.0);
- context->smstate->nextExpected = OTRL_SMP_EXPECT1;
- }
- }
- tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP_ABORT);
- if (tlv) {
- otrg_dialog_update_smp(context, 0.0);
- context->smstate->nextExpected = OTRL_SMP_EXPECT1;
- }
- }
- }
-
otrl_tlv_free(tlvs);
free(username);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-otr/packages/irssi-plugin-otr.git
More information about the Pkg-otr-team
mailing list