Yeah, i worked with him originally and got as far as i did. But this solution no longer seems to work which is why i'm posting on here.
- gabriel On Jun 22, 1:13 pm, Pedro Simonetti Garcia <[email protected]> wrote: > Do you know about Firebug "AMF Explorer" > extension?https://addons.mozilla.org/en-US/firefox/addon/78928/ > > I don't know how AMF works, but maybe the developer > of "AMF Explorer" extension know what you are trying > to accomplish. > > regards, > > Pedro Simonetti. > > 2010/6/22 gmariani <[email protected]>: > > > How do you grab the actual binary data for an item loaded? I want to > > parse through a SWF that is loaded from a given site. > > > Previously I had trouble grabbing the binary data of a network > > response (AMF) and got that working. Although I'm still not sure *how* > > it works, just that it does, more on that later. I tried to use the > > same method there to grab the SWF data with no success. > > > I have a (TabCacheModel) CacheListener setup to tell Firebug to cache > > both AMF and SWF requests. It creates a cache key, stores it for > > later. Then for the (NetMonitor) NetListener.onResponseBody, it gets a > > response stream from the cache using that cache key. Once I have the > > response stream, when a user goes to view the tab added to the Net > > panel it creates a nsISeekableStream. With that I parse and display > > the AMF data. > > > When I try to do this to grab the SWF data this is what happens. At > > CacheListener.onDataAvailable, it goes to retrieve the cache key based > > on the request. > > > function getCacheKey(request) { > > var uploadStream = > > request.QueryInterface(Ci.nsIUploadChannel).uploadStream; > > > var seekableStream = > > uploadStream.QueryInterface(Ci.nsISeekableStream); > > seekableStream.seek(NS_SEEK_SET, 0); > > > var ch = Cc["@mozilla.org/security/hash; > > 1"].createInstance(Ci.nsICryptoHash); > > ch.init(ch.MD5); > > ch.updateFromStream(seekableStream, seekableStream.available()); > > > return ch.finish(true); > > }; > > > But for the SWFs, uploadStream is null and it explodes. Does it matter > > that the SWF is a file and not part of the request? Is that why this > > approach is failing? How can I fix this so it doesn't hate life. > > > *gripe start* > > Getting back to how I think this whole setup is a bit of black magic. > > The method just to retrieve the binary data of a response seems really > > complicated. You have to register a TabCacheModel and NetMonitor > > listener. The cache listener tells Firebug to cache certain things. > > Then when you get the actual data you have to jump through a ton of > > hoops to save that data. > > > onDataAvailable: function(context, request, requestContext, > > inputStream, offset, count) { > > if (isAmfRequest(request) || isSwfRequest(request)) { > > //try { > > var cacheKey = getCacheKey(request); > > > if (!cacheKey) return; > > > if (!this.cache[cacheKey]) { > > this.cache[cacheKey] = { > > storageStream: > > Cc["@mozilla.org/storagestream; > > 1"].createInstance(Ci.nsIStorageStream), > > outputStream: > > Cc["@mozilla.org/binaryoutputstream; > > 1"].createInstance(Ci.nsIBinaryOutputStream) > > }; > > > > > this.cache[cacheKey].storageStream.init(8192, PR_UINT32_MAX, > > null); > > > this.cache[cacheKey].outputStream.setOutputStream(this.cache[cacheKey].storageStream.getOutputStream(0)); > > } > > > var binaryInputStream = > > Cc["@mozilla.org/binaryinputstream; > > 1"].createInstance(Ci.nsIBinaryInputStream); > > binaryInputStream.setInputStream(inputStream.value); > > > var listenerStorageStream = > > Cc["@mozilla.org/storagestream; > > 1"].createInstance(Ci.nsIStorageStream); > > listenerStorageStream.init(8192, count, null); > > > var listenerOutputStream = > > Cc["@mozilla.org/binaryoutputstream; > > 1"].createInstance(Ci.nsIBinaryOutputStream); > > > listenerOutputStream.setOutputStream(listenerStorageStream.getOutputStream(0)); > > > var data = binaryInputStream.readByteArray(count); > > listenerOutputStream.writeByteArray(data, count); > > > > this.cache[cacheKey].outputStream.writeByteArray(data, count); > > > var response = this.getResponse(request, cacheKey); > > response.size += count; > > > // Let other listeners use the stream. > > inputStream.value = > > listenerStorageStream.newInputStream(0); > > /*} catch (e) { > > ERROR(e); > > }*/ > > } > > }, > > > Then the net listener goes into action at onResponseBody to save this > > stream you created and assign it to the file that has the request > > object. > > > THEN when you're finally ready to display your information, you have > > to do a little bit more magic to turn that stream into something you > > can actually read. > > > var is = file.responseStream; > > if (is) { > > var ss = is.QueryInterface(Ci.nsISeekableStream); > > if (ss) { > > ss.seek(NS_SEEK_SET, 0); > > > // Finally have a readable stream! > > } > > } > > > Am I doing something wrong here or is that actually the only way to > > get binary data? > > *end gripe* > > > - gabriel > > > -- > > You received this message because you are subscribed to the Google Groups > > "Firebug" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]. > > For more options, visit this group > > athttp://groups.google.com/group/firebug?hl=en. -- You received this message because you are subscribed to the Google Groups "Firebug" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/firebug?hl=en.
