summaryrefslogtreecommitdiff
path: root/ace/QoS/QoS_Session_Impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ace/QoS/QoS_Session_Impl.cpp')
-rw-r--r--ace/QoS/QoS_Session_Impl.cpp721
1 files changed, 0 insertions, 721 deletions
diff --git a/ace/QoS/QoS_Session_Impl.cpp b/ace/QoS/QoS_Session_Impl.cpp
deleted file mode 100644
index c516d38e9e0..00000000000
--- a/ace/QoS/QoS_Session_Impl.cpp
+++ /dev/null
@@ -1,721 +0,0 @@
-// QoS_Session_Impl.cpp
-// $Id$
-
-#include "ace/SOCK.h"
-#include "QoS_Manager.h"
-#include "QoS_Session_Impl.h"
-#include "ace/Log_Msg.h"
-
-#if !defined (__ACE_INLINE__)
-#include "QoS_Session_Impl.i"
-#endif /* __ACE_INLINE__ */
-
-ACE_RCSID(ace, QoS_Session_Impl, "$Id$")
-
-ACE_ALLOC_HOOK_DEFINE(ACE_QoS_Session_Impl)
-
-#if defined (ACE_HAS_RAPI)
-#include "rapi_err.h"
-
-int ACE_RAPI_Session::rsvp_error = 0;
-
-// Call back function used by RAPI to report RSVP events. This
-// function translates the RAPI QoS parameters into the more generic
-// ACE_QoS parameters for the underlying RAPI session.
-int
-rsvp_callback (rapi_sid_t sid,
- rapi_eventinfo_t eventype,
- int style_id,
- int errcode,
- int errvalue,
- sockaddr * errnode,
- u_char errflags,
- int filter_spec_no,
- rapi_filter_t *filter_spec_list,
- int flow_spec_no,
- rapi_flowspec_t *flow_spec_list,
- int ad_spec_no,
- rapi_adspec_t *ad_spec_list,
- void *args
- )
-{
- ACE_UNUSED_ARG (sid);
- ACE_UNUSED_ARG (style_id);
- ACE_UNUSED_ARG (filter_spec_no);
- ACE_UNUSED_ARG (filter_spec_list);
- ACE_UNUSED_ARG (ad_spec_no);
- ACE_UNUSED_ARG (ad_spec_list);
- ACE_UNUSED_ARG (errflags);
-
- if (args == 0)
- ACE_DEBUG ((LM_DEBUG,
- "Argument in the call back function is null\n\n"));
-
- ACE_QoS_Session *qos_session = (ACE_QoS_Session *) args;
-
- qos_flowspecx_t *csxp = 0;
-
- if(!flow_spec_list)
- {
- ACE_DEBUG ((LM_DEBUG,
- "(%N|%l) Null flow_spec_list\n"));
- }
- else
- {
- // Extended Legacy format.
- csxp = &flow_spec_list->specbody_qosx;
- if(!csxp)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N|%l) Null csxp\n"),
- -1);
- }
- }
-
- ACE_QoS ace_qos = qos_session->qos ();
-
- switch(eventype)
- {
- case RAPI_PATH_EVENT:
- {
- ACE_DEBUG ((LM_DEBUG,
- "RSVP PATH Event received\n"
- "No. of TSpecs received : %d %d\n",
- flow_spec_no, &flow_spec_list->len));
-
- ACE_Flow_Spec *receiving_fs = 0;
-
- if (flow_spec_no != 0)
- {
-
- ACE_NEW_RETURN (receiving_fs,
- ACE_Flow_Spec,
- -1);
-
- ACE_NEW_RETURN (receiving_fs,
- ACE_Flow_Spec ((u_long)csxp->xspec_r,
- (u_long)csxp->xspec_b,
- (u_long)csxp->xspec_p,
- 0,
- csxp->xspec_S,
- 1,
- csxp->xspec_M,
- csxp->xspec_m,
- 25,
- 0),
- -1);
-
-
- ACE_DEBUG ((LM_DEBUG,
- "\nTSpec :\n"
- "\t Spec Type = %d\n"
- "\t Rate = %f\n"
- "\t Bucket = %f\n"
- "\t Peak = %f\n"
- "\t MPU = %d\n"
- "\t MDU = %d\n"
- "\t TTL = %d\n",
- csxp->spec_type,
- csxp->xspec_r,
- csxp->xspec_b,
- csxp->xspec_p,
- csxp->xspec_m,
- csxp->xspec_M,
- 25));
-
- }
- // Set the sending flowspec QoS of the given session.
- ace_qos.receiving_flowspec (receiving_fs);
-
- qos_session->rsvp_event_type (ACE_QoS_Session::RSVP_PATH_EVENT);
-
- }
-
- break;
-
- case RAPI_RESV_EVENT:
- {
- ACE_DEBUG ((LM_DEBUG,
- "RSVP RESV Event received\n"
- "No. of FlowSpecs received : %d\n",
- flow_spec_no));
-
- ACE_Flow_Spec *sending_flow = 0;
-
- if (flow_spec_no != 0)
- {
- ACE_NEW_RETURN (sending_flow,
- ACE_Flow_Spec,
- -1);
-
- // Choose based on the service type : [QOS_GUARANTEEDX/QOS_CNTR_LOAD].
- switch (csxp->spec_type)
- {
- case QOS_GUARANTEEDX:
- // Slack term in MICROSECONDS
- sending_flow->delay_variation (csxp->xspec_S);
-
- // @@How does the guaranteed rate parameter map to the ACE_Flow_Spec.
- // Note there is no break !!
-
- case QOS_CNTR_LOAD:
-
- // qos_service_type.
- sending_flow->service_type (csxp->spec_type);
- // Token Bucket Average Rate (B/s)
- sending_flow->token_rate ((u_long)csxp->xspec_r);
- // Token Bucket Rate (B)
- sending_flow->token_bucket_size ((u_long)csxp->xspec_b);
- // Peak Data Rate (B/s)
- sending_flow->peak_bandwidth ((u_long)csxp->xspec_p);
- // Minimum Policed Unit (B)
- sending_flow->minimum_policed_size (csxp->xspec_m);
- // Max Packet Size (B)
- sending_flow->max_sdu_size (csxp->xspec_M);
-
- break;
-
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N|%l) Unknown flowspec type: %u.\n", csxp->spec_type),
- -1);
- };
- }
- ace_qos.sending_flowspec (sending_flow);
-
- qos_session->rsvp_event_type (ACE_QoS_Session::RSVP_RESV_EVENT);
- }
- break;
-
- case RAPI_PATH_ERROR:
- {
- ACE_DEBUG ((LM_DEBUG,
- "PATH ERROR Event received\n"
- "Code=%d Val=%d Node= %s\n",
- errcode,
- errvalue,
- ACE_OS::inet_ntoa(((sockaddr_in *)errnode)->sin_addr)));
- qos_session->rsvp_event_type (ACE_QoS_Session::RSVP_PATH_ERROR);
- }
- break;
-
- case RAPI_RESV_ERROR:
- {
- ACE_DEBUG ((LM_DEBUG,
- "RESV ERROR Event received\n"
- "Code=%d Val=%d Node= %s\n",
- errcode,
- errvalue,
- ACE_OS::inet_ntoa(((sockaddr_in *)errnode)->sin_addr)));
- qos_session->rsvp_event_type (ACE_QoS_Session::RSVP_RESV_ERROR);
- }
- break;
-
- case RAPI_RESV_CONFIRM:
- {
- ACE_DEBUG ((LM_DEBUG,
- "RESV CONFIRM Event received\n"));
- qos_session->rsvp_event_type (ACE_QoS_Session::RSVP_RESV_CONFIRM);
- }
- break;
-
- default:
- ACE_DEBUG ((LM_DEBUG,
- "Unknown RSVP Event Received\n"));
- break;
-
- }
-
- // Set the updated ACE_QoS for the RSVP callback argument(QoS session).
- qos_session->qos (ace_qos);
-
- // @@ what is the meaning of the return value. RAPI docs don't say anything!
- return 0;
-}
-
-// Constructor.
-ACE_RAPI_Session::ACE_RAPI_Session (void)
-{
- ACE_TRACE ("ACE_RAPI_Session::ACE_RAPI_Session");
- //this->source_port (DEFAULT_SOURCE_SENDER_PORT);
- ACE_NEW (this->src_addr_,
- ACE_INET_Addr ("0"));
-}
-
-// Open a RAPI QoS session [dest IP, dest port, Protocol ID].
-int
-ACE_RAPI_Session::open (ACE_INET_Addr dest_addr,
- ACE_Protocol_ID protocol_id)
-{
- char buf [BUFSIZ];
- dest_addr.addr_to_string (buf,
- BUFSIZ);
- ACE_DEBUG ((LM_DEBUG,
- "In RAPI SESSION OPEN %s\n",
- buf));
-
- this->dest_addr_ = dest_addr;
- this->protocol_id_ = protocol_id;
-
- // Open a RAPI session. Note "this" is being passed as an argument to
- // the callback function. The callback function uses this argument to
- // update the QoS of this session based on the RSVP event it receives.
-
- if ((this->session_id_ = rapi_session((struct sockaddr *) dest_addr.get_addr (),
- protocol_id,
- 0,
- rsvp_callback,
- (void *) this,
- &rsvp_error)) == NULL_SID)
- ACE_ERROR_RETURN ((LM_ERROR,
- "rapi_session () call fails. Error\n"),
- -1);
- else
- ACE_DEBUG ((LM_DEBUG,
- "rapi_session () call succeeds. "
- "Session ID = %d\n",
- this->session_id_));
-
- return 0;
-}
-
-// Close the RAPI QoS Session.
-int
-ACE_RAPI_Session::close (void)
-{
- this->rsvp_error = rapi_release(this->session_id_);
-
- if (rsvp_error == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Can't release RSVP session:\n\t%s\n",
- rapi_errlist[rsvp_error]),
- -1);
- else
- ACE_DEBUG ((LM_DEBUG,
- "rapi session with id %d released successfully.\n",
- this->session_id_));
- return 0;
-}
-
-//Get the most recent RSVP event that occured
-ACE_QoS_Session::RSVP_Event_Type
-ACE_RAPI_Session::rsvp_event_type (void)
-{
- return this->rsvp_event_type_;
-}
-
-//Set the most recent RSVP event that occured
-void
-ACE_RAPI_Session::rsvp_event_type (ACE_QoS_Session::RSVP_Event_Type event_type)
-{
- this->rsvp_event_type_ = event_type;
-}
-
-int
-ACE_RAPI_Session::qos (ACE_SOCK *socket,
- ACE_QoS_Manager *qos_manager,
- const ACE_QoS &ace_qos)
-{
- ACE_UNUSED_ARG (socket);
- ACE_UNUSED_ARG (qos_manager);
-
- // If sender : call sending_qos ()
- // If receiver : call receiving_qos ()
- // If both : call sending_qos () and receiving_qos ()
-
- if (this->flags_ != ACE_QOS_RECEIVER)
- return this->sending_qos (ace_qos);
-
- if (this->flags_ != ACE_QOS_SENDER)
- return this->receiving_qos (ace_qos);
-
- return 0;
-}
-
-// Set sending QoS for this RAPI session.
-int
-ACE_RAPI_Session::sending_qos (const ACE_QoS &ace_qos)
-{
- ACE_Flow_Spec *sending_flowspec = ace_qos.sending_flowspec ();
-
- if (sending_flowspec == 0)
- {
- int result = rapi_sender (this->session_id_,
- 0,
- 0,
- NULL,
- 0,
- NULL,
- NULL,
- 25) ;
- if (result != 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N|%l) rapi_sender error %d:\n\tPATH Generation can't be started\n",
- result),
- -1);
- else
- ACE_DEBUG ((LM_DEBUG,
- "rapi_sender () call succeeds with PATH Tear! \n"));
-
- return 0;
- }
-
- rapi_tspec_t *t_spec = this->init_tspec_simplified (*sending_flowspec);
- if (t_spec == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N|%l) Error in translating from ACE Flow Spec to"
- " RAPI TSpec\n"),
- -1);
-
- char buffer[BUFSIZ];
-
- // This formats the t_spec in a visually intuitive char * that can
- // be printed.
-
- (void) rapi_fmt_tspec(t_spec, buffer, sizeof(buffer));
- ACE_DEBUG ((LM_DEBUG,
- "\nSender TSpec : %s\n",
- buffer));
-
- // Print out all the fields separately.
- ACE_DEBUG ((LM_DEBUG,
- "\nTSpec :\n"
- "\t Spec Type = %d\n"
- "\t Rate = %f\n"
- "\t Bucket = %f\n"
- "\t Peak = %f\n"
- "\t MPU = %d\n"
- "\t MDU = %d\n"
- "\t TTL = %d\n",
- t_spec->tspecbody_qosx.spec_type,
- t_spec->tspecbody_qosx.xtspec_r,
- t_spec->tspecbody_qosx.xtspec_b,
- t_spec->tspecbody_qosx.xtspec_p,
- t_spec->tspecbody_qosx.xtspec_m,
- t_spec->tspecbody_qosx.xtspec_M,
- sending_flowspec->ttl ()));
-
- // This the source sender port.
- // ACE_INET_Addr sender_addr (this->source_port ());
-
- ACE_DEBUG ((LM_DEBUG,
- "Making the rapi_sender () call\n"));
-
- // Set the Sender TSpec for this QoS session.
-
-
- int result = rapi_sender(this->session_id_,
- 0,
- (sockaddr *) this->src_addr_->get_addr (),
- NULL,
- t_spec,
- NULL,
- NULL,
- sending_flowspec->ttl ()) ;
-
- /*
- int result = rapi_sender(this->session_id_,
- 0,
- (sockaddr *) sender_addr.get_addr (),
- NULL,
- t_spec,
- NULL,
- NULL,
- sending_flowspec->ttl ()) ;
- */
- if(result!= 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N|%l) rapi_sender error %d:\n\tPATH Generation can't be started\n",
- result),
- -1);
- else
- ACE_DEBUG ((LM_DEBUG,
- "rapi_sender () call succeeds ! \n"));
- return 0;
-}
-
-// Set receiving QoS for this RAPI session.
-int
-ACE_RAPI_Session::receiving_qos (const ACE_QoS &ace_qos)
-{
-
- ACE_Flow_Spec *receiving_flowspec = ace_qos.receiving_flowspec ();
- if (receiving_flowspec == 0)
- {
- if (rapi_reserve(this->session_id_,
- 0,
- // Setting the RAPI_REQ_CONFIRM flag requests confirmation
- // of the resevation, by means of a confirmation upcall of
- // type RAPI_RESV_CONFIRM.
- // (sockaddr *)receiver_addr.get_addr (),
- 0,
- RAPI_RSTYLE_WILDCARD,
- // This applies the flowspec to all the senders. Given this,
- // @@I am passing the filter_spec to be null, hoping this will work.
- NULL,
- NULL,
- 0,
- NULL,
- // The filter spec is NULL. This should work since the RSTYLE is
- // WILDCARD.
- 0,
- 0) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N|%l)rapi_reserve () error:\n\tRESV Generation can't be started\n"),
- -1);
- else
- ACE_DEBUG ((LM_DEBUG,
- "rapi_reserve () for RESV Tear call succeeds \n"));
-
- return 0;
- }
-
-
- rapi_flowspec_t *flow_spec = init_flowspec_simplified (*receiving_flowspec);
-
- if (flow_spec == 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N|%l) Error in translating from ACE Flow Spec to"
- " RAPI FlowSpec\n"),
- -1);
-
- char buffer[BUFSIZ];
-
- // This formats the flow_spec in a visually intuitive char * that can
- // be printed.
- (void)rapi_fmt_flowspec(flow_spec, buffer, sizeof(buffer));
- ACE_DEBUG ((LM_DEBUG,
- "\nReceiver FlowSpec : %s\n",
- buffer));
-
- // Print out all the fields separately.
- ACE_DEBUG ((LM_DEBUG,
- "\nFlowSpec :\n"
- "\t Spec Type = %d\n"
- "\t Rate = %f\n"
- "\t Bucket = %f\n"
- "\t Peak = %f\n"
- "\t MPU = %d\n"
- "\t MDU = %d\n",
- flow_spec->specbody_qosx.spec_type,
- flow_spec->specbody_qosx.xspec_r,
- flow_spec->specbody_qosx.xspec_b,
- flow_spec->specbody_qosx.xspec_p,
- flow_spec->specbody_qosx.xspec_m,
- flow_spec->specbody_qosx.xspec_M));
-
- sockaddr_in Receiver_host;
-
- Receiver_host.sin_addr.s_addr = INADDR_ANY;
-
- // Set the Receiver FlowSpec for this QoS session.
- // @@The filter style is hardcoded to WildCard. This can be changed later.
- if (rapi_reserve(this->session_id_,
- RAPI_REQ_CONFIRM,
- // Setting the RAPI_REQ_CONFIRM flag requests confirmation
- // of the resevation, by means of a confirmation upcall of
- // type RAPI_RESV_CONFIRM.
- // (sockaddr *)receiver_addr.get_addr (),
- (sockaddr *)&Receiver_host,
- RAPI_RSTYLE_WILDCARD,
- // This applies the flowspec to all the senders. Given this,
- // @@I am passing the filter_spec to be null, hoping this will work.
- NULL,
- NULL,
- 0,
- NULL,
- // The filter spec is NULL. This should work since the RSTYLE is
- // WILDCARD.
- 1,
- flow_spec) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- "rapi_reserve () error:\n\tRESV Generation can't be started\n"),
- -1);
- else
- ACE_DEBUG ((LM_DEBUG,
- "rapi_reserve () call succeeds \n"));
-
- return 0;
-}
-
-int
-ACE_RAPI_Session::update_qos (void)
-{
- // Update the session QoS Parameters based on the RSVP Event Received.
- if ((rsvp_error = rapi_dispatch ()) != 0)
- ACE_ERROR_RETURN ((LM_ERROR,
- "Error in rapi_dispatch () : %s\n",
- rapi_errlist[rsvp_error]),
- -1);
- return 0;
-}
-
-// Construct a simplified RAPI Sender TSpec object
-// from an ACE_Flow_Spec. Note the form of the TSpec is
-// simplified as against the full bodied IntServ version.
-
-rapi_tspec_t *
-ACE_RAPI_Session::init_tspec_simplified (const ACE_Flow_Spec &flow_spec)
-{
- rapi_tspec_t *t_spec;
-
- ACE_NEW_RETURN (t_spec,
- rapi_tspec_t,
- 0);
-
- qos_tspecx_t *ctxp = &(t_spec->tspecbody_qosx);
-
- // There may be some type incompatibility here.
- // Note the types of the LHS are float32_t, uint32_t etc.
-
- ctxp->spec_type = flow_spec.service_type ();//QOS_TSPEC;
- ctxp->xtspec_r = flow_spec.token_rate (); // Token Rate (B/s)
- ctxp->xtspec_b = flow_spec.token_bucket_size (); // Token Bucket Depth (B)
- ctxp->xtspec_p = flow_spec.peak_bandwidth (); // Peak Data Rate (B/s)
- ctxp->xtspec_m = flow_spec.minimum_policed_size (); // Minimum policed unit.
- ctxp->xtspec_M = flow_spec.max_sdu_size(); // Maximum SDU size.
- t_spec->len = sizeof(rapi_hdr_t) + sizeof(qos_tspecx_t);
- t_spec->form = RAPI_TSPECTYPE_Simplified;
-
- return (t_spec);
-}
-
-
-// Construct a simplified RAPI flowspec object from ACE_Flow_Spec.
-// Note the form of the FlowSpec is simplified as against the
-// full bodied IntServ version.
-
-rapi_flowspec_t *
-ACE_RAPI_Session::init_flowspec_simplified(const ACE_Flow_Spec &flow_spec)
-{
- rapi_flowspec_t *flowsp;
- ACE_NEW_RETURN (flowsp,
- rapi_flowspec_t,
- 0);
-
- // Extended Legacy format.
- qos_flowspecx_t *csxp = &flowsp->specbody_qosx;
-
- // Choose based on the service type : [QOS_GUARANTEEDX/QOS_CNTR_LOAD].
-
- switch (flow_spec.service_type ())
- {
- case QOS_GUARANTEEDX:
- csxp->xspec_R = 0 ; // Guaranteed Rate B/s. @@How does this map to the
- // ACE Flow Spec Parameters.
-
- csxp->xspec_S = flow_spec.delay_variation () ; // Slack term in MICROSECONDS
-
- // Note there is no break !!
-
- case QOS_CNTR_LOAD:
- csxp->spec_type = flow_spec.service_type (); // qos_service_type
- csxp->xspec_r = flow_spec.token_rate (); // Token Bucket Average Rate (B/s)
- csxp->xspec_b = flow_spec.token_bucket_size (); // Token Bucket Rate (B)
- csxp->xspec_p = flow_spec.peak_bandwidth (); // Peak Data Rate (B/s)
- csxp->xspec_m = flow_spec.minimum_policed_size (); // Minimum Policed Unit (B)
-
- csxp->xspec_M = flow_spec.max_sdu_size(); // Max Packet Size (B)
-
- flowsp->form = RAPI_FLOWSTYPE_Simplified;
- break;
-
- default:
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N|%l) Unknown flowspec type: %u\n",flow_spec.service_type () ),
- 0);
- }
-
- flowsp->len = sizeof(rapi_flowspec_t);
- return flowsp;
-}
-
-#endif /* ACE_HAS_RAPI */
-
-// This is a GQoS session ID generator.
-int ACE_GQoS_Session::GQoS_session_id = 0;
-
-// Constructor.
-ACE_GQoS_Session::ACE_GQoS_Session (void)
-{
- ACE_TRACE ("ACE_GQoS_Session::ACE_GQoS_Session");
-}
-
-// Open a GQoS session [dest IP, dest port, Protocol ID].
-int
-ACE_GQoS_Session::open (ACE_INET_Addr dest_addr,
- ACE_Protocol_ID protocol_id)
-{
- this->dest_addr_ = dest_addr;
- this->protocol_id_ = protocol_id;
-
- this->session_id_ = GQoS_session_id++;
-
- return 0;
-}
-
-// Close the GQoS Session.
-int
-ACE_GQoS_Session::close (void)
-{
- // TBD.
- return 0;
-}
-
-// Set the QoS for this GQoS session.
-int
-ACE_GQoS_Session::qos (ACE_SOCK *socket,
- ACE_QoS_Manager *qos_manager,
- const ACE_QoS &ace_qos)
-{
-
- // Confirm if the current session is one of the QoS sessions
- // subscribed to by the given socket.
-
- if (qos_manager->qos_session_set ().find (this) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_LIB_TEXT ("This QoS session was not subscribed to")
- ACE_LIB_TEXT (" by the socket\n")),
- -1);
-
- // Set the QOS according to the supplied ACE_QoS. The I/O control
- // code used under the hood is SIO_SET_QOS.
-
- u_long ret_bytes = 0;
-
- ACE_QoS qos = ace_qos;
- if (ACE_OS::ioctl (socket->get_handle (),
- ACE_SIO_SET_QOS,
- qos,
- &ret_bytes) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_LIB_TEXT ("Error in Qos set ACE_OS::ioctl() %d\n"),
- ret_bytes),
- -1);
- else
- ACE_DEBUG ((LM_DEBUG,
- ACE_LIB_TEXT ("Setting QoS with ACE_OS::ioctl () succeeds \n")));
-
- return 0;
-}
-
-int
-ACE_GQoS_Session::update_qos (void)
-{
- // WSAIoctl (GET_QOS) call goes here...
- return 0;
-}
-
-//Get the most recent RSVP event that occured
-ACE_QoS_Session::RSVP_Event_Type
-ACE_GQoS_Session::rsvp_event_type (void)
-{
- return this->rsvp_event_type_;
-}
-
-//Set the most recent RSVP event that occured
-void
-ACE_GQoS_Session::rsvp_event_type (ACE_QoS_Session::RSVP_Event_Type event_type)
-{
- this->rsvp_event_type_ = event_type;
-}