#define HALLO_BEACON_SCALING_FACTOR 900
-#define DEBUG_wlan GNUNET_YES
+#define DEBUG_wlan GNUNET_NO
#define MESSAGE_LENGHT_UNKNOWN -1
//#define NO_MESSAGE_OR_MESSAGE_FINISHED -2
uint64_t tmpfield = UINT64_MAX;
tmpfield = tmpfield >> maxack;
- //#if DEBUG_wlan
+#if DEBUG_wlan
if (maxack != 63)
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"Test bitfields %X and %X, maxack is %u, fm size %u\n",
fm->ack_bitfield, tmpfield, maxack, fm->message_size);
- //#endif
+#endif
if (fm->ack_bitfield == tmpfield)
{
GNUNET_assert(sizeof(struct FragmentationAckHeader) <= WLAN_MTU);
+ size = sizeof(struct GNUNET_MessageHeader) + sizeof(struct Radiotap_Send)
+ + sizeof(struct ieee80211_frame) + sizeof(struct FragmentationAckHeader);
+
#if DEBUG_wlan
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
- "Sending ack for message_id %u with fragment field %u\n",
- ack->message_id, ack->fragments_field);
+ "Sending ack for message_id %u with fragment field %u, size %u\n",
+ ack->message_id, ack->fragments_field, size
+ - sizeof(struct Radiotap_Send));
#endif
- size = sizeof(struct GNUNET_MessageHeader) + sizeof(struct Radiotap_Send)
- + sizeof(struct ieee80211_frame) + sizeof(struct FragmentationAckHeader);
msgheader = GNUNET_malloc(size);
msgheader->size = htons(size);
msgheader->type = htons(GNUNET_MESSAGE_TYPE_WLAN_HELPER_DATA);
//if (fm->message_size > WLAN_MTU)
// {
- size += sizeof(struct FragmentationHeader);
+ size = sizeof(struct FragmentationHeader);
set_next_message_fragment_pos(fm);
copyoffset = (WLAN_MTU - sizeof(struct FragmentationHeader))
* fm->message_pos;
+
+
+ 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 DEBUG_wlan
GNUNET_log(
GNUNET_ERROR_TYPE_DEBUG,
GNUNET_TIME_absolute_get_remaining(fm->timeout));
#endif
- 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(
*/
static void
-insert_fragment_in_queue(struct Receive_Message_Queue * rec_message,
- struct Receive_Fragment_Queue * rec_queue)
+insert_fragment_in_queue(struct Receive_Message_Queue * rx_message,
+ struct Receive_Fragment_Queue * rx_frag)
{
- GNUNET_assert(rec_message != NULL);
- GNUNET_assert(rec_queue != NULL);
+ GNUNET_assert(rx_message != NULL);
+ GNUNET_assert(rx_frag != NULL);
- struct Receive_Fragment_Queue * rec_queue2 = rec_message->frag_head;
+ struct Receive_Fragment_Queue * rx_frag2 = rx_message->frag_head;
struct WlanHeader * wlanheader = NULL;
+
//this is the first fragment of the message (fragment id 0)
- if (rec_queue->num == 0)
+ if (rx_frag->num == 0)
{
- wlanheader = (struct WlanHeader *) rec_queue->msg;
- rec_message->rec_size = ntohs(wlanheader->header.size);
+ wlanheader = (struct WlanHeader *) rx_frag->msg;
+ rx_message->rec_size = ntohs(wlanheader->header.size);
}
//sort into list
- while (rec_queue2 != NULL)
+ while (rx_frag2 != NULL)
{
- if (rec_queue2->num > rec_queue->num)
+ if (rx_frag2->num > rx_frag->num)
{
//next element number is grater than the current num
- GNUNET_CONTAINER_DLL_insert_before(rec_message->frag_head, rec_message->frag_tail, rec_queue2, rec_queue);
- setBit((char *) &rec_message->received_fragments, rec_queue->num);
+ GNUNET_CONTAINER_DLL_insert_before(rx_message->frag_head, rx_message->frag_tail, rx_frag2, rx_frag);
+ setBit((char *) &rx_message->received_fragments, rx_frag->num);
return;
}
- rec_queue = rec_queue->next;
+ rx_frag2 = rx_frag2->next;
}
+
//no element has a grater number
- GNUNET_CONTAINER_DLL_insert_tail(rec_message->frag_head, rec_message->frag_tail, rec_queue);
+ GNUNET_CONTAINER_DLL_insert_tail(rx_message->frag_head, rx_message->frag_tail, rx_frag);
- setBit((char *) &rec_message->received_fragments, rec_queue->num);
+ setBit((char *) &rx_message->received_fragments, rx_frag->num);
}
/**
check_message_fragment_bitfield(rx_message);
#endif
- if (rx_message->frag_tail->num == ffsl(rx_message->received_fragments))
+ // if (rx_message->frag_tail->num == ffsl(rx_message->received_fragments))
+ // {
+ bitfield = ~bitfield;
+ bitfield = bitfield >> (63 - rx_message->frag_tail->num);
+ if (rx_message->received_fragments == bitfield)
{
- bitfield = ~bitfield;
- bitfield = bitfield << (63 - ffsl(rx_message->received_fragments));
- if (rx_message->received_fragments == bitfield)
+
+ while (rx_frag != NULL)
+ {
+ sum += rx_frag->size;
+ rx_frag = rx_frag->next;
+ }
+ //sum should always be smaller or equal of
+ GNUNET_assert(sum <= packetsize);
+ if (sum == packetsize)
{
+#if DEBUG_wlan
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+ "check_rec_finished_msg: A message for %p is complete\n", session);
+#endif
+
+ //TODO use mst
+ //copy fragments together
+ msg = GNUNET_malloc(packetsize);
+ rx_frag = rx_message->frag_head;
+ aktnum = 0;
while (rx_frag != NULL)
{
- sum += rx_frag->size;
+ //TODO SAVE SOME COPY OPS AND CHECK CRC WITHOUT COPY
+ memcpy(msg + aktnum, rx_frag->msg, rx_frag->size);
+ aktnum += rx_frag->size;
rx_frag = rx_frag->next;
}
- //sum should always be smaller or equal of
- GNUNET_assert(sum <= packetsize);
- if (sum == packetsize)
- {
-
-#if DEBUG_wlan
- GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
- "check_rec_finished_msg: A message for %p is complete\n",
- session);
-#endif
- //TODO use mst
- //copy fragments together
- msg = GNUNET_malloc(packetsize);
- rx_frag = rx_message->frag_head;
- aktnum = 0;
- while (rx_frag != NULL)
- {
- //TODO SAVE SOME COPY OPS AND CHECK CRC WITHOUT COPY
- memcpy(msg + aktnum, rx_frag->msg, rx_frag->size);
- aktnum += rx_frag->size;
- rx_frag = rx_frag->next;
- }
-
- free_receive_message(plugin, rx_message);
- //call wlan_process_helper to process the message
- wlan_data_massage_handler(plugin, session_light,
- (struct GNUNET_MessageHeader*) msg);
- //wlan_data_helper (plugin, session_light, (struct GNUNET_MessageHeader*) msg);
+ free_receive_message(plugin, rx_message);
+ //call wlan_process_helper to process the message
+ wlan_data_massage_handler(plugin, session_light,
+ (struct GNUNET_MessageHeader*) msg);
+ //wlan_data_helper (plugin, session_light, (struct GNUNET_MessageHeader*) msg);
- GNUNET_free(msg);
- }
+ GNUNET_free(msg);
}
}
+ // }
}
static void
#if DEBUG_wlan
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
- "Calling plugin->env->receive for session %p; %s\n", session,
- wlan_plugin_address_to_string(NULL, session->addr, 6));
+ "Calling plugin->env->receive for session %p; %s; size: %u\n", session,
+ wlan_plugin_address_to_string(NULL, session->addr, 6), htons(hdr->size));
#endif
plugin->env->receive(plugin->env->cls, &(session->target), hdr,
//check if message_id is right or it is a new msg
GNUNET_assert(fh != NULL);
- rx_message = get_receive_message(plugin, session, ntohs(fh->message_id));
+ rx_message = get_receive_message(plugin, session, ntohl(fh->message_id));
if (rx_message == NULL)
{
//new message incoming
rx_message = GNUNET_malloc(sizeof (struct Receive_Message_Queue));
- rx_message->message_id_in = ntohs(fh->message_id);
+ 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(
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));
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->received_fragments,
- rx_message->message_id_in, session);
+ 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);
GNUNET_log(
GNUNET_ERROR_TYPE_INFO,
"WLAN client not in session list, fragment num %u, message id %u\n",
- ntohs(fh->fragment_off_or_num), ntohs(fh->message_id));
+ ntohs(fh->fragment_off_or_num), ntohl(fh->message_id));
wlan_data_massage_handler(plugin, session_light,
(struct GNUNET_MessageHeader *) tempmsg);
session = session_light->session;
else
{
// TODO Wrong data?
- GNUNET_log(GNUNET_ERROR_TYPE_INFO,
- "WLAN packet inside the WLAN helper packet has not the right type\n");
+ GNUNET_log(
+ GNUNET_ERROR_TYPE_INFO,
+ "WLAN packet inside the WLAN helper packet has not the right type: %u size: %u\n",
+ ntohs(hdr->type), ntohs(hdr->size));
+ GNUNET_assert(0);
return;
}
if (ntohs(hdr->size) < sizeof(struct ieee80211_frame)
+ sizeof(struct GNUNET_MessageHeader) + sizeof(struct Radiotap_rx))
{
+#if DEBUG_wlan
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+ "Size of packet is too small; size: %u min size: %u\n", ntohs(
+ hdr->size), sizeof(struct ieee80211_frame)
+ + sizeof(struct GNUNET_MessageHeader));
+#endif
GNUNET_break (0);
/* FIXME: restart SUID process */
return;
datasize = ntohs(hdr->size) - sizeof(struct ieee80211_frame)
- - sizeof(struct GNUNET_MessageHeader);
+ - sizeof(struct GNUNET_MessageHeader)
+ - sizeof(struct Radiotap_rx);
session_light = GNUNET_malloc(sizeof(struct Session_light));
memcpy(session_light->addr, &(wlanIeeeHeader->i_addr2),
return;
}
memcpy(&plugin->mac_address, &hdr[1], sizeof(struct MacAddress));
-#if DEBUG_WLAN
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+#if DEBUG_wlan
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"Received WLAN_HELPER_CONTROL message with transport of address %s\n",
- wlan_plugin_address_to_string (cls,
- &plugin->mac_address,
- sizeof (struct MacAddress)));
+ wlan_plugin_address_to_string(cls, &plugin->mac_address,
+ sizeof(struct MacAddress)));
#endif
plugin->env->notify_address(plugin->env->cls, "wlan", &plugin->mac_address,
sizeof(struct MacAddress), GNUNET_TIME_UNIT_FOREVER_REL);
-
-
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/types.h>
//unsigned char * from_start;
unsigned char * to_start;
- sendsize = ntohs(hdr->size) - sizeof(struct Radiotap_Send);
+ sendsize = ntohs(hdr->size) - sizeof(struct Radiotap_Send)
+ + sizeof(struct Radiotap_rx);
if (GNUNET_MESSAGE_TYPE_WLAN_HELPER_DATA != ntohs(hdr->type))
{
to_data = to_radiotap + sizeof(struct Radiotap_rx);
from_data = ((unsigned char *) hdr) + sizeof(struct Radiotap_Send)
- + sizeof(struct GNUNET_MessageHeader);
-
+ + sizeof(struct GNUNET_MessageHeader);
memcpy(to_start, &newheader, sizeof(struct GNUNET_MessageHeader));
write_pout->size += sizeof(struct GNUNET_MessageHeader);
write_pout->size += sizeof(struct Radiotap_rx);
- memcpy(to_data, from_data, sendsize - sizeof(struct GNUNET_MessageHeader));
- write_pout->size += sendsize - sizeof(struct GNUNET_MessageHeader);
+ memcpy(to_data, from_data, ntohs(hdr->size) - sizeof(struct Radiotap_Send)
+ - sizeof(struct GNUNET_MessageHeader));
+ write_pout->size += ntohs(hdr->size) - sizeof(struct Radiotap_Send)
+ - sizeof(struct GNUNET_MessageHeader);
}
static void
}
umask(0);
+ //unlink(FIFO_FILE1);
+ //unlink(FIFO_FILE2);
erg = mknod(FIFO_FILE1, S_IFIFO | 0666, 0);
+ if (0 != erg)
+ {
+ fprintf(stderr, "Error at mknode1 \n");
+ //exit(1);
+ }
erg = mknod(FIFO_FILE2, S_IFIFO | 0666, 0);
+ if (0 != erg)
+ {
+ fprintf(stderr, "Error at mknode2 \n");
+ //exit(1);
+ }
}
else
if (NULL == fpin)
{
fprintf(stderr, "fopen of read FIFO_FILE1\n");
- exit(1);
+ goto end2;
}
- if (NULL == (fpout = fopen(FIFO_FILE2, "w")))
+ fpout = fopen(FIFO_FILE2, "w");
+ if (NULL == fpout)
{
fprintf(stderr, "fopen of write FIFO_FILE2\n");
- exit(1);
+ goto end1;
}
}
{
first = 0;
//fprintf(stderr, "Second\n");
- if (NULL == (fpout = fopen(FIFO_FILE1, "w")))
+ fpout = fopen(FIFO_FILE1, "w");
+ if (NULL == fpout)
{
fprintf(stderr, "fopen of write FIFO_FILE1\n");
- exit(1);
+ goto end1;
}
- if (NULL == (fpin = fopen(FIFO_FILE2, "r")))
+ fpin = fopen(FIFO_FILE2, "r");
+ if (NULL == fpin)
{
fprintf(stderr, "fopen of read FIFO_FILE2\n");
- exit(1);
+ goto end1;
}
+
}
fdpin = fileno(fpin);
}
//clean up
- fclose(fpout);
- fclose(fpin);
+
+ GNUNET_SERVER_mst_destroy(stdin_mst);
+ GNUNET_SERVER_mst_destroy(file_in_mst);
+ end1: fclose(fpout);
+ end2: fclose(fpin);
if (1 == first)
{