diff options
Diffstat (limited to 'src/messenger/gnunet-service-messenger_room.c')
-rw-r--r-- | src/messenger/gnunet-service-messenger_room.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/messenger/gnunet-service-messenger_room.c b/src/messenger/gnunet-service-messenger_room.c index e0bec7991..027df682c 100644 --- a/src/messenger/gnunet-service-messenger_room.c +++ b/src/messenger/gnunet-service-messenger_room.c | |||
@@ -939,6 +939,9 @@ iterate_update_member_sessions (void *cls, const struct GNUNET_IDENTITY_PublicKe | |||
939 | return GNUNET_YES; | 939 | return GNUNET_YES; |
940 | } | 940 | } |
941 | 941 | ||
942 | static void | ||
943 | remove_room_member_session (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_MemberSession *session); | ||
944 | |||
942 | void | 945 | void |
943 | callback_room_handle_message (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, | 946 | callback_room_handle_message (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, |
944 | const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) | 947 | const struct GNUNET_MESSENGER_Message *message, const struct GNUNET_HashCode *hash) |
@@ -975,7 +978,7 @@ callback_room_handle_message (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUN | |||
975 | { | 978 | { |
976 | struct GNUNET_MESSENGER_MemberSessionCompletion *element = update.head; | 979 | struct GNUNET_MESSENGER_MemberSessionCompletion *element = update.head; |
977 | 980 | ||
978 | remove_member_session (element->session->member, element->session); | 981 | remove_room_member_session (room, element->session); |
979 | 982 | ||
980 | GNUNET_CONTAINER_DLL_remove(update.head, update.tail, element); | 983 | GNUNET_CONTAINER_DLL_remove(update.head, update.tail, element); |
981 | GNUNET_free (element); | 984 | GNUNET_free (element); |
@@ -1087,3 +1090,35 @@ save_room (struct GNUNET_MESSENGER_SrvRoom *room) | |||
1087 | 1090 | ||
1088 | GNUNET_free(room_dir); | 1091 | GNUNET_free(room_dir); |
1089 | } | 1092 | } |
1093 | |||
1094 | static void | ||
1095 | remove_room_member_session (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_MemberSession *session) | ||
1096 | { | ||
1097 | GNUNET_assert ((room) && (session)); | ||
1098 | |||
1099 | remove_member_session (session->member, session); | ||
1100 | |||
1101 | const struct GNUNET_IDENTITY_PublicKey *public_key = get_member_session_public_key(session); | ||
1102 | |||
1103 | struct GNUNET_HashCode hash; | ||
1104 | GNUNET_CRYPTO_hash(public_key, sizeof(*public_key), &hash); | ||
1105 | |||
1106 | char *room_dir; | ||
1107 | get_room_data_subdir (room, &room_dir); | ||
1108 | |||
1109 | char* session_dir; | ||
1110 | GNUNET_asprintf ( | ||
1111 | &session_dir, "%s%s%c%s%c%s%c%s%c", room_dir, | ||
1112 | "members", DIR_SEPARATOR, | ||
1113 | GNUNET_sh2s(get_member_session_id(session)), DIR_SEPARATOR, | ||
1114 | "sessions", DIR_SEPARATOR, | ||
1115 | GNUNET_h2s(&hash), DIR_SEPARATOR | ||
1116 | ); | ||
1117 | |||
1118 | GNUNET_free (room_dir); | ||
1119 | |||
1120 | GNUNET_DISK_directory_remove(session_dir); | ||
1121 | GNUNET_free (session_dir); | ||
1122 | |||
1123 | destroy_member_session(session); | ||
1124 | } | ||