sh->reconnect = GNUNET_YES;
return NULL;
}
+ /* This check exploits the fact that first field of a session object
+ * is peer identity.
+ */
+ if (0 !=
+ memcmp (peer, sh->session_array[session_id].session,
+ sizeof (struct GNUNET_PeerIdentity)))
+ {
+ GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "ats-scheduling-api",
+ "Session %p belongs to peer `%s'\n",
+ sh->session_array[session_id].session, GNUNET_i2s_full ((struct GNUNET_PeerIdentity *)sh->session_array[session_id].session));
+/*
+ GNUNET_break (0);
+ sh->reconnect = GNUNET_YES;
+ return NULL;
+*/
+ }
return sh->session_array[session_id].session;
}
*
* @param sh handle
* @param address the address
- * @param session session handle (if available)
+ * @param session session handle, can be NULL
* @param ats performance data for the address
* @param ats_count number of performance records in 'ats'
* @return GNUNET_OK on success, GNUNET_SYSERR on error
GNUNET_break (0);
return GNUNET_SYSERR;
}
- if ((address == NULL) && (session == NULL))
- {
- GNUNET_break (0);
- return GNUNET_SYSERR;
- }
namelen =
(address->transport_name ==
return GNUNET_SYSERR;
}
- p = GNUNET_malloc (sizeof (struct PendingMessage) + msize);
- p->size = msize;
- p->is_init = GNUNET_NO;
- m = (struct AddressUpdateMessage *) &p[1];
- m->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_ADDRESS_ADD);
- m->header.size = htons (msize);
- m->ats_count = htonl (ats_count);
- m->peer = address->peer;
- m->address_length = htons (address->address_length);
- m->plugin_name_length = htons (namelen);
if (NULL != session)
{
s = find_session_id (sh, session, &address->peer);
s = find_empty_session_slot (sh, session, &address->peer);
GNUNET_break (NOT_FOUND != s);
}
+
+ p = GNUNET_malloc (sizeof (struct PendingMessage) + msize);
+ p->size = msize;
+ p->is_init = GNUNET_NO;
+ m = (struct AddressUpdateMessage *) &p[1];
+ m->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_ADDRESS_ADD);
+ m->header.size = htons (msize);
+ m->ats_count = htonl (ats_count);
+ m->peer = address->peer;
+ m->address_length = htons (address->address_length);
+ m->plugin_name_length = htons (namelen);
m->session_id = htonl (s);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
memcpy (am, ats, ats_count * sizeof (struct GNUNET_ATS_Information));
pm = (char *) &am[ats_count];
memcpy (pm, address->address, address->address_length);
- memcpy (&pm[address->address_length], address->transport_name, namelen);
+ if (NULL != address->transport_name)
+ memcpy (&pm[address->address_length], address->transport_name, namelen);
GNUNET_CONTAINER_DLL_insert_tail (sh->pending_head, sh->pending_tail, p);
do_transmit (sh);
return GNUNET_OK;
*
* @param sh handle
* @param address the address
- * @param session session handle (if available)
+ * @param session session handle, can be NULL
* @param ats performance data for the address
* @param ats_count number of performance records in 'ats'
*/
GNUNET_break (0);
return;
}
- if ((address == NULL) && (session == NULL))
- {
- GNUNET_break (0);
- return;
- }
namelen =
(address->transport_name ==
return;
}
- p = GNUNET_malloc (sizeof (struct PendingMessage) + msize);
- p->size = msize;
- p->is_init = GNUNET_NO;
- m = (struct AddressUpdateMessage *) &p[1];
- m->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_ADDRESS_UPDATE);
- m->header.size = htons (msize);
- m->ats_count = htonl (ats_count);
- m->peer = address->peer;
- m->address_length = htons (address->address_length);
- m->plugin_name_length = htons (namelen);
if (NULL != session)
{
s = find_session_id (sh, session, &address->peer);
return;
}
}
+
+ p = GNUNET_malloc (sizeof (struct PendingMessage) + msize);
+ p->size = msize;
+ p->is_init = GNUNET_NO;
+ m = (struct AddressUpdateMessage *) &p[1];
+ m->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_ADDRESS_UPDATE);
+ m->header.size = htons (msize);
+ m->ats_count = htonl (ats_count);
+ m->peer = address->peer;
+ m->address_length = htons (address->address_length);
+ m->plugin_name_length = htons (namelen);
+
m->session_id = htonl (s);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
*
* @param sh handle
* @param address the address
- * @param session session handle
+ * @param session session handle, can be NULL
* @param in_use GNUNET_YES if this address is now used, GNUNET_NO
* if address is not used any more
*/
return;
}
- p = GNUNET_malloc (sizeof (struct PendingMessage) + msize);
- p->size = msize;
- p->is_init = GNUNET_NO;
- m = (struct AddressUseMessage *) &p[1];
- m->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_ADDRESS_IN_USE);
- m->header.size = htons (msize);
- m->peer = address->peer;
- m->in_use = htons (in_use);
- m->address_length = htons (address->address_length);
- m->plugin_name_length = htons (namelen);
if (session != NULL)
{
s = find_session_id (sh, session, &address->peer);
}
}
+ p = GNUNET_malloc (sizeof (struct PendingMessage) + msize);
+ p->size = msize;
+ p->is_init = GNUNET_NO;
+ m = (struct AddressUseMessage *) &p[1];
+ m->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_ADDRESS_IN_USE);
+ m->header.size = htons (msize);
+ m->peer = address->peer;
+ m->in_use = htons (in_use);
+ m->address_length = htons (address->address_length);
+ m->plugin_name_length = htons (namelen);
+
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Setting address used to %s for peer `%s', plugin `%s', session %p\n",
(GNUNET_YES == in_use) ? "YES" : "NO",
*
* @param sh handle
* @param address the address
- * @param session session handle that is no longer valid
+ * @param session session handle that is no longer valid, can be NULL
*/
void
GNUNET_ATS_address_destroyed (struct GNUNET_ATS_SchedulingHandle *sh,
size_t msize;
uint32_t s = 0;
+ if (address == NULL)
+ {
+ GNUNET_break (0);
+ return;
+ }
+
GNUNET_assert (address->transport_name != NULL);
namelen = strlen (address->transport_name) + 1;
GNUNET_assert (namelen > 1);
return;
}
+ s = find_session_id (sh, session, &address->peer);
+ if ((NULL != session) && (NOT_FOUND == s))
+ {
+ /* trying to delete unknown address */
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Trying to delete unknown address for peer `%s', plugin `%s', session %p\n",
+ GNUNET_i2s (&address->peer), address->transport_name, session);
+ return;
+ }
+
p = GNUNET_malloc (sizeof (struct PendingMessage) + msize);
p->size = msize;
p->is_init = GNUNET_NO;
m->address_length = htons (address->address_length);
m->plugin_name_length = htons (namelen);
- s = find_session_id (sh, session, &address->peer);
- if ((NULL != session) && (NOT_FOUND == s))
- {
- /* trying to delete unknown address */
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Trying to delete unknown address for peer `%s', plugin `%s', session %p\n",
- GNUNET_i2s (&address->peer), address->transport_name, session);
- return;
- }
-
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Deleting address for peer `%s', plugin `%s', session %p\n",
GNUNET_i2s (&address->peer), address->transport_name, session);