mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.9 KiB
119 lines
2.9 KiB
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
|
|
|
|
<refentry id="sstream_t">
|
|
|
|
<refmeta><refentrytitle>sstream_t</refentrytitle>
|
|
<manvolnum>3</manvolnum></refmeta>
|
|
|
|
<refnamediv><refname>sstream_t</refname>
|
|
<refpurpose>input/output serialization stream</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv><synopsis>
|
|
#include <cds/serialize.h>
|
|
|
|
typedef struct {
|
|
dstring_t out;
|
|
str_t in;
|
|
int in_pos;
|
|
enum { sstream_in, sstream_out } type;
|
|
} sstream_t;
|
|
</synopsis></refsynopsisdiv>
|
|
|
|
<refsect1><title>Description</title>
|
|
<para>This structure represents input and output serialization stream.</para>
|
|
<refsect2><title>Members</title>
|
|
<para><variablelist>
|
|
<varlistentry>
|
|
<term><varname>out</varname></term>
|
|
<listitem><para>Dynamic string holding output data in the case of output
|
|
stream.</para></listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><varname>in</varname></term>
|
|
<listitem><para>String holding input data in the case of input
|
|
stream.</para></listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><varname>in_pos</varname></term>
|
|
<listitem><para>Actual position in input data (points to first unread char)
|
|
in the case of input stream.</para></listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><varname>type</varname></term>
|
|
<listitem><para>Member holding stream type - input or output.</para></listitem>
|
|
</varlistentry>
|
|
</variablelist></para>
|
|
<para>Warning - internals of this data structure may change! Use it only through
|
|
manipulation functions.
|
|
</para>
|
|
</refsect2>
|
|
</refsect1>
|
|
|
|
<refsect1 id="sstream_t.example"><title>Example</title>
|
|
<programlisting>
|
|
#include <cds/sstr.h>
|
|
#include <cds/serialize.h>
|
|
|
|
typedef struct {
|
|
str_t name;
|
|
int number;
|
|
char c;
|
|
} test_t;
|
|
|
|
int serialize_test_struct(sstream_t *store, test_t *t)
|
|
{
|
|
if (serialize_str(store, &t->name) != 0) return -1;
|
|
if (serialize_int(store, &t->number) != 0) return -1;
|
|
if (serialize_char(store, &t->c) != 0) return -1;
|
|
return 0;
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
sstream_t store;
|
|
str_t data;
|
|
test_t a = { name: {"test A", 6}, number: 13, c: 'x' };
|
|
test_t b;
|
|
|
|
str_clear(&data);
|
|
|
|
/* storing structure to the string */
|
|
|
|
init_output_sstream(&store, 256);
|
|
if (serialize_test_struct(&store, &a) == 0) {
|
|
if (get_serialized_sstream(&store, &data) != 0)
|
|
printf("can't get data\n");
|
|
}
|
|
else printf("can't serialize\n");
|
|
destroy_sstream(&store);
|
|
|
|
/* loading structure from the string */
|
|
|
|
init_input_sstream(&store, data.s, data.len);
|
|
if (serialize_test_struct(&store, &b) == 0) {
|
|
printf("test_t = { %.*s, %d, %c }\n",
|
|
FMT_STR(b.name), b.number, b.c);
|
|
|
|
/* cleanup */
|
|
str_free_content(&b.name);
|
|
}
|
|
else printf("can't deserialize\n");
|
|
destroy_sstream(&store);
|
|
|
|
/* cleanup */
|
|
str_free_content(&data);
|
|
|
|
return 0;
|
|
}
|
|
|
|
</programlisting>
|
|
</refsect1>
|
|
|
|
</refentry>
|
|
|
|
|