aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTheJackiMonster <thejackimonster@gmail.com>2021-03-06 19:03:05 +0100
committerTheJackiMonster <thejackimonster@gmail.com>2021-03-06 19:03:05 +0100
commit9ae422a2a86c3a8199b3fcb4a64ab475274b3450 (patch)
tree46eea216b0ed284f5c058213f2a2733b366af4b3 /src
parent2925310d67483aca6e055e1ce0593c6463cd6c72 (diff)
downloadgnunet-9ae422a2a86c3a8199b3fcb4a64ab475274b3450.tar.gz
gnunet-9ae422a2a86c3a8199b3fcb4a64ab475274b3450.zip
-fix for messengers session-chain
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/messenger/gnunet-service-messenger_member_session.c16
-rw-r--r--src/messenger/gnunet-service-messenger_member_session.h1
-rw-r--r--src/messenger/gnunet-service-messenger_room.c37
3 files changed, 53 insertions, 1 deletions
diff --git a/src/messenger/gnunet-service-messenger_member_session.c b/src/messenger/gnunet-service-messenger_member_session.c
index 636285d93..2e6eae59e 100644
--- a/src/messenger/gnunet-service-messenger_member_session.c
+++ b/src/messenger/gnunet-service-messenger_member_session.c
@@ -68,6 +68,7 @@ create_member_session (struct GNUNET_MESSENGER_Member *member,
68 68
69 init_list_messages(&(session->messages)); 69 init_list_messages(&(session->messages));
70 70
71 session->prev = NULL;
71 session->next = NULL; 72 session->next = NULL;
72 73
73 session->closed = GNUNET_NO; 74 session->closed = GNUNET_NO;
@@ -222,6 +223,7 @@ switch_member_session (struct GNUNET_MESSENGER_MemberSession *session,
222 copy_list_messages(&(next->messages), &(session->messages)); 223 copy_list_messages(&(next->messages), &(session->messages));
223 224
224 session->next = next; 225 session->next = next;
226 next->prev = session;
225 next->next = NULL; 227 next->next = NULL;
226 228
227 session->closed = GNUNET_YES; 229 session->closed = GNUNET_YES;
@@ -516,6 +518,14 @@ load_member_session (struct GNUNET_MESSENGER_Member *member, const char *directo
516 goto destroy_config; 518 goto destroy_config;
517 519
518 session = create_member_session(member, &key); 520 session = create_member_session(member, &key);
521
522 unsigned long long numeric_value;
523
524 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_number(cfg, "session", "closed", &numeric_value))
525 session->closed = (GNUNET_YES == numeric_value? GNUNET_YES : GNUNET_NO);
526
527 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_number(cfg, "session", "completed", &numeric_value))
528 session->completed = (GNUNET_YES == numeric_value? GNUNET_YES : GNUNET_NO);
519 } 529 }
520 530
521destroy_config: 531destroy_config:
@@ -599,6 +609,9 @@ load_member_session_next (struct GNUNET_MESSENGER_MemberSession *session, const
599 session->next = get_cycle_safe_next_session( 609 session->next = get_cycle_safe_next_session(
600 session, member? get_member_session (member, &next_key) : NULL 610 session, member? get_member_session (member, &next_key) : NULL
601 ); 611 );
612
613 if (session->next)
614 session->next->prev = session;
602 } 615 }
603 616
604destroy_config: 617destroy_config:
@@ -688,6 +701,9 @@ save_member_session (struct GNUNET_MESSENGER_MemberSession *session, const char
688 } 701 }
689 } 702 }
690 703
704 GNUNET_CONFIGURATION_set_value_number (cfg, "session", "closed", session->closed);
705 GNUNET_CONFIGURATION_set_value_number (cfg, "session", "completed", session->completed);
706
691 GNUNET_CONFIGURATION_write (cfg, config_file); 707 GNUNET_CONFIGURATION_write (cfg, config_file);
692 GNUNET_CONFIGURATION_destroy (cfg); 708 GNUNET_CONFIGURATION_destroy (cfg);
693 709
diff --git a/src/messenger/gnunet-service-messenger_member_session.h b/src/messenger/gnunet-service-messenger_member_session.h
index dd753be2a..cf4a6bb07 100644
--- a/src/messenger/gnunet-service-messenger_member_session.h
+++ b/src/messenger/gnunet-service-messenger_member_session.h
@@ -46,6 +46,7 @@ struct GNUNET_MESSENGER_MemberSession {
46 struct GNUNET_CONTAINER_MultiHashMap *history; 46 struct GNUNET_CONTAINER_MultiHashMap *history;
47 struct GNUNET_MESSENGER_ListMessages messages; 47 struct GNUNET_MESSENGER_ListMessages messages;
48 48
49 struct GNUNET_MESSENGER_MemberSession* prev;
49 struct GNUNET_MESSENGER_MemberSession* next; 50 struct GNUNET_MESSENGER_MemberSession* next;
50 51
51 int closed; 52 int closed;
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
942static void
943remove_room_member_session (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_MemberSession *session);
944
942void 945void
943callback_room_handle_message (struct GNUNET_MESSENGER_SrvRoom *room, struct GNUNET_MESSENGER_SrvHandle *handle, 946callback_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
1094static void
1095remove_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}