我们如何识别唯一的nsHTTPChannel
How can we identify a unique nsHTTPChannel?
我正在用javascript和c++在firefox上开发一些XPCOM组件。
我正试图监控与nsIHttpActivityDistributor
的http活动。
现在的问题是,是否存在属于nsIHttpChannel
的flag
或id
,我可以使用它们来识别唯一的nsHttpChannel
对象?
我想在c++中保存一些nsIHttpChannel
引用对象,然后在Javascript或c++中稍后处理。问题是,目前我找不到一个优雅的方法来识别一个通道对象,可以在js和c++中使用,这是用来清楚地记录到日志文件。
任何想法?
您可以轻松地将自己的数据添加到HTTP通道中,它们总是实现nsIPropertyBag2
和nsIWritablePropertyBag2
接口。以下内容(未测试的代码,只是为了说明原理):
static PRInt64 maxChannelID = -1;
...
nsCOMPtr<nsIWritablePropertyBag2> bag = do_QueryInterface(channel);
if (!bag)
...
nsAutoString prop(NS_LITERAL_STRING("myChannelID"));
PRInt64 channelID;
rv = bag->GetPropertyAsInt64(prop, &channelID);
if (NS_FAILED(rv))
{
// First time that we see that channel, assign it an ID
channelID = ++maxChannelID;
rv = bag->SetPropertyAsInt64(prop, channelID)
if (NS_FAILED(rv))
...
}
printf("Channel ID: %in", channelID);
你可能想检查HTTP重定向会发生什么。我认为频道属性被复制到新的频道,在这种情况下,不确定这是否适合你
相关文章:
- 何时在引用或唯一指针上使用移动语义
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 计算排序向量的向量中唯一值的计数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 通过组合不同的类型来创建唯一的id
- 使用Unique_ptr确保工厂中的对象唯一
- c++多进程编写一个唯一的文件
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 如何更改唯一指针向量的可见性
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- C++尝试深度复制唯一指针时出现内存访问冲突
- 具有引用成员的结构是否具有唯一的对象表示形式
- 使用 RTTI 克隆唯一指针的向量
- 如何在 c++ 中迭代数组中的唯一元素
- 为什么我无法创建唯一指针
- 堆分配的对象是否存在永不为空的唯一所有者?
- 容器,其中每个项可以有多个非唯一键 (c++17)
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 我们如何识别唯一的nsHTTPChannel