00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _C_PROTOCOL_EXTERNAL_H
00021 #define _C_PROTOCOL_EXTERNAL_H
00022
00023 #include "Utils.hpp"
00024 #include "C_XmlData.hpp"
00025
00026 #include "C_TransportControl.hpp"
00027 #include "C_ProtocolExternalFrame.hpp"
00028 #include "C_MsgBuildContext.hpp"
00029 #include "C_MsgBuildContextFactory.hpp"
00030 #include "list_t.hpp"
00031 #include "map_t.hpp"
00032 #include "string_t.hpp"
00033 #include "C_GeneratorConfig.hpp"
00034
00035 #include "C_ProtocolStats.hpp"
00036
00037 class C_MessageExternal ;
00038
00039 class C_ProtocolExternal : public C_ProtocolExternalFrame {
00040 public:
00041 C_ProtocolExternal(C_TransportControl *P_transport_control,
00042 C_XmlData *P_def,
00043 char **P_name,
00044 T_pConfigValueList P_config_value_list,
00045 T_ConstructorResult *P_res);
00046 ~C_ProtocolExternal();
00047
00048 typedef struct _field_def_t {
00049 int m_id ;
00050 T_TypeType m_type ;
00051 C_MsgBuildContext::T_ContextFunction m_set;
00052 C_MsgBuildContext::T_ContextFunction m_get;
00053 C_MsgBuildContext::T_ContextFunction m_check_set;
00054 C_MsgBuildContext::T_ContextFunction m_check_get;
00055
00056 } T_DefField, *T_pDefField ;
00057
00058
00059 C_MessageFrame* create_new_message (C_MessageFrame *P_msg) ;
00060 C_MessageFrame* create_new_message (void *P_xml,
00061 T_pInstanceDataList P_list,
00062 int *P_nb_body_value) ;
00063
00064 char* message_name () ;
00065 char* message_component_name () ;
00066 T_pNameAndIdList message_name_list () ;
00067 T_pNameAndIdList message_component_name_list () ;
00068
00069 int find_field (char *P_name) ;
00070 bool find_present_session (int P_msg_id,int P_id) ;
00071
00072 T_TypeType get_field_type (int P_id,
00073 int P_sub_id) ;
00074
00075 bool check_sub_entity_needed (int P_id) ;
00076
00077 char* get_string_value(int P_id, T_pValueData P_data);
00078 char* get_string_value_field_body(int P_id, T_pValueData P_data);
00079
00080 C_MsgBuildContextFactory* get_factory() ;
00081
00082
00083 C_ProtocolFrame::T_MsgError from_external
00084 (C_MsgBuildContext* P_build,
00085 T_pReceiveMsgContext P_recvMsgCtx) ;
00086 C_ProtocolFrame::T_MsgError to_external
00087 (C_MsgBuildContext* P_build,
00088 C_MessageFrame *P_msg) ;
00089
00090 void log_message (char* P_header, C_MessageFrame *P_msg) ;
00091
00092 protected:
00093 private:
00094 typedef struct _fielddef_t {
00095 char *m_name ;
00096 char *m_type ;
00097 char *m_get ;
00098 char *m_set ;
00099 char *m_check_get ;
00100 char *m_check_set ;
00101 char *m_default ;
00102 char *m_to_string ;
00103 char *m_from_string ;
00104 char *m_config_field_name ;
00105 } T_FieldDef, *T_pFieldDef ;
00106 typedef list_t<T_FieldDef> T_FieldDefList, *T_pFieldDefList ;
00107
00108 typedef struct _field_value_t {
00109 char *m_name ;
00110 char *m_value ;
00111 } T_FieldValue, *T_pFieldValue ;
00112 typedef list_t<T_FieldValue> T_FieldValueList, *T_pFieldValueList ;
00113
00114 typedef list_t<char*> T_CharList, *T_pCharList ;
00115
00116
00117 typedef struct _fielddef_body_t {
00118 char *m_name ;
00119 char *m_instance ;
00120 T_pFieldValueList m_list_value ;
00121 T_pCharList m_list_not_present ;
00122
00123 } T_FieldBody, *T_pFieldBody ;
00124 typedef list_t<T_FieldBody> T_FieldBodyList, *T_pFieldBodyList ;
00125
00126 typedef struct _fielddef_header_t {
00127 char *m_name ;
00128 T_pFieldValueList m_list_value ;
00129 T_pCharList m_list_header_not_present ;
00130 T_pFieldBodyList m_list_body ;
00131 } T_FieldHeader, *T_pFieldHeader ;
00132 typedef list_t<T_FieldHeader> T_FieldHeaderList, *T_pFieldHeaderList ;
00133
00134
00135 typedef struct _field_desc_t {
00136 int m_id ;
00137 T_TypeType m_type ;
00138 char *m_name ;
00139 C_MsgBuildContext::T_ContextFunction m_get;
00140 C_MsgBuildContext::T_ContextFunction m_set;
00141 C_MsgBuildContext::T_ContextFunction m_check_get;
00142 C_MsgBuildContext::T_ContextFunction m_check_set;
00143
00144 C_MsgBuildContext::T_ContextStringFunction m_to_string ;
00145 C_MsgBuildContext::T_ContextStringFunction m_from_string ;
00146 char* m_config_field_name ;
00147
00148 } T_FieldDesc, *T_pFieldDesc ;
00149
00150 typedef struct _field_body_t {
00151 int m_id ;
00152 char *m_name ;
00153 T_pValueData m_header ;
00154 } T_FieldBodyDesc, *T_pFieldBodyDesc ;
00155 typedef map_t<string_t,T_pFieldDesc> T_FieldNameMap, *T_pFieldNameMap ;
00156 typedef map_t<string_t,T_pFieldBodyDesc> T_FieldBodyNameMap, *T_pFieldBodyNameMap ;
00157 typedef map_t<string_t,C_MessageExternal*> T_MessageNameMap, *T_pMessageNameMap ;
00158
00159 typedef map_t<T_ValueData, C_MessageExternal*> T_MessageDecodeMap, *T_pMessageDecodeMap ;
00160 typedef map_t<T_ValueData, int > T_BodyDecodeMap, *T_pBodyDecodeMap ;
00161
00162
00163
00164 int m_nb_body_fields ;
00165 int m_nb_header_fields ;
00166 int m_nb_body_values ;
00167
00168 int m_nb_config_params ;
00169
00170
00171 int m_start_body_index ;
00172 int m_end_header_index ;
00173
00174 T_pFieldBodyNameMap m_body_value_name_map ;
00175
00176 void *m_library_handle ;
00177 T_FactoryInfo m_factory_info ;
00178 C_MsgBuildContextFactory *m_factory ;
00179 C_MsgBuildContext *m_factory_context ;
00180
00181 char *m_message_name ;
00182 char *m_body_name ;
00183
00184 int m_session_id ;
00185 int m_outof_session_id ;
00186
00187 int m_type_id ;
00188 int m_body_type_id ;
00189
00190 T_pFieldNameMap m_field_body_name_map ;
00191 T_pFieldNameMap m_field_name_map ;
00192 int m_id_counter ;
00193
00194 T_pValueData m_header_defaults ,
00195 m_body_defaults ;
00196
00197
00198 char *m_data_field_name ;
00199 T_pMessageNameMap m_message_map ;
00200
00201
00202 T_pFieldDesc *m_header_field_desc_table ;
00203 T_pFieldDesc *m_body_field_desc_table ;
00204 T_pFieldBodyDesc *m_body_value_table ;
00205
00206 char **m_names_table ;
00207 char **m_message_names_table ;
00208 int m_nb_names ;
00209 int m_nb_message_names ;
00210 T_pMessageDecodeMap m_message_decode_map ;
00211 T_pBodyDecodeMap m_body_decode_map ;
00212
00213 bool **m_body_not_present_table ;
00214
00215 bool **m_header_not_present_table ;
00216
00217
00218 C_MsgBuildContext::T_ContextFunction m_get_body;
00219 C_MsgBuildContext::T_ContextFunction m_add_body;
00220
00221 C_MsgBuildContext::T_ContextFunction m_create_body;
00222 C_MsgBuildContext::T_ContextFunction m_delete_body;
00223
00224 C_MsgBuildContext::T_ContextFunction m_create_header;
00225 C_MsgBuildContext::T_ContextFunction m_delete_header;
00226
00227 C_MsgBuildContext::T_ContextStringFunction *m_from_string_table ;
00228 int m_nb_from_string ;
00229 C_MsgBuildContext::T_ContextStringFunction *m_to_string_table ;
00230
00231 C_MsgBuildContext::T_ContextStringFunction *m_from_string_field_body_table ;
00232 int m_nb_from_string_field_body ;
00233 C_MsgBuildContext::T_ContextStringFunction *m_to_string_field_body_table ;
00234
00235
00236 T_pNameAndIdList m_message_name_list ;
00237 T_pNameAndIdList m_message_comp_name_list ;
00238
00239 T_pConfigValueList m_config_value_list ;
00240
00241 int xml_analysis (C_XmlData *P_data, char **P_name,
00242 T_pConfigValueList P_config_value_list);
00243
00244 int xml_fields (C_XmlData *P_data,
00245 T_FieldDefList *P_fielddef_list,
00246 char **P_section_name,
00247 char **P_type,
00248 char **P_create,
00249 char **P_delete,
00250 char **P_value_field,
00251 char **P_add,
00252 char **P_get,
00253 bool P_ctrl_body);
00254
00255
00256 int xml_configuration_parameters (C_XmlData *P_data,
00257 T_ParamDefList *P_paramdef_list) ;
00258
00259 int update_config_params(T_ParamDef& P_config_param_dico,
00260 T_pConfigValueList P_config_value_list);
00261
00262
00263
00264 T_FieldBodyList* analyze_body_value(C_XmlData *P_data,
00265 T_FieldBodyList *P_fielddef_body_list,
00266 bool P_body_only,
00267 int *P_ret);
00268
00269 T_FieldValueList* analyze_setfield(C_XmlData *P_data,
00270 T_FieldValueList *P_field_value_list,
00271 int *P_ret);
00272
00273 T_CharList* analyze_not_present(C_XmlData *P_data,
00274 T_CharList *P_field_not_present_list,
00275 int *P_ret);
00276
00277
00278
00279 T_FieldHeaderList* analyze_header_value(C_XmlData *P_data,
00280 T_FieldHeaderList *P_fielddef_header_list,
00281 bool P_header_only,
00282 int *P_ret);
00283 int new_id () ;
00284 int get_id () ;
00285
00286 int analyze_dictionnary (T_FieldDefList *P_header_fields,
00287 T_FieldDefList *P_body_fields,
00288 char *P_body_value_name,
00289 char *P_session_id_name,
00290 char *P_outof_session_id_name,
00291 T_FieldBodyList *P_body_values,
00292 T_FieldHeaderList *P_header_values,
00293 char *P_header_type,
00294 T_pConfigValueList P_config_value_list,
00295 char *P_body_type) ;
00296
00297
00298 char* is_variable(char* P_variableString) ;
00299 char* find_config_value(char* P_variable) ;
00300
00301 T_pFieldDesc check_field(T_FieldDef &P_field_def,
00302 char *P_field_name,
00303 char **P_data_type_name,
00304 char *P_field_type,
00305 char **P_field_type_found,
00306 T_pConfigValueList P_config_value_list,
00307 bool P_header);
00308
00309 T_pFieldBodyDesc check_body(T_FieldBody &P_field_body);
00310 T_pFieldBodyDesc check_body_value(T_FieldBody &P_field_body);
00311
00312 int check_not_present(T_FieldBody &P_field_body);
00313 int check_header_not_present(T_FieldHeader &P_field_header);
00314
00315
00316 void set_body_field_id();
00317 C_MessageExternal* build_message (C_MessageExternal* P_msg,
00318 T_FieldHeader& P_header_list,
00319 T_pInstanceDataList P_list,
00320 int *P_nb_body_value) ;
00321
00322 int find_field_id (char*P_name);
00323
00324 } ;
00325
00326 #endif // _C_PROTOCOL_EXTERNAL_H
00327
00328
00329
00330
00331
00332
00333