- (const struct GNUNET_TRANSPORT_ATS_Information *) &distance, 2, session,
- (const char*) &session->addr, sizeof(session->addr));
-}
-
-/**
- * function to add an ack to send it for a received fragment
- * @param plugin pointer to the global plugin structure
- * @param session pointer to the session this ack belongs to
- * @param bitfield bitfield to send
- * @param fh pointer to the fragmentation header which we would like to acknolage
- */
-
-void
-add_ack_for_send(struct Plugin * plugin, struct Session * session,
- uint64_t bitfield, struct FragmentationHeader * fh)
-{
- struct AckSendQueue * ack;
-
- GNUNET_assert(plugin != NULL);
- GNUNET_assert(session != NULL);
- GNUNET_assert(fh != NULL);
-
- ack = GNUNET_malloc(sizeof(struct AckSendQueue));
- ack->fragments_field = bitfield;
- ack->message_id = ntohl(fh->message_id);
- ack->session = session;
-
- GNUNET_CONTAINER_DLL_insert_tail(plugin->ack_send_queue_head,
- plugin->ack_send_queue_tail, ack);
-
-}
-
-/**
- * function to get the receive message from the message id and the session
- * @param plugin pointer to the plugin struct
- * @param session session this fragment belongs to
- * @param message_id id of the message
- */
-
-struct Receive_Message_Queue *
-get_receive_message(struct Plugin * plugin, struct Session * session,
- uint32_t message_id)
-{
- struct Receive_Message_Queue * rec_message = plugin->receive_messages_head;
- while (rec_message != NULL)
- {
- if ((rec_message->message_id_in == message_id) && (rec_message->session
- == session))
- {
- return rec_message;
- }
- rec_message = rec_message->next;
- }
- return NULL;
-}
-
-
-
-/**
- * function to insert a received fragment into the right fragment queue of the right message
- * @param plugin pointer to the plugin struct
- * @param session_light pointer to the session_light struct of this message
- * @param session session this fragment belongs to
- * @param fh pointer to the header of the fragment
- * @return new fragment bitfield for the message
- */
-
-uint64_t
-insert_fragment_in_in_message_queue(struct Plugin * plugin,
- struct Session_light * session_light, struct Session * session,
- struct FragmentationHeader * fh, const struct Radiotap_rx * rxinfo)
-{
- struct Receive_Fragment_Queue * rx_frag = NULL;
- struct Receive_Message_Queue * rx_message;
- const char * tempmsg = (char*) &fh[1];
- uint64_t retval = 0;
-
- //TODO fragments do not timeout
- //check if message_id is right or it is a new msg
- GNUNET_assert(fh != NULL);
-
- rx_message = get_receive_message(plugin, session, ntohl(fh->message_id));
-
- if (rx_message == NULL)
- {
- if (session->fragment_messages_in_count < MESSAGES_IN_QUEUE_PER_SESSION)
- {
-
- //new message incoming
- rx_message = GNUNET_malloc(sizeof (struct Receive_Message_Queue));
- rx_message->message_id_in = ntohl(fh->message_id);
- rx_message->rec_size = MESSAGE_LENGHT_UNKNOWN;
- rx_message->session = session;
- rx_message->timeout = GNUNET_TIME_absolute_add(
- GNUNET_TIME_absolute_get(), MESSAGE_IN_TIMEOUT);
- rx_message->received_fragments = 0;
-
- GNUNET_CONTAINER_DLL_insert(plugin->receive_messages_head, plugin->receive_messages_teil, rx_message);
-
- session->fragment_messages_in_count++;
- plugin->pending_receive_messages++;
-
-#if DEBUG_wlan
- GNUNET_log(
- GNUNET_ERROR_TYPE_DEBUG,
- "New fragmented message started: message id %u, messages in for this session %u, messages in %u\n",
- rx_message->message_id_in, session->fragment_messages_in_count,
- plugin->pending_receive_messages);
-#endif
- }
- else
- {
-
- GNUNET_log(
- GNUNET_ERROR_TYPE_INFO,
- "WLAN fragment message_id and session message_id do not exist, max MESSAGES_IN_QUEUE_PER_SESSION reached\n");
- setBit((char *) &retval, ntohs(fh->fragment_off_or_num));
- return retval;
- }
- }
-
- if (is_double_msg(rx_message, fh) != GNUNET_YES)
- {
-
-
- //report size
- rx_frag = GNUNET_malloc(sizeof (struct Receive_Fragment_Queue) +
- ntohs(fh->header.size) - sizeof(struct FragmentationHeader));
- rx_frag->size = ntohs(fh->header.size)
- - sizeof(struct FragmentationHeader);
- rx_frag->num = ntohs(fh->fragment_off_or_num);
- rx_frag->msg = (char*) &(rx_frag[1]);
- //copy msg to buffer
- memcpy((char *) rx_frag->msg, tempmsg, rx_frag->size);
- memcpy((char *) &(rx_frag->rxinfo), rxinfo, sizeof(rxinfo));
- insert_fragment_in_queue(rx_message, rx_frag);
- //save bitfield
- retval = rx_message->received_fragments;
-
-#if DEBUG_wlan
- GNUNET_log(
- GNUNET_ERROR_TYPE_DEBUG,
- "New fragment: size %u, fragsize %u, message id %u, bitfield %X, session %u\n",
- rx_message->rec_size, rx_frag->size, rx_message->message_id_in,
- rx_message->received_fragments, session);
-#endif
-
- check_rec_finished_msg(plugin, session_light, session, rx_message);
- }
- else
- {
- GNUNET_log(GNUNET_ERROR_TYPE_INFO, "WLAN fragment is a clone\n");
- retval = rx_message->received_fragments;
-
- }
- return retval;
-