Store otr_userstates at the right place and create it the right way.

This fixes the crash when creating a new account, which made Gajim
unusable on systems where it never ran before.
This commit is contained in:
js 2008-05-10 21:29:47 +00:00
parent 04725e830c
commit 4eeb96368b
8 changed files with 42 additions and 39 deletions

View file

@ -63,6 +63,10 @@
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#undef LT_OBJDIR
/* Name of package */
#undef PACKAGE

View file

@ -1208,7 +1208,7 @@ class ChatControl(ChatControlBase):
def update_otr(self, print_status=False):
# retrieve the OTR context from the chat's contact data
ctx = gajim.otr_module.otrl_context_find(gajim.otr_userstates[self.account],
ctx = gajim.otr_module.otrl_context_find(gajim.connections[self.account].otr_userstates,
self.contact.get_full_jid().encode(),
gajim.get_jid_from_account(self.account).encode(), gajim.OTR_PROTO, 1,
(gajim.otr_add_appdata, self.account))[0]
@ -1851,7 +1851,7 @@ class ChatControl(ChatControlBase):
self._on_smp_otr_menuitem_activate)
self.handlers[id] = smp_otr_menuitem
ctx = gajim.otr_module.otrl_context_find(gajim.otr_userstates[self.account],
ctx = gajim.otr_module.otrl_context_find(gajim.connections[self.account].otr_userstates,
self.contact.get_full_jid().encode(),
gajim.get_jid_from_account(self.account).encode(), gajim.OTR_PROTO, 1,
(gajim.otr_add_appdata, self.account))[0]
@ -2349,7 +2349,7 @@ class ChatControl(ChatControlBase):
MessageControl.send_message(self, u"?OTR?", type="chat")
def _on_end_otr_menuitem_activate(self, widget):
fjid = self.contact.get_full_jid()
gajim.otr_module.otrl_message_disconnect(gajim.otr_userstates[self.account],
gajim.otr_module.otrl_message_disconnect(gajim.connections[self.account].otr_userstates,
(gajim.otr_ui_ops, {'account':self.account,'urgent':True}),
gajim.get_jid_from_account(self.account).encode(), gajim.OTR_PROTO,
fjid.encode())
@ -2359,7 +2359,7 @@ class ChatControl(ChatControlBase):
def _on_otr_settings_menuitem_activate(self, widget):
gajim.otr_windows.ContactOtrWindow(self.contact, self.account, self)
def _on_smp_otr_menuitem_activate(self, widget):
ctx = gajim.otr_module.otrl_context_find(gajim.otr_userstates[self.account],
ctx = gajim.otr_module.otrl_context_find(gajim.connections[self.account].otr_userstates,
self.contact.get_full_jid().encode(),
gajim.get_jid_from_account(self.account).encode(), gajim.OTR_PROTO, 1,
(gajim.otr_add_appdata, self.account))[0]

View file

@ -164,6 +164,26 @@ class Connection(ConnectionHandlers):
# server {'icq': ['icq.server.com', 'icq2.server.com'], }
self.vcard_supported = True
self.private_storage_supported = True
if gajim.otr_module:
self.otr_userstates = gajim.otr_module.otrl_userstate_create()
try:
gajim.otr_module.otrl_privkey_read(self.otr_userstates,
os.path.join(gajimpaths.root,
'%s.key' % self.name).encode())
except Exception, e:
if hasattr(e, 'os_errno') and e.os_errno == 2:
pass
try:
gajim.otr_module.otrl_privkey_read_fingerprints(
self.otr_userstates, os.path.join(
gajimpaths.root, '%s.fpr' % self.name
).encode(), (add_appdata, a))
except Exception, e:
if hasattr(e, 'os_errno') and e.os_errno == 2:
pass
# END __init__
def put_event(self, ev):

View file

@ -1680,7 +1680,7 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
if gajim.otr_module and isinstance(msgtxt, unicode):
otr_msg_tuple = gajim.otr_module.otrl_message_receiving(
gajim.otr_userstates[self.name],
gajim.connections[self.name].otr_userstates,
(gajim.otr_ui_ops, {'account':self.name}),
gajim.get_jid_from_account(self.name).encode(),
gajim.OTR_PROTO, frm.encode(), msgtxt.encode(),
@ -1699,7 +1699,7 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
if ctrl:
ctrl.update_ui()
ctx = gajim.otr_module.otrl_context_find(gajim.otr_userstates[self.name], frm.encode(),
ctx = gajim.otr_module.otrl_context_find(gajim.connections[self.name].otr_userstates, frm.encode(),
gajim.get_jid_from_account(self.name).encode(), gajim.OTR_PROTO, 1,
(gajim.otr_add_appdata, self.name))[0]
tlvs = otr_msg_tuple[2]

View file

@ -319,7 +319,7 @@ class OtrlMessageAppOps:
while gtk.events_pending():
gtk.main_iteration(block=False)
otr.otrl_privkey_generate(gajim.otr_userstates[opdata['account']],
otr.otrl_privkey_generate(gajim.connections[opdata['account']].otr_userstates,
os.path.join(gajimpaths.root, "%s.key"%opdata['account']).encode(),
accountname, gajim.OTR_PROTO)
permlabel.set_text("Generating a private key for %s...\ndone."%accountname)
@ -371,7 +371,7 @@ class OtrlMessageAppOps:
otr.otrl_privkey_hash_to_human(fingerprint)), opdata['account'], username)
def write_fingerprints(self, opdata=""):
otr.otrl_privkey_write_fingerprints(gajim.otr_userstates[opdata['account']],
otr.otrl_privkey_write_fingerprints(gajim.connections[opdata['account']].otr_userstates,
os.path.join(gajimpaths.root, "%s.fpr"%opdata['account']).encode())
def gone_secure(self, opdata="", context=None):
@ -3326,25 +3326,6 @@ class Interface:
gajim.status_before_autoaway[a] = ''
gajim.transport_avatar[a] = {}
if gajim.otr_module:
gajim.otr_userstates[a] = otr.otrl_userstate_create()
try:
otr.otrl_privkey_read(gajim.otr_userstates[a],
os.path.join(gajimpaths.root, "%s.key"%a).encode())
except Exception, e:
if hasattr(e,"os_errno") and e.os_errno == 2:
print "didn't find otr keyfile "+ \
(os.path.join(gajimpaths.root, "%s.key"%a).encode())
pass
try:
otr.otrl_privkey_read_fingerprints(gajim.otr_userstates[a],
os.path.join(gajimpaths.root, "%s.fpr"%a).encode(), (add_appdata, a))
except Exception, e:
if hasattr(e,"os_errno") and e.os_errno == 2:
print "didn't find otr fingerprint file "+ \
(os.path.join(gajimpaths.root, "%s.fpr"%a).encode())
pass
if gajim.config.get('remote_control'):
try:
import remote_control

View file

@ -160,19 +160,17 @@ class MessageControl:
'original_message':original_message}, 'account':self.account}
new_msg = gajim.otr_module.otrl_message_sending(
gajim.otr_userstates[self.account],
gajim.connections[self.account].otr_userstates,
(gajim.otr_ui_ops, d),
gajim.get_jid_from_account(self.account).encode(), gajim.OTR_PROTO,
self.contact.get_full_jid().encode(), message.encode(), None)
context = gajim.otr_module.otrl_context_find(
gajim.otr_userstates[self.account],
gajim.connections[self.account].otr_userstates,
self.contact.get_full_jid().encode(),
gajim.get_jid_from_account(self.account).encode(),
gajim.OTR_PROTO, 1)[0]
print repr(context.accountname), repr(context.username)
# we send all because inject_message can filter on HTML stuff then
gajim.otr_module.otrl_message_fragment_and_send(
(gajim.otr_ui_ops, d),

View file

@ -49,7 +49,7 @@ class ContactOtrSMPWindow:
self.contact.get_full_jid())
self.ctx = gajim.otr_module.otrl_context_find(
gajim.otr_userstates[self.account],
gajim.connections[self.account].otr_userstates,
self.fjid.encode(), gajim.get_jid_from_account(self.account).encode(),
gajim.OTR_PROTO, 1, (gajim.otr_add_appdata, self.account))[0]
@ -79,7 +79,7 @@ class ContactOtrSMPWindow:
def _abort(self, text=None):
self.smp_running = False
gajim.otr_module.otrl_message_abort_smp(gajim.otr_userstates[self.account],
gajim.otr_module.otrl_message_abort_smp(gajim.connections[self.account].otr_userstates,
(gajim.otr_ui_ops, {'account':self.account}), self.ctx)
if text:
gajim.otr_ui_ops.gajim_log(text, self.account, self.contact.get_full_jid())
@ -152,10 +152,10 @@ class ContactOtrSMPWindow:
return
secret = self.gw("secret_entry").get_text()
if self.response:
gajim.otr_module.otrl_message_respond_smp(gajim.otr_userstates[self.account],
gajim.otr_module.otrl_message_respond_smp(gajim.connections[self.account].otr_userstates,
(gajim.otr_ui_ops, {'account':self.account}), self.ctx, secret)
else:
gajim.otr_module.otrl_message_initiate_smp(gajim.otr_userstates[self.account],
gajim.otr_module.otrl_message_initiate_smp(gajim.connections[self.account].otr_userstates,
(gajim.otr_ui_ops, {'account':self.account}), self.ctx, secret)
self.gw("progressbar").set_fraction(0.3)
self.smp_running = True
@ -174,7 +174,7 @@ class ContactOtrWindow:
self.ctrl = ctrl
self.ctx = gajim.otr_module.otrl_context_find(
gajim.otr_userstates[self.account],
gajim.connections[self.account].otr_userstates,
self.contact.get_full_jid().encode(),
gajim.get_jid_from_account(self.account).encode(),
gajim.OTR_PROTO, 1, (gajim.otr_add_appdata, self.account))[0]
@ -193,7 +193,7 @@ class ContactOtrWindow:
# always set the label containing our fingerprint
self.gw("our_fp_label").set_markup(our_fp_text%
gajim.otr_module.otrl_privkey_fingerprint(
gajim.otr_userstates[self.account],
gajim.connections[self.account].otr_userstates,
gajim.get_jid_from_account(self.account).encode(),
gajim.OTR_PROTO))

View file

@ -1776,11 +1776,11 @@ class RosterWindow:
# disconnect from ENCRYPTED OTR contexts when going
# offline/invisible
if status == 'offline' or status == 'invisible':
ctx = gajim.otr_userstates[account].context_root
ctx = gajim.connections[account].otr_userstates.context_root
while ctx is not None:
if ctx.msgstate == gajim.otr_module.OTRL_MSGSTATE_ENCRYPTED:
disconnected = True
gajim.otr_module.otrl_message_disconnect(gajim.otr_userstates[account],
gajim.otr_module.otrl_message_disconnect(gajim.connections[account].otr_userstates,
(gajim.otr_ui_ops,
{'account':account,'urgent':True}), ctx.accountname,
ctx.protocol, ctx.username)