diff options
Diffstat (limited to 'src/gnunet_chat_group.c')
-rw-r--r-- | src/gnunet_chat_group.c | 93 |
1 files changed, 89 insertions, 4 deletions
diff --git a/src/gnunet_chat_group.c b/src/gnunet_chat_group.c index 0355dd5..a2aab29 100644 --- a/src/gnunet_chat_group.c +++ b/src/gnunet_chat_group.c | |||
@@ -23,6 +23,7 @@ | |||
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include "gnunet_chat_group.h" | 25 | #include "gnunet_chat_group.h" |
26 | #include "gnunet_chat_util.h" | ||
26 | 27 | ||
27 | #include "gnunet_chat_group_intern.c" | 28 | #include "gnunet_chat_group_intern.c" |
28 | 29 | ||
@@ -63,14 +64,98 @@ group_destroy (struct GNUNET_CHAT_Group* group) | |||
63 | void | 64 | void |
64 | group_publish (struct GNUNET_CHAT_Group* group) | 65 | group_publish (struct GNUNET_CHAT_Group* group) |
65 | { | 66 | { |
67 | char* topic = NULL; | ||
68 | GNUNET_asprintf ( | ||
69 | &topic, | ||
70 | "GNUNET_CHAT_%s", | ||
71 | group->topic | ||
72 | ); | ||
73 | |||
66 | group->announcement = GNUNET_REGEX_announce( | 74 | group->announcement = GNUNET_REGEX_announce( |
67 | group->handle->cfg, group->topic, // TODO: raw topic? | 75 | group->handle->cfg, topic, |
68 | GNUNET_TIME_relative_get_minute_(), // TODO: configure delay? | 76 | GNUNET_TIME_relative_get_minute_(), |
69 | 1 // TODO: no compression? | 77 | 6 |
70 | ); | 78 | ); |
71 | 79 | ||
72 | group->search = GNUNET_REGEX_search( | 80 | group->search = GNUNET_REGEX_search( |
73 | group->handle->cfg, group->topic, // TODO: raw topic? | 81 | group->handle->cfg, topic, |
74 | search_group_by_topic, group | 82 | search_group_by_topic, group |
75 | ); | 83 | ); |
84 | |||
85 | GNUNET_free(topic); | ||
86 | } | ||
87 | |||
88 | void | ||
89 | group_load_config (struct GNUNET_CHAT_Group *group) | ||
90 | { | ||
91 | const char *directory = group->handle->directory; | ||
92 | |||
93 | if ((!directory) || (!(group->context))) | ||
94 | return; | ||
95 | |||
96 | const struct GNUNET_HashCode *hash = GNUNET_MESSENGER_room_get_key( | ||
97 | group->context->room | ||
98 | ); | ||
99 | |||
100 | char* filename; | ||
101 | util_get_filename(directory, "groups", hash, &filename); | ||
102 | |||
103 | if (GNUNET_YES != GNUNET_DISK_file_test(filename)) | ||
104 | goto free_filename; | ||
105 | |||
106 | struct GNUNET_CONFIGURATION_Handle *config = GNUNET_CONFIGURATION_create(); | ||
107 | |||
108 | if (GNUNET_OK != GNUNET_CONFIGURATION_load(config, directory)) | ||
109 | goto destroy_config; | ||
110 | |||
111 | char* name = NULL; | ||
112 | |||
113 | if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string( | ||
114 | config, "group", "topic", &name)) | ||
115 | util_set_name_field(name, &(group->topic)); | ||
116 | |||
117 | if (name) | ||
118 | GNUNET_free(name); | ||
119 | |||
120 | destroy_config: | ||
121 | GNUNET_CONFIGURATION_destroy(config); | ||
122 | |||
123 | free_filename: | ||
124 | GNUNET_free(filename); | ||
125 | } | ||
126 | |||
127 | void | ||
128 | group_save_config (const struct GNUNET_CHAT_Group *group) | ||
129 | { | ||
130 | const char *directory = group->handle->directory; | ||
131 | |||
132 | if ((!directory) || (!(group->context))) | ||
133 | return; | ||
134 | |||
135 | const struct GNUNET_HashCode *hash = GNUNET_MESSENGER_room_get_key( | ||
136 | group->context->room | ||
137 | ); | ||
138 | |||
139 | struct GNUNET_CONFIGURATION_Handle *config = GNUNET_CONFIGURATION_create(); | ||
140 | |||
141 | if (group->topic) | ||
142 | { | ||
143 | struct GNUNET_HashCode topic_hash; | ||
144 | GNUNET_CRYPTO_hash(group->topic, strlen(group->topic), &topic_hash); | ||
145 | |||
146 | if (0 == GNUNET_memcmp(hash, &topic_hash)) | ||
147 | GNUNET_CONFIGURATION_set_value_string( | ||
148 | config, "group", "topic", group->topic | ||
149 | ); | ||
150 | } | ||
151 | |||
152 | char* filename; | ||
153 | util_get_filename(directory, "groups", hash, &filename); | ||
154 | |||
155 | if (GNUNET_OK == GNUNET_DISK_directory_create_for_file(filename)) | ||
156 | GNUNET_CONFIGURATION_write(config, filename); | ||
157 | |||
158 | GNUNET_CONFIGURATION_destroy(config); | ||
159 | |||
160 | GNUNET_free(filename); | ||
76 | } | 161 | } |