Как мы можем идентифицировать уникальный nsHTTPChannel?

#javascript #c #firefox #mozilla #xpcom

#javascript #c #firefox #mozilla #xpcom

Вопрос:

Я занимаюсь некоторой разработкой в firefox как с помощью javascript, так и C для некоторых компонентов XPCOM.
Я пытаюсь отслеживать активность http с nsIHttpActivityDistributor помощью .

Проблема сейчас в том, есть ли какие-либо flag или id , которые принадлежат nsIHttpChannel , которые я могу использовать для идентификации уникального nsHttpChannel объекта?

Я хочу сохранить некоторые nsIHttpChannel упомянутые объекты на C , а затем обработать позже на Javascript или C . Дело в том, что в настоящее время я не могу найти элегантный способ идентификации объекта канала, который может использоваться как в js, так и в C , который используется для его четкой регистрации в файле журнала.

Есть идеи?

Ответ №1:

Вы можете легко добавлять свои собственные данные в 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, amp;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. Я думаю, что в этом случае свойства канала копируются на новый канал, не уверен, желательно ли это для вас.

Комментарии:

1. Классная работа! Я знаю, что nsIWritableBag наследуется nsIHTTPChannel, но я никогда не пытался использовать его раньше! Большое вам спасибо!