* connections between clients and service providers.
*/
#include "platform.h"
-#include "gnunet_common.h"
-#include "gnunet_client_lib.h"
#include "gnunet_protocols.h"
-#include "gnunet_server_lib.h"
-#include "gnunet_scheduler_lib.h"
+#include "gnunet_util_lib.h"
/**
*/
int in_receive;
+ /**
+ * Is this the first message we are sending to the service?
+ */
+ int first_message;
+
/**
* How often have we tried to connect?
*/
#if AF_UNIX
struct GNUNET_CONNECTION_Handle *connection;
char *unixpath;
+ struct sockaddr_un s_un;
unixpath = NULL;
if ((GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (cfg, service_name, "UNIXPATH", &unixpath)) &&
return NULL;
connection = do_connect (service_name, cfg, 0);
client = GNUNET_malloc (sizeof (struct GNUNET_CLIENT_Connection));
+ client->first_message = GNUNET_YES;
client->attempts = 1;
client->connection = connection;
client->service_name = GNUNET_strdup (service_name);
th->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
th->client->connection =
do_connect (th->client->service_name, th->client->cfg, th->client->attempts++);
+ th->client->first_message = GNUNET_YES;
if (NULL == th->client->connection)
{
/* could happen if we're out of sockets */
(th->client->back_off, 2),
GNUNET_TIME_UNIT_SECONDS);
LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Transmission failed %u times, trying again in %llums.\n",
+ "Transmission failed %u times, trying again in %s.\n",
MAX_ATTEMPTS - th->attempts_left,
- (unsigned long long) delay.rel_value);
+ GNUNET_STRINGS_relative_time_to_string (delay, GNUNET_YES));
th->reconnect_task =
GNUNET_SCHEDULER_add_delayed (delay, &client_delayed_retry, th);
return;
(client->back_off, 2),
GNUNET_TIME_UNIT_SECONDS);
LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Transmission failed %u times, trying again in %llums.\n",
+ "Transmission failed %u times, trying again in %s.\n",
MAX_ATTEMPTS - th->attempts_left,
- (unsigned long long) delay.rel_value);
+ GNUNET_STRINGS_relative_time_to_string (delay, GNUNET_YES));
client->th = th;
th->reconnect_task =
GNUNET_SCHEDULER_add_delayed (delay, &client_delayed_retry, th);
th->client = client;
th->size = size;
th->timeout = GNUNET_TIME_relative_to_absolute (timeout);
- th->auto_retry = auto_retry;
+ /* always auto-retry on first message to service */
+ th->auto_retry = (GNUNET_YES == client->first_message) ? GNUNET_YES : auto_retry;
+ client->first_message = GNUNET_NO;
th->notify = notify;
th->notify_cls = notify_cls;
th->attempts_left = MAX_ATTEMPTS;