aboutsummaryrefslogtreecommitdiff
path: root/src/namestore
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2013-09-30 10:45:05 +0000
committerChristian Grothoff <christian@grothoff.org>2013-09-30 10:45:05 +0000
commitba188e0085612a599d67de0151aa514373dbbede (patch)
tree1aa20fa6769fce598e2d69072e4c6de0a42761e1 /src/namestore
parentddbfc45f26b4851cbda1bffa19d1b980518dd7fb (diff)
downloadgnunet-ba188e0085612a599d67de0151aa514373dbbede.tar.gz
gnunet-ba188e0085612a599d67de0151aa514373dbbede.zip
-fixing namestore to not disconnect on empty iteration result --- and namestore API to better survive disconnect
Diffstat (limited to 'src/namestore')
-rw-r--r--src/namestore/gnunet-service-namestore.c4
-rw-r--r--src/namestore/namestore_api.c35
2 files changed, 29 insertions, 10 deletions
diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c
index ea5ad6cd0..1a675cb1f 100644
--- a/src/namestore/gnunet-service-namestore.c
+++ b/src/namestore/gnunet-service-namestore.c
@@ -844,7 +844,7 @@ handle_zone_to_name (void *cls,
844 &ztnr_msg.gns_header.header, 844 &ztnr_msg.gns_header.header,
845 GNUNET_NO); 845 GNUNET_NO);
846 } 846 }
847 GNUNET_SERVER_receive_done (client, ztn_ctx.success); 847 GNUNET_SERVER_receive_done (client, GNUNET_OK);
848} 848}
849 849
850 850
@@ -1176,7 +1176,7 @@ monitor_iterate_cb (void *cls,
1176 1176
1177 1177
1178/** 1178/**
1179 * Handles a 'GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START' message 1179 * Handles a #GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START message
1180 * 1180 *
1181 * @param cls unused 1181 * @param cls unused
1182 * @param client GNUNET_SERVER_Client sending the message 1182 * @param client GNUNET_SERVER_Client sending the message
diff --git a/src/namestore/namestore_api.c b/src/namestore/namestore_api.c
index 3875e3cbf..1832d83f7 100644
--- a/src/namestore/namestore_api.c
+++ b/src/namestore/namestore_api.c
@@ -226,6 +226,11 @@ struct GNUNET_NAMESTORE_Handle
226 GNUNET_SCHEDULER_TaskIdentifier reconnect_task; 226 GNUNET_SCHEDULER_TaskIdentifier reconnect_task;
227 227
228 /** 228 /**
229 * Delay introduced before we reconnect.
230 */
231 struct GNUNET_TIME_Relative reconnect_delay;
232
233 /**
229 * Should we reconnect to service due to some serious error? 234 * Should we reconnect to service due to some serious error?
230 */ 235 */
231 int reconnect; 236 int reconnect;
@@ -858,6 +863,7 @@ do_transmit (struct GNUNET_NAMESTORE_Handle *h)
858 GNUNET_TIME_UNIT_FOREVER_REL, 863 GNUNET_TIME_UNIT_FOREVER_REL,
859 GNUNET_NO, &transmit_message_to_namestore, 864 GNUNET_NO, &transmit_message_to_namestore,
860 h); 865 h);
866 GNUNET_break (NULL != h->th);
861} 867}
862 868
863 869
@@ -901,11 +907,19 @@ reconnect_task (void *cls,
901static void 907static void
902force_reconnect (struct GNUNET_NAMESTORE_Handle *h) 908force_reconnect (struct GNUNET_NAMESTORE_Handle *h)
903{ 909{
910 if (NULL != h->th)
911 {
912 GNUNET_CLIENT_notify_transmit_ready_cancel (h->th);
913 h->th = NULL;
914 }
904 h->reconnect = GNUNET_NO; 915 h->reconnect = GNUNET_NO;
905 GNUNET_CLIENT_disconnect (h->client); 916 GNUNET_CLIENT_disconnect (h->client);
917 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
918 "Reconnecting to namestore\n");
906 h->is_receiving = GNUNET_NO; 919 h->is_receiving = GNUNET_NO;
907 h->client = NULL; 920 h->client = NULL;
908 h->reconnect_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, 921 h->reconnect_delay = GNUNET_TIME_STD_BACKOFF (h->reconnect_delay);
922 h->reconnect_task = GNUNET_SCHEDULER_add_delayed (h->reconnect_delay,
909 &reconnect_task, 923 &reconnect_task,
910 h); 924 h);
911} 925}
@@ -958,6 +972,11 @@ GNUNET_NAMESTORE_disconnect (struct GNUNET_NAMESTORE_Handle *h)
958 972
959 LOG (GNUNET_ERROR_TYPE_DEBUG, "Cleaning up\n"); 973 LOG (GNUNET_ERROR_TYPE_DEBUG, "Cleaning up\n");
960 GNUNET_assert (NULL != h); 974 GNUNET_assert (NULL != h);
975 if (NULL != h->th)
976 {
977 GNUNET_CLIENT_notify_transmit_ready_cancel (h->th);
978 h->th = NULL;
979 }
961 while (NULL != (p = h->pending_head)) 980 while (NULL != (p = h->pending_head))
962 { 981 {
963 GNUNET_CONTAINER_DLL_remove (h->pending_head, h->pending_tail, p); 982 GNUNET_CONTAINER_DLL_remove (h->pending_head, h->pending_tail, p);
@@ -1041,7 +1060,7 @@ GNUNET_NAMESTORE_block_cache (struct GNUNET_NAMESTORE_Handle *h,
1041 "NAMESTORE_BLOCK_CACHE", 1060 "NAMESTORE_BLOCK_CACHE",
1042 (unsigned int) msg_size); 1061 (unsigned int) msg_size);
1043 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); 1062 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe);
1044 do_transmit(h); 1063 do_transmit (h);
1045 return qe; 1064 return qe;
1046} 1065}
1047 1066
@@ -1123,7 +1142,7 @@ GNUNET_NAMESTORE_records_store (struct GNUNET_NAMESTORE_Handle *h,
1123 "NAMESTORE_RECORD_STORE", label, msg_size, 1142 "NAMESTORE_RECORD_STORE", label, msg_size,
1124 rd_count); 1143 rd_count);
1125 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); 1144 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe);
1126 do_transmit(h); 1145 do_transmit (h);
1127 return qe; 1146 return qe;
1128} 1147}
1129 1148
@@ -1172,7 +1191,7 @@ GNUNET_NAMESTORE_lookup_block (struct GNUNET_NAMESTORE_Handle *h,
1172 msg->gns_header.r_id = htonl (rid); 1191 msg->gns_header.r_id = htonl (rid);
1173 msg->query = *derived_hash; 1192 msg->query = *derived_hash;
1174 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); 1193 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe);
1175 do_transmit(h); 1194 do_transmit (h);
1176 return qe; 1195 return qe;
1177} 1196}
1178 1197
@@ -1225,7 +1244,7 @@ GNUNET_NAMESTORE_zone_to_name (struct GNUNET_NAMESTORE_Handle *h,
1225 1244
1226 /* transmit message */ 1245 /* transmit message */
1227 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); 1246 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe);
1228 do_transmit(h); 1247 do_transmit (h);
1229 return qe; 1248 return qe;
1230} 1249}
1231 1250
@@ -1279,7 +1298,7 @@ GNUNET_NAMESTORE_zone_iteration_start (struct GNUNET_NAMESTORE_Handle *h,
1279 if (NULL != zone) 1298 if (NULL != zone)
1280 msg->zone = *zone; 1299 msg->zone = *zone;
1281 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); 1300 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe);
1282 do_transmit(h); 1301 do_transmit (h);
1283 return it; 1302 return it;
1284} 1303}
1285 1304
@@ -1311,7 +1330,7 @@ GNUNET_NAMESTORE_zone_iterator_next (struct GNUNET_NAMESTORE_ZoneIterator *it)
1311 "Sending `%s' message\n", 1330 "Sending `%s' message\n",
1312 "ZONE_ITERATION_NEXT"); 1331 "ZONE_ITERATION_NEXT");
1313 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); 1332 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe);
1314 do_transmit(h); 1333 do_transmit (h);
1315} 1334}
1316 1335
1317 1336
@@ -1344,7 +1363,7 @@ GNUNET_NAMESTORE_zone_iteration_stop (struct GNUNET_NAMESTORE_ZoneIterator *it)
1344 "Sending `%s' message\n", 1363 "Sending `%s' message\n",
1345 "ZONE_ITERATION_STOP"); 1364 "ZONE_ITERATION_STOP");
1346 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); 1365 GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe);
1347 do_transmit(h); 1366 do_transmit (h);
1348 GNUNET_free (it); 1367 GNUNET_free (it);
1349} 1368}
1350 1369