2005-06-06 15:39:20 +00:00
|
|
|
# tcap.cnf
|
|
|
|
# tcap conformation file
|
|
|
|
|
2008-07-26 22:39:32 +00:00
|
|
|
#.OMIT_ASSIGNMENT
|
|
|
|
RLRQ-apdu
|
|
|
|
RLRE-apdu
|
2008-09-13 15:32:59 +00:00
|
|
|
Release-request-reason
|
|
|
|
Release-response-reason
|
2016-02-05 13:18:57 +00:00
|
|
|
ERROR
|
2008-07-26 22:39:32 +00:00
|
|
|
#.END
|
2005-06-06 15:39:20 +00:00
|
|
|
|
|
|
|
#.MODULE_IMPORT
|
|
|
|
|
|
|
|
#.EXPORTS
|
2007-04-21 20:53:35 +00:00
|
|
|
DialoguePDU
|
|
|
|
UniDialoguePDU
|
2005-06-06 15:39:20 +00:00
|
|
|
|
2015-12-10 02:50:10 +00:00
|
|
|
#.REGISTER
|
2009-03-09 13:26:47 +00:00
|
|
|
DialoguePDU B "0.0.17.773.1.1.1" "id-as-dialogue"
|
|
|
|
UniDialoguePDU B "0.0.17.773.1.2.1" "id-as-uniDialogue"
|
2005-06-06 15:39:20 +00:00
|
|
|
|
2015-12-10 02:50:10 +00:00
|
|
|
#.PDU
|
2005-06-06 15:39:20 +00:00
|
|
|
|
|
|
|
|
2014-04-14 15:10:06 +00:00
|
|
|
#.NO_EMIT ONLY_VALS
|
|
|
|
TCMessage
|
|
|
|
|
2005-06-06 15:39:20 +00:00
|
|
|
#.NO_EMIT
|
|
|
|
|
|
|
|
#.TYPE_RENAME
|
2008-09-14 14:42:39 +00:00
|
|
|
AUDT-apdu/_untag/protocol-version AUDT_protocol_version
|
|
|
|
AARQ-apdu/_untag/protocol-version AARQ_protocol_version
|
|
|
|
AARE-apdu/_untag/protocol-version AARE_protocol_version
|
|
|
|
|
2008-09-13 15:32:59 +00:00
|
|
|
AARE-apdu/_untag/application-context-name AARE_application_context_name
|
|
|
|
AARQ-apdu/_untag/application-context-name AARQ_application_context_name
|
|
|
|
AUDT-apdu/_untag/application-context-name AUDT_application_context_name
|
|
|
|
|
|
|
|
AARQ-apdu/_untag/user-information AARQ_user_information
|
|
|
|
AARE-apdu/_untag/user-information AARE_user_information
|
|
|
|
ABRT-apdu/_untag/user-information ABRT_user_information
|
|
|
|
AUDT-apdu/_untag/user-information AUDT_user_information
|
2005-06-06 15:39:20 +00:00
|
|
|
|
|
|
|
#.FIELD_RENAME
|
2008-09-14 14:42:39 +00:00
|
|
|
AUDT-apdu/_untag/protocol-version audt_protocol_version
|
|
|
|
AARQ-apdu/_untag/protocol-version aarq_protocol_version
|
|
|
|
AARE-apdu/_untag/protocol-version aare_protocol_version
|
|
|
|
|
2008-09-13 15:32:59 +00:00
|
|
|
AARQ-apdu/_untag/application-context-name aarq_application_context_name
|
|
|
|
AARE-apdu/_untag/application-context-name aare_application_context_name
|
|
|
|
AUDT-apdu/_untag/application-context-name audt_application_context_name
|
|
|
|
|
|
|
|
AARQ-apdu/_untag/user-information aarq_user_information
|
|
|
|
AARE-apdu/_untag/user-information aare_user_information
|
|
|
|
AUDT-apdu/_untag/user-information audt_user_information
|
|
|
|
ABRT-apdu/_untag/user-information abrt_user_information
|
|
|
|
#.END
|
|
|
|
|
2005-06-06 15:39:20 +00:00
|
|
|
|
2007-07-27 19:24:40 +00:00
|
|
|
#----------------------------------------------------------------------------------------
|
2005-06-06 15:39:20 +00:00
|
|
|
#.FN_BODY DialogueOC
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2009-03-23 13:03:18 +00:00
|
|
|
offset = dissect_tcap_ExternalPDU(FALSE /*implicit_tag*/, tvb, offset, actx, tree, -1);
|
2005-06-06 15:39:20 +00:00
|
|
|
|
2007-07-27 19:24:40 +00:00
|
|
|
#----------------------------------------------------------------------------------------
|
2007-04-21 20:27:05 +00:00
|
|
|
#.FN_BODY ExternalPDU
|
2007-07-27 19:24:40 +00:00
|
|
|
|
|
|
|
%(DEFAULT_BODY)s
|
2007-07-26 20:05:54 +00:00
|
|
|
|
2007-11-13 21:59:53 +00:00
|
|
|
#----------------------------------------------------------------------------------------
|
2014-02-26 19:29:17 +00:00
|
|
|
#.FN_BODY Dialog1
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2009-03-23 13:03:18 +00:00
|
|
|
offset = dissect_tcap_DialoguePDU(TRUE, tvb, offset, actx, tree, -1);
|
2005-06-06 15:39:20 +00:00
|
|
|
|
2007-07-27 19:24:40 +00:00
|
|
|
#----------------------------------------------------------------------------------------
|
2005-06-06 15:39:20 +00:00
|
|
|
#.FN_BODY Parameter
|
2005-06-07 20:30:04 +00:00
|
|
|
|
2009-03-23 13:03:18 +00:00
|
|
|
offset = dissect_tcap_param(actx,tree,tvb,offset);
|
2007-07-27 19:24:40 +00:00
|
|
|
|
|
|
|
#----------------------------------------------------------------------------------------
|
2005-06-06 15:39:20 +00:00
|
|
|
#.FN_BODY Component
|
2016-02-06 13:14:38 +00:00
|
|
|
tvbuff_t *next_tvb;
|
|
|
|
gint8 ber_class;
|
|
|
|
gboolean pc;
|
|
|
|
gint tag;
|
|
|
|
guint32 len, comp_offset;
|
2016-02-07 23:50:59 +00:00
|
|
|
volatile guint32 _offset;
|
2016-02-06 13:14:38 +00:00
|
|
|
gint ind_field;
|
|
|
|
|
|
|
|
comp_offset = dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
|
|
|
|
comp_offset = dissect_ber_length(actx->pinfo, tree, tvb, comp_offset, &len, &ind_field);
|
|
|
|
/* we can believe the length now */
|
|
|
|
next_tvb = tvb_new_subset_length(tvb, offset, len+comp_offset-offset);
|
|
|
|
|
|
|
|
if (!next_tvb)
|
|
|
|
return comp_offset;
|
|
|
|
|
2016-02-07 23:50:59 +00:00
|
|
|
_offset = offset;
|
2016-02-06 13:14:38 +00:00
|
|
|
TRY {
|
2016-02-07 23:50:59 +00:00
|
|
|
_offset = dissect_ber_choice(actx, tree, tvb, _offset,
|
|
|
|
Component_choice, hf_index, ett_tcap_Component,
|
|
|
|
NULL);
|
2016-02-06 13:14:38 +00:00
|
|
|
}
|
|
|
|
CATCH_NONFATAL_ERRORS {
|
|
|
|
show_exception(tvb, actx->pinfo, tree, EXCEPT_CODE, GET_MESSAGE);
|
|
|
|
}
|
|
|
|
ENDTRY;
|
2016-02-07 23:50:59 +00:00
|
|
|
offset = _offset;
|
2016-02-06 13:14:38 +00:00
|
|
|
|
|
|
|
dissect_tcap_ITU_ComponentPDU(implicit_tag, next_tvb, 0, actx, tcap_top_tree, hf_index);
|
2007-07-27 19:24:40 +00:00
|
|
|
|
2009-03-23 13:03:18 +00:00
|
|
|
/* return comp_offset+len; or return offset (will be automatically added) */
|
2007-07-27 19:24:40 +00:00
|
|
|
|
|
|
|
#----------------------------------------------------------------------------------------
|
2008-09-13 15:32:59 +00:00
|
|
|
#.FN_BODY AUDT-apdu/_untag/application-context-name FN_VARIANT = _str VAL_PTR = &cur_oid
|
2017-04-28 16:39:07 +00:00
|
|
|
struct tcap_private_t *p_tcap_private = (struct tcap_private_t*)actx->value_ptr;
|
2005-11-14 10:02:31 +00:00
|
|
|
%(DEFAULT_BODY)s
|
2019-01-31 14:40:24 +00:00
|
|
|
if (p_tcap_private) {
|
|
|
|
p_tcap_private->oid= (const void*) cur_oid;
|
|
|
|
p_tcap_private->acv=TRUE;
|
|
|
|
}
|
2008-09-13 15:32:59 +00:00
|
|
|
#----------------------------------------------------------------------------------------
|
|
|
|
#.FN_BODY AARQ-apdu/_untag/application-context-name FN_VARIANT = _str VAL_PTR = &cur_oid
|
2017-04-28 16:39:07 +00:00
|
|
|
struct tcap_private_t *p_tcap_private = (struct tcap_private_t*)actx->value_ptr;
|
2008-09-13 15:32:59 +00:00
|
|
|
%(DEFAULT_BODY)s
|
2019-01-31 14:40:24 +00:00
|
|
|
if (p_tcap_private) {
|
|
|
|
p_tcap_private->oid= (const void*) cur_oid;
|
|
|
|
p_tcap_private->acv=TRUE;
|
|
|
|
}
|
2008-09-13 15:32:59 +00:00
|
|
|
#----------------------------------------------------------------------------------------
|
|
|
|
#.FN_BODY AARE-apdu/_untag/application-context-name FN_VARIANT = _str VAL_PTR = &cur_oid
|
2017-04-28 16:39:07 +00:00
|
|
|
struct tcap_private_t *p_tcap_private = (struct tcap_private_t*)actx->value_ptr;
|
2008-09-13 15:32:59 +00:00
|
|
|
%(DEFAULT_BODY)s
|
2019-01-31 14:40:24 +00:00
|
|
|
if (p_tcap_private) {
|
|
|
|
p_tcap_private->oid= (const void*) cur_oid;
|
|
|
|
p_tcap_private->acv=TRUE;
|
|
|
|
}
|
2007-07-27 19:24:40 +00:00
|
|
|
#----------------------------------------------------------------------------------------
|
2005-06-06 15:39:20 +00:00
|
|
|
#.FN_BODY OrigTransactionID
|
2016-02-06 13:14:38 +00:00
|
|
|
tvbuff_t *parameter_tvb;
|
|
|
|
guint8 len, i;
|
|
|
|
proto_tree *subtree;
|
2016-02-05 13:44:57 +00:00
|
|
|
int saved_offset;
|
2017-04-28 16:39:07 +00:00
|
|
|
struct tcap_private_t *p_tcap_private = (struct tcap_private_t*)actx->value_ptr;
|
2016-02-06 13:14:38 +00:00
|
|
|
|
2016-02-05 13:44:57 +00:00
|
|
|
hf_index = hf_tcap_tid;
|
|
|
|
saved_offset = offset;
|
|
|
|
%(DEFAULT_BODY)s
|
2019-04-03 21:32:30 +00:00
|
|
|
proto_item_set_generated(actx->created_item);
|
2016-02-05 13:44:57 +00:00
|
|
|
offset = saved_offset;
|
|
|
|
|
|
|
|
subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_otid, NULL, "Source Transaction ID");
|
2016-02-06 13:14:38 +00:00
|
|
|
offset = dissect_ber_octet_string(implicit_tag, actx, subtree, tvb, offset, hf_tcap_otid,
|
2005-06-06 15:39:20 +00:00
|
|
|
¶meter_tvb);
|
2005-06-08 18:53:11 +00:00
|
|
|
|
2016-02-06 13:14:38 +00:00
|
|
|
if (parameter_tvb) {
|
|
|
|
len = tvb_reported_length_remaining(parameter_tvb, 0);
|
|
|
|
switch(len) {
|
|
|
|
case 1:
|
|
|
|
gp_tcapsrt_info->src_tid=tvb_get_guint8(parameter_tvb, 0);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
gp_tcapsrt_info->src_tid=tvb_get_ntohs(parameter_tvb, 0);
|
|
|
|
break;
|
2017-05-29 19:49:26 +00:00
|
|
|
case 3:
|
|
|
|
gp_tcapsrt_info->src_tid=tvb_get_ntoh24(parameter_tvb, 0);
|
|
|
|
break;
|
2016-02-06 13:14:38 +00:00
|
|
|
case 4:
|
|
|
|
gp_tcapsrt_info->src_tid=tvb_get_ntohl(parameter_tvb, 0);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
gp_tcapsrt_info->src_tid=0;
|
|
|
|
break;
|
|
|
|
}
|
2019-01-31 14:40:24 +00:00
|
|
|
if (p_tcap_private)
|
|
|
|
p_tcap_private->src_tid = gp_tcapsrt_info->src_tid;
|
2016-02-06 13:14:38 +00:00
|
|
|
|
|
|
|
if (len) {
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "otid(");
|
2016-02-05 13:44:57 +00:00
|
|
|
for (i = 0; i < len; i++) {
|
2016-02-06 13:14:38 +00:00
|
|
|
col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%%02x",tvb_get_guint8(parameter_tvb,i));
|
2016-02-05 13:44:57 +00:00
|
|
|
}
|
2016-02-06 13:14:38 +00:00
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, ") ");
|
|
|
|
}
|
|
|
|
}
|
2005-08-18 21:36:59 +00:00
|
|
|
|
2007-07-27 19:24:40 +00:00
|
|
|
#----------------------------------------------------------------------------------------
|
2005-06-06 15:39:20 +00:00
|
|
|
#.FN_BODY DestTransactionID
|
2016-02-06 13:14:38 +00:00
|
|
|
tvbuff_t *parameter_tvb;
|
|
|
|
guint8 len , i;
|
|
|
|
proto_tree *subtree;
|
2016-02-05 13:44:57 +00:00
|
|
|
int saved_offset;
|
2017-04-28 16:39:07 +00:00
|
|
|
struct tcap_private_t *p_tcap_private = (struct tcap_private_t*)actx->value_ptr;
|
2016-02-06 13:14:38 +00:00
|
|
|
|
2016-02-05 13:44:57 +00:00
|
|
|
hf_index = hf_tcap_tid;
|
|
|
|
saved_offset = offset;
|
|
|
|
%(DEFAULT_BODY)s
|
2019-04-03 21:32:30 +00:00
|
|
|
proto_item_set_generated(actx->created_item);
|
2016-02-05 13:44:57 +00:00
|
|
|
offset = saved_offset;
|
|
|
|
|
|
|
|
subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_dtid, NULL, "Destination Transaction ID");
|
2016-02-06 13:14:38 +00:00
|
|
|
offset = dissect_ber_octet_string(implicit_tag, actx, subtree, tvb, offset, hf_tcap_dtid,
|
2016-02-05 13:44:57 +00:00
|
|
|
¶meter_tvb);
|
2016-02-06 13:14:38 +00:00
|
|
|
|
|
|
|
if (parameter_tvb) {
|
|
|
|
len = tvb_reported_length_remaining(parameter_tvb, 0);
|
|
|
|
switch(len) {
|
|
|
|
case 1:
|
|
|
|
gp_tcapsrt_info->dst_tid=tvb_get_guint8(parameter_tvb, 0);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
gp_tcapsrt_info->dst_tid=tvb_get_ntohs(parameter_tvb, 0);
|
|
|
|
break;
|
2017-05-29 19:49:26 +00:00
|
|
|
case 3:
|
|
|
|
gp_tcapsrt_info->dst_tid=tvb_get_ntoh24(parameter_tvb, 0);
|
|
|
|
break;
|
2016-02-06 13:14:38 +00:00
|
|
|
case 4:
|
|
|
|
gp_tcapsrt_info->dst_tid=tvb_get_ntohl(parameter_tvb, 0);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
gp_tcapsrt_info->dst_tid=0;
|
|
|
|
break;
|
|
|
|
}
|
2019-01-31 14:40:24 +00:00
|
|
|
if (p_tcap_private)
|
|
|
|
p_tcap_private->dst_tid = gp_tcapsrt_info->dst_tid;
|
2016-02-06 13:14:38 +00:00
|
|
|
|
|
|
|
if (len) {
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, "dtid(");
|
2016-02-05 13:44:57 +00:00
|
|
|
for(i = 0; i < len; i++) {
|
2016-02-06 13:14:38 +00:00
|
|
|
col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%%02x",tvb_get_guint8(parameter_tvb,i));
|
2016-02-05 13:44:57 +00:00
|
|
|
}
|
2016-02-06 13:14:38 +00:00
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, ") ");
|
|
|
|
}
|
|
|
|
}
|
2007-07-27 06:23:45 +00:00
|
|
|
#.FN_HDR Begin
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
gp_tcapsrt_info->ope=TC_BEGIN;
|
|
|
|
|
2007-07-26 20:05:54 +00:00
|
|
|
/* Do not change col_add_str() to col_append_str() here: we _want_ this call
|
|
|
|
* to overwrite whatever's currently in the INFO column (e.g., "UDT" from
|
|
|
|
* the SCCP dissector).
|
|
|
|
*
|
|
|
|
* If there's something there that should not be overwritten, whoever
|
|
|
|
* put that info there should call col_set_fence() to protect it.
|
|
|
|
*/
|
2016-02-06 13:14:38 +00:00
|
|
|
col_set_str(actx->pinfo->cinfo, COL_INFO, "Begin ");
|
2007-07-27 06:23:45 +00:00
|
|
|
#.END
|
2007-04-23 20:20:46 +00:00
|
|
|
|
|
|
|
|
2007-07-27 06:23:45 +00:00
|
|
|
#.FN_HDR End
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
gp_tcapsrt_info->ope=TC_END;
|
|
|
|
|
2016-02-06 13:14:38 +00:00
|
|
|
col_set_str(actx->pinfo->cinfo, COL_INFO, "End ");
|
2007-07-27 06:23:45 +00:00
|
|
|
#.END
|
2007-04-23 06:50:07 +00:00
|
|
|
|
|
|
|
|
2007-07-27 06:23:45 +00:00
|
|
|
#.FN_HDR Continue
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
gp_tcapsrt_info->ope=TC_CONT;
|
|
|
|
|
2016-02-06 13:14:38 +00:00
|
|
|
col_set_str(actx->pinfo->cinfo, COL_INFO, "Continue ");
|
2007-07-27 06:23:45 +00:00
|
|
|
#.END
|
2007-04-23 06:50:07 +00:00
|
|
|
|
|
|
|
|
2007-07-27 06:23:45 +00:00
|
|
|
#.FN_HDR Abort
|
From Florent Drouin:
Here are some patches and a new module to introduce the notion of Tcap context for a Tcap transaction. For each Tcap transaction, several parameters, like session identifier, start time or OID, will be saved in a hash table, to keep these informations available for the next messages. This context is then given to the upper layer, and can be used, for example, to generate transaction-associated statistics.
Moreover, the Upper protocol, detected in the Begin of the TCAP transaction ( according to the OID ), is saved in the context, and will be reused for the next messages of the transaction. This help the decoding of SS7 messages, without any SSN configuration in the "wireshark preferences".
You will have too, the possibility to apply a filter to see only the messages related to a TCAP transaction. (tcap.srt.session_id=XXX)
To enable the use of the Tcap context, you have 2 new parameters in the preferences,
- SRT, enable search for a Tcap context for any TCAP messages
- persistentSRT, keep the Tcap context, even after the transaction has been closed. This is mandatory with Wireshark, to have a clean display of the stats.
There is 2 new timers in the preferences for the statistics, to tune the retransmission timeout, and messages lost timeout.
svn path=/trunk/; revision=19341
2006-09-27 20:06:06 +00:00
|
|
|
gp_tcapsrt_info->ope=TC_ABORT;
|
|
|
|
|
2016-02-06 13:14:38 +00:00
|
|
|
col_set_str(actx->pinfo->cinfo, COL_INFO, "Abort ");
|
2007-07-27 06:23:45 +00:00
|
|
|
#.END
|
2016-02-06 13:14:38 +00:00
|
|
|
|
|
|
|
#
|
|
|
|
# Editor modelines - http://www.wireshark.org/tools/modelines.html
|
|
|
|
#
|
|
|
|
# Local variables:
|
|
|
|
# c-basic-offset: 2
|
|
|
|
# tab-width: 8
|
|
|
|
# indent-tabs-mode: nil
|
|
|
|
# End:
|
|
|
|
#
|
|
|
|
# vi: set shiftwidth=2 tabstop=8 expandtab:
|
|
|
|
# :indentSize=2:tabSize=8:noTabs=true:
|
|
|
|
#
|