Greetings from Israel, Anton.
_________________________________________________________________________
static inline bool getStream(nsCOMPtr<nsIByteArrayInputStream>& stream, const char *data, const int size) { if (!data || size <= 0) return true;
char *temp = (char *)nsMemory::Alloc(size + 1);
if (!temp)
return false;strcpy(temp, data);
// Create a byte array input stream object.
nsCOMPtr<nsIByteArrayInputStream> bytestr;
if (NS_FAILED(NS_NewByteArrayInputStream(getter_AddRefs(bytestr), temp, size)) || !bytestr)
{
nsMemory::Free(temp);
return false;
}
stream = bytestr;
return true;
}static inline bool makePostStreams(const string& data,
nsCOMPtr<nsIByteArrayInputStream>& dataStream,
nsCOMPtr<nsIByteArrayInputStream>& headersStream)
{
if (data.empty())
return true; mystrstream str;
str << "Content-Length: " << data.length() << "\r\n\r\n" << data;if (!getStream(dataStream, str.str(), str.pcount()))
return false;
static const char postHeader[] = "Content-Type: application/x-www-form-urlencoded\r\n";
return getStream(headersStream, postHeader, strlen(postHeader));
}
void nsPluginInstance::PostQuery(const string& url, const string& data)
{
nsCOMPtr<nsIWebNavigation> webNavigation;
m_spBrowser->QueryInterface(NS_GET_IID(nsIWebNavigation), (void **)&webNavigation);
nsCOMPtr<nsIByteArrayInputStream> dataStream;
nsCOMPtr<nsIByteArrayInputStream> headersStream;
if (!makePostStreams(data, dataStream, headersStream))
return;
webNavigation->LoadURI(a2w(url.c_str()),
nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE | nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY,
nsnull,
dataStream,
headersStream);
}
class mystrstream : public std::ostrstream
{
public:
// The call to str() freezes the buffer.
// To prevent a memory leak, we should unfreeze it, or free it ourselves.
virtual ~mystrstream()
{
rdbuf()->freeze(false);
}
const char *str()
{
std::ends(*this); // Zero-terminate the
string.
return rdbuf()->str();
}
void reset()
{
seekp(0);
rdbuf()->freeze(false);
}
int pcount()
{
return rdbuf()->pcount();
}
};
_______________________________________________
mozilla-embedding mailing list
[EMAIL PROTECTED]
http://mail.mozilla.org/listinfo/mozilla-embedding
