本文整理汇总了C++中DialogTracker::ProcessMediaAnswer方法的典型用法代码示例。如果您正苦于以下问题:C++ DialogTracker::ProcessMediaAnswer方法的具体用法?C++ DialogTracker::ProcessMediaAnswer怎么用?C++ DialogTracker::ProcessMediaAnswer使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DialogTracker
的用法示例。
在下文中一共展示了DialogTracker::ProcessMediaAnswer方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ChangeState
void WaitingFor200OkforInvite::SuccessfulResponse( DialogTracker& impl, SipMessage& response, const char* address, int port ) const
{
int seqNum;
UtlString seqMethod;
if( response.getCSeqField( &seqNum, &seqMethod ) )
{
if( seqMethod.compareTo( SIP_INVITE_METHOD ) == 0 )
{
// normally we would not be expecting this 200 OK response to carry
// an SDP however we have encountered in the field some endpoints
// that repeat the SDP answer they already sent in a previous
// reliable provisional response (see XECS-2079 for the details).
// Given that, if an SDP answer is found, we will reprocess it
// to make sure it gets the same transformations that the initial
// one got as per XECS-2089.
if( response.hasSdpBody() )
{
impl.ProcessMediaAnswer( response, INITIAL_OFFER_ANSWER );
}
ChangeState( impl, impl.pWaitingForAckForInvite );
}
else
{
OsSysLog::add(FAC_NAT,PRI_DEBUG,"'%s:%s' - Received unexpected successful response for %s request",
impl.name(), impl.GetCurrentState()->name(), seqMethod.data() );
}
}
}
示例2: ProvisionalResponse
void WaitingForMediaAnswer::ProvisionalResponse( DialogTracker& impl, SipMessage& response, const char* address, int port ) const
{
if( response.getResponseStatusCode() != SIP_TRYING_CODE )
{
if( response.hasSdpBody() )
{
// Both reliable and unreliable provisional responses can carry SDP bodies. According to
// draft-ietf-sipping-sip-offeranswer-04.txt section 3.1, unreliable provisional responses
// carrying an answer is a mere previes of what the 'real' SDP answer will be and that it
// must be identical to it. Since we may be changing the SDP of the 'real' answer to compensate
// for NATs we need to also manipulate the 'preview' answer to make match the requirement that
// the preview and 'real' answers be identical.
// we are receiving a provisional response - check if it is sent reliably...
impl.ProcessMediaAnswer( response, INITIAL_OFFER_ANSWER );
if( response.getHeaderValue( 0, SIP_RSEQ_FIELD ) )
{
// Presence of RSeq: header in the message indicates that it is sent reliably
ChangeState( impl, impl.pWaitingForPrack );
}
else
{
// We have received an unreliable provisional response - although that does
// not cause a state machine state change, we need to reset the tick counter
// to show that there is still activity in this dialog.
impl.resetTimerTickCounter();
}
}
}
}
示例3: SuccessfulResponse
void ProcessingPrack::SuccessfulResponse( DialogTracker& impl, SipMessage& response, const char* address, int port ) const
{
int seqNum;
UtlString seqMethod;
if( response.getCSeqField( &seqNum, &seqMethod ) )
{
if( seqMethod.compareTo( SIP_INVITE_METHOD ) == 0 )
{
// normally we would not be expecting this 200 OK response to carry
// an SDP in this state however we have encountered in the field some endpoints
// that repeat the SDP answer they already sent in a previous
// Successful response (see XECS-2079 for the details).
// Given that, if an SDP answer is found, we will reprocess it
// to make sure it gets the same transformations that the initial
// one got as per XECS-2089.
if( response.hasSdpBody() )
{
impl.ProcessMediaAnswer( response, INITIAL_OFFER_ANSWER );
}
}
else
{
OsSysLog::add(FAC_NAT,PRI_DEBUG,"'%s:%s' - Received unexpected Successful Response for %s request",
impl.name(), impl.GetCurrentState()->name(), seqMethod.data() );
}
// We have received a response - although that does
// not cause a state machine state change, we need to reset the tick counter
// to show that there is still activity in this dialog.
impl.resetTimerTickCounter();
}
}
示例4: AckRequest
bool WaitingForAckWithAnswerForInvite::AckRequest( DialogTracker& impl, SipMessage& request, TransactionDirectionality direction, const char* address, int port ) const
{
impl.ProcessMediaAnswer( request, INITIAL_OFFER_ANSWER );
impl.setDialogEstablishedFlag();
impl.promoteTentativeMediaRelaySessionsToCurrent();
ChangeState( impl, impl.pWaitingForInvite );
return false;
}
示例5: SuccessfulResponse
void WaitingForMediaAnswer::SuccessfulResponse( DialogTracker& impl, SipMessage& response, const char* address, int port ) const
{
int seqNum;
UtlString seqMethod;
if( response.getCSeqField( &seqNum, &seqMethod ) )
{
if( seqMethod.compareTo( SIP_INVITE_METHOD ) == 0 )
{
impl.ProcessMediaAnswer( response, INITIAL_OFFER_ANSWER );
ChangeState( impl, impl.pWaitingForAckForInvite );
}
}
}
示例6: ChangeState
void WaitingFor200OkWithAnswerForPrack::SuccessfulResponse( DialogTracker& impl, SipMessage& response, const char* address, int port ) const
{
int seqNum;
UtlString seqMethod;
if( response.getCSeqField( &seqNum, &seqMethod ) )
{
if( seqMethod.compareTo( SIP_PRACK_METHOD ) == 0 )
{
impl.ProcessMediaAnswer( response, NON_INITIAL_OFFER_ANSWER );
impl.modifyNonIntialOfferAnswerExchangeDoneFlag( true );
ChangeState( impl, impl.pProcessingPrackWaitingForAckforInvite );
}
else
{
// Not interesting for us but our parent class provides some handling for
// other successful responses.
ProcessingPrack::SuccessfulResponse( impl, response, address, port );
}
}
}
示例7: PrackRequest
bool WaitingForPrackWithMediaAnswer::PrackRequest( DialogTracker& impl, SipMessage& request, TransactionDirectionality direction, const char* address, int port ) const
{
impl.ProcessMediaAnswer( request, INITIAL_OFFER_ANSWER );
ChangeState( impl, impl.pWaitingFor200OkForSlowStartPrack );
return true;
}