struct GNUNET_CONFIGURATION_Handle *cfg;
struct GNUNET_CORE_Handle *ch;
struct GNUNET_PeerIdentity id;
- struct GNUNET_TRANSPORT_Handle *th;
+ struct GNUNET_TRANSPORT_OfferHelloHandle *oh;
struct GNUNET_TRANSPORT_GetHelloHandle *ghh;
struct GNUNET_ATS_ConnectivityHandle *ats;
struct GNUNET_ATS_ConnectivitySuggestHandle *ats_sh;
#define OKPP do { ok++; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Now at stage %u at %s:%u\n", ok, __FILE__, __LINE__); } while (0)
+static void
+offer_hello_done (void *cls)
+{
+ struct PeerContext *p = cls;
+
+ p->oh = NULL;
+}
+
+
static void
process_hello (void *cls,
const struct GNUNET_MessageHeader *message)
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Received (my) `%s' from transport service\n", "HELLO");
GNUNET_assert (message != NULL);
- if ((p == &p1) && (p2.th != NULL))
- GNUNET_TRANSPORT_offer_hello (p2.cfg, message, NULL, NULL);
- if ((p == &p2) && (p1.th != NULL))
- GNUNET_TRANSPORT_offer_hello (p1.cfg, message, NULL, NULL);
+ if ((p == &p1) && (NULL == p2.oh))
+ p2.oh = GNUNET_TRANSPORT_offer_hello (p2.cfg, message,
+ &offer_hello_done,
+ &p2);
+ if ((p == &p2) && (NULL == p1.oh))
+ p1.oh = GNUNET_TRANSPORT_offer_hello (p1.cfg,
+ message,
+ &offer_hello_done,
+ &p1);
}
GNUNET_CORE_disconnect (p->ch);
p->ch = NULL;
}
- if (NULL != p->th)
+ if (NULL != p->ghh)
{
GNUNET_TRANSPORT_get_hello_cancel (p->ghh);
- GNUNET_TRANSPORT_disconnect (p->th);
- p->th = NULL;
+ p->ghh = NULL;
+ }
+ if (NULL != p->oh)
+ {
+ GNUNET_TRANSPORT_offer_hello_cancel (p->oh);
+ p->oh = NULL;
}
if (NULL != p->ats_sh)
{
"gnunet-service-arm",
"-c", cfgname, NULL);
GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
- p->th = GNUNET_TRANSPORT_connect (p->cfg, NULL, p, NULL, NULL, NULL);
- GNUNET_assert (NULL != p->th);
p->ats = GNUNET_ATS_connectivity_init (p->cfg);
GNUNET_assert (NULL != p->ats);
p->ghh = GNUNET_TRANSPORT_get_hello (p->cfg, &process_hello, p);
struct GNUNET_CONFIGURATION_Handle *cfg;
struct GNUNET_CORE_Handle *ch;
struct GNUNET_PeerIdentity id;
- struct GNUNET_TRANSPORT_Handle *th;
+ struct GNUNET_TRANSPORT_OfferHelloHandle *oh;
struct GNUNET_MessageHeader *hello;
struct GNUNET_TRANSPORT_GetHelloHandle *ghh;
struct GNUNET_ATS_ConnectivityHandle *ats;
GNUNET_CORE_disconnect (p->ch);
p->ch = NULL;
}
- if (NULL != p->th)
+ if (NULL != p->ghh)
{
GNUNET_TRANSPORT_get_hello_cancel (p->ghh);
- GNUNET_TRANSPORT_disconnect (p->th);
- p->th = NULL;
+ p->ghh = NULL;
+ }
+ if (NULL != p->oh)
+ {
+ GNUNET_TRANSPORT_offer_hello_cancel (p->oh);
+ p->oh = NULL;
}
if (NULL != p->ats_sh)
{
}
+static void
+offer_hello_done (void *cls)
+{
+ struct PeerContext *p = cls;
+
+ p->oh = NULL;
+}
+
+
static void
process_hello (void *cls,
const struct GNUNET_MessageHeader *message)
"Received (my) `%s' from transport service\n", "HELLO");
GNUNET_assert (message != NULL);
p->hello = GNUNET_copy_message (message);
- if ((p == &p1) && (p2.th != NULL))
- GNUNET_TRANSPORT_offer_hello (p2.cfg, message, NULL, NULL);
- if ((p == &p2) && (p1.th != NULL))
- GNUNET_TRANSPORT_offer_hello (p1.cfg, message, NULL, NULL);
-
- if ((p == &p1) && (p2.hello != NULL))
- GNUNET_TRANSPORT_offer_hello (p1.cfg, p2.hello, NULL, NULL);
- if ((p == &p2) && (p1.hello != NULL))
- GNUNET_TRANSPORT_offer_hello (p2.cfg, p1.hello, NULL, NULL);
+ if ((p == &p1) && (NULL == p2.oh))
+ p2.oh = GNUNET_TRANSPORT_offer_hello (p2.cfg,
+ message,
+ &offer_hello_done,
+ &p2);
+ if ((p == &p2) && (NULL == p1.oh))
+ p1.oh = GNUNET_TRANSPORT_offer_hello (p1.cfg,
+ message,
+ &offer_hello_done,
+ &p1);
+
+ if ((p == &p1) && (p2.hello != NULL) && (NULL == p1.oh) )
+ p1.oh = GNUNET_TRANSPORT_offer_hello (p1.cfg,
+ p2.hello,
+ &offer_hello_done,
+ &p1);
+ if ((p == &p2) && (p1.hello != NULL) && (NULL == p2.oh) )
+ p2.oh = GNUNET_TRANSPORT_offer_hello (p2.cfg,
+ p1.hello,
+ &offer_hello_done,
+ &p2);
}
"gnunet-service-arm",
"-c", cfgname, NULL);
GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
- p->th = GNUNET_TRANSPORT_connect (p->cfg, NULL, p, NULL, NULL, NULL);
- GNUNET_assert (p->th != NULL);
p->ats = GNUNET_ATS_connectivity_init (p->cfg);
GNUNET_assert (NULL != p->ats);
- p->ghh = GNUNET_TRANSPORT_get_hello (p->cfg, &process_hello, p);
+ p->ghh = GNUNET_TRANSPORT_get_hello (p->cfg,
+ &process_hello,
+ p);
GNUNET_free (binary);
}
}
+static void
+offer_hello_done (void *cls)
+{
+ struct PeerContext *p = cls;
+
+ p->oh = NULL;
+}
+
+
static void
process_hello (void *cls, const struct GNUNET_MessageHeader *message)
{
p->hello = GNUNET_malloc (ntohs (message->size));
GNUNET_memcpy (p->hello, message, ntohs (message->size));
if ((p == &p1) && (NULL == p2.oh))
- p2.oh = GNUNET_TRANSPORT_offer_hello (p2.cfg, message, NULL, NULL);
+ p2.oh = GNUNET_TRANSPORT_offer_hello (p2.cfg,
+ message,
+ &offer_hello_done,
+ &p2);
if ((p == &p2) && (NULL == p1.oh))
- p1.oh = GNUNET_TRANSPORT_offer_hello (p1.cfg, message, NULL, NULL);
+ p1.oh = GNUNET_TRANSPORT_offer_hello (p1.cfg, message,
+ &offer_hello_done,
+ &p1);
if ((p == &p1) && (p2.hello != NULL) && (NULL == p1.oh))
- p1.oh = GNUNET_TRANSPORT_offer_hello (p1.cfg, p2.hello, NULL, NULL);
+ p1.oh = GNUNET_TRANSPORT_offer_hello (p1.cfg,
+ p2.hello,
+ &offer_hello_done,
+ &p1);
if ((p == &p2) && (p1.hello != NULL) && (NULL == p2.oh) )
- p2.oh = GNUNET_TRANSPORT_offer_hello (p2.cfg, p1.hello, NULL, NULL);
+ p2.oh = GNUNET_TRANSPORT_offer_hello (p2.cfg,
+ p1.hello,
+ &offer_hello_done,
+ &p2);
}
-
static void
setup_peer (struct PeerContext *p, const char *cfgname)
{