我正在使用javascript和C ++为一些XPCOM组件对firefox进行一些开发
我正在尝试使用nsIHttpActivityDistributor
监控http活动。
现在的问题是,是否有flag
或id
属于nsIHttpChannel
我可以用来识别唯一的nsHttpChannel
对象?
我想在C ++中保存一些nsIHttpChannel
引用的对象,然后在Javascript或C ++中处理。问题是,目前我找不到 elegent 方法来识别可以在js和C ++中使用的通道对象,用于将其清楚地记录到日志文件中。
有什么想法吗?
答案 0 :(得分:2)
您可以轻松地将自己的数据添加到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: %i\n", channelID);
您可能想要检查HTTP重定向上会发生什么。在这种情况下,我认为通道属性会被复制到新通道,不确定这是否适合您。