PUD: add getOlsrMessagePayload function
authorFerry Huberts <f.huberts@mindef.nl>
Thu, 4 Aug 2011 11:23:05 +0000 (12:23 +0100)
committerFerry Huberts <f.huberts@mindef.nl>
Thu, 18 Aug 2011 13:15:27 +0000 (15:15 +0200)
Signed-off-by: Ferry Huberts <f.huberts@mindef.nl>
lib/pud/src/gpsConversion.c
lib/pud/src/nodeIdConversion.c
lib/pud/src/receiver.c
lib/pud/src/wireFormat.c
lib/pud/src/wireFormat.h

index 5d2c59a..3dc6b6b 100644 (file)
@@ -55,15 +55,9 @@ unsigned int gpsFromOlsr(union olsr_message *olsrMessage,
 
        unsigned int transmitStringLength;
 
-       PudOlsrWireFormat *olsrGpsMessage;
        GpsInfo* gpsMessage;
-
-       /* determine the originator of the message */
-       if (olsr_cnf->ip_version == AF_INET) {
-               olsrGpsMessage = (PudOlsrWireFormat *) &olsrMessage->v4.message;
-       } else {
-               olsrGpsMessage = (PudOlsrWireFormat *) &olsrMessage->v6.message;
-       }
+       PudOlsrWireFormat * olsrGpsMessage =
+                       getOlsrMessagePayload(olsr_cnf->ip_version, olsrMessage);
 
        if (unlikely(olsrGpsMessage->version != PUD_WIRE_FORMAT_VERSION)) {
                /* currently we can only handle our own version */
@@ -240,16 +234,11 @@ unsigned int gpsFromOlsr(union olsr_message *olsrMessage,
  */
 unsigned int gpsToOlsr(nmeaINFO *nmeaInfo, union olsr_message *olsrMessage,
                unsigned int olsrMessageSize, unsigned long long validityTime) {
-       PudOlsrWireFormat * olsrGpsMessage;
        unsigned int aligned_size;
        unsigned int aligned_size_remainder;
        size_t nodeLength;
-
-       if (olsr_cnf->ip_version == AF_INET) {
-               olsrGpsMessage = (PudOlsrWireFormat *) &olsrMessage->v4.message;
-       } else {
-               olsrGpsMessage = (PudOlsrWireFormat *) &olsrMessage->v6.message;
-       }
+       PudOlsrWireFormat * olsrGpsMessage =
+                       getOlsrMessagePayload(olsr_cnf->ip_version, olsrMessage);
 
        /*
         * Compose message contents
index 03606d9..256c6a5 100644 (file)
@@ -163,7 +163,7 @@ static char *getNodeIdNumberFromOlsr(PudOlsrWireFormat * olsrGpsMessage,
  */
 void getNodeIdStringFromOlsr(int ipVersion, union olsr_message *olsrMessage,
                const char **nodeId, char *nodeIdBuffer, unsigned int nodeIdBufferSize) {
-       PudOlsrWireFormat *olsrGpsMessage;
+       PudOlsrWireFormat * olsrGpsMessage;
        int chars;
 
        if (unlikely(!nodeIdBuffer || (nodeIdBufferSize == 0) || !nodeId)) {
@@ -172,12 +172,7 @@ void getNodeIdStringFromOlsr(int ipVersion, union olsr_message *olsrMessage,
 
        assert (nodeIdBufferSize >= (PUD_TX_NODEID_BUFFERSIZE + 1));
 
-       /* determine the originator of the message */
-       if (ipVersion == AF_INET) {
-               olsrGpsMessage = (PudOlsrWireFormat *) &olsrMessage->v4.message;
-       } else {
-               olsrGpsMessage = (PudOlsrWireFormat *) &olsrMessage->v6.message;
-       }
+       olsrGpsMessage = getOlsrMessagePayload(ipVersion, olsrMessage);
 
        if (olsrGpsMessage->smask & PUD_FLAGS_ID) {
                switch (olsrGpsMessage->nodeInfo.nodeIdType) {
index ee10fa2..a2950b7 100644 (file)
@@ -144,14 +144,9 @@ static void nodeIdPreTransmitHook(union olsr_message *olsrMessage,
                struct interface *ifn) {
        /* set the MAC address in the message when needed */
        if (unlikely(getNodeIdTypeNumber() == PUD_NODEIDTYPE_MAC)) {
-               PudOlsrWireFormat * olsrGpsMessage;
                TOLSRNetworkInterface * olsrIf = getOlsrNetworkInterface(ifn);
-
-               if (olsr_cnf->ip_version == AF_INET) {
-                       olsrGpsMessage = (PudOlsrWireFormat *) &olsrMessage->v4.message;
-               } else {
-                       olsrGpsMessage = (PudOlsrWireFormat *) &olsrMessage->v6.message;
-               }
+               PudOlsrWireFormat * olsrGpsMessage =
+                               getOlsrMessagePayload(olsr_cnf->ip_version, olsrMessage);
 
                if (likely(olsrIf != NULL)) {
                        memcpy(&olsrGpsMessage->nodeInfo.nodeId, &olsrIf->hwAddress[0],
index ea86318..67362b0 100644 (file)
@@ -56,6 +56,25 @@ inline unsigned short getOlsrMessageSize(int ipVersion,
        return ntohs(olsrMessage->v6.olsr_msgsize);
 }
 
+/**
+ Determine the address of the position update message in an OLSR message
+
+ @param ipVersion
+ The IP version
+ @param olsrMessage
+ A pointer to the OLSR message
+ @return
+ A pointer to the position update message
+ */
+inline PudOlsrWireFormat * getOlsrMessagePayload(int ipVersion,
+               union olsr_message * olsrMessage) {
+       if (ipVersion == AF_INET) {
+               return (PudOlsrWireFormat *) &olsrMessage->v4.message;
+       }
+
+       return (PudOlsrWireFormat *) &olsrMessage->v6.message;
+}
+
 /* ************************************************************************
  * VALIDITY TIME
  * ************************************************************************ */
@@ -498,21 +517,12 @@ double getHdopFromOlsr(uint32_t olsrHdop) {
  The nodeIdType
  */
 NodeIdType getNodeIdType(int ipVersion, union olsr_message * olsrMessage) {
-       NodeIdType nodeIdType;
-       PudOlsrWireFormat *olsrGpsMessage;
-
-       /* determine the originator of the message */
-       if (ipVersion == AF_INET) {
-               olsrGpsMessage = (PudOlsrWireFormat *) &olsrMessage->v4.message;
-       } else {
-               olsrGpsMessage = (PudOlsrWireFormat *) &olsrMessage->v6.message;
-       }
+       PudOlsrWireFormat *olsrGpsMessage = getOlsrMessagePayload(ipVersion,
+                       olsrMessage);
 
        if (olsrGpsMessage->smask & PUD_FLAGS_ID) {
-               nodeIdType = olsrGpsMessage->nodeInfo.nodeIdType;
-       } else {
-               nodeIdType = ((ipVersion == AF_INET) ? PUD_NODEIDTYPE_IPV4 : PUD_NODEIDTYPE_IPV6);
+               return olsrGpsMessage->nodeInfo.nodeIdType;
        }
 
-       return nodeIdType;
+       return ((ipVersion == AF_INET) ? PUD_NODEIDTYPE_IPV4 : PUD_NODEIDTYPE_IPV6);
 }
index ab33c97..c12a3a1 100644 (file)
@@ -207,6 +207,9 @@ union olsr_ip_addr * getOlsrMessageOriginator(int ipVersion,
 unsigned short getOlsrMessageSize(int ipVersion,
                union olsr_message * olsrMessage);
 
+PudOlsrWireFormat * getOlsrMessagePayload(int ipVersion,
+               union olsr_message * olsrMessage);
+
 /*
  * PudOlsrWireFormat
  */