void Echo_Server_Request_Interceptor::receive_request_service_contexts ( PortableInterceptor::ServerRequestInfo_ptr ri) { CORBA::String_var operation = ri->operation (); ACE_DEBUG ((LM_DEBUG, "%C.receive_request_service_contexts from " "\"%C\"\n", this->myname_, operation.in ())); // Ignore the "_is_a" operation since it may have been invoked // locally on the server side as a side effect of another call, // meaning that the client hasn't added the service context yet. // Same goes for the shutdown call if (ACE_OS_String::strcmp ("shutdown", operation.in ()) == 0) return; IOP::ServiceId id = ::service_id; IOP::ServiceContext_var sc = ri->get_request_service_context (id); const char *buf = reinterpret_cast<const char *> (sc->context_data.get_buffer ()); ACE_DEBUG ((LM_DEBUG, " Received service context: %C\n", buf)); if (ACE_OS::strcmp (buf, request_msg) == 0) { ACE_DEBUG ((LM_DEBUG, "Sending LOCATION_FORWARD\n")); throw PortableInterceptor::ForwardRequest (this->forward_location_.in ()); } else if (ACE_OS::strcmp (buf, forward_msg) == 0) { // Make the context to send the context to the client IOP::ServiceContext scc; scc.context_id = ::service_id; CORBA::ULong string_len = ACE_OS::strlen (reply_msg) + 1; CORBA::Octet *buff = CORBA::OctetSeq::allocbuf (string_len); ACE_OS::strcpy (reinterpret_cast<char *> (buff), reply_msg); scc.context_data.replace (string_len, string_len, buff, 1); // Add this context to the service context list. ri->add_reply_service_context (scc, 0); } else { ACE_ERROR ((LM_ERROR, "ERROR: Echo_Server_Request_Interceptor::receive_request_service_contexts: " "Expected request service context to be: %C or %C\n", request_msg, forward_msg)); } }
void Echo_Server_Request_Interceptor::receive_request_service_contexts ( PortableInterceptor::ServerRequestInfo_ptr ri) { CORBA::String_var operation = ri->operation (); ACE_DEBUG ((LM_DEBUG, "%C.receive_request_service_contexts from " "\"%C\"\n", this->myname_, operation.in ())); IOP::ServiceId id = ::service_id; IOP::ServiceContext_var sc = ri->get_request_service_context (id); const char *buf = reinterpret_cast<const char *> (sc->context_data.get_buffer ()); #if 0 ACE_DEBUG ((LM_DEBUG, " Received service context: %C\n", buf)); #endif /*if 0*/ if (ACE_OS::strcmp (buf, request_msg) != 0) { ACE_ERROR ((LM_ERROR, "ERROR: Echo_Server_Request_Interceptor::receive_request_service_contexts: " "Expected request service context to be: %C\n", request_msg)); } // Make the context to send the context to the client IOP::ServiceContext scc; scc.context_id = ::service_id; CORBA::ULong string_len = ACE_OS::strlen (reply_msg) + 1; CORBA::Octet *buff = CORBA::OctetSeq::allocbuf (string_len); ACE_OS::strcpy (reinterpret_cast<char *> (buff), reply_msg); scc.context_data.replace (string_len, string_len, buff, 1); // Add this context to the service context list. ri->add_reply_service_context (scc, 0); }
void EDF_Scheduler::send_reply (PortableInterceptor::ServerRequestInfo_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_SEND_REPLY, 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_reply from \"%s\"\n", ri->operation ())); #endif // Make the context to send the context to the target IOP::ServiceContext sc; sc.context_id = Server_Interceptor::SchedulingInfo; CORBA::Long importance; TimeBase::TimeT deadline; CORBA::Policy_var sched_policy = this->current_->scheduling_parameter(); if (CORBA::is_nil (sched_policy)) { #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): sched_policy nil.\n")); #endif //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 { #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T):sched_policy not nil. ", "sched params set\n")); #endif EDF_Scheduling::SchedulingParameterPolicy_var sched_param_policy = EDF_Scheduling::SchedulingParameterPolicy::_narrow (sched_policy); EDF_Scheduling::SchedulingParameter_var sched_param = sched_param_policy->value (); sc_qos.guid.length (guid->length ()); guid_copy (sc_qos.guid, guid.in ()); deadline = sched_param->deadline; importance = sched_param->importance; sc_qos.deadline = deadline; 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 (); // Add this context to the service context list. ri->add_reply_service_context (sc, 1); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T):reply sc added\n")); #endif } kokyu_dispatcher_->update_schedule (guid.in (), Kokyu::BLOCK); DSUI_EVENT_LOG (EDF_SCHED_FAM, EXIT_SEND_REPLY, int_guid, 0, 0); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_reply interceptor done\n")); #endif }
void MIF_Scheduler::send_reply (PortableInterceptor::ServerRequestInfo_ptr ri) { CORBA::Short importance = 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_reply from \"%s\"\n", ri->operation ())); #endif // Make the context to send the context to the target IOP::ServiceContext sc; sc.context_id = Server_Interceptor::SchedulingInfo; CORBA::Policy_var sched_policy = this->current_->scheduling_parameter(); RTScheduling::Current::IdType_var guid = this->current_->id (); if (CORBA::is_nil (sched_policy.in ())) { #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): sched_policy nil. ", "importance not set in sched params\n")); #endif importance = 0; } else { #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T):sched_policy not nil. ", "importance set in sched params\n")); #endif 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; //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 (); // Add this context to the service context list. ri->add_reply_service_context (sc, 1); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T):reply sc added\n")); #endif } kokyu_dispatcher_->update_schedule (guid.in (), Kokyu::BLOCK); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_reply interceptor done\n")); #endif }