126 subdgram->
u.T_DUnitdata_Ind.user_data =
octstr_copy(data, 0, pdu_len);
142 warning(0,
"WTP: Dropping unhandled datagram data:");
183 error(1,
"Received an erroneous PDU corresponding an event");
199 if (
octstr_len(dgram->
u.T_DUnitdata_Ind.user_data) < 3) {
200 debug(
"wap.wtp", 0,
"A too short PDU received");
212 event->u.RcvInvoke.user_data =
214 event->u.RcvInvoke.tcl = pdu->
u.Invoke.class;
215 event->
u.RcvInvoke.tid = pdu->
u.Invoke.tid;
216 event->
u.RcvInvoke.tid_new = pdu->
u.Invoke.tidnew;
217 event->
u.RcvInvoke.rid = pdu->
u.Invoke.rid;
218 event->
u.RcvInvoke.up_flag = pdu->
u.Invoke.uack;
219 event->
u.RcvInvoke.no_cache_supported = 0;
220 event->
u.RcvInvoke.version = pdu->
u.Invoke.version;
221 event->
u.RcvInvoke.gtr = pdu->
u.Invoke.gtr;
222 event->
u.RcvInvoke.ttr = pdu->
u.Invoke.ttr;
233 event->u.RcvSegInvoke.user_data =
235 event->u.RcvSegInvoke.tid = pdu->
u.Segmented_invoke.tid;
236 event->
u.RcvSegInvoke.rid = pdu->
u.Segmented_invoke.rid;
237 event->
u.RcvSegInvoke.no_cache_supported = 0;
238 event->
u.RcvSegInvoke.gtr = pdu->
u.Segmented_invoke.gtr;
239 event->
u.RcvSegInvoke.ttr = pdu->
u.Segmented_invoke.ttr;
240 event->
u.RcvSegInvoke.psn = pdu->
u.Segmented_invoke.psn;
251 event->u.RcvResult.user_data =
253 event->u.RcvResult.tid = pdu->
u.Result.tid;
254 event->
u.RcvResult.rid = pdu->
u.Result.rid;
255 event->
u.RcvResult.gtr = pdu->
u.Result.gtr;
256 event->
u.RcvResult.ttr = pdu->
u.Result.ttr;
269 event->u.RcvAck.tid = pdu->
u.Ack.tid;
270 event->
u.RcvAck.tid_ok = pdu->
u.Ack.tidverify;
271 event->
u.RcvAck.rid = pdu->
u.Ack.rid;
275 event->u.RcvAck.psn = 0;
278 for (i = 0; i < num_tpis; i++) {
294 event->u.RcvNegativeAck.tid = pdu->
u.Negative_ack.tid;
295 event->
u.RcvNegativeAck.rid = pdu->
u.Negative_ack.rid;
296 event->
u.RcvNegativeAck.nmissing = pdu->
u.Negative_ack.nmissing;
308 event->u.RcvAbort.tid = pdu->
u.Abort.tid;
309 event->
u.RcvAbort.abort_type = pdu->
u.Abort.abort_type;
310 event->
u.RcvAbort.abort_reason = pdu->
u.Abort.abort_reason;
323 event->u.RcvErrorPDU.tid =
deduce_tid(datagram->
u.T_DUnitdata_Ind.user_data);
324 event->u.RcvErrorPDU.addr_tuple =
350 data = datagram->
u.T_DUnitdata_Ind.user_data;
353 warning(0,
"WTP: got a truncated datagram, ignoring");
366 error(0,
"WTP: cannot unpack pdu, dropping packet.");
375 event =
unpack_invoke(pdu, datagram->
u.T_DUnitdata_Ind.addr_tuple);
378 debug(
"wap.wtp", 0,
"WTP: Invoke when initiator. Message was");
384 case Segmented_invoke:
389 event =
unpack_result(pdu, datagram->
u.T_DUnitdata_Ind.addr_tuple);
392 debug(
"wap.wtp", 0,
"WTP: Result when responder. Message was");
399 event =
unpack_ack(pdu, datagram->
u.T_DUnitdata_Ind.addr_tuple);
407 event =
unpack_abort(pdu, datagram->
u.T_DUnitdata_Ind.addr_tuple);
412 debug(
"wap.wtp", 0,
"WTP: Unhandled PDU type. Message was");
void error(int err, const char *fmt,...)
List * wtp_unpack_wdp_datagram(WAPEvent *datagram)
static WAPEvent * unpack_segmented_invoke(WTP_PDU *pdu, WAPAddrTuple *addr_tuple)
gw_assert(wtls_machine->packet_to_send !=NULL)
void gwlist_append(List *list, void *item)
long gwlist_len(List *list)
static int concatenated_message(Octstr *user_data)
void * gwlist_get(List *list, long pos)
#define INITIATOR_TID_LIMIT
#define octstr_copy(ostr, from, len)
void wap_event_dump(WAPEvent *event)
WAPAddrTuple * wap_addr_tuple_duplicate(WAPAddrTuple *tuple)
static int deduce_tid(Octstr *user_data)
static WAPEvent * pack_error(WAPEvent *datagram)
long octstr_get_bits(Octstr *ostr, long bitpos, int numbits)
void wap_event_assert(WAPEvent *event)
static WAPEvent * unpack_invoke(WTP_PDU *pdu, WAPAddrTuple *addr_tuple)
void octstr_delete(Octstr *ostr1, long pos, long len)
static WAPEvent * unpack_wdp_datagram_real(WAPEvent *datagram)
int wtp_event_is_for_responder(WAPEvent *event)
#define octstr_duplicate(ostr)
static WAPEvent * unpack_ack(WTP_PDU *pdu, WAPAddrTuple *addr_tuple)
#define octstr_dump(ostr, level,...)
WTP_PDU * wtp_pdu_unpack(Octstr *data)
#define wap_event_create(type)
void warning(int err, const char *fmt,...)
void octstr_destroy(Octstr *ostr)
WAPEvent * wap_event_duplicate(WAPEvent *event)
long octstr_len(const Octstr *ostr)
static WAPEvent * unpack_abort(WTP_PDU *pdu, WAPAddrTuple *addr_tuple)
static WAPEvent * unpack_negative_ack(WTP_PDU *pdu, WAPAddrTuple *addr_tuple)
static int truncated_datagram(WAPEvent *event)
void debug(const char *place, int err, const char *fmt,...)
void wtp_pdu_destroy(WTP_PDU *pdu)
int octstr_get_char(const Octstr *ostr, long pos)
alert u SEC_Terminate_Req addr_tuple
void wap_event_destroy(WAPEvent *event)
static WAPEvent * unpack_result(WTP_PDU *pdu, WAPAddrTuple *addr_tuple)