~ubuntu-branches/ubuntu/gutsy/wireshark/gutsy-security

« back to all changes in this revision

Viewing changes to asn1/h248/packet-h248-template.c

  • Committer: Bazaar Package Importer
  • Author(s): Frederic Peters
  • Date: 2007-04-01 08:58:40 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20070401085840-or3qhrpv8alt1bwg
Tags: 0.99.5-1
* New upstream release.
* debian/patches/09_idl2wrs.dpatch: updated to patch idl2wrs.sh.in.

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
 *
6
6
 * Luis Ontanon 2005 - Context and Transaction Tracing
7
7
 *
8
 
 * $Id: packet-h248-template.c 19473 2006-10-10 08:10:42Z guy $
 
8
 * $Id: packet-h248-template.c 20671 2007-02-01 19:15:01Z gerald $
9
9
 *
10
 
 * Ethereal - Network traffic analyzer
11
 
 * By Gerald Combs <gerald@ethereal.com>
 
10
 * Wireshark - Network traffic analyzer
 
11
 * By Gerald Combs <gerald@wireshark.org>
12
12
 * Copyright 1998 Gerald Combs
13
13
 *
14
14
 * This program is free software; you can redistribute it and/or
65
65
static int hf_h248_no_evt = -1;
66
66
static int hf_h248_no_param = -1;
67
67
 
 
68
static int hf_h248_serviceChangeReasonStr = -1;
 
69
 
68
70
#include "packet-h248-hf.c"
69
71
 
70
72
/* Initialize the subtree pointers */
83
85
static gint ett_h248_no_pkg = -1;
84
86
static gint ett_h248_no_sig = -1;
85
87
static gint ett_h248_no_evt = -1;
86
 
        
 
88
 
87
89
#include "packet-h248-ett.c"
88
90
 
89
91
static dissector_handle_t h248_term_handle;
114
116
static dissector_handle_t h248_handle;
115
117
static dissector_handle_t h248_term_handle;
116
118
 
 
119
/* Forward declarations */
 
120
static int dissect_h248_ServiceChangeReasonStr(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
 
121
 
117
122
 
118
123
static const value_string package_name_vals[] = {
119
124
  {   0x0000, "Media stream properties H.248.1 Annex C" },
280
285
  {   0x00010000, "g H.248.1 Annex E" },
281
286
  {   0x00010001, "g/Cause" },
282
287
  {   0x00010002, "g/Signal Completion" },
 
288
  {   0x00040000, "tonedet H.248.1 Annex E" },
283
289
  {   0x00040001, "tonedet/std(Start tone detected)" },
284
290
  {   0x00040002, "tonedet/etd(End tone detected)" },
285
291
  {   0x00040003, "tonedet/ltd(Long tone detected)" },
 
292
  {   0x00060000, "dd H.248.1 Annex E" },
 
293
  {   0x00060001, "dd/std" },
 
294
  {   0x00060002, "dd/etd" },
 
295
  {   0x00060003, "dd/ltd" },
286
296
  {   0x00060004, "dd, DigitMap Completion Event" },
287
 
  {   0x00060010, "dd, DTMF character 0" },
288
 
  {   0x00060011, "dd, DTMF character 1" },
289
 
  {   0x00060012, "dd, DTMF character 2" },
290
 
  {   0x00060013, "dd, DTMF character 3" },
291
 
  {   0x00060014, "dd, DTMF character 4" },
292
 
  {   0x00060015, "dd, DTMF character 5" },
293
 
  {   0x00060016, "dd, DTMF character 6" },
294
 
  {   0x00060017, "dd, DTMF character 7" },
295
 
  {   0x00060018, "dd, DTMF character 8" },
296
 
  {   0x00060019, "dd, DTMF character 9" },
297
 
  {   0x0006001a, "dd, DTMF character A" },
298
 
  {   0x0006001b, "dd, DTMF character B" },
299
 
  {   0x0006001c, "dd, DTMF character C" },
300
 
  {   0x0006001d, "dd, DTMF character D" },
301
 
  {   0x00060020, "dd, DTMF character *" },
302
 
  {   0x00060021, "dd, DTMF character #" },
 
297
  {   0x00060010, "dd/d0, DTMF character 0" },
 
298
  {   0x00060011, "dd/d1, DTMF character 1" },
 
299
  {   0x00060012, "dd/d2, DTMF character 2" },
 
300
  {   0x00060013, "dd/d3, DTMF character 3" },
 
301
  {   0x00060014, "dd/d4, DTMF character 4" },
 
302
  {   0x00060015, "dd/d5, DTMF character 5" },
 
303
  {   0x00060016, "dd/d6, DTMF character 6" },
 
304
  {   0x00060017, "dd/d7, DTMF character 7" },
 
305
  {   0x00060018, "dd/d8, DTMF character 8" },
 
306
  {   0x00060019, "dd/d9, DTMF character 9" },
 
307
  {   0x0006001a, "dd/a, DTMF character A" },
 
308
  {   0x0006001b, "dd/b, DTMF character B" },
 
309
  {   0x0006001c, "dd/c, DTMF character C" },
 
310
  {   0x0006001d, "dd/d, DTMF character D" },
 
311
  {   0x00060020, "dd/*, DTMF character *" },
 
312
  {   0x00060021, "dd/#, DTMF character #" },
303
313
  {   0x00080030, "cd, Dial Tone" },
304
314
  {   0x00080031, "cd, Ringing Tone" },
305
315
  {   0x00080032, "cd, Busy Tone" },
313
323
  {   0x00090005, "al, offhook" },
314
324
  {   0x00090006, "al, flashhook" },
315
325
  {   0x0009ffff, "al, *" },
316
 
  {   0x000a0005, "ct, Completion" },
 
326
  {   0x000a0005, "ct, Completion of Continuity test" },
317
327
  {   0x000b0005, "nt, network failure" },
318
328
  {   0x000b0006, "nt, quality alert" },
319
329
  {   0x000c0001, "rtp, Payload Transition" },
320
330
  {   0x00210000, "Generic Bearer Connection Q.1950 Annex A" },
321
331
  {   0x00210001, "GB/BNCChange" },
 
332
  {   0x00220001, "BT/TIND (Tunnel Indication)" },
322
333
  {   0x002a0001, "H.245/h245msg (Incoming H.245 Message)" },
323
334
  {   0x002a0004, "H.245/h245ChC (H.245 Channel Closed)" },
 
335
  {   0x00450000, "Inactivity Timer H.248.14" },
 
336
  {   0x00450001, "it/ito" },
 
337
  {   0x00450002, "it/ito" },
 
338
  {   0x00460001, "threegmlc/mod_link_supp (Bearer Modification Support Event)" },
324
339
  {   0x800a0000, "Nokia Bearer Characteristics Package" },
325
340
        {0,     NULL}
326
341
};
365
380
  {   0x00210001, "GB/EstBNC(Establish BNC)" },
366
381
  {   0x00210002, "GB/ModBNC (Modify BNC)" },
367
382
  {   0x00210003, "GB/RelBNC(Release BNC)" },
368
 
  
 
383
 
369
384
  {   0x002a0001, "H.245/cs (channel state)" },
370
385
  {   0x002a0002, "H.245/termtype (Terminal Type)" },
371
386
 
505
520
};
506
521
 
507
522
static const value_string wildcard_modes[] = {
508
 
    { 0, "All" },
509
 
    { 1, "Choose" },
 
523
    { 0, "Choose" },
 
524
    { 1, "All" },
510
525
    { 0, NULL }
511
526
};
512
527
 
522
537
    { H248_CMD_ADD_REQ, "addReq"},
523
538
    { H248_CMD_MOVE_REQ, "moveReq"},
524
539
    { H248_CMD_MOD_REQ, "modReq"},
525
 
    { H248_CMD_SUB_REQ, "subReq"},
526
 
    { H248_CMD_AUDITCAP_REQ, "auditCapReq"},
527
 
    { H248_CMD_AUDITVAL_REQ, "auditValReq"},
 
540
    { H248_CMD_SUB_REQ, "subtractReq"},
 
541
    { H248_CMD_AUDITCAP_REQ, "auditCapRequest"},
 
542
    { H248_CMD_AUDITVAL_REQ, "auditValueRequest"},
528
543
    { H248_CMD_NOTIFY_REQ, "notifyReq"},
529
 
    { H248_CMD_SVCCHG_REQ, "svcChgReq"},
 
544
    { H248_CMD_SVCCHG_REQ, "serviceChangeReq"},
530
545
    { H248_CMD_TOPOLOGY_REQ, "topologyReq"},
531
546
    { H248_CMD_CTX_ATTR_AUDIT_REQ, "ctxAttrAuditReq"},
532
547
    { H248_CMD_ADD_REPLY, "addReply"},
533
548
    { H248_CMD_MOVE_REPLY, "moveReply"},
534
549
    { H248_CMD_MOD_REPLY, "modReply"},
535
 
    { H248_CMD_SUB_REPLY, "subReply"},
 
550
    { H248_CMD_SUB_REPLY, "subtractReply"},
536
551
    { H248_CMD_AUDITCAP_REPLY, "auditCapReply"},
537
552
    { H248_CMD_AUDITVAL_REPLY, "auditValReply"},
538
553
    { H248_CMD_NOTIFY_REPLY, "notifyReply"},
539
 
    { H248_CMD_SVCCHG_REPLY, "svcChgReply"},
 
554
    { H248_CMD_SVCCHG_REPLY, "serviceChangeReply"},
540
555
    { H248_CMD_TOPOLOGY_REPLY, "topologyReply"},
541
556
    { 0, NULL }
542
557
};
680
695
 
681
696
static GPtrArray* packages = NULL;
682
697
 
683
 
void h248_register_package(h248_package_t* pkg) {       
 
698
void h248_register_package(h248_package_t* pkg) {
684
699
        if (! packages) packages = g_ptr_array_new();
685
700
 
686
701
        g_assert(pkg != NULL);
687
 
        
 
702
 
688
703
        g_ptr_array_add(packages,pkg);
689
704
}
690
705
 
691
 
#if 0
692
 
static void
693
 
dissect_h248_pkg_data(gboolean implicit_tag, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,guint16 name_major, guint16 name_minor){
694
 
 
695
 
guint offset=0;
696
 
 
697
 
        switch ( name_major ){
698
 
                case 0x001e: /* Bearer Characteristics Q.1950 Annex A */
699
 
        {
700
 
            guint bearer_type = 0;
701
 
                        offset = dissect_ber_integer(FALSE, pinfo, tree, tvb, offset, hf_h248_pkg_bcp_BNCChar_PDU, &bearer_type);
702
 
            if ( bearer_type && curr_info.term )
703
 
                curr_info.term->type = bearer_type;
704
 
                        break;
705
 
        }
706
 
        }
707
 
 
708
 
}
709
 
 
710
 
#endif
711
 
 
712
706
static guint32 packageandid;
713
707
 
714
708
static int dissect_h248_PkgdName(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index) {
719
713
  int hf_param;
720
714
  h248_package_t* pkg = NULL;
721
715
  guint i;
722
 
  
 
716
 
723
717
  old_offset=offset;
724
718
  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, &new_tvb);
725
719
 
736
730
                package_tree = proto_item_add_subtree(ber_last_created_item, ett_packagename);
737
731
                proto_tree_add_uint(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major);
738
732
    }
739
 
        
 
733
 
740
734
        for(i=0; i < packages->len; i++) {
741
735
                pkg = g_ptr_array_index(packages,i);
742
 
                
 
736
 
743
737
                if (name_major == pkg->id) {
744
738
                        break;
745
739
                } else {
746
740
                        pkg = NULL;
747
741
                }
748
742
        }
749
 
        
 
743
 
750
744
        if (! pkg ) pkg = &no_package;
751
745
 
752
746
        hf_param = *(pkg->hfid_params);
753
747
 
754
748
        if (hf_param > 0)
755
749
                /* TODO: Will this ever happen now??*/
756
 
                proto_tree_add_uint(package_tree, hf_param, tvb, offset-2, 2, name_minor); 
757
 
        
 
750
                proto_tree_add_uint(package_tree, hf_param, tvb, offset-2, 2, name_minor);
 
751
 
758
752
  } else {
759
753
          pkg = &no_package;
760
754
  }
761
 
  
 
755
 
762
756
  curr_info.pkg = pkg;
763
 
  
 
757
 
764
758
  return offset;
765
759
}
766
760
 
774
768
  h248_package_t* pkg = NULL;
775
769
  h248_pkg_evt_t* evt = NULL;
776
770
  guint i;
777
 
  
 
771
 
778
772
  old_offset=offset;
779
773
  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, &new_tvb);
780
774
 
791
785
    }
792
786
    proto_tree_add_uint(package_tree, hf_h248_event_name, tvb, offset-4, 4, packageandid);
793
787
 
794
 
    
 
788
 
795
789
        for(i=0; i < packages->len; i++) {
796
790
                pkg = g_ptr_array_index(packages,i);
797
 
                
 
791
 
798
792
                if (name_major == pkg->id) {
799
793
                        break;
 
794
                } else {
 
795
                        pkg = NULL;
800
796
                }
801
797
        }
802
 
        
803
 
        if (!pkg->hfid) pkg = &no_package;
 
798
 
 
799
        if (! pkg ) pkg = &no_package;
804
800
 
805
801
        curr_info.pkg = pkg;
806
802
 
815
811
        } else {
816
812
                evt = &no_event;
817
813
        }
818
 
        
 
814
 
819
815
        curr_info.evt = evt;
820
 
        
 
816
 
821
817
  } else {
822
818
          curr_info.pkg = &no_package;
823
819
          curr_info.evt = &no_event;
824
820
  }
825
 
  
 
821
 
826
822
  return offset;
827
823
}
828
824
 
856
852
 
857
853
    for(i=0; i < packages->len; i++) {
858
854
                pkg = g_ptr_array_index(packages,i);
859
 
                
 
855
 
860
856
                if (name_major == pkg->id) {
861
857
                        break;
862
858
                } else {
863
859
                        pkg = NULL;
864
860
                }
865
861
        }
866
 
        
 
862
 
867
863
        if (! pkg ) pkg = &no_package;
868
 
        
 
864
 
869
865
        if (pkg->signals) {
870
866
                for (sig = pkg->signals; sig->hfid; sig++) {
871
867
                        if (name_minor == sig->id) {
872
868
                                break;
873
869
                        }
874
870
                }
875
 
        
 
871
 
876
872
                if (! sig->hfid) sig = &no_signal;
877
 
        
 
873
 
878
874
                curr_info.pkg = pkg;
879
875
                curr_info.sig = sig;
880
876
        } else {
881
877
                curr_info.pkg = &no_package;
882
878
                curr_info.sig = &no_signal;
883
879
        }
884
 
        
 
880
 
885
881
  } else {
886
882
          curr_info.pkg = &no_package;
887
883
          curr_info.sig = &no_signal;
888
884
  }
889
 
  
 
885
 
890
886
  return offset;
891
887
}
892
888
 
919
915
        next_tvb = tvb_new_subset(tvb, offset , len , len );
920
916
        name_major = packageandid >> 16;
921
917
        name_minor = packageandid & 0xffff;
922
 
        
 
918
 
923
919
        pkg = (curr_info.pkg) ? curr_info.pkg : &no_package;
924
 
        
 
920
 
925
921
        if (pkg->properties) {
926
 
                for (prop = pkg->properties; prop->hfid; prop++) {
 
922
                for (prop = pkg->properties; prop && prop->hfid; prop++) {
927
923
                        if (name_minor == prop->id) {
928
924
                                break;
929
925
                        }
931
927
        } else {
932
928
                prop = &no_param;
933
929
        }
934
 
        
935
 
        if (prop) {
 
930
 
 
931
        if (prop && prop->hfid ) {
936
932
                if (!prop->dissector) prop = &no_param;
937
933
                prop->dissector(tree, next_tvb, pinfo, *(prop->hfid), &curr_info, prop->data);
938
934
        }
939
 
        
 
935
 
940
936
        return end_offset;
941
937
}
942
938
 
946
942
        tvbuff_t *next_tvb;
947
943
        guint32 param_id = 0xffffffff;
948
944
        h248_pkg_param_t* sigpar;
949
 
        
 
945
 
950
946
        offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset,  hf_index, &next_tvb);
951
947
        switch(tvb_length(next_tvb)) {
952
948
                case 4: param_id = tvb_get_ntohl(next_tvb,0); break;
955
951
                case 1: param_id = tvb_get_guint8(next_tvb,0); break;
956
952
                default: break;
957
953
        }
958
 
        
 
954
 
959
955
        curr_info.par = &no_param;
960
 
        
 
956
 
961
957
        if (curr_info.sig && curr_info.sig->parameters) {
962
958
                for(sigpar = curr_info.sig->parameters; sigpar->hfid; sigpar++) {
963
959
                        if (sigpar->id == param_id) {
966
962
                        }
967
963
                }
968
964
        }
969
 
        
 
965
 
970
966
        return offset;
971
967
}
972
968
 
978
974
        gboolean pc, ind;
979
975
        gint32 tag;
980
976
        guint32 len;
981
 
        
 
977
 
982
978
        old_offset=offset;
983
979
        offset=dissect_ber_identifier(pinfo, tree, tvb, offset, &class, &pc, &tag);
984
980
        offset=dissect_ber_length(pinfo, tree, tvb, offset, &len, &ind);
985
981
        end_offset=offset+len;
986
 
        
 
982
 
987
983
        if( (class!=BER_CLASS_UNI)
988
984
                ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
989
985
                proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", class, pc, tag);
990
986
                return end_offset;
991
987
        }
992
 
        
993
 
        
 
988
 
 
989
 
994
990
        next_tvb = tvb_new_subset(tvb,offset,len,len);
995
 
        
 
991
 
996
992
        if ( curr_info.par && curr_info.par->dissector) {
997
993
                curr_info.par->dissector(tree, next_tvb, pinfo, *(curr_info.par->hfid), &curr_info, curr_info.par->data);
998
994
        }
1017
1013
                        default: break;
1018
1014
                }
1019
1015
        }
1020
 
        
 
1016
 
1021
1017
        curr_info.par = &no_param;
1022
 
        
 
1018
 
1023
1019
        if (curr_info.evt->parameters) {
1024
1020
                for(evtpar = curr_info.evt->parameters; evtpar->hfid; evtpar++) {
1025
1021
                        if (evtpar->id == param_id) {
1030
1026
        } else {
1031
1027
                curr_info.par = &no_param;
1032
1028
        }
1033
 
        
 
1029
 
1034
1030
        return offset;
1035
1031
}
1036
1032
 
1042
1038
        gboolean pc, ind;
1043
1039
        gint32 tag;
1044
1040
        guint32 len;
1045
 
        
 
1041
 
1046
1042
        old_offset=offset;
1047
1043
        offset=dissect_ber_identifier(pinfo, tree, tvb, offset, &class, &pc, &tag);
1048
1044
        offset=dissect_ber_length(pinfo, tree, tvb, offset, &len, &ind);
1049
1045
        end_offset=offset+len;
1050
 
        
 
1046
 
1051
1047
        if( (class!=BER_CLASS_UNI)
1052
1048
                ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
1053
1049
                proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", class, pc, tag);
1054
1050
                return end_offset;
1055
1051
        }
1056
 
        
1057
 
        
 
1052
 
 
1053
 
1058
1054
        next_tvb = tvb_new_subset(tvb,offset,len,len);
1059
 
        
 
1055
 
1060
1056
        if ( curr_info.par && curr_info.par->dissector) {
1061
1057
                curr_info.par->dissector(tree, next_tvb, pinfo, *(curr_info.par->hfid), &curr_info, curr_info.par->data);
1062
1058
        }
1063
 
        
 
1059
 
1064
1060
        return end_offset;
1065
1061
}
1066
1062
 
1108
1104
        address* dst = &(pinfo->dst);
1109
1105
        address* lo_addr;
1110
1106
        address* hi_addr;
1111
 
        
1112
 
        
 
1107
 
 
1108
 
1113
1109
    if (keep_persistent_data) {
1114
1110
                emem_tree_key_t key[] = {
1115
1111
                        {1,&(framenum)},
1142
1138
                lo_addr = dst;
1143
1139
                hi_addr = src;
1144
1140
        }
1145
 
        
 
1141
 
1146
1142
        switch(lo_addr->type) {
1147
1143
                case AT_NONE:
1148
1144
                        m->lo_addr = 0;
1162
1158
                        m->lo_addr = g_str_hash(address_to_str(lo_addr));
1163
1159
                        break;
1164
1160
        }
1165
 
        
 
1161
 
1166
1162
    return m;
1167
1163
}
1168
1164
 
1190
1186
                                {1,&(t_id)},
1191
1187
                                {0,NULL}
1192
1188
                        };
1193
 
                        
 
1189
 
1194
1190
            trxmsg = se_alloc(sizeof(h248_trx_msg_t));
1195
1191
            t = se_tree_lookup32_array(trxs,key);
1196
1192
 
1244
1240
static h248_ctx_t* h248_ctx(h248_msg_t* m, h248_trx_t* t, guint32 c_id) {
1245
1241
    h248_ctx_t* context = NULL;
1246
1242
    h248_ctx_t** context_p = NULL;
1247
 
        
 
1243
 
1248
1244
    if ( !m || !t ) return NULL;
1249
1245
 
1250
1246
    if (keep_persistent_data) {
1254
1250
                {1,&(c_id)},
1255
1251
                {0,NULL}
1256
1252
                };
1257
 
                
 
1253
 
1258
1254
                emem_tree_key_t trx_key[] = {
1259
1255
                {1,&(m->hi_addr)},
1260
1256
                {1,&(m->lo_addr)},
1261
1257
                {1,&(t->id)},
1262
1258
                {0,NULL}
1263
1259
                };
1264
 
                
 
1260
 
1265
1261
        if (m->commited) {
1266
1262
            if (( context = se_tree_lookup32_array(ctxs_by_trx,trx_key) )) {
1267
1263
                return context;
1624
1620
    h248_cmd_msg_t* c;
1625
1621
 
1626
1622
    if ( !m || !t ) return "-";
1627
 
        
 
1623
 
1628
1624
        s = ep_strdup_printf("T %x { ",t->id);
1629
1625
 
1630
1626
    if (t->cmds) {
1777
1773
    curr_info.stat = NULL;
1778
1774
    curr_info.par = NULL;
1779
1775
 
1780
 
    /* Check if it is actually a text based h248 encoding, which we call
1781
 
        megaco in ehtereal.
1782
 
        */
 
1776
    /* Check if it is actually a text-based H.248 encoding, which we
 
1777
       dissect with the "megaco" dissector in Wireshark.  (Both
 
1778
       encodings are MEGACO (RFC 3015) and both are H.248.)
 
1779
     */
1783
1780
    if(tvb_length(tvb)>=6){
1784
1781
        if(!tvb_strneql(tvb, 0, "MEGACO", 6)){
1785
1782
            static dissector_handle_t megaco_handle=NULL;
1815
1812
        if ( udp_port )
1816
1813
            dissector_delete("udp.port", udp_port, h248_handle);
1817
1814
        }
1818
 
    
 
1815
 
1819
1816
    udp_port = temp_udp_port;
1820
 
    
 
1817
 
1821
1818
    if ( udp_port ) {
1822
1819
                dissector_add("udp.port", udp_port, h248_handle);
1823
1820
        }
1824
 
    
 
1821
 
1825
1822
}
1826
1823
 
1827
1824
/*--- proto_register_h248 ----------------------------------------------*/
1889
1886
  { "Unknown Parameter", "h248.pkg.unknown.param",
1890
1887
          FT_BYTES, BASE_HEX, NULL, 0,
1891
1888
          "", HFILL }},
1892
 
          
 
1889
  { &hf_h248_serviceChangeReasonStr,
 
1890
      { "ServiceChangeReasonStr", "h248.serviceChangeReasonstr",
 
1891
        FT_STRING, BASE_NONE, NULL, 0,
 
1892
        "h248.IA5String", HFILL }},
 
1893
 
1893
1894
#include "packet-h248-hfarr.c"
1894
1895
 
1895
1896
  { &hf_h248_ctx, { "Context", "h248.ctx", FT_UINT32, BASE_HEX, NULL, 0, "", HFILL }},
1939
1940
                                 "Port to be decoded as h248",
1940
1941
                                 10,
1941
1942
                                 &temp_udp_port);
1942
 
  
 
1943
 
1943
1944
  register_init_routine( &h248_init );
1944
1945
 
1945
1946
  msgs = se_tree_create(EMEM_TREE_TYPE_RED_BLACK, "h248_msgs");