void EDF_Scheduler::receive_reply (PortableInterceptor::ClientRequestInfo_ptr ri) { int int_guid; DSUI_EVENT_LOG (EDF_SCHED_FAM, ENTER_RECEIVE_REPLY, 0, 0, 0); RTScheduling::Current::IdType guid; CORBA::String_var operation = ri->operation (); CORBA::Object_var target = ri->target (); ACE_CString opname = operation.in (); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T):receive_reply from " "\"%s\"\n", opname.c_str ())); #endif // Check that the reply service context was received as // expected. IOP::ServiceContext_var sc = ri->get_reply_service_context (Client_Interceptor::SchedulingInfo); CORBA::Long importance; TimeBase::TimeT deadline; if (sc.ptr () == 0) { ACE_DEBUG ((LM_DEBUG, "service context was not filled\n")); //24 hrs from now - infinity ACE_Time_Value deadline_tv = ACE_OS::gettimeofday () + ACE_Time_Value (24*60*60,0); deadline = deadline_tv.sec ()*1000000 + deadline_tv.usec ()*10; //100s of nanoseconds for TimeBase::TimeT importance = 0; } else { CORBA::OctetSeq oc_seq = CORBA::OctetSeq (sc->context_data.length (), sc->context_data.length (), sc->context_data.get_buffer (), 0); //Don't store in a _var, since >>= returns a pointer to an internal buffer //and we are not supposed to free it. Kokyu::Svc_Ctxt_DSRT_QoS* sc_qos_ptr; CORBA::Any sc_qos_as_any; CORBA::Any_var scqostmp = codec_->decode (oc_seq); sc_qos_as_any = scqostmp.in (); sc_qos_as_any >>= sc_qos_ptr; deadline = sc_qos_ptr->deadline; importance = sc_qos_ptr->importance; guid.length (sc_qos_ptr->guid.length ()); guid_copy (guid, sc_qos_ptr->guid); ACE_DEBUG ((LM_DEBUG, "(%t|%T):Importance = %d in recvd service context\n", importance)); } ACE_OS::memcpy (&int_guid, guid.get_buffer (), guid.length ()); EDF_Scheduler_Traits::QoSDescriptor_t qos; qos.deadline_ = qos.importance_ = importance; qos.deadline_ = deadline; this->kokyu_dispatcher_->schedule (guid, qos); DSUI_EVENT_LOG (EDF_SCHED_FAM, EXIT_RECEIVE_REPLY, int_guid, 0, 0); }
void Echo_Client_Request_Interceptor::send_request ( PortableInterceptor::ClientRequestInfo_ptr ri) { IOP::ServiceContext sc; sc.context_id = ::service_id; CORBA::Octet *buf = CORBA::OctetSeq::allocbuf(magic_cookie_len); ACE_OS::memcpy(buf, magic_cookie, magic_cookie_len); sc.context_data.replace (magic_cookie_len, magic_cookie_len, buf, 1); // Add this context to the service context list. ri->add_request_service_context (sc, 0); // Check that the request service context can be retrieved. IOP::ServiceContext_var rc = ri->get_request_service_context (::service_id); if (rc->context_data.length() != magic_cookie_len || ACE_OS::memcmp( magic_cookie, rc->context_data.get_buffer(), magic_cookie_len) != 0 ) { throw CORBA::BAD_PARAM(); } Echo_Client_Request_Interceptor::request_count++; }
void Echo_Client_Request_Interceptor::send_request ( PortableInterceptor::ClientRequestInfo_ptr ri) { CORBA::String_var operation = ri->operation (); CORBA::Object_var target = ri->target (); ACE_DEBUG ((LM_DEBUG,"%C.send_request from %C\n", this->myname_, operation.in ())); // Make the context to send to the target IOP::ServiceContext sc; sc.context_id = ::service_id; CORBA::ULong string_len = ACE_OS::strlen (request_msg) + 1; CORBA::Octet *buf = CORBA::OctetSeq::allocbuf (string_len); ACE_OS::strcpy (reinterpret_cast<char *> (buf), request_msg); sc.context_data.replace (string_len, string_len, buf, 1); // Add this context to the service context list. ri->add_request_service_context (sc, 0); }
void Client_Request_Interceptor::receive_other ( PortableInterceptor::ClientRequestInfo_ptr ri) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("CRI: in receive_other\n"))); CORBA::Boolean response_expected = ri->response_expected (); // Oneway if (!response_expected) return; PortableInterceptor::ReplyStatus reply_status; try { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("CRI: in receive_other, before reply_status\n"))); reply_status = ri->reply_status (); ACE_UNUSED_ARG (reply_status); } catch(CORBA::BAD_INV_ORDER const &e) { e._tao_print_exception ("CRI: exception"); } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("CRI: in receive_other, after reply_status\n"))); }
void MIF_Scheduler::receive_reply (PortableInterceptor::ClientRequestInfo_ptr ri) { RTScheduling::Current::IdType guid; CORBA::Short importance=0; CORBA::String_var operation = ri->operation (); CORBA::Object_var target = ri->target (); ACE_CString opname = operation.in (); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T):receive_reply from " "\"%s\"\n", opname.c_str ())); #endif // Check that the reply service context was received as // expected. IOP::ServiceContext_var sc = ri->get_reply_service_context (Client_Interceptor::SchedulingInfo); if (sc.ptr () == 0) { importance = 0; } else { CORBA::OctetSeq oc_seq = CORBA::OctetSeq (sc->context_data.length (), sc->context_data.length (), sc->context_data.get_buffer (), 0); //Don't store in a _var, since >>= returns a pointer to an internal buffer //and we are not supposed to free it. Kokyu::Svc_Ctxt_DSRT_QoS* sc_qos_ptr; CORBA::Any sc_qos_as_any; CORBA::Any_var scqostmp = codec_->decode (oc_seq); sc_qos_as_any = scqostmp.in (); sc_qos_as_any >>= sc_qos_ptr; importance = sc_qos_ptr->importance; guid.length (sc_qos_ptr->guid.length ()); guid_copy (guid, sc_qos_ptr->guid); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): Importance = %d in recvd service context\n", importance )); #endif } MIF_Scheduler_Traits::QoSDescriptor_t qos; qos.importance_ = importance; this->kokyu_dispatcher_->schedule (guid, qos); }
void Echo_Client_Request_Interceptor::receive_exception ( PortableInterceptor::ClientRequestInfo_ptr ri) { CORBA::String_var operation = ri->operation (); CORBA::Object_var target = ri->target (); ACE_DEBUG ((LM_DEBUG,"%C.receive_exception from %C\n", this->myname_, operation.in ())); }
void ClientInterceptor::send_request ( PortableInterceptor::ClientRequestInfo_ptr ri) { std::cout << "Calling send_request()." << std::endl; IOP::ServiceContext sc; sc.context_id = service_ctx_id; const char user_name[] = "Ron Klein"; std::cout << "User's Name: " << user_name << std::endl; CORBA::ULong string_len = sizeof (user_name) + 1; CORBA::Octet *buf = 0; buf = new CORBA::Octet [string_len]; ACE_OS::strcpy (reinterpret_cast<char*> (buf), user_name); sc.context_data.replace (string_len, string_len, buf, 1); // recursive call setup CORBA::Any *recurse = ri->get_slot(slot); CORBA::Long x; *recurse >>= x; CORBA::Any flag; if (x == 0) { flag <<= 1; pic->set_slot(slot, flag); // get server time std::cout << "Server Time = " << messenger->get_time() << std::endl; } // Add this context to the service context list. ri->add_request_service_context (sc, 0); // reset recursion test flag <<= 0; pic->set_slot(slot,flag); }
void TAO_Scheduler::send_request (PortableInterceptor::ClientRequestInfo_ptr request_info) { IOP::ServiceContext srv_con; srv_con.context_id = Client_Interceptor::SchedulingInfo; srv_con.context_data.length (sizeof (size_t)); RTScheduling::Current::IdType_var id = this->current_->id (); ACE_OS::memcpy (srv_con.context_data.get_buffer (), id->get_buffer (), sizeof (size_t)); request_info->add_request_service_context (srv_con, 0); }
void Client_Request_Interceptor::receive_exception ( PortableInterceptor::ClientRequestInfo_ptr ri) { if (CORBA::is_nil (this->orb_.in ())) { int argc = 0; ACE_TCHAR **argv = 0; this->orb_ = CORBA::ORB_init (argc, argv, this->orb_id_.in ()); } ACE_DEBUG ((LM_DEBUG, "Client_Request_Interceptor::receive_exception (%s)\n", ri->received_exception_id ())); if (ACE_OS::strcmp (ri->received_exception_id (), "IDL:omg.org/CORBA/TRANSIENT:1.0") == 0) { interceptor_invoked = true; } }
void ClientInterceptor::send_request ( PortableInterceptor::ClientRequestInfo_ptr ri) { std::cout << "Calling send_request()." << std::endl; const CORBA::ULong tagID = 9654; try { IOP::TaggedComponent_var myTag = ri->get_effective_component(tagID); char *tag = reinterpret_cast<char*> (myTag->component_data.get_buffer()); std::cout << "IOR Tag is : " << tag << std::endl; } catch(...) { std::cerr << "Tagged Component not found" << std::endl; } IOP::ServiceContext sc; sc.context_id = service_ctx_id; const CORBA::Long gid = 9007; std::cout << "GID: " << gid << std::endl; CORBA::Any gid_as_any; gid_as_any <<= gid; sc.context_data = *codec->encode(gid_as_any); // Add this context to the service context list. ri->add_request_service_context (sc, false); }
void Client_Request_Interceptor::send_request (PortableInterceptor::ClientRequestInfo_ptr ri) { // Test TC test_transport_current (ACE_TEXT ("send_request")); CORBA::Boolean const response_expected = ri->response_expected (); // Oneway? if (response_expected) ACE_DEBUG ((LM_DEBUG, ACE_TEXT("CRI (%P|%t) Sending a two-way\n"))); else ACE_DEBUG ((LM_DEBUG, ACE_TEXT("CRI (%P|%t) Sending a one-way\n"))); // Make the context to send the context to the target IOP::ServiceContext sc; sc.context_id = Test::Transport::CurrentTest::ContextTag; // How long can a number really get? char temp[32]; { ACE_GUARD (TAO_SYNCH_MUTEX, monitor, this->lock_); ACE_OS::sprintf (temp, "%ld", this->requestID_); ++this->requestID_; } CORBA::ULong string_len = ACE_OS::strlen (temp) + 1; CORBA::Octet *buf = CORBA::OctetSeq::allocbuf (string_len); ACE_OS::strcpy (reinterpret_cast <char *> (buf), temp); sc.context_data.replace (string_len, string_len, buf, 1); // Add this context to the service context list. ri->add_request_service_context (sc, 0); }
void Client_Request_Interceptor::receive_exception ( PortableInterceptor::ClientRequestInfo_ptr ri) { ++this->exception_count_; ACE_DEBUG ((LM_DEBUG, "received exception %d\n", this->exception_count_)); if (CORBA::is_nil (this->orb_.in ())) { int argc = 0; ACE_TCHAR **argv = 0; this->orb_ = CORBA::ORB_init (argc, argv, this->orb_id_.in ()); } if (this->exception_count_ == 1) { ACE_DEBUG ((LM_DEBUG, "forwarding client to the second server\n")); CORBA::Object_var first_forward = this->orb_->string_to_object (this->first_forward_str_.in ()); // Notice that this is not a permanent forward. throw PortableInterceptor::ForwardRequest (first_forward.in ()); } else if (this->exception_count_ == 2) { ACE_DEBUG ((LM_DEBUG, "forwarding client to the third server\n")); CORBA::Object_var second_forward = this->orb_->string_to_object (this->second_forward_str_.in ()); // Notice that this is not a permanent forward. throw PortableInterceptor::ForwardRequest (second_forward.in ()); } else if (this->exception_count_ == 3) { CORBA::Any_var ex = ri->received_exception (); CORBA::TypeCode_var tc; const char * id = 0; tc = ex->type (); id = tc->id (); if (ACE_OS_String::strcmp (id, "IDL:omg.org/CORBA/TRANSIENT:1.0") == 0) throw ::CORBA::TRANSIENT (CORBA::OMGVMCID | 2, CORBA::COMPLETED_NO); } }
void Client_Request_Interceptor::send_request ( PortableInterceptor::ClientRequestInfo_ptr ri) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("CRI: in send_request\n"))); ++this->request_count_; CORBA::Boolean response_expected = ri->response_expected (); if (!response_expected) // A one-way request. return; // Request 1 -- non-forwarded // Request 2 -- forwarded by this interception point. // Request 3 -- non-forwarded if (this->request_count_ == 2) { if (CORBA::is_nil (this->orb_.in ())) { int argc = 0; char **const argv= 0; this->orb_ = CORBA::ORB_init (argc, argv, this->orb_id_.in ()); } CORBA::Object_var forward = this->orb_->string_to_object (this->forward_str_.in ()); CORBA::String_var forward_str = this->orb_->object_to_string (forward.in ()); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("CRI: request %d will be forwarded via send_request()\n"), this->request_count_)); // Notice that this is not a permanent forward. throw PortableInterceptor::ForwardRequest (forward.in ()); } }
void Echo_Client_Request_Interceptor::receive_other ( PortableInterceptor::ClientRequestInfo_ptr ri) { // Check that the request service context can be retrieved. IOP::ServiceContext_var rc = ri->get_request_service_context (::service_id); if (rc->context_data.length() != magic_cookie_len || ACE_OS::memcmp( magic_cookie, rc->context_data.get_buffer(), magic_cookie_len) != 0 ) { throw CORBA::BAD_PARAM (); } Echo_Client_Request_Interceptor::other_count++; }
void ClientInterceptor::send_request ( PortableInterceptor::ClientRequestInfo_ptr ri) { std::cout << "Calling send_request()." << std::endl; IOP::ServiceContext sc; sc.context_id = service_ctx_id; const CORBA::Long gid = 9007; std::cout << "GID: " << gid << std::endl; CORBA::Any gid_as_any; gid_as_any <<= gid; sc.context_data = *codec->encode(gid_as_any); // Add this context to the service context list. ri->add_request_service_context (sc, false); }
void Echo_Client_Request_Interceptor::send_request ( PortableInterceptor::ClientRequestInfo_ptr ri) { CORBA::String_var operation = ri->operation (); if (ACE_OS::strcmp (operation.in (), "shutdown") == 0) { return; } //send to another isRecursive ++ ; if (isRecursive%2 == 1 ) { if (isRecursive == 3) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t)Echo_Client_Request_Interceptor::send_request(%d) ") ACE_TEXT ("shutdown server 1 now. \n"), isRecursive)); server1_shutdownObj->shutdown(); } CORBA::Object_var helloObj = orb->string_to_object(server2_ior); Demo::HelloWorld_var hello = Demo::HelloWorld::_narrow(helloObj.in ()); if (CORBA::is_nil(hello.in ())) { ACE_ERROR ((LM_ERROR, ACE_TEXT ("(%P|%t)Echo_Client_Request_Interceptor::send_request(%d) ") ACE_TEXT ("hello reference is nil.\n"), isRecursive)); } else { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t)Echo_Client_Request_Interceptor::send_request(%d) ") ACE_TEXT ("call server2 HelloWorld::sayHello() \n"), isRecursive)); const char* pMsg = " server2 say Hello"; hello->sayHello(pMsg) ; } } }
void ClientInterceptor::send_request ( PortableInterceptor::ClientRequestInfo_ptr ri) { std::cout << "Calling send_request()." << std::endl; IOP::ServiceContext sc; sc.context_id = service_ctx_id; const char user_name[] = "Ron Klein"; std::cout << "User's Name: " << user_name << std::endl; CORBA::ULong string_len = sizeof (user_name) + 1; CORBA::Octet *buf = 0; buf = new CORBA::Octet [string_len]; ACE_OS::strcpy (reinterpret_cast<char*> (buf), user_name); sc.context_data.replace (string_len, string_len, buf, true); // Add this context to the service context list. ri->add_request_service_context (sc, false); }
void MIF_Scheduler::send_request (PortableInterceptor::ClientRequestInfo_ptr ri) { Kokyu::Svc_Ctxt_DSRT_QoS sc_qos; CORBA::String_var operation = ri->operation (); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_request " "from \"%s\"\n", operation.in ())); #endif // Make the context to send the context to the target IOP::ServiceContext sc; sc.context_id = Client_Interceptor::SchedulingInfo; CORBA::Policy_var sched_policy = this->current_->scheduling_parameter(); RTScheduling::Current::IdType_var guid = this->current_->id (); /* ACE_OS::memcpy (&guid, guid->get_buffer (), guid->length ()); */ CORBA::Short importance; if (CORBA::is_nil (sched_policy.in ())) { importance = 0; } else { MIF_Scheduling::SchedulingParameterPolicy_var sched_param_policy = MIF_Scheduling::SchedulingParameterPolicy::_narrow (sched_policy.in ()); MIF_Scheduling::SchedulingParameter_var sched_param = sched_param_policy->value (); importance = sched_param->importance; #ifdef KOKYU_DSRT_LOGGING int int_guid; ACE_OS::memcpy (&int_guid, guid->get_buffer (), guid->length ()); ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_request importance from current = %d, guid = %d\n", importance, int_guid)); #endif //Fill the guid in the SC Qos struct sc_qos.guid.length (guid->length ()); guid_copy (sc_qos.guid, guid.in ()); sc_qos.importance = importance; CORBA::Any sc_qos_as_any; sc_qos_as_any <<= sc_qos; CORBA::OctetSeq_var cdtmp = codec_->encode (sc_qos_as_any); sc.context_data = cdtmp.in (); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t|%T): send_request : about to add sched SC\n"))); #endif // Add this context to the service context list. ri->add_request_service_context (sc, 0); } #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t|%T): send_request : ") ACE_TEXT ("about to call scheduler to inform block\n") )); #endif kokyu_dispatcher_->update_schedule (guid.in (), Kokyu::BLOCK); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t|%T): send_request interceptor done\n"))); #endif }
void Echo_Client_Request_Interceptor::receive_exception ( PortableInterceptor::ClientRequestInfo_ptr ri) { if (CORBA::is_nil (this->orb_.in ())) { int argc = 0; ACE_TCHAR **argv = 0; this->orb_ = CORBA::ORB_init (argc, argv, this->orb_id_.in ()); } CORBA::String_var operation = ri->operation (); CORBA::Object_var target = ri->target (); CORBA::String_var ior = this->orb_->object_to_string (target.in ()); #if 0 ACE_DEBUG ((LM_DEBUG, "%C.received_exception " "from \"%C\" on object: %C\n", this->myname_, operation.in (), ior.in ())); #endif /*if 0*/ // Check that the reply service context was received as // expected. IOP::ServiceContext_var sc = ri->get_reply_service_context (::service_id); const char *buf = reinterpret_cast<const char *> (sc->context_data.get_buffer ()); #if 0 ACE_DEBUG ((LM_DEBUG, " Received reply service context: %C\n", buf)); #endif /*if 0*/ if (ACE_OS::strcmp (buf, reply_msg) != 0) { ACE_ERROR ((LM_ERROR, "ERROR: Expected reply service context to be: %C\n", reply_msg)); } // Check that no one has messed with the request service context. IOP::ServiceContext_var sc2 = ri->get_request_service_context (::service_id); const char *buf2 = reinterpret_cast<const char *> (sc2->context_data.get_buffer ()); if (ACE_OS::strcmp (buf2, request_msg) != 0) { ACE_ERROR ((LM_ERROR, "ERROR: Expected request service context to be: %C.\n" " Got: %C\n", request_msg, buf2)); } }
void Echo_Client_Request_Interceptor::send_request ( PortableInterceptor::ClientRequestInfo_ptr ri) { if (CORBA::is_nil (this->orb_.in ())) { int argc = 0; ACE_TCHAR **argv = 0; this->orb_ = CORBA::ORB_init (argc, argv, this->orb_id_.in ()); } CORBA::String_var operation = ri->operation (); CORBA::Object_var target = ri->target (); CORBA::String_var ior = this->orb_->object_to_string (target.in ()); #if 0 ACE_DEBUG ((LM_DEBUG, "%C.send_request " "from \"%C\" on object: %C\n", this->myname_, operation.in (), ior.in ())); #endif /*if 0*/ // Populate target member of the ClientRequestInfo. // Make the context to send the context to the target IOP::ServiceContext sc; sc.context_id = ::service_id; CORBA::ULong string_len = ACE_OS::strlen (request_msg) + 1; CORBA::Octet *buf = CORBA::OctetSeq::allocbuf (string_len); ACE_OS::strcpy (reinterpret_cast<char *> (buf), request_msg); sc.context_data.replace (string_len, string_len, buf, 1); // Add this context to the service context list. ri->add_request_service_context (sc, 0); // Check that the request service context can be retrieved. IOP::ServiceContext_var sc2 = ri->get_request_service_context (::service_id); const char *buf2 = reinterpret_cast<const char *> (sc2->context_data.get_buffer ()); if (ACE_OS::strcmp (buf2, request_msg) != 0) { ACE_ERROR ((LM_ERROR, "ERROR: Expected request service context to be: %C.\n" " Got: %C\n", request_msg, buf2)); } }
void MIF_Scheduler::send_request (PortableInterceptor::ClientRequestInfo_ptr request_info) { CORBA::Policy_var sched_param = current_->scheduling_parameter (); MIF_Scheduling::SegmentSchedulingParameterPolicy_var sched_param_var = MIF_Scheduling::SegmentSchedulingParameterPolicy::_narrow (sched_param.in ()); IOP::ServiceContext srv_con; srv_con.context_id = Client_Interceptor::SchedulingInfo; RTScheduling::Current::IdType_var guid = current_->id (); int guid_length = guid->length (); CORBA::OctetSeq seq_buf (guid_length); seq_buf.length (seq_buf.maximum ()); ACE_OS::memcpy (seq_buf.get_buffer (), guid->get_buffer (), guid_length); int cxt_data_length = sizeof (int) + guid_length; srv_con.context_data.length (cxt_data_length); int i = 0; for (;i < guid_length;i++) { srv_con.context_data [i] = seq_buf [i]; } int importance = sched_param_var->importance (); CORBA::OctetSeq int_buf (sizeof (importance)); int_buf.length (int_buf.maximum ()); ACE_OS::memcpy (int_buf.get_buffer (), &importance, sizeof (importance)); int j = 0; for (;i < cxt_data_length;i++) { srv_con.context_data [i] = int_buf [j++]; } request_info->add_request_service_context (srv_con, 0); lock_.acquire (); if (ready_que_.message_count () > 0) { int priority; ACE_hthread_t current; ACE_Thread::self (current); if (ACE_Thread::getprio (current, priority) == -1) return; ACE_DEBUG ((LM_DEBUG, "Initial thread priority is %d %d\n", priority, ACE_DEFAULT_THREAD_PRIORITY)); RTCORBA::Priority rtpriority; RTCORBA::PriorityMapping* pm = this->mapping_manager_->mapping (); if (pm->to_CORBA(priority + 1, rtpriority)) { current_->the_priority (rtpriority); ACE_Thread::self (current); if (ACE_Thread::getprio (current, priority) == -1) return; ACE_DEBUG ((LM_DEBUG, "Bumped thread priority is %d\n", priority)); } DT* run_dt = 0; ACE_Message_Block* msg = 0; ready_que_.dequeue_head (msg); run_dt = dynamic_cast<DT*> (msg); run_dt->resume (); free_que_.enqueue_prio (run_dt); } lock_.release (); }
void EDF_Scheduler::send_request (PortableInterceptor::ClientRequestInfo_ptr ri) { int int_guid; RTScheduling::Current::IdType_var guid = this->current_->id (); ACE_OS::memcpy (&int_guid, guid->get_buffer (), guid->length ()); DSUI_EVENT_LOG (EDF_SCHED_FAM, ENTER_CLIENT_SCHED_TIME, int_guid, 0, 0); Kokyu::Svc_Ctxt_DSRT_QoS sc_qos; CORBA::String_var operation = ri->operation (); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_request " "from \"%s\"\n", operation.in ())); #endif // Make the context to send the context to the target IOP::ServiceContext sc; sc.context_id = Client_Interceptor::SchedulingInfo; CORBA::Policy_var sched_policy = this->current_->scheduling_parameter(); CORBA::Long importance; TimeBase::TimeT deadline; TimeBase::TimeT period; int task_id=-1; if (CORBA::is_nil (sched_policy)) { //24 hrs from now - infinity ACE_Time_Value deadline_tv = ACE_OS::gettimeofday () + ACE_Time_Value (24*60*60,0); deadline = deadline_tv.sec () * 10000000 + deadline_tv.usec () * 10; //100s of nanoseconds for TimeBase::TimeT importance = 0; period = 0; //set period 0 as default. // task_id = ID_BEGIN ++; } else { EDF_Scheduling::SchedulingParameterPolicy_var sched_param_policy = EDF_Scheduling::SchedulingParameterPolicy::_narrow (sched_policy); EDF_Scheduling::SchedulingParameter_var sched_param = sched_param_policy->value (); deadline = sched_param->deadline; importance = sched_param->importance; period = sched_param->period; task_id = sched_param->task_id; #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_request guid = %d\n", int_guid)); #endif } //Fill the guid in the SC Qos struct sc_qos.guid.length (guid->length ()); guid_copy (sc_qos.guid, guid.in ()); sc_qos.deadline = deadline; sc_qos.importance = importance; sc_qos.task_id = task_id; sc_qos.period = period; CORBA::Any sc_qos_as_any; sc_qos_as_any <<= sc_qos; CORBA::OctetSeq_var cdtmp = codec_->encode (sc_qos_as_any); sc.context_data = cdtmp.in (); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t|%T): send_request : about to add sched SC\n"))); #endif // Add this context to the service context list. ri->add_request_service_context (sc, 0); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t|%T): send_request : ") ACE_TEXT ("about to call scheduler to inform block\n") )); #endif DSUI_EVENT_LOG (EDF_SCHED_FAM, CALL_KOKYU_DISPATCH_UPDATE_SCHEDULE, int_guid, 0, 0); kokyu_dispatcher_->update_schedule (guid.in (), Kokyu::BLOCK); DSUI_EVENT_LOG (EDF_SCHED_FAM, LEAVE_KOKYU_DISPATCH_UPDATE_SCHEDULE, int_guid,0,0); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t|%T): send_request interceptor done\n"))); #endif DSUI_EVENT_LOG (EDF_SCHED_FAM, LEAVE_CLIENT_SCHED_TIME, int_guid, 0, 0); }