Delta Chat Core C-API
dc_apeerstate.h
1 #ifndef __DC_APEERSTATE_H__
2 #define __DC_APEERSTATE_H__
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6 
7 
8 #include "dc_key.h"
9 #include "dc_aheader.h"
10 #include "dc_hash.h"
11 
12 
13 typedef struct _dc_apeerstate dc_apeerstate_t;
14 
15 
16 #define DC_PE_NOPREFERENCE 0 /* prefer-encrypt states */
17 #define DC_PE_MUTUAL 1
18 #define DC_PE_RESET 20
19 
20 
25 struct _dc_apeerstate
26 {
28  dc_context_t* context;
29 
30  char* addr;
31  time_t last_seen; /* may be 0 if the peer was created by gossipping */
32 
33  time_t last_seen_autocrypt;
34  int prefer_encrypt;
35 
36  #define DC_NOT_VERIFIED 0
37  #define DC_BIDIRECT_VERIFIED 2
38 
39  dc_key_t* public_key; /* may be NULL, however, in the database, either public_key or gossip_key is set */
40  char* public_key_fingerprint;
41 
42  dc_key_t* gossip_key; /* may be NULL */
43  time_t gossip_timestamp;
44  char* gossip_key_fingerprint;
45 
46  dc_key_t* verified_key; // may be NULL
47  char* verified_key_fingerprint;
48 
49  #define DC_SAVE_TIMESTAMPS 0x01
50  #define DC_SAVE_ALL 0x02
51  int to_save;
52 
53  #define DC_DE_ENCRYPTION_PAUSED 0x01 // recoverable by an incoming encrypted mail
54  #define DC_DE_FINGERPRINT_CHANGED 0x02 // recoverable by a new verify
55  int degrade_event;
56 
57 };
58 
59 
60 dc_apeerstate_t* dc_apeerstate_new (dc_context_t*); /* the returned pointer is ref'd and must be unref'd after usage */
61 void dc_apeerstate_unref (dc_apeerstate_t*);
62 
63 int dc_apeerstate_init_from_header (dc_apeerstate_t*, const dc_aheader_t*, time_t message_time);
64 int dc_apeerstate_init_from_gossip (dc_apeerstate_t*, const dc_aheader_t*, time_t message_time);
65 
66 int dc_apeerstate_degrade_encryption (dc_apeerstate_t*, time_t message_time);
67 
68 void dc_apeerstate_apply_header (dc_apeerstate_t*, const dc_aheader_t*, time_t message_time);
69 void dc_apeerstate_apply_gossip (dc_apeerstate_t*, const dc_aheader_t*, time_t message_time);
70 
71 char* dc_apeerstate_render_gossip_header (const dc_apeerstate_t*, int min_verified);
72 
73 dc_key_t* dc_apeerstate_peek_key (const dc_apeerstate_t*, int min_verified);
74 
75 int dc_apeerstate_recalc_fingerprint (dc_apeerstate_t*);
76 
77 #define DC_PS_GOSSIP_KEY 0
78 #define DC_PS_PUBLIC_KEY 1
79 int dc_apeerstate_set_verified (dc_apeerstate_t*, int which_key, const char* fingerprint, int verified);
80 
81 int dc_apeerstate_load_by_addr (dc_apeerstate_t*, dc_sqlite3_t*, const char* addr);
82 int dc_apeerstate_load_by_fingerprint (dc_apeerstate_t*, dc_sqlite3_t*, const char* fingerprint);
83 int dc_apeerstate_save_to_db (const dc_apeerstate_t*, dc_sqlite3_t*, int create);
84 
85 int dc_apeerstate_has_verified_key (const dc_apeerstate_t*, const dc_hash_t* fingerprints);
86 
87 #ifdef __cplusplus
88 } /* /extern "C" */
89 #endif
90 #endif /* __DC_APEERSTATE_H__ */
91 
An object representing a single account.