void SqueakPluginPostData(void *instance, char *url, char *target, char *data, int id) { NPError err; if(ieMode) err = NPN_PostURL((NPP)instance, url, target, data ? strlen(data) : 0, data, 0); else err = NPN_PostURLNotify((NPP)instance, url, target, data ? strlen(data) : 0, data, 0, (void*) id); }
/*! Posts \a data to \a url, and displays the result in \a window. Returns the ID of the request that is delivered to transferComplete() when the post-operation has finished. Returns 0 when the browser or the system doesn't support notification, or -1 when an error occurred. \code void MyPlugin::sendMail() { uploadData("mailto:[email protected]", QString(), "There is a new file for you!"); } \endcode See Netscape's JavaScript documentation for an explanation of window names. \sa transferComplete() openUrl() uploadFile() */ int QtNPBindable::uploadData(const QString &url, const QString &window, const QByteArray &data) { if (!pi) return -1; int id = pi->getNotificationSeqNum(); if (NPERR_NO_ERROR != NPN_PostURLNotify(pi->npp, url.toLocal8Bit().constData(), window.isEmpty() ? 0 : window.toLocal8Bit().constData(), data.size(), data.constData(), false, reinterpret_cast<void*>(id))) id = -1; return id; }
static void PostUrl(SqueakPlugin *plugin) { char *url, *target, *data; int id, urlSize, targetSize, dataSize; errno= 0; Receive(plugin, &id, 4); /* Read URL from pipe */ Receive(plugin, &urlSize, 4); if (urlSize > 0) { url= NPN_MemAlloc(urlSize+1); Receive(plugin, url, urlSize); url[urlSize]= 0; } else url= NULL; /* Read target from pipe */ Receive(plugin, &targetSize, 4); if (targetSize > 0) { target= NPN_MemAlloc(targetSize+1); Receive(plugin, target, targetSize); target[targetSize]= 0; } else target= NULL; /* Read post data from pipe */ Receive(plugin, &dataSize, 4); if (dataSize > 0) { data= NPN_MemAlloc(dataSize); Receive(plugin, data, dataSize); } else data= NULL; if (errno) { perror("Squeak Plugin (PostUrl)"); } else { SqueakStream* notifyData= (SqueakStream*) NPN_MemAlloc(sizeof(SqueakStream)); if (!notifyData) { fprintf(stderr, "Squeak Plugin (PostUrl): alloc failed\n"); } else { DPRINT("NP: PostURLNotify(%s, id=%i)\n", url, id); notifyData->id= id; NPN_PostURLNotify(plugin->instance, url, target, dataSize, data, FALSE, notifyData); } } if (url) NPN_MemFree(url); if (target) NPN_MemFree(target); if (data) NPN_MemFree(data); }
NS_METHOD CPluginManager::PostURL(nsISupports* inst, const char* url, const char* target, PRUint32 postDataLen, const char* postData, PRBool isFile, void* notifyData, const char* altHost, const char* referrer, PRBool forceJSEnabled, PRUint32 postHeadersLength, const char* postHeaders) { // assert( npp != NULL ); // assert( url != NULL ); assert( inst != NULL); nsIPluginInstance* pPluginInstance = NULL; nsIPluginInstancePeer* pPluginInstancePeer = NULL; if (NS_FAILED(inst->QueryInterface(kIPluginInstanceIID, (void**) &pPluginInstance))) { return NS_ERROR_FAILURE; } if (NS_FAILED(pPluginInstance->GetPeer(&pPluginInstancePeer))) { pPluginInstance->Release(); return NS_ERROR_FAILURE; } CPluginInstancePeer* instancePeer = (CPluginInstancePeer*)pPluginInstancePeer; NPP npp = instancePeer->GetNPPInstance(); pPluginInstance->Release(); pPluginInstancePeer->Release(); NPError err; // Call the correct PostURL* function. // This is determinded by checking notifyData. if (notifyData == NULL) { err = NPN_PostURL(npp, url, target, postDataLen, postData, isFile); } else { err = NPN_PostURLNotify(npp, url, target, postDataLen, postData, isFile, notifyData); } UNUSED(altHost); UNUSED(referrer); UNUSED(forceJSEnabled); UNUSED(postHeadersLength); UNUSED(postHeaders); return fromNPError[err]; }
DWORD CPluginBase::makeNPNCall(NPAPI_Action action, DWORD dw1, DWORD dw2, DWORD dw3, DWORD dw4, DWORD dw5, DWORD dw6, DWORD dw7) { DWORD dwRet = 0L; DWORD dwTickEnter = XP_GetTickCount(); switch (action) { case action_invalid: assert(0); break; case action_npn_version: { static int iP_maj = 0; static int iP_min = 0; static int iN_maj = 0; static int iN_min = 0; if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)&iP_maj; if(dw2 == DEFAULT_DWARG_VALUE) dw2 = (DWORD)&iP_min; if(dw3 == DEFAULT_DWARG_VALUE) dw3 = (DWORD)&iN_maj; if(dw4 == DEFAULT_DWARG_VALUE) dw4 = (DWORD)&iN_min; NPN_Version((int *)dw1, (int *)dw2, (int *)dw3, (int *)dw4); break; } case action_npn_get_url_notify: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; dwRet = NPN_GetURLNotify((NPP)dw1, (char *)dw2, (char *)dw3, (void *)dw4); break; case action_npn_get_url: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; dwRet = NPN_GetURL((NPP)dw1, (char *)dw2, (char *)dw3); break; case action_npn_post_url_notify: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; dwRet = NPN_PostURLNotify((NPP)dw1, (char *)dw2, (char *)dw3, (int32)dw4, (char *)dw5, (BOOL)dw6, (void *)dw7); break; case action_npn_post_url: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; dwRet = NPN_PostURL((NPP)dw1, (char *)dw2, (char *)dw3, (int32)dw4, (char *)dw5, (BOOL)dw6); break; case action_npn_new_stream: assert(m_pStream == NULL); if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; if(dw4 == DEFAULT_DWARG_VALUE) dw4 = (DWORD)&m_pStream; dwRet = NPN_NewStream((NPP)dw1, (char *)dw2, (char *)dw3, (NPStream **)dw4); break; case action_npn_destroy_stream: assert(m_pStream != NULL); if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; if(dw2 == DEFAULT_DWARG_VALUE) dw2 = (DWORD)m_pStream; dwRet = NPN_DestroyStream((NPP)dw1, (NPStream *)dw2, (NPError)dw3); m_pStream = NULL; break; case action_npn_request_read: break; case action_npn_write: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; if(dw2 == DEFAULT_DWARG_VALUE) dw2 = (DWORD)m_pStream; dwRet = NPN_Write((NPP)dw1, (NPStream *)dw2, (int32)dw3, (void *)dw4); break; case action_npn_status: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; NPN_Status((NPP)dw1, (char *)dw2); break; case action_npn_user_agent: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; dwRet = (DWORD)NPN_UserAgent((NPP)dw1); break; case action_npn_mem_alloc: assert(m_pNPNAlloced == NULL); m_pNPNAlloced = NPN_MemAlloc((int32)dw1); dwRet = (DWORD)m_pNPNAlloced; if(m_pNPNAlloced != NULL) { for(int i = 0; i < (int)dw1; i++) *(((BYTE *)m_pNPNAlloced) + i) = 255; } break; case action_npn_mem_free: assert(m_pNPNAlloced != NULL); dw1 = (DWORD)m_pNPNAlloced; NPN_MemFree((void *)dw1); m_pNPNAlloced = NULL; break; case action_npn_mem_flush: dwRet = (DWORD)NPN_MemFlush((int32)dw1); break; case action_npn_reload_plugins: NPN_ReloadPlugins((NPBool)dw1); break; case action_npn_get_java_env: dwRet = (DWORD)NPN_GetJavaEnv(); break; case action_npn_get_java_peer: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; dwRet = (DWORD)NPN_GetJavaPeer((NPP)dw1); break; case action_npn_get_value: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; if(dw3 == DEFAULT_DWARG_VALUE) dw3 = (DWORD)m_pValue; dwRet = (DWORD)NPN_GetValue((NPP)dw1, (NPNVariable)dw2, (void *)dw3); break; case action_npn_set_value: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; if(dw3 == DEFAULT_DWARG_VALUE) dw3 = (DWORD)m_pValue; // note that Mozilla expects boolean values not as a pointer to BOOL // but rather as simply null and not null, let's convert if((dw2 == NPPVpluginWindowBool) || (dw2 == NPPVpluginTransparentBool) || (dw2 == NPPVpluginKeepLibraryInMemory)) { dwRet = (DWORD)NPN_SetValue((NPP)dw1, (NPPVariable)dw2, (void *)(*(BOOL *)dw3)); } else dwRet = (DWORD)NPN_SetValue((NPP)dw1, (NPPVariable)dw2, (void *)dw3); break; case action_npn_invalidate_rect: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; NPN_InvalidateRect((NPP)dw1, (NPRect *)dw2); break; case action_npn_invalidate_region: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; NPN_InvalidateRegion((NPP)dw1, (NPRegion)dw2); break; case action_npn_force_redraw: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; NPN_ForceRedraw((NPP)dw1); break; default: assert(0); break; } DWORD dwTickReturn = XP_GetTickCount(); pLogger->appendToLog(action, dwTickEnter, dwTickReturn, dwRet, dw1, dw2, dw3, dw4, dw5, dw6, dw7); return dwRet; }