30 |
30 |
31 static GSList *option; |
31 static GSList *option; |
32 static GSList *alias; |
32 static GSList *alias; |
33 static GSList *binding; |
33 static GSList *binding; |
34 |
34 |
35 |
|
36 typedef struct { |
35 typedef struct { |
37 gchar *name; |
36 gchar *name; |
38 gchar *value; |
37 gchar *value; |
39 } T_setting; |
38 } T_setting; |
40 |
39 |
|
40 #ifdef HAVE_GPGME /* PGP settings */ |
|
41 static GHashTable *pgpopt; |
|
42 |
|
43 typedef struct { |
|
44 gchar *pgp_keyid; /* KeyId the contact is supposed to use */ |
|
45 guint pgp_disabled; /* If TRUE, PGP is disabled for outgoing messages */ |
|
46 } T_pgpopt; |
|
47 #endif |
|
48 |
41 static inline GSList **get_list_ptr(guint type) |
49 static inline GSList **get_list_ptr(guint type) |
42 { |
50 { |
43 if (type == SETTINGS_TYPE_OPTION) return &option; |
51 if (type == SETTINGS_TYPE_OPTION) return &option; |
44 else if (type == SETTINGS_TYPE_ALIAS) return &alias; |
52 else if (type == SETTINGS_TYPE_ALIAS) return &alias; |
45 else if (type == SETTINGS_TYPE_BINDING) return &binding; |
53 else if (type == SETTINGS_TYPE_BINDING) return &binding; |
365 *p = 0; |
380 *p = 0; |
366 } |
381 } |
367 return nick; |
382 return nick; |
368 } |
383 } |
369 |
384 |
|
385 |
|
386 /* PGP settings */ |
|
387 |
|
388 // settings_pgp_setdisabled(jid, value) |
|
389 // Enable/disable PGP encryption for jid. |
|
390 // (Set value to TRUE to disable encryption) |
|
391 void settings_pgp_setdisabled(const char *bjid, guint value) |
|
392 { |
|
393 #ifdef HAVE_GPGME |
|
394 T_pgpopt *pgpdata; |
|
395 pgpdata = g_hash_table_lookup(pgpopt, bjid); |
|
396 if (!pgpdata) { |
|
397 // If value is 0, we do not need to create a structure (that's |
|
398 // the default value). |
|
399 if (value) { |
|
400 pgpdata = g_new0(T_pgpopt, 1); |
|
401 pgpdata->pgp_disabled = value; |
|
402 g_hash_table_insert(pgpopt, g_strdup(bjid), pgpdata); |
|
403 } |
|
404 } else { |
|
405 pgpdata->pgp_disabled = value; |
|
406 // We could remove the key/value if pgp_disabled is 0 and |
|
407 // pgp_keyid is NULL, actually. |
|
408 } |
|
409 #endif |
|
410 } |
|
411 |
|
412 // settings_pgp_getdisabled(jid) |
|
413 // Return TRUE if PGP encryption should be disabled for jid. |
|
414 guint settings_pgp_getdisabled(const char *bjid) |
|
415 { |
|
416 #ifdef HAVE_GPGME |
|
417 T_pgpopt *pgpdata; |
|
418 pgpdata = g_hash_table_lookup(pgpopt, bjid); |
|
419 if (pgpdata) |
|
420 return pgpdata->pgp_disabled; |
|
421 else |
|
422 return FALSE; // default: not disabled |
|
423 #else |
|
424 return TRUE; // No PGP support, let's say it's disabled. |
|
425 #endif |
|
426 } |
|
427 |
|
428 // settings_pgp_setkeyid(jid, keyid) |
|
429 // Set the PGP KeyId for user jid. |
|
430 // Use keyid = NULL to erase the previous KeyId. |
|
431 void settings_pgp_setkeyid(const char *bjid, const char *keyid) |
|
432 { |
|
433 #ifdef HAVE_GPGME |
|
434 T_pgpopt *pgpdata; |
|
435 pgpdata = g_hash_table_lookup(pgpopt, bjid); |
|
436 if (!pgpdata) { |
|
437 // If keyid is NULL, we do not need to create a structure (that's |
|
438 // the default value). |
|
439 if (keyid) { |
|
440 pgpdata = g_new0(T_pgpopt, 1); |
|
441 pgpdata->pgp_keyid = g_strdup(keyid); |
|
442 g_hash_table_insert(pgpopt, g_strdup(bjid), pgpdata); |
|
443 } |
|
444 } else { |
|
445 g_free(pgpdata->pgp_keyid); |
|
446 if (keyid) |
|
447 pgpdata->pgp_keyid = g_strdup(keyid); |
|
448 else |
|
449 pgpdata->pgp_keyid = NULL; |
|
450 // We could remove the key/value if pgp_disabled is 0 and |
|
451 // pgp_keyid is NULL, actually. |
|
452 } |
|
453 #endif |
|
454 } |
|
455 |
|
456 // settings_pgp_getkeyid(jid) |
|
457 // Get the PGP KeyId for user jid. |
|
458 const char *settings_pgp_getkeyid(const char *bjid) |
|
459 { |
|
460 #ifdef HAVE_GPGME |
|
461 T_pgpopt *pgpdata; |
|
462 pgpdata = g_hash_table_lookup(pgpopt, bjid); |
|
463 if (pgpdata) |
|
464 return pgpdata->pgp_keyid; |
|
465 #endif |
|
466 return NULL; |
|
467 } |
|
468 |
370 /* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */ |
469 /* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */ |