- fragheader.fragment_off_or_num = htons(fm->message_pos);
- fragheader.message_id = htonl(fm->message_id_out);
- copystart = fm->msg + copyoffset;
- copysize = GNUNET_MIN(fm->message_size - copyoffset,
- WLAN_MTU - sizeof(struct FragmentationHeader));
-
- if (copyoffset >= fm->message_size)
- {
- GNUNET_log(
- GNUNET_ERROR_TYPE_ERROR,
- "offset in message for fragment too large, offset %u, size %u, max size %u, copysize %u, message_pos %u,\n",
- copyoffset, fm->message_size, WLAN_MTU
- - sizeof(struct FragmentationHeader), copysize,
- fm->message_pos);
- }
- GNUNET_assert(copyoffset < fm->message_size);
- //FIXME remove later
- GNUNET_assert(copystart < fm->msg + fm->message_size);
-
- fragheader.header.size = htons(copysize
- + sizeof(struct FragmentationHeader));
- fragheader.header.type = htons(GNUNET_MESSAGE_TYPE_WLAN_FRAGMENT);
-
- /* }
- else
- {
- // there is no need to split
- copystart = fm->msg;
- copysize = fm->message_size;
- }*/
-
- size += copysize;
- size += sizeof(struct Radiotap_Send) + sizeof(struct ieee80211_frame)
- + sizeof(struct GNUNET_MessageHeader);
- msgheader = GNUNET_malloc(size);
- msgheader->size = htons(size);
- msgheader->type = htons(GNUNET_MESSAGE_TYPE_WLAN_HELPER_DATA);
-
- radioHeader = (struct Radiotap_Send*) &msgheader[1];
- getRadiotapHeader(plugin, session, radioHeader);
-
- ieeewlanheader = (struct ieee80211_frame *) &radioHeader[1];
- getWlanHeader(ieeewlanheader, fm->session->addr, plugin);
-
- //could be faster if content is just send and not copyed before
- //fragmentheader is needed
- //if (fm->message_size > WLAN_MTU)
- // {
- fragheader.message_crc = htons(getcrc16(copystart, copysize));
- memcpy(&ieeewlanheader[1], &fragheader,
- sizeof(struct FragmentationHeader));
- fragheaderptr = (struct FragmentationHeader *) &ieeewlanheader[1];
- memcpy(&fragheaderptr[1], copystart, copysize);
- /* }
- else
- {
- memcpy(&ieeewlanheader[1], copystart, copysize);
- }*/
-
- bytes = GNUNET_DISK_file_write(plugin->server_stdin_handle,
- msgheader, size);
- if (bytes == GNUNET_SYSERR)
- {
- GNUNET_log(
- GNUNET_ERROR_TYPE_ERROR,
- _("Error writing to wlan healper. errno == %d, ERROR: %s\n"),
- errno, strerror(errno));
-
- }
- GNUNET_assert(bytes != GNUNET_SYSERR);
-
- if (bytes != size)
- {
- finish = GNUNET_malloc(sizeof( struct Finish_send));
- finish->plugin = plugin;
- finish->msgheader = (char *) msgheader + bytes;
- finish->size = size - bytes;
- finish->msgstart = msgheader;
-
- 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);
-
- }
- else
- {
- GNUNET_assert(bytes == size);