OSSP CVS Repository

ossp - Check-in [4218]
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [Patchset]  [Tagging/Branching

Check-in Number: 4218
Date: 2001-Jul-19 16:58:27 (local)
2001-Jul-19 14:58:27 (UTC)
User:simons
Branch:
Comment: Implemented encoding and decoding of variable length octed streams.
Tickets:
Inspections:
Files:
ossp-pkg/xds/Makefile      1.17 -> 1.18     2 inserted, 1 deleted
ossp-pkg/xds/regression-tests/Makefile      1.14 -> 1.15     2 inserted, 2 deleted
ossp-pkg/xds/regression-tests/xdr-octedstream.c      added-> 1.1
ossp-pkg/xds/xdr-decode-octedstream.c      added-> 1.1
ossp-pkg/xds/xdr-encode-octedstream.c      added-> 1.1
ossp-pkg/xds/xds.h      1.19 -> 1.20     3 inserted, 0 deleted

ossp-pkg/xds/Makefile 1.17 -> 1.18

--- Makefile     2001/07/19 12:28:57     1.17
+++ Makefile     2001/07/19 14:58:27     1.18
@@ -18,7 +18,8 @@
                   setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \
                   set-capacity.o  xdr-encode-int32.o xdr-encode-int64.o \
                   xdr-encode-uint32.o xdr-encode-uint64.o xdr-decode-int32.o \
-                  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o
+                  xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o \
+                  xdr-encode-octedstream.o xdr-decode-octedstream.o
 .c.o:
         $(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $<
 


ossp-pkg/xds/regression-tests/Makefile 1.14 -> 1.15

--- Makefile     2001/07/18 19:03:17     1.14
+++ Makefile     2001/07/19 14:58:28     1.15
@@ -12,8 +12,8 @@
 
 TESTS           = xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
                   xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
-                  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe \
-                  xds-mystruct.exe
+                  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe  \
+                  xdr-octedstream.exe xds-mystruct.exe
 
 .SUFFIXES:
 .SUFFIXES:      .c .exe


ossp-pkg/xds/regression-tests/xdr-octedstream.c -> 1.1

*** /dev/null    Sat Nov 23 01:07:30 2024
--- -    Sat Nov 23 01:07:41 2024
***************
*** 0 ****
--- 1,110 ----
+ /*
+    XDS - OSSP Extensible Data Serialization Library
+    Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
+    Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
+ 
+    This file is part of OSSP XDS, an extensible data serialization
+    library which can be found at http://www.ossp.com/pkg/xds/.
+ 
+    Permission to use, copy, modify, and distribute this software for
+    any purpose with or without fee is hereby granted, provided that
+    the above copyright notice and this permission notice appear in all
+    copies.
+ 
+    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+ */
+ 
+ #include <stdio.h>
+ #include <string.h>
+ #include "../internal.h"
+ 
+ int main()
+     {
+     xds_t* xds;
+     char*  buffer;
+     size_t buffer_size;
+ 
+     char   msg[] = "Hello World";
+     char*  new_msg;
+     size_t new_msg_size;
+ 
+     /* Encode the string as octed stream. Then erase the buffer and
+        decode the string back, verifying that it hasn't changed. */
+ 
+     xds = xds_init(XDS_ENCODE);
+     if (xds == NULL)
+        {
+        printf("Failed to initialize XDS context.\n");
+        return 1;
+        }
+     if (xds_register(xds, "os", &xdr_encode_octedstream, NULL) != XDS_OK)
+        {
+        printf("Failed to register my encoding engines.\n");
+        return 1;
+        }
+     if (xds_encode(xds, "os", msg, strlen(msg)) != XDS_OK)
+        {
+        printf("xds_encode() failed.\n");
+        return 1;
+        }
+     if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
+        {
+        printf("xds_getbuffer() failed.\n");
+        return 1;
+        }
+     xds_destroy(xds);
+     if (buffer_size % 4 != 0)
+        {
+        printf("The encoded octed stream's buffer size is not a multiple of 4.\n");
+        return 1;
+        }
+ 
+     xds = xds_init(XDS_DECODE);
+     if (xds == NULL)
+        {
+        printf("Failed to initialize XDS context.\n");
+        return 1;
+        }
+     if (xds_register(xds, "os", &xdr_decode_octedstream, NULL) != XDS_OK)
+        {
+        printf("Failed to register my decoding engines.\n");
+        return 1;
+        }
+     if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
+        {
+        printf("xds_setbuffer() failed.\n");
+        return 1;
+        }
+     if (xds_decode(xds, "os", &new_msg, &new_msg_size) != XDS_OK)
+        {
+        printf("xds_decode() failed.\n");
+        return 1;
+        }
+     if (new_msg_size != strlen(msg))
+        {
+        printf("The size of the decoded message is wrong.\n");
+        return 1;
+        }
+     if (strncmp(msg, new_msg, new_msg_size) != 0)
+        {
+        printf("The decoded octed stream is not correct.\n");
+        return 1;
+        }
+     xds_destroy(xds);
+     free(new_msg);
+ 
+     /* Everything went fine. */
+ 
+     return 0;
+     }


ossp-pkg/xds/xdr-decode-octedstream.c -> 1.1

*** /dev/null    Sat Nov 23 01:07:30 2024
--- -    Sat Nov 23 01:07:41 2024
***************
*** 0 ****
--- 1,89 ----
+ /*
+    XDS - OSSP Extensible Data Serialization Library
+    Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
+    Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
+ 
+    This file is part of OSSP XDS, an extensible data serialization
+    library which can be found at http://www.ossp.com/pkg/xds/.
+ 
+    Permission to use, copy, modify, and distribute this software for
+    any purpose with or without fee is hereby granted, provided that
+    the above copyright notice and this permission notice appear in all
+    copies.
+ 
+    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+ */
+ 
+ #include <string.h>
+ #include <assert.h>
+ #include <sys/types.h>
+ #include "internal.h"
+ 
+ int xdr_decode_octedstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
+     {
+     void**  p;
+     size_t* p_len;
+     size_t  padding;
+ 
+     /* Consistency checks. */
+ 
+     assert(xds != NULL);
+     assert(buffer != NULL);
+     assert(buffer_size != 0);
+     assert(args != NULL);
+     if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
+        return XDS_ERR_INVALID_ARG;
+ 
+     /* Get pointers from the stack. */
+ 
+     p     = va_arg(*args, void**);
+     p_len = va_arg(*args, size_t*);
+     assert(p != NULL);
+     assert(p_len != NULL);
+ 
+     /* Read the size of the message. */
+ 
+     if (buffer_size >= 4)
+        {
+        *p_len  = ((u_int8_t*)buffer)[0]; *p_len = *p_len << 8;
+        *p_len += ((u_int8_t*)buffer)[1]; *p_len = *p_len << 8;
+        *p_len += ((u_int8_t*)buffer)[2]; *p_len = *p_len << 8;
+        *p_len += ((u_int8_t*)buffer)[3];
+        }
+     else
+        return XDS_ERR_UNDERFLOW;
+ 
+     /* Calculate padding. */
+ 
+     padding = (4 - (*p_len & 0x03)) & 0x03;
+ 
+     /* Do we have enough data?. */
+ 
+     if (buffer_size < 4 + *p_len + padding)
+        return XDS_ERR_UNDERFLOW;
+ 
+     /* Allocate buffer for the data. */
+ 
+     *p = malloc(*p_len);
+     if (*p == NULL)
+        return XDS_ERR_NO_MEM;
+ 
+     /* Copy data into the buffer. */
+ 
+     memmove(*p, (u_int8_t*)buffer+4, *p_len);
+ 
+     /* Done. */
+ 
+     return 4 + *p_len + padding;
+     }


ossp-pkg/xds/xdr-encode-octedstream.c -> 1.1

*** /dev/null    Sat Nov 23 01:07:30 2024
--- -    Sat Nov 23 01:07:41 2024
***************
*** 0 ****
--- 1,71 ----
+ /*
+    XDS - OSSP Extensible Data Serialization Library
+    Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
+    Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
+ 
+    This file is part of OSSP XDS, an extensible data serialization
+    library which can be found at http://www.ossp.com/pkg/xds/.
+ 
+    Permission to use, copy, modify, and distribute this software for
+    any purpose with or without fee is hereby granted, provided that
+    the above copyright notice and this permission notice appear in all
+    copies.
+ 
+    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+ */
+ 
+ #include <assert.h>
+ #include <string.h>
+ #include <sys/types.h>
+ #include "internal.h"
+ 
+ int xdr_encode_octedstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
+     {
+     u_int8_t* p;
+     size_t    p_len;
+     size_t    padding;
+ 
+     /* Consistency checks. */
+ 
+     assert(xds != NULL);
+     assert(buffer != NULL);
+     assert(buffer_size != 0);
+     assert(args != NULL);
+     if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
+        return XDS_ERR_INVALID_ARG;
+ 
+     /* Get value from stack and calculate the correct amount of
+        padding. */
+ 
+     p       = (u_int8_t*)va_arg(*args, void*);
+     p_len   = va_arg(*args, size_t);
+     padding = (4 - (p_len & 0x03)) & 0x03;
+     assert((p_len + padding) % 4 == 0);
+ 
+     /* Format the values into the buffer. */
+ 
+     if (buffer_size >= 4 + p_len + padding)
+        {
+        ((u_int8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff;
+        ((u_int8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff;
+        ((u_int8_t*)buffer)[2] = (p_len >>  8) & 0x000000ff;
+        ((u_int8_t*)buffer)[3] = (p_len >>  0) & 0x000000ff;
+        memmove((u_int8_t*)buffer+4, p, p_len);
+        memset(buffer+4+p_len, 0, padding);
+        }
+ 
+     /* Done. */
+ 
+     return 4 + p_len + padding;
+     }


ossp-pkg/xds/xds.h 1.19 -> 1.20

--- xds.h        2001/07/18 18:26:32     1.19
+++ xds.h        2001/07/19 14:58:27     1.20
@@ -80,4 +80,7 @@
 int xdr_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
 int xdr_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
 
+int xdr_encode_octedstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
+int xdr_decode_octedstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
+
 #endif /* !defined(__LIBXDS_H__) */

CVSTrac 2.0.1