私の目標は、firefox-pluginでTCP接続を識別することです。JavaScript経由のTCP接続へのアクセス
そのためには、すべての接続に一意のIDを設定する必要があります。私の質問は、HTTP-RequestからTCP-Connectionのオブジェクトにアクセスする方法を知っている人なら誰でも知っていますか?それから私はそれに一意のIDを設定することができ、すべての要求/応答のペアは一意に接続に設定されます。
私の目標は、firefox-pluginでTCP接続を識別することです。JavaScript経由のTCP接続へのアクセス
そのためには、すべての接続に一意のIDを設定する必要があります。私の質問は、HTTP-RequestからTCP-Connectionのオブジェクトにアクセスする方法を知っている人なら誰でも知っていますか?それから私はそれに一意のIDを設定することができ、すべての要求/応答のペアは一意に接続に設定されます。
私はあなたの質問に直接答えは分かりませんが、私はsource code for Firebugを見ることをお勧めします。ネットワークスタックの少なくともHTTP要求レベルにアクセスできているようです。
これは、幸運を助けることを願っています!
ありがとうございますが、Firebugは要求/応答のペア(すべてのヘッダー)についての情報しか表示しますが、実行される接続に関する情報は表示しません。 –
あなたがクライアントサイドのJavaScriptについて話しているとすれば、この機能を達成するのに役立ついくつかのプロジェクトがあります。
はそれがお役に立てば幸いです。
MDNからは:HTTPの活動を監視する方法
は、ここで私は私自身のFFのアドオンで非常によく似た何かを自分のサンプルコード
// Define a reference to the interface
var nsIHttpActivityObserver = Components.interfaces.nsIHttpActivityObserver;
var httpObserver =
{
observeActivity: function(aHttpChannel, aActivityType, aActivitySubtype, aTimestamp, aExtraSizeData, aExtraStringData)
{
if (aActivityType == nsIHttpActivityObserver.ACTIVITY_TYPE_HTTP_TRANSACTION) {
switch(aActivitySubtype) {
case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_HEADER:
// received response header
break;
case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_COMPLETE:
// received complete HTTP response
break;
}
}
}
};
var activityDistributor =
Components.classes["@mozilla.org/network/http-activity-distributor;1"]
.getService(Components.interfaces.nsIHttpActivityDistributor);
activityDistributor.addObserver(httpObserver);
私はFirefox-Extension HttpFoxを使用しています。この種のコードは既に用意されています。
しかし、欠けているのは、tcp接続に関する情報です。
"キープアライブ"と "接続"というヘッダーは見えますが、接続自体へのマッピングはありません。 –
です。私は接続に関連付けられているnsiHttpChannel
への参照が必要であると仮定しています。しかし、おそらくネイティブコードに裏打ちされているので、あなたはそれにプロパティを追加できるだけでは不安です。しかし、はの場合はnsiHttpChannel
を別の場所に保管し、そのようにIDを保持してください。
私のアドオンでhttpトラフィックを監視するために使用するコードをいくつか示します。問題が解決するはずです。
var Cc = Components.classes;
var Ci = Components.interfaces;
var MyHttpObserver = {
// must be exposed so that the ObserverService can register itself
observe: function(subject, topic, data) {
subject.QueryInterface(Ci.nsIHttpChannel);
if(topic === "http-on-modify-request"){
// store 'subject' somewhere
} else if(topic === "http-on-examine-response"){
// look up 'subject' it will be the same reference as before
}
},
register: function() {
var observerService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
observerService.addObserver(this, "http-on-modify-request", false);
observerService.addObserver(this, "http-on-examine-response", false);
},
unregister: function() {
var observerService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
observerService.removeObserver(this, "http-on-modify-request");
observerService.removeObserver(this, "http-on-examine-response");
},
QueryInterface: function (aIID) {
if (aIID.equals(Ci.nsIObserver) || aIID.equals(Ci.nsISupports)){
return this;
}
throw Components.results.NS_NOINTERFACE;
}
};
良い見通しですが、この回答はhttp-request/responseに限られており、tcp-connectionについての情報はありません。とにかくありがとう! –
私は質問を理解していないと思います。多分あなたはそれを言い換えることができますか?どのような情報が必要ですか?私が知っている "tcp connection"に最も近いのは[nsiHttpChannel](https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIHttpChannel)です。 – skabbes
ファイヤーバグを見ましたか?オープンソースhttps://developer.mozilla.org/en/Firebug_internals –
良い質問; upvoteを持っています。 –
これを言い換えると、tcp接続オブジェクトから必要な情報の種類を含めることができますか?それとももっと良いことに、あなたの最終目標を説明してください。 – skabbes