Delta Chat Core C-API
mrapeerstate.h
1 /*******************************************************************************
2  *
3  * Delta Chat Core
4  * Copyright (C) 2017 Björn Petersen
5  * Contact: r10s@b44t.com, http://b44t.com
6  *
7  * This program is free software: you can redistribute it and/or modify it under
8  * the terms of the GNU General Public License as published by the Free Software
9  * Foundation, either version 3 of the License, or (at your option) any later
10  * version.
11  *
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
15  * details.
16  *
17  * You should have received a copy of the GNU General Public License along with
18  * this program. If not, see http://www.gnu.org/licenses/ .
19  *
20  ******************************************************************************/
21 
22 
23 #ifndef __MRAPEERSTATE_H__
24 #define __MRAPEERSTATE_H__
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 
30 #include "mrkey.h"
31 
32 
33 typedef struct mraheader_t mraheader_t;
34 
35 
36 #define MRA_PE_NOPREFERENCE 0 /* prefer-encrypt states */
37 #define MRA_PE_MUTUAL 1
38 #define MRA_PE_RESET 20
39 
40 
44 typedef struct mrapeerstate_t
45 {
47  char* m_addr;
48  time_t m_last_seen; /* may be 0 if the peer was created by gossipping */
49 
50  time_t m_last_seen_autocrypt;
51  mrkey_t* m_public_key; /* may be NULL, however, in the database, either public_key or gossip_key is set */
52  int m_prefer_encrypt;
53 
54  time_t m_gossip_timestamp;
55  mrkey_t* m_gossip_key; /* may be NULL */
56 
57  #define MRA_SAVE_TIMESTAMPS 0x01
58  #define MRA_SAVE_ALL 0x02
59  int m_to_save;
60 } mrapeerstate_t;
61 
62 
63 mrapeerstate_t* mrapeerstate_new (); /* the returned pointer is ref'd and must be unref'd after usage */
64 void mrapeerstate_unref (mrapeerstate_t*);
65 
66 int mrapeerstate_init_from_header (mrapeerstate_t*, const mraheader_t*, time_t message_time);
67 int mrapeerstate_init_from_gossip (mrapeerstate_t*, const mraheader_t*, time_t message_time);
68 
69 int mrapeerstate_degrade_encryption(mrapeerstate_t*, time_t message_time);
70 
71 void mrapeerstate_apply_header (mrapeerstate_t*, const mraheader_t*, time_t message_time);
72 void mrapeerstate_apply_gossip (mrapeerstate_t*, const mraheader_t*, time_t message_time);
73 
74 char* mrapeerstate_render_gossip_header(mrapeerstate_t*);
75 
76 mrkey_t* mrapeerstate_peek_key (mrapeerstate_t*);
77 
78 int mrapeerstate_load_from_db__ (mrapeerstate_t*, mrsqlite3_t*, const char* addr);
79 int mrapeerstate_save_to_db__ (const mrapeerstate_t*, mrsqlite3_t*, int create);
80 
81 
82 #ifdef __cplusplus
83 } /* /extern "C" */
84 #endif
85 #endif /* __MRAPEERSTATE_H__ */
86