有位传说中的大神告诉我,我的p2p打洞打不通是因为,sdp描述信息中的地址不对

也就是IN IP4 XXX.XXX.X.XXX这一句

我看到确实是个局域网地址,那么vlc在接收到IN IP4 XXX.XXX.X.XXX的时候到底是如何处理的呢,引起了我极大的好奇

一定要去源码里面找一下

在source insight 里面搜索了一下IN IP

接收肯定是从字符串里面解析东西,不是输入东西

所以估计在

Sap.c (modules\services_discovery):            if (sscanf (sfilter, " incl IN IP%u %*s %255s ", &ipv,
Sap.c (modules\services_discovery):    int res = sscanf (str, "IN IP%u %59[^/]/%u/%u", &fam, host, &n1, &n2);
Sap.c (modules\services_discovery):                if ((sscanf (data, "%63s %"SCNu64" %"SCNu64" IN IP%u %1023s",

sap.c文件里面

static sdp_t *ParseSDP (vlc_object_t *p_obj, const char *psz_sdp)

里面有

switch (expect)
{
/* Session description */
case 'V': break; case 'O':
{
expect = 'S';
if (cat != 'o')
{
msg_Dbg (p_obj, "missing SDP originator");
goto error;
} if ((sscanf (data, "%63s %"SCNu64" %"SCNu64" IN IP%u %1023s",
p_sdp->username, &p_sdp->session_id,
&p_sdp->session_version, &p_sdp->orig_ip_version,
p_sdp->orig_host) != )
|| ((p_sdp->orig_ip_version != )
&& (p_sdp->orig_ip_version != )))
{
msg_Dbg (p_obj, "SDP origin not supported: %s", data);
/* Or maybe out-of-range, but this looks suspicious */
goto error;
}
EnsureUTF8 (p_sdp->orig_host);
break;
} case 'S':
{ break;
} case 'I':
{ break;
} case 'U':
expect = 'E';
if (cat == 'u')
break;
case 'E':
expect = 'E';
if (cat == 'e')
break;
case 'P':
expect = 'P';
if (cat == 'p')
break;
case 'C':
expect = 'B';
if (cat == 'c')
{
if (ParseSDPConnection (data, &glob_addr, &glob_len,
&glob_count))
{
msg_Dbg (p_obj, "SDP connection infos not supported: "
"%s", data);
goto error;
}
break;
}

所以这段sdp

Owner/Creator, Session Id (o): -   IN IP4 192.168.1.146

被解析进了p_sdp->orig_host里面

另一段sdp

Connection Information (c): IN IP4 192.168.1.146

被ParseSDPConnection (data, &glob_addr, &glob_len, &glob_count)处理了,放入了glob_addr里面

再看这一段

            case 'm':
media:
{
expect = 'i';
if (cat != 'm')
{
msg_Dbg (p_obj, "missing SDP media description");
goto error;
}
struct sdp_media_t *m;
m = realloc (p_sdp->mediav, (p_sdp->mediac + ) * sizeof (*m));
if (m == NULL)
goto error; p_sdp->mediav = m;
m += p_sdp->mediac;
p_sdp->mediac++; memset (m, , sizeof (*m));
memcpy (&m->addr, &glob_addr, m->addrlen = glob_len);
m->n_addr = glob_count;

最后被放进了p_sdp->mediav->addr 里面

所以要追踪p_sdp的动向

static int OpenDemux( vlc_object_t *p_this )
p_demux->p_sys->p_sdp = p_sdp;

vlc源码研究的更多相关文章

  1. OAuth2学习及DotNetOpenAuth部分源码研究

    OAuth2学习及DotNetOpenAuth部分源码研究 在上篇文章中我研究了OpenId及DotNetOpenAuth的相关应用,这一篇继续研究OAuth2. 一.什么是OAuth2 OAuth是 ...

  2. Android开源项目 Universal imageloader 源码研究之Lru算法

    https://github.com/nostra13/Android-Universal-Image-Loader universal imageloader 源码研究之Lru算法 LRU - Le ...

  3. zepto源码研究 - zepto.js - 1

    简要:网上已经有很多人已经将zepto的源码研究得很细致了,但我还是想写下zepto源码系列,将别人的东西和自己的想法写下来以加深印象也是自娱自乐,文章中可能有许多错误,望有人不吝指出,烦请赐教. 首 ...

  4. VLC源码分析知识总结

    1.  关于#和## 1.1).在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号. 比如在早 ...

  5. dubbo源码研究(一)

    1. dubbo源码研究(一) 1.1. dubbo启动加载过程 我们知道,现在流行注解方式,用spring管理服务,dubbo最常用的就是@Reference和@Service了,那么我首先找到这两 ...

  6. 【JavaScript】$.extend使用心得及源码研究

    最近写多了js的面向对象编程,用$.extend写继承写得很顺手.但是在使用过程中发现有几个问题. 1.深拷贝 $.extend默认是浅拷贝,这意味着在继承复杂对象时,对象中内嵌的对象无法被拷贝到. ...

  7. underscore.js源码研究(8)

    概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...

  8. underscore.js源码研究(7)

    概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...

  9. underscore.js源码研究(6)

    概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...

随机推荐

  1. Angular页面加载闪现解决方案 ng-cloak

    在做Angular项目时,经常会遇见在浏览器上闪烁表达式({{ express }} ),及模块(div)的闪烁,会闪现/闪烁隐藏的数据,之前用过vue.js,可以通过v-clock解决,同理Angu ...

  2. NOIP2017普及组解题报告

    刚参加完NOIP2017普及,只考了210,于是心生不爽,写下了这篇解题报告...(逃 第一次写博,望dalao们多多指导啊(膜 第一题score,学完helloworld的人也应该都会吧,之前好多人 ...

  3. 【new File(String Path)加载资源问题】

    2017-12-17   15:07:38  [原创-wx] 一.我们在用IO流加载资源的时候,创建文件资源 1 File file = New File("String Path" ...

  4. 深入浅出了解frame和bounds

    frame frame的官方解释如下: The frame rectangle, which describes the view's location and size in its supervi ...

  5. Ext.chart.Chart 显示图标 -- 本地数据

    先来张直观的图,基于ext4.2制作 这就是弹出来的图表了. 今天先搭建一个本地数据版,也是静态数据版. 点击一个按钮执行一个function,来看function里面的东西: 一.依赖 Ext.re ...

  6. elasticsearch 学习笔记

    基本概念 集群和节点的概念1.集群是由节点组成的2.每个集群都有唯一的名字默认是elasticsearch3.cluster.name: niubiwali //集群的名字很重要因为每个节点只是集群的 ...

  7. Xamarin.iOS + MvvmCross: UIPickerView data binding, SelectedItemChanged event

    UI initialization: _pickerView = new UIPickerView(); _pickerView.ShowSelectionIndicator = true; _pic ...

  8. C语言之——文件操作模式

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47450667 "rt" 仅仅读打开一个文本文件.仅仅同意读数据 ...

  9. JAVA入门[21]-Jedis操作redis示例

    本节目标 通过JedisPool获取Jedis示例,并完成对redis 简单的Key-value读写操作. 完整代码结构如下: redis服务端 在本地运行redis-server.exe,然后在re ...

  10. 为 NativeScript 项目添加 iOS / Android 平台 API 的智能感知

    使用 NativeScript ,我们可以很容易的调用平台的原生 API,在开发过程中,我们可以添加这些 API 的 d.ts 文件来提供智能感知,帮助我们更方便的构建媲美原生的 APP. 首先通过 ...