- packet uses host_t to store addresses now
authorMartin Willi <martin@strongswan.org>
Wed, 16 Nov 2005 16:07:55 +0000 (16:07 -0000)
committerMartin Willi <martin@strongswan.org>
Wed, 16 Nov 2005 16:07:55 +0000 (16:07 -0000)
Source/charon/packet.c
Source/charon/packet.h

index 5587daa..a3c5f62 100644 (file)
@@ -37,21 +37,6 @@ struct private_packet_s {
         * Public part of a packet_t object
         */
        packet_t public;
-       
-       /* private functions */
-       
-       /**
-        * @brief helper function to set address used by set_dest & set_source.
-        * 
-        * @param this          calling object_t
-        * @param family        address family
-        * @param saddr         source address
-        * @param address       address as string
-        * @return                      
-        *                                      - SUCCESS if successfuly
-        *                                      - NOT_SUPPORTED if family is not supported
-        */
-       status_t (*set_addr) (private_packet_t *this, int family, struct sockaddr *saddr, char *address, u_int16_t port);
 };
 
 /**
@@ -60,6 +45,14 @@ struct private_packet_s {
  */
 static status_t destroy(private_packet_t *this)
 {
+       if (this->public.source != NULL)
+       {
+               this->public.source->destroy(this->public.source);
+       }       
+       if (this->public.destination != NULL)
+       {
+               this->public.destination->destroy(this->public.destination);
+       }
        if (this->public.data.ptr != NULL)
        {
                allocator_free(this->public.data.ptr);
@@ -72,96 +65,64 @@ static status_t destroy(private_packet_t *this)
  * Implements packet_t's clone function.
  * See #packet_s.clone for description.
  */
-static status_t clone (private_packet_t *packet, packet_t **clone)
+static status_t clone (private_packet_t *this, packet_t **clone)
 {
-       *clone = packet_create(packet->public.family);
-       if ((*clone) == NULL)
+       packet_t *other;
+       other = packet_create();
+       if (other == NULL)
        {
-
                return OUT_OF_RES;
        }
-
        
-       (*clone)->sockaddr_len = packet->public.sockaddr_len;
-       (*clone)->source = packet->public.source;
-       (*clone)->destination = packet->public.destination;
+       if (this->public.destination != NULL)
+       {
+               this->public.destination->clone(this->public.destination, &(other->destination));
+       }
+       else {
+               other->destination = NULL;
+       }
+       
+       if (this->public.source != NULL)
+       {
+               this->public.source->clone(this->public.source, &(other->source));
+       }
+       else {
+               other->source = NULL;
+       }
+       
        /* only clone existing chunks :-) */
-       if (packet->public.data.ptr != NULL)
+       if (this->public.data.ptr != NULL)
        {
-               (*clone)->data.ptr = allocator_clone_bytes(packet->public.data.ptr,packet->public.data.len);
-               if ((*clone)->data.ptr == NULL)
+               other->data.ptr = allocator_clone_bytes(this->public.data.ptr,this->public.data.len);
+               if (other->data.ptr == NULL)
                {
-                       (*clone)->destroy((*clone));
+                       other->destroy(other);
                        return OUT_OF_RES;
                }
-               (*clone)->data.len = packet->public.data.len;
+               other->data.len = this->public.data.len;
        }
-       return SUCCESS;
-}
-
-/**
- * Implements private_packet_t's set_addr function.
- * See #private_packet_t.set_addr for description.
- */
-static status_t set_addr(int family, struct sockaddr *saddr, char *address, u_int16_t port)
-{
-       switch (family)
+       else
        {
-               /* IPv4 */
-               case AF_INET:
-                       {
-                               struct sockaddr_in *sin = (struct sockaddr_in*)saddr;
-                               sin->sin_family = AF_INET;
-                               sin->sin_addr.s_addr = inet_addr("127.0.0.1");
-                               sin->sin_port = htons(port);
-                               return SUCCESS;;
-                       }
+               other->data.ptr = NULL;
+               other->data.len = 0;
        }
-       return NOT_SUPPORTED;
-}
-
-/**
- * Implements packet_t's set_destination function.
- * See #packet_t.set_destination for description.
- */
-static status_t set_destination(packet_t *this, char *address, u_int16_t port)
-{
-       struct sockaddr *saddr = &(this->destination);
-       return set_addr(this->family, saddr, address, port);
+       *clone = other;
+       return SUCCESS;
 }
 
-/**
- * Implements packet_t's set_source function.
- * See #packet_t.set_source for description.
- */
-static status_t set_source(packet_t *this, char *address, u_int16_t port)
-{
-       struct sockaddr *saddr = &(this->source);
-       return set_addr(this->family, saddr, address, port);
-}
 
 /*
  * Documented in header
  */
-packet_t *packet_create(int family)
+packet_t *packet_create()
 {
        private_packet_t *this = allocator_alloc_thing(private_packet_t);
 
        this->public.destroy = (status_t(*) (packet_t *)) destroy;
-       this->public.set_destination = set_destination;
-       this->public.set_source = set_source;
        this->public.clone = (status_t(*) (packet_t *,packet_t**))clone;
-
-       this->public.family = family;
-       switch (family)
-       {
-               case AF_INET:
-                       this->public.sockaddr_len = sizeof(struct sockaddr_in);
-                       break;
-               default: /* not supported */
-                       allocator_free(this);
-                       return NULL;
-       }
+       
+       this->public.destination = NULL;
+       this->public.source = NULL;
 
        this->public.data.len = 0;
        this->public.data.ptr = NULL;
index 1e0785c..b586440 100644 (file)
 
 
 #include "types.h"
+#include "utils/host.h"
 
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <stdlib.h>
 
 
 /**
  */
 typedef struct packet_s packet_t;
 struct packet_s {
-       /**
-        * Address family, such as AF_INET
-        */
-       int family;
-       
-       /**
-        * 
-        */
-       size_t sockaddr_len;
-       
+
        /**
         * source address structure
         */
-       struct sockaddr source;
+       host_t *source;
                
        /**
         * destination address structure
         */
-       struct sockaddr destination;
+       host_t *destination;
         
         /**
          * message data
@@ -64,28 +51,6 @@ struct packet_s {
        chunk_t data;
                
        /**
-        * @brief                       set destination of packet, using address string
-        *  
-        * @param packet                calling object
-        * @param address       ip address string
-        * @param port          port number
-        * @return                      - SUCCESS
-        *                                      - NOT_SUPPORTED
-        */
-       status_t (*set_destination) (packet_t *packet, char *address, u_int16_t port);
-               
-       /**
-        * @brief                       set destination of packet, using address string
-        *
-        * @param packet                calling object  
-        * @param address       ip address string
-        * @param port          port number
-        * @return                      - SUCCESS
-        *                                      - NOT_SUPPORTED
-        */
-       status_t (*set_source) (packet_t *packet, char *address, u_int16_t port);
-
-       /**
         * @brief                       Clones a packet_t object
         *  
         * @param packet                calling object
@@ -110,6 +75,6 @@ struct packet_s {
  * @param family               address-family, such as AF_INET
  * @return                     - NULL when family not supported
  */
-packet_t *packet_create(int family);
+packet_t *packet_create();
 
 #endif /*PACKET_H_*/