diff options
author | Tomas Kukosa <tomas.kukosa@siemens.com> | 2007-05-15 12:53:04 +0000 |
---|---|---|
committer | Tomas Kukosa <tomas.kukosa@siemens.com> | 2007-05-15 12:53:04 +0000 |
commit | 783da34c5080998b82a950cb116575cedb753f07 (patch) | |
tree | 3f40d21b51ad487e20c5370ff86a418a726a0cb9 /asn1/rnsap/packet-rnsap-template.c | |
parent | 58105364d5180cebc2010019f299b3b9c3fdea37 (diff) | |
download | wireshark-783da34c5080998b82a950cb116575cedb753f07.tar.gz |
get rid of the rest of dummy ASN.1 code and switch()
svn path=/trunk/; revision=21787
Diffstat (limited to 'asn1/rnsap/packet-rnsap-template.c')
-rw-r--r-- | asn1/rnsap/packet-rnsap-template.c | 346 |
1 files changed, 22 insertions, 324 deletions
diff --git a/asn1/rnsap/packet-rnsap-template.c b/asn1/rnsap/packet-rnsap-template.c index 302ffb9d2d..9ebe084de1 100644 --- a/asn1/rnsap/packet-rnsap-template.c +++ b/asn1/rnsap/packet-rnsap-template.c @@ -52,8 +52,6 @@ #define SCCP_SSN_RNSAP 143 -#define RNSAP_FDD 1 - #include "packet-rnsap-val.h" static dissector_handle_t rnsap_handle=NULL; @@ -61,8 +59,6 @@ static dissector_handle_t rnsap_handle=NULL; /* Initialize the protocol and registered fields */ static int proto_rnsap = -1; -static int hf_rnsap_pdu_length = -1; -static int hf_rnsap_IE_length = -1; static int hf_rnsap_L3_DL_DCCH_Message_PDU = -1; #include "packet-rnsap-hf.c" @@ -70,31 +66,32 @@ static int hf_rnsap_L3_DL_DCCH_Message_PDU = -1; /* Initialize the subtree pointers */ static int ett_rnsap = -1; static int ett_rnsap_initiatingMessageValue = -1; -static int ett_rnsap_ProtocolIEValueValue = -1; static int ett_rnsap_SuccessfulOutcomeValue = -1; static int ett_rnsap_UnsuccessfulOutcomeValue = -1; #include "packet-rnsap-ett.c" /* Global variables */ -static proto_tree *top_tree; static guint32 ProcedureCode; static guint32 ProtocolIE_ID; static guint32 ddMode; +static const gchar *ProcedureID; /* Dissector tables */ static dissector_table_t rnsap_ies_dissector_table; static dissector_table_t rnsap_extension_dissector_table; +static dissector_table_t rnsap_proc_imsg_dissector_table; +static dissector_table_t rnsap_proc_sout_dissector_table; +static dissector_table_t rnsap_proc_uout_dissector_table; static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); -static int dissect_rnsap_InitiatingMessageValueValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); -static int dissect_rnsap_SuccessfulOutcomeValueValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); -static int dissect_rnsap_UnsuccessfulOutcomeValueValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); #include "packet-rnsap-fn.c" - static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { return (dissector_try_port(rnsap_ies_dissector_table, ProtocolIE_ID, tvb, pinfo, tree)) ? tvb_length(tvb) : 0; @@ -105,321 +102,30 @@ static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_in return (dissector_try_port(rnsap_extension_dissector_table, ProtocolIE_ID, tvb, pinfo, tree)) ? tvb_length(tvb) : 0; } -static int dissect_rnsap_InitiatingMessageValueValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - int offset = 0; - proto_tree *value_tree = tree; - asn1_ctx_t actx_str; - asn1_ctx_t *actx = &actx_str; - - asn1_ctx_init(actx, ASN1_ENC_PER, TRUE, pinfo); - switch(ProcedureCode){ - case RNSAP_ID_COMMONTRANSPORTCHANNELRESOURCESINITIALISATION: /* 0 */ - offset = dissect_id_commonTransportChannelResourcesInitialisation(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_COMMONTRANSPORTCHANNELRESOURCESRELEASE: /* 1 */ - offset = dissect_id_commonTransportChannelResourcesRelease(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_COMPRESSEDMODECOMMAND: /* 2 */ - offset = dissect_id_compressedModeCommand(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_DOWNLINKPOWERCONTROL: /* 3 */ - offset = dissect_id_downlinkPowerTimeslotControl(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_DOWNLINKPOWERTIMESLOTCONTROL: /* 4 */ - offset = dissect_id_downlinkPowerTimeslotControl(tvb, offset, actx, value_tree); - break; - break; - case RNSAP_ID_DOWNLINKSIGNALLINGTRANSFER: /* 5 */ - offset = dissect_id_downlinkSignallingTransfer(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_ERRORINDICATION: /* 6 */ - offset = dissect_id_errorIndication(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_DEDICATEDMEASUREMENTFAILURE: /* 7 */ - offset = dissect_id_dedicatedMeasurementFailure(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_DEDICATEDMEASUREMENTINITIATION: /* 8 */ - offset = dissect_id_dedicatedMeasurementInitiation(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_DEDICATEDMEASUREMENTREPORTING: /* 9 */ - offset = dissect_id_dedicatedMeasurementReporting(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_DEDICATEDMEASUREMENTTERMINATION: /* 10 */ - offset = dissect_id_dedicatedMeasurementTermination(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_PAGING: /* 11 */ - offset = dissect_id_paging(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_PHYSICALCHANNELRECONFIGURATION: /* 12 */ - offset = dissect_id_physicalChannelReconfiguration(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_PRIVATEMESSAGE: /* 13 */ - offset = dissect_id_privateMessage(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RADIOLINKADDITION: /* 14 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_radioLinkAddition(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_radioLinkAddition_TDD(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_RADIOLINKCONGESTION: /* 34 */ - offset = dissect_id_radioLinkCongestion(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RADIOLINKDELETION: /* 15 */ - offset = dissect_id_radioLinkDeletion(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RADIOLINKFAILURE: /* 16 */ - offset = dissect_id_radioLinkFailure(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RADIOLINKPREEMPTION: /* 17 */ - offset = dissect_id_radioLinkPreemption(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RADIOLINKRESTORATION: /* 18 */ - offset = dissect_id_radioLinkRestoration(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RADIOLINKSETUP: /* 19 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_radioLinkSetup(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_radioLinkSetupTdd(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_RELOCATIONCOMMIT: /* 20 */ - offset = dissect_id_relocationCommit(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_SYNCHRONISEDRADIOLINKRECONFIGURATIONCANCELLATION: /* 21 */ - offset = dissect_id_synchronisedRadioLinkReconfigurationCancellation(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_SYNCHRONISEDRADIOLINKRECONFIGURATIONCOMMIT: /* 22 */ - offset = dissect_id_synchronisedRadioLinkReconfigurationCommit(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_SYNCHRONISEDRADIOLINKRECONFIGURATIONPREPARATION: /* 23 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_synchronisedRadioLinkReconfigurationPreparation(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_synchronisedRadioLinkReconfigurationPreparation_TDD(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_UNSYNCHRONISEDRADIOLINKRECONFIGURATION: /* 24 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_unSynchronisedRadioLinkReconfiguration(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_unSynchronisedRadioLinkReconfiguration_TDD(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_UPLINKSIGNALLINGTRANSFER: /* 25 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_uplinkSignallingTransfer(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_uplinkSignallingTransfer_TDD(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_COMMONMEASUREMENTFAILURE: /* 26 */ - offset = dissect_id_commonMeasurementFailure(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_COMMONMEASUREMENTINITIATION: /* 27 */ - offset = dissect_id_commonMeasurementInitiation(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_COMMONMEASUREMENTREPORTING: /* 28 */ - offset = dissect_id_commonMeasurementReporting(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_COMMONMEASUREMENTTERMINATION: /* 29 */ - offset = dissect_id_commonMeasurementTermination(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_INFORMATIONEXCHANGEFAILURE: /* 30 */ - offset = dissect_id_informationExchangeFailure(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_INFORMATIONEXCHANGEINITIATION: /* 31 */ - offset = dissect_id_informationExchangeInitiation(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_INFORMATIONREPORTING: /* 32 */ - offset = dissect_id_informationReporting(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_INFORMATIONEXCHANGETERMINATION: /* 33 */ - offset = dissect_id_informationExchangeTermination(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RESET: /* 35 */ - offset = dissect_id_reset(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RADIOLINKACTIVATION: /* 36 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_radioLinkActivation(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_radioLinkActivation_TDD(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_GERANUPLINKSIGNALLINGTRANSFER: /* 37 */ - offset = dissect_id_gERANuplinkSignallingTransfer(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RADIOLINKPARAMETERUPDATE: /* 38 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_radioLinkParameterUpdate(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_radioLinkParameterUpdate_TDD(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_UEMEASUREMENTFAILURE: /* 39 */ - offset = dissect_id_uEMeasurementFailure(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_UEMEASUREMENTINITIATION: /* 40 */ - offset = dissect_id_uEMeasurementInitiation(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_UEMEASUREMENTREPORTING: /* 41 */ - offset = dissect_id_uEMeasurementReporting(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_UEMEASUREMENTTERMINATION: /* 42 */ - offset = dissect_id_uEMeasurementTermination(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_IURDEACTIVATETRACE: /* 43 */ - offset = dissect_id_iurDeactivateTrace(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_IURINVOKETRACE: /* 44 */ - offset = dissect_id_iurInvokeTrace(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_MBMSATTACH: /* 45 */ - offset = dissect_id_mBMSAttach(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_MBMSDETACH: /* 46 */ - offset = dissect_id_mBMSDetach(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_DIRECTINFORMATIONTRANSFER: /* 48 */ - offset = dissect_id_directInformationTransfer(tvb, offset, actx, value_tree); - break; - } - return offset; +static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +{ + if (!ProcedureID) return 0; + return (dissector_try_string(rnsap_proc_imsg_dissector_table, ProcedureID, tvb, pinfo, tree)) ? tvb_length(tvb) : 0; } -static int dissect_rnsap_SuccessfulOutcomeValueValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - int offset = 0; - proto_tree *value_tree = tree; - asn1_ctx_t actx_str; - asn1_ctx_t *actx = &actx_str; - - asn1_ctx_init(actx, ASN1_ENC_PER, TRUE, pinfo); - switch(ProcedureCode){ - case RNSAP_ID_COMMONTRANSPORTCHANNELRESOURCESINITIALISATION: - if (ddMode==RNSAP_FDD){ - offset = dissect_id_commonTransportChannelResourcesInitialisation1(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_commonTransportChannelResourcesInitialisation_TDD(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_DEDICATEDMEASUREMENTINITIATION: /* 8 */ - offset = dissect_id_dedicatedMeasurementInitiation2(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_PHYSICALCHANNELRECONFIGURATION: /* 12 */ - offset = dissect_id_physicalChannelReconfiguration1(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RADIOLINKADDITION: /* 14 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_radioLinkAddition1(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_radioLinkAddition_TDD1(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_RADIOLINKDELETION: /* 15 */ - offset = dissect_id_radioLinkDeletion1(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RADIOLINKSETUP: /* 19 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_radioLinkSetup1(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_radioLinkSetupTdd1(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_SYNCHRONISEDRADIOLINKRECONFIGURATIONPREPARATION: /* 23 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_synchronisedRadioLinkReconfigurationPreparation1(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_synchronisedRadioLinkReconfigurationPreparation_TDD(tvb, offset, actx, value_tree); - } - case RNSAP_ID_UNSYNCHRONISEDRADIOLINKRECONFIGURATION: /* 24 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_unSynchronisedRadioLinkReconfiguration1(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_unSynchronisedRadioLinkReconfiguration_TDD1(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_COMMONMEASUREMENTINITIATION: /* 27 */ - offset = dissect_id_commonMeasurementInitiation1(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_INFORMATIONEXCHANGEINITIATION: /* 31 */ - offset = dissect_id_informationExchangeInitiation1(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RESET: /* 35 */ - offset = dissect_id_reset1(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_UEMEASUREMENTINITIATION: /* 40 */ - offset = dissect_id_uEMeasurementInitiation1(tvb, offset, actx, value_tree); - break; - } - return offset; +static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +{ + if (!ProcedureID) return 0; + return (dissector_try_string(rnsap_proc_sout_dissector_table, ProcedureID, tvb, pinfo, tree)) ? tvb_length(tvb) : 0; } -static int dissect_rnsap_UnsuccessfulOutcomeValueValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - int offset = 0; - proto_tree *value_tree = tree; - asn1_ctx_t actx_str; - asn1_ctx_t *actx = &actx_str; - - asn1_ctx_init(actx, ASN1_ENC_PER, TRUE, pinfo); - switch(ProcedureCode){ - case RNSAP_ID_COMMONTRANSPORTCHANNELRESOURCESINITIALISATION: - offset = dissect_id_commonTransportChannelResourcesInitialisation2(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_DEDICATEDMEASUREMENTINITIATION: /* 8 */ - offset = dissect_id_dedicatedMeasurementInitiation2(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_PHYSICALCHANNELRECONFIGURATION: /* 12 */ - offset = dissect_id_physicalChannelReconfiguration2(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_RADIOLINKADDITION: /* 14 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_radioLinkAddition2(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_radioLinkAddition_TDD2(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_RADIOLINKSETUP: /* 19 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_radioLinkSetup2(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_radioLinkSetupTdd2(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_SYNCHRONISEDRADIOLINKRECONFIGURATIONPREPARATION: /* 23 */ - offset = dissect_id_synchronisedRadioLinkReconfigurationPreparation2(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_UNSYNCHRONISEDRADIOLINKRECONFIGURATION: /* 24 */ - if (ddMode==RNSAP_FDD){ - offset = dissect_id_unSynchronisedRadioLinkReconfiguration2(tvb, offset, actx, value_tree); - }else{ - offset = dissect_id_unSynchronisedRadioLinkReconfiguration_TDD2(tvb, offset, actx, value_tree); - } - break; - case RNSAP_ID_COMMONMEASUREMENTINITIATION: /* 27 */ - offset = dissect_id_commonMeasurementInitiation2(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_INFORMATIONEXCHANGEINITIATION: /* 31 */ - offset = dissect_id_informationExchangeInitiation2(tvb, offset, actx, value_tree); - break; - case RNSAP_ID_UEMEASUREMENTINITIATION: /* 40 */ - offset = dissect_id_uEMeasurementInitiation2(tvb, offset, actx, value_tree); - break; - } - return offset; +static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +{ + if (!ProcedureID) return 0; + return (dissector_try_string(rnsap_proc_uout_dissector_table, ProcedureID, tvb, pinfo, tree)) ? tvb_length(tvb) : 0; } - static void dissect_rnsap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { proto_item *rnsap_item = NULL; proto_tree *rnsap_tree = NULL; - top_tree = tree; - /* make entry in the Protocol column on summary display */ if (check_col(pinfo->cinfo, COL_PROTOCOL)) col_set_str(pinfo->cinfo, COL_PROTOCOL, "RNSAP"); @@ -437,12 +143,6 @@ void proto_register_rnsap(void) { /* List of fields */ static hf_register_info hf[] = { - { &hf_rnsap_pdu_length, - { "PDU Length", "rnsap.pdu_length", FT_UINT32, BASE_DEC, - NULL, 0, "Number of octets in the PDU", HFILL }}, - { &hf_rnsap_IE_length, - { "IE Length", "rnsap.ie_length", FT_UINT32, BASE_DEC, - NULL, 0, "Number of octets in the IE", HFILL }}, { &hf_rnsap_L3_DL_DCCH_Message_PDU, { "DL-DCCH-Message", "rnsap.DL_DCCH_Message", FT_NONE, BASE_NONE, NULL, 0, @@ -454,10 +154,6 @@ void proto_register_rnsap(void) { /* List of subtrees */ static gint *ett[] = { &ett_rnsap, - &ett_rnsap_initiatingMessageValue, - &ett_rnsap_ProtocolIEValueValue, - &ett_rnsap_SuccessfulOutcomeValue, - &ett_rnsap_UnsuccessfulOutcomeValue, #include "packet-rnsap-ettarr.c" }; @@ -475,7 +171,9 @@ void proto_register_rnsap(void) { /* Register dissector tables */ rnsap_ies_dissector_table = register_dissector_table("rnsap.ies", "RNSAP-PROTOCOL-IES", FT_UINT32, BASE_DEC); rnsap_extension_dissector_table = register_dissector_table("rnsap.extension", "RNSAP-PROTOCOL-EXTENSION", FT_UINT32, BASE_DEC); - + rnsap_proc_imsg_dissector_table = register_dissector_table("rnsap.proc.imsg", "RNSAP-ELEMENTARY-PROCEDURE InitiatingMessage", FT_STRING, BASE_NONE); + rnsap_proc_sout_dissector_table = register_dissector_table("rnsap.proc.sout", "RNSAP-ELEMENTARY-PROCEDURE SuccessfulOutcome", FT_STRING, BASE_NONE); + rnsap_proc_uout_dissector_table = register_dissector_table("rnsap.proc.uout", "RNSAP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", FT_STRING, BASE_NONE); } |