aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/asn1/ilp/packet-ilp-template.c
blob: 1cd5c05f37d4c7c9586075a1cde40eefc2943873 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/* packet-ilp.c
 * Routines for OMA Internal Location Protocol packet dissection
 * Copyright 2006, e.yimjia <jy.m12.0@gmail.com>
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * Copyright 1998 Gerald Combs
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 *
 * ref OMA-TS-ILP-V2_0_1-20121205-A
 * http://www.openmobilealliance.org
 */

#include "config.h"

#include <epan/packet.h>
#include <epan/prefs.h>
#include <epan/asn1.h>

#include "packet-per.h"
#include "packet-tcp.h"
#include "packet-gsm_map.h"
#include "packet-e164.h"
#include "packet-e212.h"

#define PNAME  "OMA Internal Location Protocol"
#define PSNAME "ILP"
#define PFNAME "ilp"

void proto_register_ilp(void);

static dissector_handle_t rrlp_handle;
static dissector_handle_t lpp_handle;
static dissector_handle_t ilp_handle;


/* IANA Registered Ports
 * oma-ilp         7276/tcp    OMA Internal Location
 */
#define ILP_TCP_PORT    7276

/* Initialize the protocol and registered fields */
static int proto_ilp = -1;


#define ILP_HEADER_SIZE 2

static gboolean ilp_desegment = TRUE;

#include "packet-ilp-hf.c"
static int hf_ilp_mobile_directory_number = -1;

/* Initialize the subtree pointers */
static gint ett_ilp = -1;
static gint ett_ilp_setid = -1;
#include "packet-ilp-ett.c"

/* Include constants */
#include "packet-ilp-val.h"


#include "packet-ilp-fn.c"


static guint
get_ilp_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_)
{
  /* PDU length = Message length */
  return tvb_get_ntohs(tvb,offset);
}

static int
dissect_ilp_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
  tcp_dissect_pdus(tvb, pinfo, tree, ilp_desegment, ILP_HEADER_SIZE,
                   get_ilp_pdu_len, dissect_ILP_PDU_PDU, data);
  return tvb_captured_length(tvb);
}

void proto_reg_handoff_ilp(void);

/*--- proto_register_ilp -------------------------------------------*/
void proto_register_ilp(void) {

  /* List of fields */
  static hf_register_info hf[] = {

#include "packet-ilp-hfarr.c"
    { &hf_ilp_mobile_directory_number,
      { "Mobile Directory Number", "ilp.mobile_directory_number",
        FT_STRING, BASE_NONE, NULL, 0,
        NULL, HFILL }},
  };

  /* List of subtrees */
  static gint *ett[] = {
    &ett_ilp,
    &ett_ilp_setid,
#include "packet-ilp-ettarr.c"
  };

  module_t *ilp_module;


  /* Register protocol */
  proto_ilp = proto_register_protocol(PNAME, PSNAME, PFNAME);
  ilp_handle = register_dissector("ilp", dissect_ilp_tcp, proto_ilp);

  /* Register fields and subtrees */
  proto_register_field_array(proto_ilp, hf, array_length(hf));
  proto_register_subtree_array(ett, array_length(ett));

  ilp_module = prefs_register_protocol(proto_ilp, NULL);

  prefs_register_bool_preference(ilp_module, "desegment_ilp_messages",
        "Reassemble ILP messages spanning multiple TCP segments",
        "Whether the ILP dissector should reassemble messages spanning multiple TCP segments."
        " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
        &ilp_desegment);
}


/*--- proto_reg_handoff_ilp ---------------------------------------*/
void
proto_reg_handoff_ilp(void)
{
  dissector_add_string("media_type","application/oma-supl-ilp", ilp_handle);
  rrlp_handle = find_dissector_add_dependency("rrlp", proto_ilp);
  lpp_handle = find_dissector_add_dependency("lpp", proto_ilp);

  dissector_add_uint_with_preference("tcp.port", ILP_TCP_PORT, ilp_handle);
}