[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r18422 - libmwmodem/src/main
From: |
gnunet |
Subject: |
[GNUnet-SVN] r18422 - libmwmodem/src/main |
Date: |
Thu, 1 Dec 2011 15:17:49 +0100 |
Author: ruppa
Date: 2011-12-01 15:17:49 +0100 (Thu, 01 Dec 2011)
New Revision: 18422
Modified:
libmwmodem/src/main/libmwmodem.c
Log:
Modified: libmwmodem/src/main/libmwmodem.c
===================================================================
--- libmwmodem/src/main/libmwmodem.c 2011-12-01 13:05:50 UTC (rev 18421)
+++ libmwmodem/src/main/libmwmodem.c 2011-12-01 14:17:49 UTC (rev 18422)
@@ -26,6 +26,7 @@
#include <string.h>
#include <sys/ioctl.h>
#include <errno.h>
+#include <unistd.h>
// TESTCASE!???
@@ -40,18 +41,24 @@
if ( (af_int!=AF_INET) && (af_int!=AF_INET6) )
{
fprintf(stderr,
- "Error, expected af_int to be AF_INET or AF_INET6!");
+ "Error: expected af_int to be AF_INET or AF_INET6!\n");
return NULL;
}
- context = malloc(sizeof(struct MWMODEM_Context)); // CHECK RETURN VALUE!
+ context = malloc(sizeof(struct MWMODEM_Context));
+ if(NULL == context)
+ {
+ fprintf(stderr,
+ "Error: failed to malloc space for structure
MWMODEM_Context: %s\n", strerror(errno));
+ return NULL;
+ }
context->cb = cb;
context->socket = socket(af_int, SOCK_DGRAM, IPPROTO_UDP);
if (-1 == context->socket)
{
- fprintf(stderr, "Error: failed to create socket: %s",
strerror(errno));
+ fprintf(stderr, "Error: failed to create socket: %s\n",
strerror(errno));
free (context);
return NULL;
}
@@ -61,9 +68,11 @@
memset (&address4, 0, sizeof(address4));
address4.sin_family = af_int;
-#if HAVE_SOCKADDR_IN_SIN_LEN
+
+ #if HAVE_SOCKADDR_IN_SIN_LEN
address4.sin_len = (u_char) sizeof (struct sockaddr_in);
-#endif
+ #endif
+
if (port == 0)
{
address4.sin_port = htons(MWMODEM_PORT);
@@ -80,9 +89,11 @@
memset( &address6, 0, sizeof (address6));
address6.sin6_family = af_int;
-#if HAVE_SOCKADDR_IN_SIN_LEN
+
+ #if HAVE_SOCKADDR_IN_SIN_LEN
address6.sin_len = (u_char) sizeof (struct sockaddr_in6);
-#endif
+ #endif
+
if (port == 0)
{
address6.sin6_port = htons(MWMODEM_PORT);
@@ -112,17 +123,6 @@
return fc->socket;
}
-
-static uint32_t charArrayToASCIICode (const char *byte4)
-{
- uint32_t val;
- val = (uint32_t)byte4[0]
- |val + (uint32_t)byte4[1] << 8
- |val + (uint32_t)byte4[2] << 16
- |val +(uint32_t)byte4[3] << 24;
- return val;
-}
-
//channel information at the udp package
struct MWChannel {
uint8_t index;
@@ -144,67 +144,65 @@
void MWMODEM_run (struct MWMODEM_Context *fc)
{
- struct MWMODEM_Package *package;
+ struct MWMODEM_Package package;
char *buffer;
- char byte4[4];
+ char *ptr;
struct MWMODEM_Channel *list;
- struct sockaddr *from;
- socklen_t *from_length;
+ struct sockaddr from;
+ socklen_t from_length;
struct MWMODEM_Channel channel;
struct MWHeader *hdr;
struct MWChannel *chl;
int package_length;
- ioctl(fc->socket, FIONREAD, &package_length); // CHECK RETURN VALUE!
+ if (-1==ioctl(fc->socket, FIONREAD, &package_length))
+ {
+ fprintf(stderr, "Error: failure of ioctl to receive length of
next UDP package %s\n",
+ strerror (errno));
+ return;
+ }
if (package_length==0)
{
- fprintf(stderr, "Error no message to receive!"); // READ UP on IOCTL
FIONREAD SECURITY PROBLEMS! (Denial-of-Service)
+ fprintf(stderr, "Error: no message to receive!"); // READ UP on IOCTL
FIONREAD SECURITY PROBLEMS! (Denial-of-Service)
return;
}
-
- package = malloc(sizeof(struct MWMODEM_Package)); // NO MALLOC! Stack
allocate!
- buffer = malloc(package_length); // NO MALLOC! Stack allocate!
- // man recvfrom! from/fromlength NOT allocated by recvfrom!!!
- if (recvfrom(fc->socket, buffer, sizeof(buffer), 0, from,
from_length)==-1)
+ buffer = malloc(package_length);
+
+ if (-1==recvfrom(fc->socket, buffer, sizeof(buffer), 0, &from,
&from_length))
{
- fprintf(stderr, "Error no message received!");
- free (package);
- free (buffer);
+ fprintf(stderr, "Error: no message received!");
return;
}
- free(from); // free uninitialized variable!
- free(from_length); // free uninitialized variable!
hdr = (struct MWHeader*) buffer;
if (1!=1)//TODO deklination der Erkennungsmerkmale der Message
{
- printf("No MWModem compatible message received!"); // fprintf
(stderr!!!
+ fprintf(stderr, "Error: no MWModem compatible message received!");
free(hdr);
- free(package);
- free(buffer); // double-free! (hdr == buffer)
return;
}
else
{
- package->header = ntohl(hdr->header);
+ package.header = ntohl(hdr->header);
unsigned long long nstime = ntohl(hdr->time) *
MWMODWM_TACT_NANO_SEC;
- package->time.tv_nsec = nstime % (1000 * 1000 * 1000);
- package->time.tv_sec = nstime / (1000 * 1000 * 1000);
- package->symbolrate = ntohl(hdr->symbolrate);
- package->num_channels = (uint8_t) hdr->channelmax;
+ package.time.tv_nsec = nstime % (1000 * 1000 * 1000);
+ package.time.tv_sec = nstime / (1000 * 1000 * 1000);
+ package.symbolrate = ntohl(hdr->symbolrate);
+ package.num_channels = (uint8_t) hdr->channelmax;
- struct MWMODEM_Channel list2[package->num_channels];
+ struct MWMODEM_Channel list2[package.num_channels];
list = list2;
- int i, currentBufferZelle; // signed or unsigned int?
+ unsigned int i, currentBufferZelle;
currentBufferZelle = 13;
- for(i=0;i<=package->num_channels; i++)
+ for(i=0;i<=package.num_channels; i++)
{
+ ptr = &buffer[currentBufferZelle];
- chl = (struct MWChannel *) &buffer[currentBufferZelle]; //
later: bus errors on SPARC architectures
+ chl = (struct MWChannel *) ptr; // later: bus errors on
SPARC architectures
if(buffer[currentBufferZelle]==i)
{
@@ -217,10 +215,8 @@
else
{
fprintf(stderr, "Error no correct
satellite modcode!");
- free(list); // quadruple-free
uninitialized crash me now!
+ free(list);
free(buffer);
- free(hdr);
- free(chl);
return;
}
@@ -237,13 +233,13 @@
}
}
- package->channel = list;
+ package.channel = list;
- fc->cb(fc->cls, package);
+ (*fc->cb)(fc->cls, &package);
}
void MWMODEM_free (struct MWMODEM_Context *fc)
{
- (void) close(fc->socket);
+ (void) close(fc->socket);
free(fc);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r18422 - libmwmodem/src/main,
gnunet <=