云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > Resiprocate介绍

Resiprocate介绍

  • 62 次阅读
  • 3 次下载
  • 2025/5/26 1:27:54

DialogUsageManager:: makeInviteSession - ? DialogUsageManager::send ? DialogUsageManager::sendUsingOutboundIfAppropriate ? SipStack::sendTo -? TransactionController::send( 在此处被添加进了FiFo -- mStateMacFifo.add ) 这之后就是等待被处理( TransactionController::process )

// new sip msg from the TU

////注解一下两个函数名sendToWire 这是往外发送,发到线上去就是往网线上朝外发//啦,sendToTU就是往TransactionUser送往事务层发啦一般是接收到的SipMessgae //从Transport往上递交。

以发起一新的INVITE所进行的后台Process流程为例: void

TransactionState::process( TransactionController& controller ) ? void TransactionState::processClientInvite( TransactionMessage* msg ) ? void TransactionState::sendToWire(TransactionMessage* msg, bool resend ) ?

下面摘录一下TransactionState::sendToWire(TransactionMessage* msg, bool resend)中的部分 源码注释一下:

mDnsResult = mController.mTransportSelector.dnsResolve(sip, this); //这一部//分就是整个源码中Ares上场表演的时候了,这部分是DNS处理的实现,在我的移植//中我把这部分简单改写成了调用windows的dns函数如gethostbyname/gethostname //系列。

handle(mDnsResult);

void TransportSelector::transmit(SipMessage* msg, Tuple& target) ?

再给段transmit中源码:

Data& encoded = msg->getEncoded(); encoded.clear();

21

DataStream encodeStream(encoded); msg->encode(encodeStream); encodeStream.flush();

target.transport->send(target, encoded, msg->getTransactionId());

void

Transport::send( const Tuple& dest, const Data& d, const Data& tid)

void

InternalTransport::transmit(const Tuple& dest, const Data& pdata, const Data& tid) {

SendData* data = new SendData(dest, pdata, tid); mTxFifo.add(data); }

最后到这儿就出去了(以UdpTransport为例): void

UdpTransport::process(FdSet& fdset) {

////只列举关键代码

if (mTxFifo.messageAvailable() && fdset.readyToWrite(mFd)) {

std::auto_ptr sendData = std::auto_ptr(mTxFifo.getNext());

const sockaddr& addr = sendData->destination.getSockaddr(); 0, &addr, sendData->destination.length()); }

int count = sendto(mFd, sendData->data.data(), sendData->data.size(),

22

流程图:

23

Incoming messages 的源码流动就简单一些,收的处理是被动的,因此是在Process中后台接收然后上传:

看看UdpTransport::process最后把接收到的Buffer组织成SipMessage后放到了哪里: stampReceived(message); mStateMachineFifo.add(message);

还是放到了Fifo& mStateMachineFifo; // passed in 这个先进先出队列中。

我们看看接下来的几个函数就可以看到各个类里面的先进先出对列是如何关联起来的,也能明白上面的接收队列后来会在哪些地方会被处理到:

TransactionController::TransactionController(SipStack& stack, bool stateless) : mStack(stack), mStateless(stateless),

mRegisteredForTransactionTermination(false), mDiscardStrayResponses(true),

24

搜索更多关于: Resiprocate介绍 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

DialogUsageManager:: makeInviteSession - ? DialogUsageManager::send ? DialogUsageManager::sendUsingOutboundIfAppropriate ? SipStack::sendTo -? TransactionController::send( 在此处被添加进了FiFo -- mStateMacFifo.add ) 这之后就是等待被处理( TransactionController::process ) // new sip msg from the TU ////注解一下两个函数名sendToWire 这是往外发送,发到线上去就是往网线上朝外发//啦,sendToTU就是往TransactionUser送往事务层发啦一般是接

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com