NSIS-ka
A free C++ implementation of NSIS protocols

Changeset 4555


Ignore:
Timestamp:
Oct 14, 2009, 2:02:16 PM (8 years ago)
Author:
roehricht
Message:
  • Whitespace changes, indentation fixes, code beautification in process_query_msg()
File:
1 edited

Legend:

Unmodified
Added
Removed
  • qos-nslp/trunk/src/QoS_StateModule.cpp

    r4554 r4555  
    327327                  const ntlp::sessionid* rcvd_sid, const ntlp::mri_pathcoupled* rcvd_mri)
    328328{
    329   querymsg* query;
    330 
    331   bound_sessionid* send_bs = NULL;
    332   bool found = false;
    333   ILog(state_manager::modname, "process_query_msg()");
    334 
    335   query = dynamic_cast<querymsg*>(known_pdu);
    336 
    337   NSLP_Context* context = rcvd_sid ? contextmap.find(*rcvd_sid) : 0;
    338 
    339   if (context)
    340     ILog(state_manager::modname, "process_query_msg(), Found context!");
    341 
    342   cout << (*query);
    343   qspec_object* q = dynamic_cast<qspec_object*>(query->get_qspec());
    344 
    345   // ???????????????????????????????????????????
    346   /*
    347     if (q) {
    348     if (!rmf_admin) {
    349     rmf_admin = new rmf();
    350     }
    351     rmf_admin->process_qspec_in_query(q);
    352     }
    353   */
    354 
    355   NSLP_Context::qn_type_t type = NSLP_Context::QNE;
    356 
    357   const bound_sessionid* rcvd_b_sid = query->get_bound_sid();
    358   if (context) {
    359     context->lock();
    360     type= context->get_qn_type();
    361     context->set_downstream(down);
    362     context->set_mri(rcvd_mri);
    363     context->unlock();
    364     //================================= process RII ======================================
    365     rii* r = query->get_rii();
    366     if (r) {   
    367       uint32 rii_number;
    368       r->get(rii_number);
    369       ILog(state_manager::modname, "RII in QUERY existing " << rii_number);
    370 
    371       if (type != NSLP_Context::QNR) {
    372         // check if the RII number already existing
    373         NSLP_Context::rii_hashmap_it_t rii_hit;
    374         context->lock();
    375         if ((rii_hit=context->rii_hashmap.find(rii_number))!=context->rii_hashmap.end())
    376           {
    377             ILog(state_manager::modname, "FOUND RII " << rii_number << " in HASHMAP! Is it my entry?");
    378             rii* found_context_rii = rii_hit->second;
    379             context->unlock();
    380             if (found_context_rii->get_own()) {
    381               ERRLog(state_manager::modname, "Another node has sent a message with the duplicated RII!!!");
    382               send_response_with_rii(r, type == NSLP_Context::QNR, !down, rcvd_sid, rcvd_mri,
    383                                      info_spec::transient, info_spec::RIIconflict);
    384               return;
    385             }
    386           }
     329        querymsg* query;
     330
     331        bound_sessionid* send_bs = NULL;
     332        bool found = false;
     333
     334        query = dynamic_cast<querymsg*>(known_pdu);
     335
     336        NSLP_Context* context = rcvd_sid ? contextmap.find(*rcvd_sid) : 0;
     337
     338        if (context)
     339                ILog(state_manager::modname, "process_query_msg(), Found context");
     340        else
     341                ILog(state_manager::modname, "process_query_msg(), No context");
     342
     343        qspec_object* q = dynamic_cast<qspec_object*>(query->get_qspec());
     344
     345        // TODO
     346        /*
     347        if (q) {
     348                if (!rmf_admin)
     349                        rmf_admin = new rmf();
     350                rmf_admin->process_qspec_in_query(q);
     351        }
     352        */
     353
     354        const bound_sessionid* rcvd_b_sid = query->get_bound_sid();
     355
     356        if (context) {
     357                NSLP_Context::qn_type_t type = NSLP_Context::QNE;
     358                context->lock();
     359                type = context->get_qn_type();
     360                context->set_downstream(down);
     361                context->set_mri(rcvd_mri);
     362                context->unlock();
     363
     364                //=========================== process RII ================================
     365                rii* r = query->get_rii();
     366                if (r) {
     367                        uint32 rii_number;
     368                        r->get(rii_number);
     369                        ILog(state_manager::modname, "RII in QUERY existing " << rii_number);
     370
     371                        if (type != NSLP_Context::QNR) {
     372                                // check if the RII number already existing
     373                                NSLP_Context::rii_hashmap_it_t rii_hit;
     374                                context->lock();
     375                                if ((rii_hit=context->rii_hashmap.find(rii_number))!=context->rii_hashmap.end()) {
     376                                        ILog(state_manager::modname, "FOUND RII " << rii_number << " in hashmap. Is it my entry?");
     377                                        rii* found_context_rii = rii_hit->second;
     378                                        context->unlock();
     379                                        if (found_context_rii->get_own()) {
     380                                                ERRLog(state_manager::modname, "Another node has sent a message with the duplicated RII!!!");
     381                                                send_response_with_rii(r, type == NSLP_Context::QNR, !down, rcvd_sid, rcvd_mri,
     382                                                                info_spec::transient, info_spec::RIIconflict);
     383                                                return;
     384                                        }
     385                                }
     386                                else {
     387                                        context->unlock();
     388                                }
     389                        }  // end if not QNR
     390
     391                        if (type == NSLP_Context::QNR)
     392                                send_response_to_query(r, q, !down, rcvd_sid, rcvd_mri);
     393                        else {
     394                                if (query->is_scoping_flag())
     395                                        send_response_to_query(r, q, !down, rcvd_sid, rcvd_mri);
     396                                else
     397                                        forward_query_msg(query, down, rcvd_sid, rcvd_mri);
     398                        }
     399                }  // end if RII existing
     400                else {
     401                        // if I'm the QNR I should respond to the Query
     402                        if (query->is_reserve_init_flag() && is_last_signaling_hop(rcvd_mri))
     403                                // create RESERVE msg, send to QUERY initiator
     404                                create_and_send_reserve_msg_as_response_to_query(true, q, rcvd_b_sid, !down, rcvd_sid, rcvd_mri, context);
     405                        else if (query->is_reserve_init_flag())
     406                                forward_query_msg(query, down, rcvd_sid, rcvd_mri);
     407                        else // I'm a QNE, so simply forward this QUERY
     408                                ERRLog(state_manager::modname, "Reservation existing! Wrong message requesting new reservation!");
     409                }
     410
     411                //========================== process BOUND_SESSIONID ================================
     412                if (rcvd_b_sid) {
     413                        DLog(state_manager::modname, "process_query_msg() - saving BOUND_SID ["
     414                                        << rcvd_b_sid->to_string() << "]");
     415                        context->lock();
     416                        context->set_bound_s_id(*rcvd_b_sid);
     417                        context->unlock();
     418                }
     419                else {
     420                        if (type != NSLP_Context::QNR) {
     421                                // check, if there is a BOUND_SESSIONID saved for this SID
     422                                uint128 saved_b_sid;
     423                                context->lock();
     424                                found = context->get_bound_s_id(saved_b_sid);
     425                                context->unlock();
     426                                if (found) {
     427                                        ILog(state_manager::modname, "Found saved BOUND_SID. "
     428                                                        << "Setting BOUND_SESSIONID in QUERY message to ["
     429                                                        << saved_b_sid << "]");
     430                                        send_bs = new bound_sessionid();
     431                                        send_bs->set(saved_b_sid);
     432                                } 
     433                        }
     434                }
     435        } // end if context found
     436
     437        // no context found
    387438        else {
    388           context->unlock();
    389         }
    390       }  // end if not QNR
    391 
    392       if (type == NSLP_Context::QNR)
    393         send_response_to_query(r, q, !down, rcvd_sid, rcvd_mri);
    394       else {
    395         if (query->is_scoping_flag())
    396           send_response_to_query(r, q, !down, rcvd_sid, rcvd_mri);
    397         else
    398           forward_query_msg(query, down, rcvd_sid, rcvd_mri);
    399       }
    400     }  // end if RII existing
    401     else {
    402       // if I'm the QNR I should respond to the Query
    403       if ( query->is_reserve_init_flag() && is_last_signaling_hop(rcvd_mri) ) {
    404         // create RESERVE msg, send to QUERY initiator
    405         create_and_send_reserve_msg_as_response_to_query(true, q, rcvd_b_sid, !down, rcvd_sid, rcvd_mri, context);
    406       }
    407       else if (query->is_reserve_init_flag()) {
    408         forward_query_msg(query, down, rcvd_sid, rcvd_mri);
    409       }
    410       else { // I'm a QNE, so simply forward this QUERY
    411         ERRLog(state_manager::modname, "Reservation existing! Wrong message requesting new reservation!!!");
    412       }
    413     }
    414 
    415     //========================== process BOUND_SESSIONID ================================
    416     if (rcvd_b_sid) {
    417       DLog(state_manager::modname, "process_query_msg() - saving BOUND_SID [" << rcvd_b_sid->to_string() << "]");
    418       context->lock();
    419       context->set_bound_s_id(*rcvd_b_sid);
    420       context->unlock();
    421     }
    422     else {
    423       if (type != NSLP_Context::QNR) {
    424         // check, if there is a BOUND_SESSIONID saved for this SID
    425         uint128 saved_b_sid;
    426         context->lock();
    427         found = context->get_bound_s_id(saved_b_sid);
    428         context->unlock();
    429         if (found) {
    430           ILog(state_manager::modname, "Found saved BOUND_SID. Setting BOUND_SESSIONID in QUERY message to [" << saved_b_sid << "]");
    431           send_bs = new bound_sessionid();
    432           send_bs->set(saved_b_sid);
    433         } 
    434       }
    435     }
    436   } // end if context found
    437   else {
    438     bound_sessionid* bound_session_id = NULL;
    439     // no context so far
    440     if (rcvd_b_sid) {
    441       bound_session_id = new bound_sessionid(*rcvd_b_sid);
    442     }
    443 
    444     //================================ process RII ======================================
    445     rii* r = query->get_rii();
    446     if (r) {
    447       // if it RII is present, it cannot have the R flag set
    448       ILog(state_manager::modname, "RII existing!");
    449       if (is_last_signaling_hop(rcvd_mri)) {
    450         send_response_to_query(r, q, !down, rcvd_sid, rcvd_mri);
    451       }
    452       else {
    453         if (query->is_scoping_flag()) {
    454           send_response_to_query(r, q, !down, rcvd_sid, rcvd_mri);
    455         }
    456         else {
    457           // set BOUND_SESSION_ID for QUERY if present
    458           if (bound_session_id)
    459             query->set_bound_sid(bound_session_id);
    460           forward_query_msg(query, down, rcvd_sid, rcvd_mri);
    461         }
    462       }
    463     }  // end if RII existing
    464     else { // no RII present
    465      
    466       // if I'm the QNR I should respond to the Query
    467       if ( query->is_reserve_init_flag() && is_last_signaling_hop(rcvd_mri) ) {
    468         // create RESERVE msg, send to QUERY initiator
    469         create_and_send_reserve_msg_as_response_to_query(true, q, rcvd_b_sid, !down, rcvd_sid, rcvd_mri, 0);
    470       }
    471       else { // I'm a QNE, so simply forward this QUERY
    472         // HA TEnter
    473         if (down && addresses->addr_is_in(rcvd_mri->get_destaddress(), AddressList::HomeNet_P)) {
    474           ntlp::mri_pathcoupled *logical_tmri = rcvd_mri->copy();
    475           hostaddress *my_src = dynamic_cast<hostaddress *>(addresses->get_first(AddressList::HAAddr_P, rcvd_mri->get_destaddress().is_ipv4()));
    476           logical_tmri->set_sourceaddress(*my_src);
    477 
    478           uint128 tsid;
    479 
    480           querymsg* tunnel_query = new querymsg();
    481           copy_query_message(query, tunnel_query);
    482 
    483           tunnel_query->set_originator(true);
    484           known_nslp_pdu *pdu = dynamic_cast<known_nslp_pdu*>(tunnel_query);
    485           SignalingMsg* sigmsg = new SignalingMsg();
    486           sigmsg->set_msg(pdu);
    487 
    488           sigmsg->set_sig_mri(logical_tmri);
    489 
    490           sigmsg->set_downstream(down);
    491 
    492           ntlp::sessionid* sid = new sessionid();
    493           sid->generate_random();
    494           sid->generate_random();
    495           tsid = *sid;
    496 
    497           bound_sessionid* send_bs = new bound_sessionid();
    498           send_bs->set(tsid);
    499 
    500           query->set_bound_sid(send_bs);
    501 
    502           sigmsg->set_sid(tsid);
    503           sigmsg->send_or_delete();
    504         }
    505 
    506         // set BOUND_SESSION_ID for QUERY if present
    507         if (bound_session_id)
    508           query->set_bound_sid(bound_session_id);
    509         forward_query_msg(query, down, rcvd_sid, rcvd_mri);
    510       }
    511 
    512     } // end else
    513   }  // end no context
    514   ILog(state_manager::modname,"END process_query_msg()");
     439                bound_sessionid* bound_session_id = NULL;
     440                // no context so far
     441                if (rcvd_b_sid)
     442                        bound_session_id = new bound_sessionid(*rcvd_b_sid);
     443
     444                //============================ process RII =================================
     445                rii* r = query->get_rii();
     446                if (r) {
     447                        // if it RII is present, it cannot have the R flag set
     448                        ILog(state_manager::modname, "RII existing!");
     449                        if (is_last_signaling_hop(rcvd_mri))
     450                                send_response_to_query(r, q, !down, rcvd_sid, rcvd_mri);
     451                        else {
     452                                if (query->is_scoping_flag())
     453                                        send_response_to_query(r, q, !down, rcvd_sid, rcvd_mri);
     454                                else {
     455                                        // set BOUND_SESSION_ID for QUERY if present
     456                                        if (bound_session_id)
     457                                                query->set_bound_sid(bound_session_id);
     458                                        forward_query_msg(query, down, rcvd_sid, rcvd_mri);
     459                                }
     460                        }
     461                }  // end if RII existing
     462               
     463                // no RII present
     464                else {
     465
     466                        // if I'm the QNR I should respond to the Query
     467                        if ( query->is_reserve_init_flag() && is_last_signaling_hop(rcvd_mri) ) {
     468                                // create RESERVE msg, send to QUERY initiator
     469                                create_and_send_reserve_msg_as_response_to_query(true, q, rcvd_b_sid, !down, rcvd_sid, rcvd_mri, 0);
     470                        }
     471                        else { // I'm a QNE, so simply forward this QUERY
     472                                // HA TEnter
     473                                if (down && addresses->addr_is_in(rcvd_mri->get_destaddress(), AddressList::HomeNet_P)) {
     474                                        ntlp::mri_pathcoupled *logical_tmri = rcvd_mri->copy();
     475                                        hostaddress *my_src = dynamic_cast<hostaddress *>(addresses->get_first(AddressList::HAAddr_P, rcvd_mri->get_destaddress().is_ipv4()));
     476                                        logical_tmri->set_sourceaddress(*my_src);
     477
     478                                        querymsg* tunnel_query = new querymsg();
     479                                        copy_query_message(query, tunnel_query);
     480
     481                                        tunnel_query->set_originator(true);
     482                                        known_nslp_pdu *pdu = dynamic_cast<known_nslp_pdu*>(tunnel_query);
     483                                        SignalingMsg* sigmsg = new SignalingMsg();
     484                                        sigmsg->set_msg(pdu);
     485
     486                                        sigmsg->set_sig_mri(logical_tmri);
     487
     488                                        sigmsg->set_downstream(down);
     489
     490                                        uint128 tsid;
     491
     492                                        ntlp::sessionid* sid = new sessionid();
     493                                        sid->generate_random();
     494                                        sid->generate_random();
     495                                        tsid = *sid;
     496
     497                                        bound_sessionid* send_bs = new bound_sessionid();
     498                                        send_bs->set(tsid);
     499
     500                                        query->set_bound_sid(send_bs);
     501
     502                                        sigmsg->set_sid(tsid);
     503                                        sigmsg->send_or_delete();
     504                                }
     505
     506                                // set BOUND_SESSION_ID for QUERY if present
     507                                if (bound_session_id)
     508                                        query->set_bound_sid(bound_session_id);
     509                                forward_query_msg(query, down, rcvd_sid, rcvd_mri);
     510                        }
     511                } // end else
     512        }  // end no context
     513        ILog(state_manager::modname,"END process_query_msg()");
    515514}
    516515
Note: See TracChangeset for help on using the changeset viewer.