aboutsummaryrefslogtreecommitdiff
path: root/src/messenger/messenger_api_list_tunnels.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/messenger/messenger_api_list_tunnels.c')
-rw-r--r--src/messenger/messenger_api_list_tunnels.c104
1 files changed, 61 insertions, 43 deletions
diff --git a/src/messenger/messenger_api_list_tunnels.c b/src/messenger/messenger_api_list_tunnels.c
index 4d0deb95d..b2513370c 100644
--- a/src/messenger/messenger_api_list_tunnels.c
+++ b/src/messenger/messenger_api_list_tunnels.c
@@ -29,24 +29,27 @@
29void 29void
30init_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels) 30init_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels)
31{ 31{
32 GNUNET_assert(tunnels); 32 GNUNET_assert (tunnels);
33 33
34 tunnels->head = NULL; 34 tunnels->head = NULL;
35 tunnels->tail = NULL; 35 tunnels->tail = NULL;
36} 36}
37 37
38
38void 39void
39clear_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels) 40clear_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels)
40{ 41{
41 GNUNET_assert(tunnels); 42 GNUNET_assert (tunnels);
42 43
43 struct GNUNET_MESSENGER_ListTunnel *element; 44 struct GNUNET_MESSENGER_ListTunnel *element;
44 for (element = tunnels->head; element; element = remove_from_list_tunnels(tunnels, element)) 45 for (element = tunnels->head; element; element = remove_from_list_tunnels (
46 tunnels, element))
45 47
46 tunnels->head = NULL; 48 tunnels->head = NULL;
47 tunnels->tail = NULL; 49 tunnels->tail = NULL;
48} 50}
49 51
52
50static int 53static int
51compare_list_tunnels (void *cls, 54compare_list_tunnels (void *cls,
52 struct GNUNET_MESSENGER_ListTunnel *element0, 55 struct GNUNET_MESSENGER_ListTunnel *element0,
@@ -55,28 +58,33 @@ compare_list_tunnels (void *cls,
55 return ((int) element0->peer) - ((int) element1->peer); 58 return ((int) element0->peer) - ((int) element1->peer);
56} 59}
57 60
61
58void 62void
59add_to_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, 63add_to_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels,
60 const struct GNUNET_PeerIdentity *peer, 64 const struct GNUNET_PeerIdentity *peer,
61 const struct GNUNET_HashCode *hash) 65 const struct GNUNET_HashCode *hash)
62{ 66{
63 GNUNET_assert((tunnels) && (peer)); 67 GNUNET_assert ((tunnels) && (peer));
64 68
65 struct GNUNET_MESSENGER_ListTunnel *element = GNUNET_new(struct GNUNET_MESSENGER_ListTunnel); 69 struct GNUNET_MESSENGER_ListTunnel *element = GNUNET_new (struct
70 GNUNET_MESSENGER_ListTunnel);
66 71
67 element->peer = GNUNET_PEER_intern (peer); 72 element->peer = GNUNET_PEER_intern (peer);
68 element->hash = hash ? GNUNET_memdup(hash, sizeof(struct GNUNET_HashCode)) : NULL; 73 element->hash = hash ? GNUNET_memdup (hash, sizeof(struct GNUNET_HashCode)) :
74 NULL;
69 75
70 GNUNET_CONTAINER_DLL_insert_sorted(struct GNUNET_MESSENGER_ListTunnel, compare_list_tunnels, NULL, tunnels->head, 76 GNUNET_CONTAINER_DLL_insert_sorted (struct GNUNET_MESSENGER_ListTunnel,
71 tunnels->tail, element); 77 compare_list_tunnels, NULL, tunnels->head,
78 tunnels->tail, element);
72} 79}
73 80
81
74struct GNUNET_MESSENGER_ListTunnel* 82struct GNUNET_MESSENGER_ListTunnel*
75find_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, 83find_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels,
76 const struct GNUNET_PeerIdentity *peer, 84 const struct GNUNET_PeerIdentity *peer,
77 size_t *index) 85 size_t *index)
78{ 86{
79 GNUNET_assert((tunnels) && (peer)); 87 GNUNET_assert ((tunnels) && (peer));
80 88
81 struct GNUNET_MESSENGER_ListTunnel *element; 89 struct GNUNET_MESSENGER_ListTunnel *element;
82 struct GNUNET_PeerIdentity pid; 90 struct GNUNET_PeerIdentity pid;
@@ -88,7 +96,7 @@ find_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels,
88 { 96 {
89 GNUNET_PEER_resolve (element->peer, &pid); 97 GNUNET_PEER_resolve (element->peer, &pid);
90 98
91 if (0 == GNUNET_memcmp(&pid, peer)) 99 if (0 == GNUNET_memcmp (&pid, peer))
92 return element; 100 return element;
93 101
94 if (index) 102 if (index)
@@ -98,111 +106,121 @@ find_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels,
98 return NULL; 106 return NULL;
99} 107}
100 108
109
101void 110void
102update_to_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, 111update_to_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels,
103 const struct GNUNET_PeerIdentity *peer, 112 const struct GNUNET_PeerIdentity *peer,
104 const struct GNUNET_HashCode *hash) 113 const struct GNUNET_HashCode *hash)
105{ 114{
106 GNUNET_assert((tunnels) && (peer)); 115 GNUNET_assert ((tunnels) && (peer));
107 116
108 struct GNUNET_MESSENGER_ListTunnel* element = find_list_tunnels(tunnels, peer, NULL); 117 struct GNUNET_MESSENGER_ListTunnel *element = find_list_tunnels (tunnels,
109 if (!element) 118 peer,
119 NULL);
120 if (! element)
110 return; 121 return;
111 122
112 if (element->hash) 123 if (element->hash)
113 { 124 {
114 if (hash) 125 if (hash)
115 GNUNET_memcpy(element->hash, hash, sizeof(struct GNUNET_HashCode)); 126 GNUNET_memcpy (element->hash, hash, sizeof(struct GNUNET_HashCode));
116 else 127 else
117 { 128 {
118 GNUNET_free(element->hash); 129 GNUNET_free (element->hash);
119 element->hash = NULL; 130 element->hash = NULL;
120 } 131 }
121 } 132 }
122 else if (hash) 133 else if (hash)
123 element->hash = GNUNET_memdup(hash, sizeof(struct GNUNET_HashCode)); 134 element->hash = GNUNET_memdup (hash, sizeof(struct GNUNET_HashCode));
124} 135}
125 136
137
126int 138int
127contains_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, 139contains_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels,
128 const struct GNUNET_PeerIdentity *peer) 140 const struct GNUNET_PeerIdentity *peer)
129{ 141{
130 GNUNET_assert((tunnels) && (peer)); 142 GNUNET_assert ((tunnels) && (peer));
131 143
132 return find_list_tunnels (tunnels, peer, NULL) != NULL ? GNUNET_YES : GNUNET_NO; 144 return find_list_tunnels (tunnels, peer, NULL) != NULL ? GNUNET_YES :
145 GNUNET_NO;
133} 146}
134 147
148
135struct GNUNET_MESSENGER_ListTunnel* 149struct GNUNET_MESSENGER_ListTunnel*
136remove_from_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, 150remove_from_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels,
137 struct GNUNET_MESSENGER_ListTunnel *element) 151 struct GNUNET_MESSENGER_ListTunnel *element)
138{ 152{
139 GNUNET_assert((tunnels) && (element)); 153 GNUNET_assert ((tunnels) && (element));
140 154
141 struct GNUNET_MESSENGER_ListTunnel *next = element->next; 155 struct GNUNET_MESSENGER_ListTunnel *next = element->next;
142 156
143 if ((tunnels->head) && (tunnels->tail)) 157 if ((tunnels->head) && (tunnels->tail))
144 GNUNET_CONTAINER_DLL_remove(tunnels->head, tunnels->tail, element); 158 GNUNET_CONTAINER_DLL_remove (tunnels->head, tunnels->tail, element);
145 159
146 if (element->hash) 160 if (element->hash)
147 GNUNET_free(element->hash); 161 GNUNET_free (element->hash);
148 162
149 GNUNET_PEER_change_rc (element->peer, -1); 163 GNUNET_PEER_change_rc (element->peer, -1);
150 GNUNET_free(element); 164 GNUNET_free (element);
151 165
152 return next; 166 return next;
153} 167}
154 168
169
155void 170void
156load_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, 171load_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels,
157 const char *path) 172 const char *path)
158{ 173{
159 GNUNET_assert((tunnels) && (path)); 174 GNUNET_assert ((tunnels) && (path));
160 175
161 if (GNUNET_YES != GNUNET_DISK_file_test (path)) 176 if (GNUNET_YES != GNUNET_DISK_file_test (path))
162 return; 177 return;
163 178
164 enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE); 179 enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ
180 | GNUNET_DISK_PERM_USER_WRITE);
165 181
166 struct GNUNET_DISK_FileHandle *handle = GNUNET_DISK_file_open( 182 struct GNUNET_DISK_FileHandle *handle = GNUNET_DISK_file_open (
167 path, GNUNET_DISK_OPEN_READ, permission 183 path, GNUNET_DISK_OPEN_READ, permission
168 ); 184 );
169 185
170 if (!handle) 186 if (! handle)
171 return; 187 return;
172 188
173 GNUNET_DISK_file_seek(handle, 0, GNUNET_DISK_SEEK_SET); 189 GNUNET_DISK_file_seek (handle, 0, GNUNET_DISK_SEEK_SET);
174 190
175 struct GNUNET_PeerIdentity peer; 191 struct GNUNET_PeerIdentity peer;
176 ssize_t len; 192 ssize_t len;
177 193
178 do { 194 do {
179 len = GNUNET_DISK_file_read(handle, &peer, sizeof(peer)); 195 len = GNUNET_DISK_file_read (handle, &peer, sizeof(peer));
180 196
181 if (len != sizeof(peer)) 197 if (len != sizeof(peer))
182 break; 198 break;
183 199
184 add_to_list_tunnels(tunnels, &peer, NULL); 200 add_to_list_tunnels (tunnels, &peer, NULL);
185 } while (len == sizeof(peer)); 201 } while (len == sizeof(peer));
186 202
187 GNUNET_DISK_file_close(handle); 203 GNUNET_DISK_file_close (handle);
188} 204}
189 205
206
190void 207void
191save_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels, 208save_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels,
192 const char *path) 209 const char *path)
193{ 210{
194 GNUNET_assert((tunnels) && (path)); 211 GNUNET_assert ((tunnels) && (path));
195 212
196 enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE); 213 enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ
214 | GNUNET_DISK_PERM_USER_WRITE);
197 215
198 struct GNUNET_DISK_FileHandle *handle = GNUNET_DISK_file_open( 216 struct GNUNET_DISK_FileHandle *handle = GNUNET_DISK_file_open (
199 path, GNUNET_DISK_OPEN_CREATE | GNUNET_DISK_OPEN_WRITE, permission 217 path, GNUNET_DISK_OPEN_CREATE | GNUNET_DISK_OPEN_WRITE, permission
200 ); 218 );
201 219
202 if (!handle) 220 if (! handle)
203 return; 221 return;
204 222
205 GNUNET_DISK_file_seek(handle, 0, GNUNET_DISK_SEEK_SET); 223 GNUNET_DISK_file_seek (handle, 0, GNUNET_DISK_SEEK_SET);
206 224
207 struct GNUNET_MESSENGER_ListTunnel *element; 225 struct GNUNET_MESSENGER_ListTunnel *element;
208 struct GNUNET_PeerIdentity pid; 226 struct GNUNET_PeerIdentity pid;
@@ -211,9 +229,9 @@ save_list_tunnels (struct GNUNET_MESSENGER_ListTunnels *tunnels,
211 { 229 {
212 GNUNET_PEER_resolve (element->peer, &pid); 230 GNUNET_PEER_resolve (element->peer, &pid);
213 231
214 GNUNET_DISK_file_write(handle, &pid, sizeof(pid)); 232 GNUNET_DISK_file_write (handle, &pid, sizeof(pid));
215 } 233 }
216 234
217 GNUNET_DISK_file_sync(handle); 235 GNUNET_DISK_file_sync (handle);
218 GNUNET_DISK_file_close(handle); 236 GNUNET_DISK_file_close (handle);
219} 237}