71     pdu = gw_malloc(
sizeof(*pdu));
    75 #define PDU(name, docstring, fields, is_valid) \    77     struct name *p; p = &pdu->u.name; \    80 #define UINT(field, docstring, bits) p->field = 0;    81 #define UINTVAR(field, docstring) p->field = 0;    82 #define OCTSTR(field, docstring, lengthfield) p->field = NULL;    83 #define REST(field, docstring) p->field = NULL;    84 #define TYPE(bits, value)    85 #define RESERVED(bits)    95         panic(0, 
"Internal error: Unknown PDU type %d", pdu->
type);
   107 #define PDU(name, docstring, fields, is_valid) \   109     struct name *p; p = &pdu->u.name; \   112 #define UINT(field, docstring, bits)   113 #define UINTVAR(field, docstring)   114 #define OCTSTR(field, docstring, lengthfield) octstr_destroy(p->field);   115 #define REST(field, docstring) octstr_destroy(p->field);   116 #define TYPE(bits, value)   117 #define RESERVED(bits)   127         panic(0, 
"Cannot destroy unknown WSP PDU type %d", pdu->
type);
   139     long lastnumbits = -1;
   149 #define PDU(name, docstring, fields, is_valid) \   153 #define UINT(field, docstring, bits) bitpos += (bits);   154 #define UINTVAR(field, docstring)   155 #define OCTSTR(field, docstring, lengthfield)   156 #define REST(field, docstring)   157 #define TYPE(bits, value) \   158     if ((bits) != lastnumbits || bitpos != lastpos) { \   159         lastval = octstr_get_bits(data, bitpos, (bits)); \   161     if (lastval == (value)) \   163     lastnumbits = (bits); \   165 #define RESERVED(bits) bitpos += (bits);   184     pdu = gw_malloc(
sizeof(*pdu));
   189 #define PDU(name, docstring, fields, is_valid) \   191         struct name *p = &pdu->u.name; \   193         gw_assert(bitpos % 8 == 0); \   194         if (bitpos / 8 != octstr_len(data)) { \   195             warning(0, "Bad length for " #name " PDU, " \   196                 "expected %ld", bitpos / 8); \   199             warning(0, #name " PDU failed %s", #is_valid); \   202 #define UINT(field, docstring, bits) \   203     p->field = octstr_get_bits(data, bitpos, (bits)); \   205 #define UINTVAR(field, docstring) \   206     gw_assert(bitpos % 8 == 0); \   207     p->field = octstr_get_bits(data, bitpos + 1, 7); \   208     while (octstr_get_bits(data, bitpos, 1)) { \   211         p->field |= octstr_get_bits(data, bitpos + 1, 7); \   214 #define OCTSTR(field, docstring, lengthfield) \   215     gw_assert(bitpos % 8 == 0); \   216     p->field = octstr_copy(data, bitpos / 8, p->lengthfield); \   217     bitpos += 8 * p->lengthfield;   218 #define REST(field, docstring) \   219     gw_assert(bitpos % 8 == 0); \   220     if (bitpos / 8 <= octstr_len(data)) { \   221         p->field = octstr_copy(data, bitpos / 8, \   222                 octstr_len(data) - bitpos / 8); \   223         bitpos = octstr_len(data) * 8; \   225         p->field = octstr_create(""); \   227 #define TYPE(bits, value) bitpos += (bits);   228 #define RESERVED(bits) bitpos += (bits);   238         warning(0, 
"WSP PDU with unknown type %d", pdu->
type);
   248 #define PDU(name, docstring, fields, is_valid) \   250         struct name *p; p = &pdu->u.name; \   253 #define UINT(field, docstring, bits)   254 #define UINTVAR(field, docstring)   255 #define OCTSTR(field, docstring, lengthfield) \   256     p->lengthfield = octstr_len(p->field);   257 #define REST(field, docstring)   258 #define TYPE(bits, value)   259 #define RESERVED(bits)   282 #define PDU(name, docstring, fields, is_valid) \   284         struct name *p = &pdu->u.name; \   286         gw_assert(bitpos % 8 == 0); \   288 #define UINT(field, docstring, bits) \   289     octstr_set_bits(data, bitpos, (bits), p->field); \   291 #define UINTVAR(field, docstring) \   292     gw_assert(bitpos % 8 == 0); \   293     octstr_append_uintvar(data, p->field); \   294     bitpos = 8 * octstr_len(data);   295 #define OCTSTR(field, docstring, lengthfield) \   296     gw_assert(bitpos % 8 == 0); \   297     if (p->field != NULL) \   298         octstr_append(data, p->field); \   299     bitpos += 8 * octstr_len(p->field);   300 #define REST(field, docstring) \   301     gw_assert(bitpos % 8 == 0); \   302     if (p->field != NULL) \   303         octstr_append(data, p->field); \   304     bitpos += 8 * octstr_len(p->field);   305 #define TYPE(bits, value) \   306     octstr_set_bits(data, bitpos, (bits), (value)); \   308 #define RESERVED(bits) bitpos += (bits);   318         panic(0, 
"Packing unknown WSP PDU type %ld", (
long) pdu->
type);
   325     char *dbg = 
"wap.wsp";
   328 #define PDU(name, docstring, fields, is_valid) \   330         struct name *p = &pdu->u.name; \   331         debug(dbg, 0, "%*sWSP %s PDU at %p:", \   332             level, "", #name, (void *)pdu); \   335 #define UINT(field, docstring, bits) \   336     debug(dbg, 0, "%*s %s: %lu", level, "", docstring, p->field);   337 #define UINTVAR(field, docstring) \   338     debug(dbg, 0, "%*s %s: %lu", level, "", docstring, p->field);   339 #define OCTSTR(field, docstring, lengthfield) \   340     debug(dbg, 0, "%*s %s:", level, "", docstring); \   341     octstr_dump(p->field, level + 1);   342 #define REST(field, docstring) \   343     debug(dbg, 0, "%*s %s:", level, "", docstring); \   344     octstr_dump(p->field, level + 1);   345 #define TYPE(bits, value)   346 #define RESERVED(bits)   356         debug(dbg, 0, 
"%*sWSP PDU at %p:", level, 
"", (
void *)pdu);
   357         debug(dbg, 0, 
"%*s unknown type %u", level, 
"", pdu->type);
   360     debug(
"wap.wsp", 0, 
"%*sWSP PDU dump ends.", level, 
"");
 
gw_assert(wtls_machine->packet_to_send !=NULL)
 
Octstr * wsp_pdu_pack(WSP_PDU *pdu)
 
static void fixup_length_fields(WSP_PDU *pdu)
 
WSP_PDU * wsp_pdu_create(int type)
 
void warning(int err, const char *fmt,...)
 
static int wsp_pdu_type(Octstr *data)
 
#define octstr_create(cstr)
 
void wsp_pdu_destroy(WSP_PDU *pdu)
 
void debug(const char *place, int err, const char *fmt,...)
 
void wsp_pdu_dump(WSP_PDU *pdu, int level)
 
WSP_PDU * wsp_pdu_unpack(Octstr *data)