00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "C_MessageExternal.hpp"
00021 #include "Utils.hpp"
00022 #include "ProtocolData.hpp"
00023 #include "BufferUtils.hpp"
00024
00025 #include "GeneratorTrace.hpp"
00026 #include "GeneratorError.h"
00027
00028 #include "C_ProtocolExternal.hpp"
00029
00030 #define min(a,b) (a)<(b) ? (a) : (b)
00031 #define max(a,b) (a)>(b) ? (a) : (b)
00032
00033 C_MessageExternal::C_MessageExternal() :
00034 C_MessageFrame(),
00035 m_protocol(NULL),
00036 m_nb_values(0),
00037 m_all_values(NULL),
00038 m_ids(NULL){
00039
00040 int L_i ;
00041
00042 ALLOC_TABLE(m_header, T_pValueData,
00043 sizeof(T_ValueData), m_nb_header_fields);
00044 for (L_i = 0 ; L_i < m_nb_header_fields; L_i++) {
00045 m_header[L_i].m_type = E_TYPE_NUMBER ;
00046 m_header[L_i].m_value.m_val_number = 0 ;
00047 m_header[L_i].m_id = L_i ;
00048 }
00049
00050 ALLOC_TABLE(m_body, T_pMultiValueData,
00051 sizeof(T_MultiValueData), m_nb_body_values);
00052 for(L_i = 0 ; L_i < m_nb_body_values; L_i++) {
00053 m_body[L_i].m_nb = 0 ;
00054 m_body[L_i].m_values = NULL ;
00055 }
00056
00057 m_id = -1 ;
00058 }
00059
00060 C_MessageExternal::~C_MessageExternal() {
00061 int L_i, L_j ;
00062
00063
00064 for (L_i = m_nb_header_fields; L_i < m_nb_values; L_i++) {
00065 for (L_j = 0; L_j < m_nb_body_fields; L_j++) {
00066 resetMemory(m_all_values[L_i][L_j]);
00067 }
00068 FREE_TABLE(m_all_values[L_i]);
00069 }
00070 FREE_TABLE(m_all_values);
00071 FREE_TABLE(m_ids);
00072
00073 for(L_i = 0 ; L_i < m_nb_body_values; L_i++) {
00074 if (m_body[L_i].m_nb !=0) {
00075 FREE_TABLE(m_body[L_i].m_values);
00076 m_body[L_i].m_nb = 0 ;
00077 }
00078 }
00079 FREE_TABLE(m_body);
00080 for(L_i=0; L_i < m_nb_header_fields; L_i++) {
00081 if(m_header_not_present_table[m_id][L_i] == true ) {
00082 resetMemory(m_header[L_i]);
00083 }
00084 }
00085 FREE_TABLE(m_header);
00086
00087 m_protocol = NULL ;
00088 m_nb_values = 0 ;
00089 }
00090
00091 void C_MessageExternal::internal_reset() {
00092
00093 int L_i, L_j ;
00094
00095 for (L_i = 0 ; L_i < m_nb_header_fields; L_i++) {
00096 if(m_header_not_present_table[m_id][L_i] == true ) {
00097 resetMemory(m_header[L_i]);
00098 }
00099 }
00100 for(L_i = 0 ; L_i < m_nb_body_values; L_i++) {
00101 m_body[L_i].m_nb = 0 ;
00102 m_body[L_i].m_values = NULL ;
00103 }
00104 if (m_nb_values) {
00105 for (L_i = m_nb_header_fields; L_i < m_nb_values; L_i++) {
00106 for (L_j = 0; L_j < m_nb_body_fields; L_j++) {
00107 resetMemory(m_all_values[L_i][L_j]);
00108 }
00109 FREE_TABLE(m_all_values[L_i]);
00110 }
00111 FREE_TABLE(m_all_values);
00112 FREE_TABLE(m_ids);
00113 m_nb_values = 0 ;
00114 }
00115 m_protocol = NULL ;
00116 m_id = -1 ;
00117
00118 }
00119
00120 T_pValueData C_MessageExternal::get_session_id (C_ContextFrame *P_ctxt) {
00121 T_pValueData L_value ;
00122 L_value = ((this)->*(m_get_id))(m_session_id,0);
00123 if (L_value == NULL) {
00124 L_value = get_out_of_session_id();
00125 }
00126 return (L_value);
00127 }
00128
00129 T_pValueData C_MessageExternal::get_out_of_session_id () {
00130 return (((this)->*(m_get_outof_session_id))(m_outof_session_id,0));
00131 }
00132
00133
00134 T_pValueData C_MessageExternal::get_id_header (int P_id, int P_instance) {
00135 return (&m_header[P_id]);
00136 }
00137
00138 T_pValueData C_MessageExternal::get_id_body (int P_id, int P_instance) {
00139 int L_id ;
00140
00141 L_id = P_id - m_nb_header_fields -1 ;
00142 return (m_body[L_id].m_values[P_instance]);
00143 }
00144
00145
00146 T_pValueData C_MessageExternal::get_type () {
00147 return (((this)->*(m_get_type))(m_type_id));
00148 }
00149
00150 T_pValueData C_MessageExternal::get_type_header (int P_instance) {
00151 return (&m_header[m_type_id]);
00152 }
00153
00154 T_pValueData C_MessageExternal::get_type_body (int P_instance) {
00155 int L_id ;
00156
00157 L_id = m_type_id - m_nb_header_fields ;
00158 return (m_body[L_id].m_values[0]);
00159
00160 }
00161
00162 int C_MessageExternal::get_nb_header_fields () {
00163 return (m_nb_header_fields) ;
00164 }
00165 int C_MessageExternal::get_nb_body_values () {
00166 return (m_nb_body_values) ;
00167 }
00168 int C_MessageExternal::get_nb_body_fields () {
00169 return (m_nb_body_fields) ;
00170 }
00171
00172 bool C_MessageExternal::update_fields (C_MessageFrame *P_ref) {
00173 return (true);
00174 }
00175 bool C_MessageExternal::compare_types (C_MessageFrame *P_ref) {
00176 bool L_result ;
00177 C_MessageExternal *L_msg ;
00178
00179 GEN_DEBUG(1, "C_MessageExternal::compare_types() start");
00180 L_msg = dynamic_cast<C_MessageExternal*>(P_ref) ;
00181
00182 L_result = (L_msg == NULL) ? false : (L_msg->m_id == m_id) ;
00183
00184
00185 GEN_DEBUG(1, "C_MessageExternal::compare_types() end");
00186 return (L_result);
00187 }
00188
00189 bool C_MessageExternal::check (C_MessageFrame *P_ref,
00190 unsigned int P_levelMask,
00191 T_CheckBehaviour P_behave) {
00192 GEN_DEBUG(1, "C_MessageExternal::check() start");
00193
00194 C_MessageExternal *L_ref ;
00195
00196 int L_min_nb_values ;
00197 int L_i ;
00198 bool L_found = true ;
00199 bool L_additional = false ;
00200
00201 L_ref = dynamic_cast<C_MessageExternal*>(P_ref);
00202
00203 L_min_nb_values = min (L_ref->m_nb_values, m_nb_values);
00204 L_additional = (m_nb_values > L_ref->m_nb_values) ;
00205
00206
00207 if (L_found == true) {
00208 for (L_i = 0 ; L_i < L_min_nb_values ; L_i++) {
00209 if (L_ref->m_ids[L_i] !=
00210 m_ids[L_i]) {
00211 L_found = false ;
00212 break;
00213 }
00214 }
00215
00216 if (L_found == false) {
00217 if ((P_levelMask & _check_level_mask[E_CHECK_LEVEL_FIELD_PRESENCE]) ||
00218 (P_levelMask & _check_level_mask[E_CHECK_LEVEL_FIELD_ADDED])) {
00219 GEN_LOG_EVENT (_check_behaviour_mask[P_behave],
00220 "check failed in ["
00221 << m_message_names[m_id]
00222 << "] " << m_protocol->message_name()
00223 << ", " << m_protocol->message_component_name ()
00224 << " ["
00225 << m_names[L_ref->m_ids[L_i]]
00226 << "] not found");
00227 return (L_found);
00228 }
00229
00230 }
00231
00232 if (P_levelMask & _check_level_mask[E_CHECK_LEVEL_FIELD_ADDED]) {
00233 if (L_additional == true) {
00234 if (L_min_nb_values < m_nb_values) {
00235 for (L_i = L_min_nb_values ; L_i < m_nb_values ; L_i++) {
00236 GEN_LOG_EVENT (_check_behaviour_mask[P_behave],
00237 "check failed in ["
00238 << m_message_names[m_id]
00239 << "] " << m_protocol->message_name()
00240 << ", " << m_protocol->message_component_name ()
00241 << " ["
00242 << m_names[this->m_ids[L_i]]
00243 << "] not found");
00244
00245
00246 }
00247 } else {
00248 if (L_min_nb_values < L_ref->m_nb_values) {
00249 for (L_i = L_min_nb_values ; L_i < L_ref->m_nb_values ; L_i++) {
00250 GEN_LOG_EVENT (_check_behaviour_mask[P_behave],
00251 "check failed in ["
00252 << m_message_names[m_id]
00253 << "] " << m_protocol->message_name()
00254 << ", " << m_protocol->message_component_name ()
00255 << " ["
00256 << m_names[L_ref->m_ids[L_i]]
00257 << "] not found");
00258 }
00259 }
00260 }
00261 }
00262 }
00263 }
00264
00265
00266 GEN_DEBUG(1, "C_MessageExternal::check() end");
00267 return (L_found);
00268 }
00269
00270 bool C_MessageExternal::check_field_presence
00271 (int P_id,
00272 T_CheckBehaviour P_behave,
00273 int P_instance,
00274 int P_sub_id) {
00275
00276 bool L_found = false ;
00277
00278 GEN_DEBUG(1, "C_MessageExternal::check_field_presence() start");
00279
00280
00281 if (P_id < m_nb_header_fields) {
00282 if ((int) m_header[P_id].m_id == P_id) {
00283 L_found = true ;
00284 }
00285 } else {
00286 if (P_sub_id == -1) {
00287 if (m_body[P_id-m_nb_header_fields].m_nb != 0) {
00288 L_found = (P_instance <= m_body[P_id-m_nb_header_fields].m_nb ) ? true : false ;
00289 }
00290 }
00291 }
00292
00293 if (L_found == false) {
00294 if (P_id < m_nb_header_fields) {
00295 GEN_LOG_EVENT (_check_behaviour_mask[P_behave],
00296 "check failed in ["
00297 << m_message_names[m_id]
00298 << "] " << m_protocol->message_name()
00299 << ", " << m_protocol->message_component_name ()
00300 << " ["
00301 << m_names[P_id]
00302 << "] not found");
00303
00304 } else {
00305 if (P_sub_id == -1) {
00306 GEN_LOG_EVENT (_check_behaviour_mask[P_behave],
00307 "check failed in ["
00308 << m_message_names[m_id]
00309 << "] " << m_protocol->message_name()
00310 << ", " << m_protocol->message_component_name ()
00311 << " ["
00312 << m_names[P_id]
00313 << "] not found");
00314 }
00315 }
00316 }
00317
00318
00319
00320 GEN_DEBUG(1, "C_MessageExternal::check_field_presence() end");
00321
00322 return (L_found);
00323 }
00324
00325
00326 bool C_MessageExternal::check_field_value
00327 (C_MessageFrame *P_ref,
00328 int P_id,
00329 T_CheckBehaviour P_behave,
00330 int P_instance,
00331 int P_sub_id) {
00332
00333 bool L_check = false ;
00334
00335 C_MessageExternal *L_ref ;
00336
00337 GEN_DEBUG(1, "C_MessageExternal::check_field_value() start");
00338
00339 L_ref = dynamic_cast<C_MessageExternal*>(P_ref);
00340
00341 if (P_id < m_nb_header_fields) {
00342 L_check = (L_ref->m_header[P_id] == m_header[P_id]) ;
00343 } else {
00344 if (P_sub_id != -1 ) {
00345 if ((m_body[P_id-m_nb_header_fields].m_nb != 0) &&
00346 (m_body[P_id-m_nb_header_fields].m_nb == L_ref->m_body[P_id-m_nb_header_fields].m_nb) &&
00347 (P_instance <= L_ref->m_body[P_id-m_nb_header_fields].m_nb) &&
00348 (P_instance <= m_body[P_id-m_nb_header_fields].m_nb) &&
00349 (L_ref->m_ids[P_id] == m_ids[P_id])) {
00350 L_check =(m_body[P_id-m_nb_header_fields]
00351 .m_values[P_instance][P_sub_id-m_nb_header_fields-m_nb_body_values]
00352 ==
00353 L_ref->m_body[P_id-m_nb_header_fields]
00354 .m_values[P_instance][P_sub_id-m_nb_header_fields-m_nb_body_values]) ;
00355 } else {
00356 L_check = false;
00357 }
00358 } else {
00359 L_check = (P_instance <= m_body[P_id-m_nb_header_fields].m_nb) ;
00360 }
00361
00362 }
00363
00364 if (L_check == false) {
00365 if (P_sub_id != -1) {
00366 GEN_LOG_EVENT (_check_behaviour_mask[P_behave],
00367 "check failed in ["
00368 << m_message_names[m_id]
00369 << "] " << m_protocol->message_name()
00370 << " and ["
00371 << m_names[P_id]
00372 << "] " << m_protocol->message_component_name ());
00373 GEN_LOG_EVENT (_check_behaviour_mask[P_behave],
00374 " value of field ["
00375 << m_names[P_sub_id]
00376 << "] is incorrect");
00377
00378 } else {
00379 if (P_id < m_nb_header_fields) {
00380 GEN_LOG_EVENT (_check_behaviour_mask[P_behave],
00381 "check failed in ["
00382 << m_message_names[m_id]
00383 << "] " << m_protocol->message_name()
00384 << ", value of " << m_protocol->message_component_name ()
00385 << " ["
00386 << m_names[P_id]
00387 << "] is incorrect");
00388
00389 } else {
00390 GEN_LOG_EVENT (_check_behaviour_mask[P_behave],
00391 "check failed in ["
00392 << m_message_names[m_id]
00393 << "] " << m_protocol->message_name()
00394 << ", " << m_protocol->message_component_name ()
00395 << " ["
00396 << m_names[P_id]
00397 << "] is incorrect ");
00398 }
00399 }
00400 }
00401
00402
00403 GEN_DEBUG(1, "C_MessageExternal::check_field_value() end");
00404
00405 return (L_check);
00406 }
00407
00408
00409
00410 bool C_MessageExternal::check_field_order
00411 (int P_id,
00412 T_CheckBehaviour P_behave,
00413 int P_position) {
00414
00415
00416 bool L_check = false ;
00417
00418
00419 GEN_DEBUG(1, "C_MessageExternal::check_field_value() start");
00420
00421 if (P_id < m_nb_values) {
00422 L_check = ( m_ids[P_position] == P_id) ;
00423 }
00424
00425 if (L_check == false) {
00426 GEN_LOG_EVENT (_check_behaviour_mask[P_behave],
00427 "check order failed in ["
00428 << m_message_names[m_id]
00429 << "] " << m_protocol->message_name()
00430 << ", received " << m_protocol->message_component_name ()
00431 << " ["
00432 << m_names[m_ids[P_position]+m_nb_header_fields]
00433 << "] when expecting ["
00434 << m_names[P_id]
00435 << "]");
00436 }
00437
00438
00439
00440 GEN_DEBUG(1, "C_MessageExternal::check_field_value() end");
00441
00442 return (L_check);
00443 }
00444
00445
00446 T_TypeType C_MessageExternal::get_field_type (int P_id,
00447 int P_sub_id) {
00448 GEN_DEBUG(1, "C_MessageExternal::get_field_type() start");
00449 T_TypeType L_type = E_TYPE_NUMBER;
00450 GEN_DEBUG(1, "C_MessageExternal::get_field_type() end");
00451 L_type = m_protocol->get_field_type(P_id,P_sub_id) ;
00452 return (L_type);
00453 }
00454
00455
00456
00457 bool C_MessageExternal::get_field_value (int P_id,
00458 int P_instance,
00459 int P_sub_id,
00460 T_pValueData P_value) {
00461
00462 GEN_DEBUG(1, "C_MessageExternal::get_field_value() start");
00463
00464
00465
00466
00467
00468 if (P_id < m_nb_header_fields) {
00469 copyValue(*(P_value),m_header[P_id],true) ;
00470 } else {
00471 copyValue(*(P_value),
00472 m_body[P_id-m_nb_header_fields]
00473 .m_values[P_instance][P_sub_id-m_nb_header_fields-m_nb_body_values]
00474 ,true) ;
00475 }
00476
00477 GEN_DEBUG(1, "C_MessageExternal::get_field_value() end");
00478
00479 return (true);
00480 }
00481
00482 bool C_MessageExternal::set_field_value (T_pValueData P_value,
00483 int P_id,
00484 int P_instance,
00485 int P_sub_id) {
00486
00487 GEN_DEBUG(1, "C_MessageExternal::set_field_value() start");
00488
00489 if (P_id < m_nb_header_fields) {
00490 copyValue(m_header[P_id],*(P_value),true) ;
00491 } else {
00492 copyValue(
00493 m_body[P_id-m_nb_header_fields]
00494 .m_values[P_instance][P_sub_id-m_nb_header_fields-m_nb_body_values],
00495 *(P_value),
00496 true) ;
00497 }
00498
00499
00500
00501 GEN_DEBUG(1, "C_MessageExternal::set_field_value() end");
00502 return (true);
00503 }
00504
00505
00506 C_MessageExternal::C_MessageExternal(C_MessageExternal &P_val) {
00507
00508 int L_i, L_j ;
00509 int L_id ;
00510 int L_instance ;
00511 int *L_body_instance ;
00512
00513 ALLOC_TABLE(L_body_instance, int*, sizeof(int),
00514 m_nb_body_values);
00515 for (L_i = 0 ; L_i < m_nb_body_values; L_i ++) {
00516 L_body_instance[L_i] = 0 ;
00517 }
00518
00519 m_protocol = P_val.m_protocol ;
00520 m_id = P_val.m_id ;
00521 m_nb_values = P_val.m_nb_values ;
00522 ALLOC_TABLE(m_header, T_pValueData,
00523 sizeof(T_ValueData), m_nb_header_fields);
00524 for (L_i = 0 ; L_i < m_nb_header_fields; L_i++) {
00525 m_header[L_i].m_type = E_TYPE_NUMBER ;
00526 copyValue(m_header[L_i], P_val.m_header[L_i], false);
00527 }
00528 ALLOC_TABLE(m_body, T_pMultiValueData,
00529 sizeof(T_MultiValueData), m_nb_body_values);
00530
00531 for(L_i = 0 ; L_i < m_nb_body_values; L_i++) {
00532 m_body[L_i].m_nb = 0 ;
00533 m_body[L_i].m_values = NULL ;
00534 }
00535
00536 ALLOC_TABLE(m_all_values,T_pValueData*,
00537 sizeof(T_pValueData), m_nb_values);
00538 ALLOC_TABLE(m_ids,int*,
00539 sizeof(int), m_nb_values);
00540 for (L_i = 0; L_i < m_nb_header_fields; L_i++) {
00541 m_all_values[L_i] = &(m_header[L_i]) ;
00542 m_ids[L_i]=L_i;
00543 }
00544
00545
00546 for (L_i = m_nb_header_fields; L_i < m_nb_values; L_i++) {
00547
00548 ALLOC_TABLE(m_all_values[L_i],
00549 T_pValueData, sizeof(T_ValueData), m_nb_body_fields);
00550 m_ids[L_i] = P_val.m_ids[L_i] ;
00551
00552 L_id = m_ids[L_i] ;
00553
00554 for (L_j = 0 ; L_j < m_nb_body_fields; L_j ++) {
00555 copyValue(m_all_values[L_i][L_j],
00556 P_val.m_all_values[L_i][L_j],
00557 false);
00558 }
00559 if (L_body_instance[L_id] == 0) {
00560 L_body_instance[L_id] = P_val.m_body[L_id].m_nb ;
00561 ALLOC_TABLE(m_body[L_id].m_values, T_pValueData*,
00562 sizeof(T_pValueData), L_body_instance[L_id]);
00563 }
00564
00565 L_instance = m_body[L_id].m_nb ;
00566 m_body[L_id].m_values[L_instance] = m_all_values[L_i] ;
00567 m_body[L_id].m_nb ++;
00568 }
00569 FREE_TABLE(L_body_instance);
00570 }
00571
00572 C_MessageExternal& C_MessageExternal::operator= (C_MessageExternal &P_val) {
00573
00574 int L_i, L_j ;
00575 int L_id ;
00576 int L_instance ;
00577 int *L_body_instance ;
00578
00579
00580 ALLOC_TABLE(L_body_instance, int*, sizeof(int),
00581 m_nb_body_values);
00582 for (L_i = 0 ; L_i < m_nb_body_values; L_i ++) {
00583 L_body_instance[L_i] = 0 ;
00584 }
00585
00586 internal_reset() ;
00587 m_protocol = P_val.m_protocol ;
00588 m_id = P_val.m_id ;
00589
00590 for (L_i = 0 ; L_i < m_nb_header_fields; L_i++) {
00591 copyValue(m_header[L_i], P_val.m_header[L_i], false);
00592 }
00593 m_nb_values = P_val.m_nb_values ;
00594
00595 ALLOC_TABLE(m_all_values,T_pValueData*,
00596 sizeof(T_pValueData), m_nb_values);
00597 ALLOC_TABLE(m_ids,int*,
00598 sizeof(int), m_nb_values);
00599 for (L_i = 0; L_i < m_nb_header_fields; L_i++) {
00600 m_all_values[L_i] = &(m_header[L_i]) ;
00601 m_ids[L_i]=L_i;
00602 }
00603 for (L_i = m_nb_header_fields; L_i < m_nb_values; L_i++) {
00604
00605 ALLOC_TABLE(m_all_values[L_i],
00606 T_pValueData, sizeof(T_ValueData), m_nb_body_fields);
00607 m_ids[L_i] = P_val.m_ids[L_i] ;
00608 L_id = m_ids[L_i] ;
00609 for (L_j = 0 ; L_j < m_nb_body_fields; L_j ++) {
00610 copyValue(m_all_values[L_i][L_j],
00611 P_val.m_all_values[L_i][L_j],
00612 false);
00613 }
00614 if (L_body_instance[L_id] == 0) {
00615 L_body_instance[L_id] = P_val.m_body[L_i].m_nb ;
00616 ALLOC_TABLE(m_body[L_id].m_values, T_pValueData*,
00617 sizeof(T_pValueData), L_body_instance[L_id]);
00618 }
00619 L_instance = m_body[L_id].m_nb ;
00620
00621 m_body[L_id].m_values[L_instance] = m_all_values[L_i] ;
00622 m_body[L_id].m_nb ++;
00623 }
00624
00625 FREE_TABLE(L_body_instance);
00626 return (*this);
00627 }
00628
00629 iostream_output& operator<< (iostream_output& P_stream,
00630 C_MessageExternal& P_msg) {
00631
00632 int L_i, L_j, L_k ;
00633 char *L_string_value ;
00634
00635 P_stream << P_msg.m_message_names[P_msg.m_id] ;
00636
00637 for (L_i = 0; L_i < P_msg.m_nb_header_fields ; L_i++) {
00638 if (P_msg.m_header_not_present_table[P_msg.m_id][L_i] == true) {
00639 P_stream << iostream_endl ;
00640 P_stream << GEN_HEADER_LOG << GEN_HEADER_NO_LEVEL ;
00641 P_stream << "["
00642 << P_msg.m_names[P_msg.m_ids[L_i]]
00643 << "] = " ;
00644
00645 L_string_value = (P_msg.m_protocol)
00646 ->get_string_value(L_i, P_msg.m_all_values[L_i]);
00647
00648 P_stream << "[" ;
00649 if (L_string_value == NULL) {
00650 P_stream << *P_msg.m_all_values[L_i] ;
00651 } else {
00652 P_stream << L_string_value ;
00653 }
00654 P_stream << "]" ;
00655 }
00656 }
00657
00658 for (L_i = P_msg.m_nb_header_fields ; L_i < P_msg.m_nb_values ; L_i++) {
00659
00660 P_stream << iostream_endl ;
00661 P_stream << GEN_HEADER_LOG << GEN_HEADER_NO_LEVEL ;
00662 P_stream << "["
00663 << P_msg.m_names[P_msg.m_ids[L_i]+P_msg.m_nb_header_fields]
00664 << "] = [" ;
00665
00666 L_k = P_msg.m_ids[L_i] ;
00667
00668 for (L_j = 0 ; L_j < P_msg.m_nb_body_fields ; L_j++) {
00669
00670 if (P_msg.m_body_not_present_table[L_k][L_j] == true) {
00671 P_stream << iostream_endl ;
00672 P_stream << GEN_HEADER_LOG << GEN_HEADER_NO_LEVEL ;
00673 P_stream << " ["
00674 << P_msg.m_names[P_msg.m_all_values[L_i][L_j].m_id]
00675 << "] = " ;
00676 L_string_value =
00677 (P_msg.m_protocol)
00678 ->get_string_value_field_body(L_j,
00679 &(P_msg.m_all_values[L_i][L_j]));
00680
00681 P_stream << "[" ;
00682 if (L_string_value == NULL) {
00683 P_stream << P_msg.m_all_values[L_i][L_j] ;
00684 } else {
00685 P_stream << L_string_value ;
00686 }
00687 P_stream << "]" ;
00688 }
00689 }
00690
00691 P_stream << iostream_endl << GEN_HEADER_LOG << GEN_HEADER_NO_LEVEL ;
00692 P_stream << " ]" ;
00693
00694 }
00695
00696
00697 return (P_stream) ;
00698 }
00699
00700 int C_MessageExternal::m_nb_header_fields = 0 ;
00701 int C_MessageExternal::m_nb_body_values = 0 ;
00702 int C_MessageExternal::m_nb_body_fields = 0 ;
00703 int C_MessageExternal::m_session_id = 0 ;
00704 int C_MessageExternal::m_outof_session_id = 0 ;
00705 int C_MessageExternal::m_type_id = 0 ;
00706 C_MessageExternal::T_GetId_instance C_MessageExternal::m_get_id = NULL ;
00707
00708
00709 C_MessageExternal::T_GetId_instance C_MessageExternal::m_get_outof_session_id = NULL ;
00710 C_MessageExternal::T_GetId C_MessageExternal::m_get_type = NULL ;
00711
00712
00713 char** C_MessageExternal::m_names = NULL ;
00714 char** C_MessageExternal::m_message_names = NULL ;
00715
00716 bool** C_MessageExternal::m_body_not_present_table = NULL ;
00717 bool** C_MessageExternal::m_header_not_present_table = NULL ;
00718
00719 void C_MessageExternal::dump(iostream_output& P_stream) {
00720
00721 P_stream << *this << iostream_endl ;
00722
00723 }
00724
00725 void C_MessageExternal::set_protocol_data (int P_nb_header_fields,
00726 int P_nb_body_values,
00727 int P_nb_body_fields,
00728 int P_session_id,
00729 int P_outof_session_id,
00730 int P_type_id,
00731 char **P_names,
00732 char **P_message_names,
00733 bool **P_body_not_present_table,
00734 bool **P_header_not_present_table) {
00735
00736 m_nb_header_fields = P_nb_header_fields ;
00737 m_nb_body_values = P_nb_body_values ;
00738 m_nb_body_fields = P_nb_body_fields ;
00739 m_session_id = P_session_id ;
00740 m_outof_session_id = P_outof_session_id ;
00741 m_type_id = P_type_id ;
00742
00743 if (m_session_id < (m_nb_header_fields - 1)) {
00744 m_get_id = &C_MessageExternal::get_id_header ;
00745 } else if (m_session_id < (m_nb_header_fields + m_nb_body_values - 1)) {
00746 m_get_id = &C_MessageExternal::get_id_body ;
00747 }
00748
00749 if (m_outof_session_id < (m_nb_header_fields - 1)) {
00750 m_get_outof_session_id = &C_MessageExternal::get_id_header ;
00751 } else if (m_outof_session_id < (m_nb_header_fields + m_nb_body_values - 1)) {
00752 m_get_outof_session_id = &C_MessageExternal::get_id_body ;
00753 }
00754
00755 if (m_type_id < (m_nb_header_fields - 1)) {
00756 m_get_type = &C_MessageExternal::get_type_header ;
00757 } else if (m_type_id< (m_nb_header_fields + m_nb_body_values - 1)) {
00758 m_get_type = &C_MessageExternal::get_type_body ;
00759 }
00760
00761 m_names = P_names ;
00762 m_message_names = P_message_names ;
00763 m_body_not_present_table = P_body_not_present_table ;
00764 m_header_not_present_table = P_header_not_present_table ;
00765
00766 }
00767
00768 C_MessageExternal::C_MessageExternal (C_ProtocolExternal *P_protocol,
00769 T_pValueData P_header,
00770 T_pValueDataList P_body,
00771 list_t<int> *P_body_id,
00772 int *P_instance_body) {
00773
00774 int L_i, L_index ;
00775 int L_id, L_instance ;
00776 T_ValueDataList::iterator L_value_it ;
00777 list_t<int>::iterator L_id_it ;
00778
00779 GEN_DEBUG(1, "C_MessageExternal::C_MessageExternal() start");
00780
00781 m_protocol = P_protocol ;
00782 m_header = P_header ;
00783 m_nb_values = m_nb_header_fields ;
00784
00785 ALLOC_TABLE(m_body, T_pMultiValueData,
00786 sizeof(T_MultiValueData), m_nb_body_values);
00787 for(L_i = 0 ; L_i < m_nb_body_values; L_i++) {
00788 m_body[L_i].m_nb = 0 ;
00789 if (P_instance_body[L_i] != 0 ) {
00790 ALLOC_TABLE(m_body[L_i].m_values, T_pValueData*,
00791 sizeof(T_pValueData), P_instance_body[L_i]);
00792 } else {
00793 m_body[L_i].m_values = NULL ;
00794 }
00795 }
00796
00797
00798 if (!P_body->empty()) {
00799 m_nb_values += P_body->size() ;
00800 }
00801 ALLOC_TABLE(m_all_values,T_pValueData*,
00802 sizeof(T_pValueData), m_nb_values);
00803
00804 ALLOC_TABLE(m_ids,int*,
00805 sizeof(int), m_nb_values);
00806 L_index = 0 ;
00807 for (L_i = 0; L_i < m_nb_header_fields; L_i++) {
00808 m_all_values[L_index] = &(m_header[L_i]) ;
00809 m_ids[L_index] = L_i ;
00810 L_index++ ;
00811 }
00812
00813 if (!P_body->empty()) {
00814 L_id_it = P_body_id->begin() ;
00815 for(L_value_it = P_body->begin();
00816 L_value_it != P_body->end();
00817 L_value_it++) {
00818 m_all_values[L_index] = *L_value_it ;
00819 L_id = *L_id_it;
00820 m_ids[L_index] = L_id ;
00821 L_instance = m_body[L_id].m_nb ;
00822 m_body[L_id].m_values[L_instance] = *L_value_it ;
00823 m_body[L_id].m_nb ++ ;
00824 L_index++;
00825 L_id_it++;
00826 }
00827 }
00828
00829 GEN_DEBUG(1, "C_MessageExternal::C_MessageExternal() end");
00830 }
00831
00832
00833 char* C_MessageExternal::name() {
00834 return(m_message_names[m_id]);
00835 }
00836
00837 int C_MessageExternal::get_id_message(){
00838 return (m_id) ;
00839 }
00840
00841
00842 bool C_MessageExternal::get_field_value(int P_id,
00843 C_RegExp *P_reg,
00844 T_pValueData P_value) {
00845 return (true) ;
00846 }
00847
00848 void C_MessageExternal::update_message_stats () {
00849 }
00850
00851
00852 int C_MessageExternal::get_buffer (T_pValueData P_dest,
00853 T_MessagePartType P_header_body_type) {
00854 return (0) ;
00855 }