summaryrefslogtreecommitdiff
path: root/otr/dllmain.cpp
diff options
context:
space:
mode:
authorsje <sje@4f64403b-2f21-0410-a795-97e2b3489a10>2007-07-31 02:59:42 +0000
committersje <sje@4f64403b-2f21-0410-a795-97e2b3489a10>2007-07-31 02:59:42 +0000
commit4d932ed5aae303c8f01983aced9280aa1c1f563b (patch)
tree6075f25b3514c2e8eb37cde2499b62c2314fad2b /otr/dllmain.cpp
parentc0c5fb2fa96eb28717c34ef20d1e38132782264e (diff)
set context hContact when fingerprints loaded - avoid use of inefficient 'find_contact' function
git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@313 4f64403b-2f21-0410-a795-97e2b3489a10
Diffstat (limited to 'otr/dllmain.cpp')
-rw-r--r--otr/dllmain.cpp27
1 files changed, 18 insertions, 9 deletions
diff --git a/otr/dllmain.cpp b/otr/dllmain.cpp
index cd99563..c3f39b3 100644
--- a/otr/dllmain.cpp
+++ b/otr/dllmain.cpp
@@ -177,8 +177,15 @@ void SetEncryptionStatus(HANDLE hContact, bool encrypted) {
// OTR stuff
///////////////////////////////////////////////
+void set_context_contact(void *data, ConnContext *context) {
+ HANDLE hContact = get_contact(context->protocol, context->username);
+ context->app_data = hContact;
+}
+
void add_appdata(void *data, ConnContext *context) {
- if(context) context->app_data = data; // data is hContact
+ if(context) {
+ context->app_data = data; // data is hContact
+ }
}
void lib_cs_lock() {
@@ -496,22 +503,24 @@ void Disconnect(ConnContext *context) {
void CALLBACK ClearFinishedSessions(HWND, UINT, UINT, DWORD) {
KillTimer(0, TIMER_ID_CLEAR_FINISHED);
+ lib_cs_lock();
//PUShowMessage("Clearing finished sessions", SM_NOTIFY);
HANDLE hContact;
ConnContext *context = otr_user_state->context_root;
while(context) {
if(context->msgstate == OTRL_MSGSTATE_FINISHED) {
- //hContact = context->app_data; // why is this broken?
- hContact = get_contact(context->protocol, context->username);
- SetEncryptionStatus(hContact, false);
- //PUShowMessage("Cleared a finished session", SM_NOTIFY);
-
- lib_cs_lock();
+ hContact = context->app_data;
+ //hContact = get_contact(context->protocol, context->username);
+ if(hContact) {
+ SetEncryptionStatus(hContact, false);
+ //PUShowMessage("Cleared a finished session", SM_NOTIFY);
+ } //else
+ //PUShowMessage("Cleared a finished session - but hCcontact is null", SM_NOTIFY);
otrl_context_force_plaintext(context);
- lib_cs_unlock();
}
context = context->next;
}
+ lib_cs_unlock();
}
void ResetFinishedTimer() {
@@ -1203,7 +1212,7 @@ int IconPressed(WPARAM wParam, LPARAM lParam) {
void ReadPrivkeyFiles() {
lib_cs_lock();
otrl_privkey_read(otr_user_state, private_key_filename);
- otrl_privkey_read_fingerprints(otr_user_state, fingerprint_store_filename, 0, 0);
+ otrl_privkey_read_fingerprints(otr_user_state, fingerprint_store_filename, set_context_contact, 0);
lib_cs_unlock();
}