-/**
- * Function to send an ack, does not free the ack
- * @param plugin pointer to the plugin
- * @param ack pointer to the ack to send
- */
-static void
-send_ack(struct Plugin * plugin, struct AckSendQueue * ack)
-{
-
- ssize_t bytes;
-
-#if DEBUG_wlan
- GNUNET_log_from(GNUNET_ERROR_TYPE_DEBUG, PLUGIN_LOG_NAME,
- "Sending ack for message_id %u for mac endpoint %p, size %u\n",
- ack->message_id, ack->endpoint,
- ntohs(ack->hdr->size) - sizeof(struct Radiotap_Send));
-#endif
-
- getRadiotapHeader(plugin, ack->endpoint, ack->radioHeader);
- getWlanHeader(ack->ieeewlanheader, &ack->endpoint->addr, plugin,
- ntohs(ack->hdr->size));
-
- bytes = GNUNET_DISK_file_write(plugin->server_stdin_handle, ack->hdr,
- ntohs(ack->hdr->size));
- if (bytes == GNUNET_SYSERR)
- {
- GNUNET_log_from(GNUNET_ERROR_TYPE_ERROR, PLUGIN_LOG_NAME,
- _("Error writing to wlan healper. errno == %d, ERROR: %s\n"),
- errno, strerror(errno));
-
- }
- GNUNET_assert(bytes != GNUNET_SYSERR);
- GNUNET_assert(bytes == ntohs(ack->hdr->size));
- set_next_send(plugin);
-}
-
-/**
- * function to finish a sending if not all could have been writen befor
- * @param cls pointer to the Finish_send struct
- * @param tc TaskContext
- */
-static void
-finish_sending(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
- struct Finish_send * finish = cls;
- struct Plugin * plugin;
- ssize_t bytes;
-
- plugin = finish->plugin;
- plugin->server_write_task = GNUNET_SCHEDULER_NO_TASK;
-
- if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
- {
- GNUNET_free (finish->msgstart);
- GNUNET_free (finish);
- return;
- }
- bytes = GNUNET_DISK_file_write(plugin->server_stdin_handle,
- finish->msgheader, finish->size);
- GNUNET_assert (bytes != GNUNET_SYSERR);
-
- if (bytes != finish->size)
- {
- finish->msgheader = finish->msgheader + bytes;
- finish->size = finish->size - bytes;
- plugin->server_write_task = GNUNET_SCHEDULER_add_write_file(
- GNUNET_TIME_UNIT_FOREVER_REL, plugin->server_stdin_handle,
- &finish_sending, finish);
- }
- else
- {
- GNUNET_free(finish->msgstart);
- GNUNET_free(finish);
- set_next_send(plugin);
- }
-}
-
-/**
- * Function called when wlan helper is ready to get some data
- *
- * @param cls closure
- * @param tc GNUNET_SCHEDULER_TaskContext
- */
-static void
-do_transmit(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
- struct Plugin * plugin = cls;
-
- plugin->server_write_task = GNUNET_SCHEDULER_NO_TASK;
- if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
- return;
-
- struct Session * session;
- struct FragmentMessage * fm;
- struct Finish_send * finish;
- struct FragmentMessage_queue * fmq;
- struct AckSendQueue * ack;
- ssize_t bytes;
-
- if (plugin->ack_send_queue_head != NULL)
- {
- ack = plugin->ack_send_queue_head;
- GNUNET_CONTAINER_DLL_remove(plugin->ack_send_queue_head,
- plugin->ack_send_queue_tail, ack);
- send_ack(plugin, ack);
- GNUNET_free(ack);
- return;
- }
-
- //test if a "hello-beacon" has to be send
- if (GNUNET_TIME_absolute_get_remaining(plugin->beacon_time).rel_value == 0)
- {
- send_hello_beacon(plugin);
- return;
- }
-
- if (plugin->sending_messages_head != NULL)
- {
- fmq = plugin->sending_messages_head;
- fm = fmq->content;
- GNUNET_CONTAINER_DLL_remove(plugin->sending_messages_head,plugin->sending_messages_tail,fmq);
- GNUNET_free(fmq);
-
- session = fm->session;
- GNUNET_assert(session != NULL);
-
-#if DEBUG_wlan
- GNUNET_log_from(GNUNET_ERROR_TYPE_DEBUG,PLUGIN_LOG_NAME,
- "Sending GNUNET_MESSAGE_TYPE_WLAN_FRAGMENT for fragment message %p, size: %u\n",
- fm, fm->size);
-#endif
-
- getRadiotapHeader(plugin, session->mac, fm->radioHeader);
- getWlanHeader(fm->ieeewlanheader, &(fm->session->mac->addr), plugin,
- fm->size);
-
- bytes = GNUNET_DISK_file_write(plugin->server_stdin_handle, fm->frag,
- fm->size);
- if (bytes == GNUNET_SYSERR)
- {
- GNUNET_log_from(GNUNET_ERROR_TYPE_ERROR, PLUGIN_LOG_NAME,
- _("Error writing to wlan healper. errno == %d, ERROR: %s\n"),
- errno, strerror(errno));
-
- }
- GNUNET_assert(bytes != GNUNET_SYSERR);
-
- if (bytes != fm->size)
- {
- finish = GNUNET_malloc(sizeof( struct Finish_send));
- finish->plugin = plugin;
- finish->msgheader = fm->frag + bytes;
- finish->size = fm->size - bytes;
- finish->msgstart = (struct GNUNET_MessageHeader *) fm->frag;
-
- GNUNET_assert(plugin->server_write_task == GNUNET_SCHEDULER_NO_TASK);
-
- plugin->server_write_task = GNUNET_SCHEDULER_add_write_file(
- GNUNET_TIME_UNIT_FOREVER_REL, plugin->server_stdin_handle,
- &finish_sending, finish);
- fm->frag = NULL;
- }
- else
- {
- GNUNET_free(fm->frag);
- fm->frag = NULL;
- set_next_send(plugin);
- }
- GNUNET_FRAGMENT_context_transmission_done (fm->fragcontext);
- return;
- }
-
- GNUNET_log_from(GNUNET_ERROR_TYPE_WARNING, PLUGIN_LOG_NAME,
- "do_transmit did nothing, should not happen!\n");
-}
-
-/**
- * Another peer has suggested an address for this
- * peer and transport plugin. Check that this could be a valid
- * address. If so, consider adding it to the list
- * of addresses.
- *
- * @param cls closure
- * @param addr pointer to the address
- * @param addrlen length of addr
- * @return GNUNET_OK if this is a plausible address for this peer
- * and transport
- */
-static int
-wlan_plugin_address_suggested(void *cls, const void *addr, size_t addrlen)
-{
- //struct Plugin *plugin = cls;
-
- /* check if the address is plausible; if so,
- add it to our list! */
-
- GNUNET_assert(cls !=NULL);
- //FIXME mitm is not checked
- //Mac Address has 6 bytes
- if (addrlen == 6)
- {
- /* TODO check for bad addresses like multicast, broadcast, etc */
- return GNUNET_OK;
- }
-
- return GNUNET_SYSERR;
-}