diff options
Diffstat (limited to 'src/messenger/gnunet-service-messenger_message_handle.c')
-rw-r--r-- | src/messenger/gnunet-service-messenger_message_handle.c | 83 |
1 files changed, 51 insertions, 32 deletions
diff --git a/src/messenger/gnunet-service-messenger_message_handle.c b/src/messenger/gnunet-service-messenger_message_handle.c index 57b758fa4..77466b599 100644 --- a/src/messenger/gnunet-service-messenger_message_handle.c +++ b/src/messenger/gnunet-service-messenger_message_handle.c | |||
@@ -31,58 +31,67 @@ handle_member_session_switch (struct GNUNET_MESSENGER_MemberSession *session, | |||
31 | const struct GNUNET_MESSENGER_Message *message, | 31 | const struct GNUNET_MESSENGER_Message *message, |
32 | const struct GNUNET_HashCode *hash) | 32 | const struct GNUNET_HashCode *hash) |
33 | { | 33 | { |
34 | struct GNUNET_MESSENGER_MemberSession *next = switch_member_session(session, message, hash); | 34 | struct GNUNET_MESSENGER_MemberSession *next = switch_member_session (session, |
35 | message, | ||
36 | hash); | ||
35 | 37 | ||
36 | if (next != session) | 38 | if (next != session) |
37 | add_member_session(next->member, next); | 39 | add_member_session (next->member, next); |
38 | } | 40 | } |
39 | 41 | ||
42 | |||
40 | void | 43 | void |
41 | handle_message_join (struct GNUNET_MESSENGER_SrvRoom *room, | 44 | handle_message_join (struct GNUNET_MESSENGER_SrvRoom *room, |
42 | struct GNUNET_MESSENGER_SenderSession *session, | 45 | struct GNUNET_MESSENGER_SenderSession *session, |
43 | const struct GNUNET_MESSENGER_Message *message, | 46 | const struct GNUNET_MESSENGER_Message *message, |
44 | const struct GNUNET_HashCode *hash) | 47 | const struct GNUNET_HashCode *hash) |
45 | { | 48 | { |
46 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Member (%s) joins room (%s).\n", | 49 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Member (%s) joins room (%s).\n", |
47 | GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s(get_srv_room_key(room))); | 50 | GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s ( |
51 | get_srv_room_key (room))); | ||
48 | 52 | ||
49 | if (GNUNET_OK != reset_member_session(session->member, hash)) | 53 | if (GNUNET_OK != reset_member_session (session->member, hash)) |
50 | GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Resetting member session failed!\n"); | 54 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Resetting member session failed!\n"); |
51 | 55 | ||
52 | solve_srv_room_member_collisions ( | 56 | solve_srv_room_member_collisions ( |
53 | room, | 57 | room, |
54 | &(message->body.join.key), | 58 | &(message->body.join.key), |
55 | &(message->header.sender_id), | 59 | &(message->header.sender_id), |
56 | GNUNET_TIME_absolute_ntoh(message->header.timestamp) | 60 | GNUNET_TIME_absolute_ntoh (message->header.timestamp) |
57 | ); | 61 | ); |
58 | } | 62 | } |
59 | 63 | ||
64 | |||
60 | void | 65 | void |
61 | handle_message_leave (struct GNUNET_MESSENGER_SrvRoom *room, | 66 | handle_message_leave (struct GNUNET_MESSENGER_SrvRoom *room, |
62 | struct GNUNET_MESSENGER_SenderSession *session, | 67 | struct GNUNET_MESSENGER_SenderSession *session, |
63 | const struct GNUNET_MESSENGER_Message *message, | 68 | const struct GNUNET_MESSENGER_Message *message, |
64 | const struct GNUNET_HashCode *hash) | 69 | const struct GNUNET_HashCode *hash) |
65 | { | 70 | { |
66 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Member (%s) leaves room (%s).\n", | 71 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Member (%s) leaves room (%s).\n", |
67 | GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s(get_srv_room_key(room))); | 72 | GNUNET_sh2s (&(message->header.sender_id)), GNUNET_h2s ( |
73 | get_srv_room_key (room))); | ||
68 | 74 | ||
69 | close_member_session(session->member); | 75 | close_member_session (session->member); |
70 | } | 76 | } |
71 | 77 | ||
78 | |||
72 | void | 79 | void |
73 | handle_message_name (struct GNUNET_MESSENGER_SrvRoom *room, | 80 | handle_message_name (struct GNUNET_MESSENGER_SrvRoom *room, |
74 | struct GNUNET_MESSENGER_SenderSession *session, | 81 | struct GNUNET_MESSENGER_SenderSession *session, |
75 | const struct GNUNET_MESSENGER_Message *message, | 82 | const struct GNUNET_MESSENGER_Message *message, |
76 | const struct GNUNET_HashCode *hash) | 83 | const struct GNUNET_HashCode *hash) |
77 | { | 84 | { |
78 | struct GNUNET_MESSENGER_Contact *contact = get_member_session_contact(session->member); | 85 | struct GNUNET_MESSENGER_Contact *contact = get_member_session_contact ( |
86 | session->member); | ||
79 | 87 | ||
80 | if (!contact) | 88 | if (! contact) |
81 | return; | 89 | return; |
82 | 90 | ||
83 | set_contact_name (contact, message->body.name.name); | 91 | set_contact_name (contact, message->body.name.name); |
84 | } | 92 | } |
85 | 93 | ||
94 | |||
86 | void | 95 | void |
87 | handle_message_key (struct GNUNET_MESSENGER_SrvRoom *room, | 96 | handle_message_key (struct GNUNET_MESSENGER_SrvRoom *room, |
88 | struct GNUNET_MESSENGER_SenderSession *session, | 97 | struct GNUNET_MESSENGER_SenderSession *session, |
@@ -92,6 +101,7 @@ handle_message_key (struct GNUNET_MESSENGER_SrvRoom *room, | |||
92 | handle_member_session_switch (session->member, message, hash); | 101 | handle_member_session_switch (session->member, message, hash); |
93 | } | 102 | } |
94 | 103 | ||
104 | |||
95 | void | 105 | void |
96 | handle_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, | 106 | handle_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, |
97 | struct GNUNET_MESSENGER_SenderSession *session, | 107 | struct GNUNET_MESSENGER_SenderSession *session, |
@@ -100,16 +110,18 @@ handle_message_peer (struct GNUNET_MESSENGER_SrvRoom *room, | |||
100 | { | 110 | { |
101 | struct GNUNET_MESSENGER_PeerStore *store = get_srv_room_peer_store (room); | 111 | struct GNUNET_MESSENGER_PeerStore *store = get_srv_room_peer_store (room); |
102 | 112 | ||
103 | if (0 == GNUNET_memcmp(session->peer, &(message->body.peer.peer))) | 113 | if (0 == GNUNET_memcmp (session->peer, &(message->body.peer.peer))) |
104 | update_store_peer(store, &(message->body.peer.peer)); | 114 | update_store_peer (store, &(message->body.peer.peer)); |
105 | 115 | ||
106 | if (GNUNET_NO == contains_list_tunnels (&(room->basement), &(message->body.peer.peer))) | 116 | if (GNUNET_NO == contains_list_tunnels (&(room->basement), |
117 | &(message->body.peer.peer))) | ||
107 | add_to_list_tunnels (&(room->basement), &(message->body.peer.peer), hash); | 118 | add_to_list_tunnels (&(room->basement), &(message->body.peer.peer), hash); |
108 | 119 | ||
109 | if (room->peer_message) | 120 | if (room->peer_message) |
110 | rebuild_srv_room_basement_structure (room); | 121 | rebuild_srv_room_basement_structure (room); |
111 | } | 122 | } |
112 | 123 | ||
124 | |||
113 | void | 125 | void |
114 | handle_message_id (struct GNUNET_MESSENGER_SrvRoom *room, | 126 | handle_message_id (struct GNUNET_MESSENGER_SrvRoom *room, |
115 | struct GNUNET_MESSENGER_SenderSession *session, | 127 | struct GNUNET_MESSENGER_SenderSession *session, |
@@ -119,13 +131,14 @@ handle_message_id (struct GNUNET_MESSENGER_SrvRoom *room, | |||
119 | handle_member_session_switch (session->member, message, hash); | 131 | handle_member_session_switch (session->member, message, hash); |
120 | 132 | ||
121 | solve_srv_room_member_collisions ( | 133 | solve_srv_room_member_collisions ( |
122 | room, | 134 | room, |
123 | get_member_session_public_key(session->member), | 135 | get_member_session_public_key (session->member), |
124 | &(message->body.id.id), | 136 | &(message->body.id.id), |
125 | GNUNET_TIME_absolute_ntoh(message->header.timestamp) | 137 | GNUNET_TIME_absolute_ntoh (message->header.timestamp) |
126 | ); | 138 | ); |
127 | } | 139 | } |
128 | 140 | ||
141 | |||
129 | void | 142 | void |
130 | handle_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, | 143 | handle_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, |
131 | struct GNUNET_MESSENGER_SenderSession *session, | 144 | struct GNUNET_MESSENGER_SenderSession *session, |
@@ -134,12 +147,13 @@ handle_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, | |||
134 | { | 147 | { |
135 | struct GNUNET_MESSENGER_PeerStore *store = get_srv_room_peer_store (room); | 148 | struct GNUNET_MESSENGER_PeerStore *store = get_srv_room_peer_store (room); |
136 | 149 | ||
137 | if (0 == GNUNET_memcmp(session->peer, &(message->body.miss.peer))) | 150 | if (0 == GNUNET_memcmp (session->peer, &(message->body.miss.peer))) |
138 | remove_store_peer(store, &(message->body.miss.peer)); | 151 | remove_store_peer (store, &(message->body.miss.peer)); |
139 | 152 | ||
140 | struct GNUNET_MESSENGER_ListTunnel *element = find_list_tunnels (&(room->basement), &(message->body.miss.peer), NULL); | 153 | struct GNUNET_MESSENGER_ListTunnel *element = find_list_tunnels ( |
154 | &(room->basement), &(message->body.miss.peer), NULL); | ||
141 | 155 | ||
142 | if (!element) | 156 | if (! element) |
143 | return; | 157 | return; |
144 | 158 | ||
145 | remove_from_list_tunnels (&(room->basement), element); | 159 | remove_from_list_tunnels (&(room->basement), element); |
@@ -148,17 +162,22 @@ handle_message_miss (struct GNUNET_MESSENGER_SrvRoom *room, | |||
148 | rebuild_srv_room_basement_structure (room); | 162 | rebuild_srv_room_basement_structure (room); |
149 | } | 163 | } |
150 | 164 | ||
165 | |||
151 | void | 166 | void |
152 | handle_message_delete (struct GNUNET_MESSENGER_SrvRoom *room, | 167 | handle_message_delete (struct GNUNET_MESSENGER_SrvRoom *room, |
153 | struct GNUNET_MESSENGER_SenderSession *session, | 168 | struct GNUNET_MESSENGER_SenderSession *session, |
154 | const struct GNUNET_MESSENGER_Message *message, | 169 | const struct GNUNET_MESSENGER_Message *message, |
155 | const struct GNUNET_HashCode *hash) | 170 | const struct GNUNET_HashCode *hash) |
156 | { | 171 | { |
157 | struct GNUNET_TIME_Relative delay = GNUNET_TIME_relative_ntoh (message->body.deletion.delay); | 172 | struct GNUNET_TIME_Relative delay = GNUNET_TIME_relative_ntoh ( |
158 | struct GNUNET_TIME_Absolute action = GNUNET_TIME_absolute_ntoh (message->header.timestamp); | 173 | message->body.deletion.delay); |
174 | struct GNUNET_TIME_Absolute action = GNUNET_TIME_absolute_ntoh ( | ||
175 | message->header.timestamp); | ||
159 | 176 | ||
160 | action = GNUNET_TIME_absolute_add (action, delay); | 177 | action = GNUNET_TIME_absolute_add (action, delay); |
161 | delay = GNUNET_TIME_absolute_get_difference (GNUNET_TIME_absolute_get (), action); | 178 | delay = GNUNET_TIME_absolute_get_difference (GNUNET_TIME_absolute_get (), |
179 | action); | ||
162 | 180 | ||
163 | delete_srv_room_message (room, session->member, &(message->body.deletion.hash), delay); | 181 | delete_srv_room_message (room, session->member, |
182 | &(message->body.deletion.hash), delay); | ||
164 | } | 183 | } |