void CLogger::dumpLogToTarget() { if(m_pLog == NULL) return; static char szOutput[1024]; if (m_pPlugin && m_pPlugin->isStandAlone()) { for(LogItemListElement * plile = m_pLog->m_pFirst; plile != NULL; plile = plile->pNext) { formatLogItem(plile->plis, szOutput, "", TRUE); m_pPlugin->outputToNativeWindow(szOutput); } } else { BOOL bTemporaryStream = ((m_pStream == NULL) && !getShowImmediatelyFlag()); if(m_pStream == NULL) NPN_NewStream(m_pPluginInstance, m_szStreamType, m_szTarget, &m_pStream); for(LogItemListElement * plile = m_pLog->m_pFirst; plile != NULL; plile = plile->pNext) { int iLength = formatLogItem(plile->plis, szOutput, ""); NPN_Write(m_pPluginInstance, m_pStream, iLength, (void *)szOutput); } if(bTemporaryStream) { NPN_DestroyStream(m_pPluginInstance, m_pStream, NPRES_DONE); m_pStream = NULL; } } }
NS_METHOD CPluginManagerStream::Write(const char* buffer, PRInt32 offset, PRInt32 len, PRInt32 *count) { assert( npp != NULL ); assert( pstream != NULL ); assert( count != NULL ); assert(offset == 0); // XXX need to handle the non-sequential write case *count = NPN_Write(npp, pstream, len, (void* )buffer); return *count >= 0 ? NS_OK : NS_ERROR_FAILURE; }
void CLogger::clearTarget() { if (m_pPlugin && m_pPlugin->isStandAlone()) { m_pPlugin->outputToNativeWindow(""); } else { if(m_pStream != NULL) NPN_DestroyStream(m_pPluginInstance, m_pStream, NPRES_DONE); NPN_NewStream(m_pPluginInstance, m_szStreamType, m_szTarget, &m_pStream); NPN_Write(m_pPluginInstance, m_pStream, 1, (void *)"\n"); if(!m_bShowImmediately) { NPN_DestroyStream(m_pPluginInstance, m_pStream, NPRES_DONE); m_pStream = NULL; } } }
void CPlugin::URLNotify(const char * szURL) { dbgOut2("CPlugin::URLNotify(), URL '%s'", szURL); NPStream * pStream = NULL; char buf[256]; assert(m_hInst != NULL); assert(m_pNPInstance != NULL); int iSize = LoadString(m_hInst, IDS_GOING2HTML, buf, sizeof(buf)); NPError rc = NPN_NewStream(m_pNPInstance, "text/html", "asd_plugin_finder", &pStream); if (rc != NPERR_NO_ERROR) return; //char buf[] = "<html>\n<body>\n\n<h2 align=center>NPN_NewStream / NPN_Write - This seems to work.</h2>\n\n</body>\n</html>"; NPN_Write(m_pNPInstance, pStream, iSize, buf); NPN_DestroyStream(m_pNPInstance, pStream, NPRES_DONE); }
/*! Writes data \e to the stream. See also: <a href=http://developer.netscape.com/library/documentation/communicator/plugin/refpgst.htm#npnwrite> Netscape: NPN_Write method</a> */ int QNPStream::write( int len, void* buffer ) { return NPN_Write(inst->pi->npp, stream, len, buffer); }
BOOL CLogger::appendToLog(NPAPI_Action action, DWORD dwTickEnter, DWORD dwTickReturn, DWORD dwRet, DWORD dw1, DWORD dw2, DWORD dw3, DWORD dw4, DWORD dw5, DWORD dw6, DWORD dw7) { if(m_pLog == NULL) return FALSE; if(!m_bLogToFrame && !m_bLogToFile) return TRUE; DWORD dwTimeEnter; DWORD dwTimeReturn; if(m_dwStartTime == 0xFFFFFFFF) { m_dwStartTime = dwTickEnter; dwTimeEnter = 0L; } else dwTimeEnter = dwTickEnter - m_dwStartTime; dwTimeReturn = dwTickReturn - m_dwStartTime; LogItemStruct * plis = makeLogItemStruct(action, dwTimeEnter, dwTimeReturn, dwRet, dw1, dw2, dw3, dw4, dw5, dw6, dw7); static char szOutput[1024]; // dump to file if(m_bLogToFile && !m_bBlockLogToFile) { if(m_pLogFile == NULL) { m_pLogFile = new CLogFile(); if(m_pLogFile == NULL) return FALSE; char szFile[256]; m_pPlugin->getLogFileName(szFile, sizeof(szFile)); if(m_pPlugin->getMode() == NP_EMBED) { if(!m_pLogFile->create(szFile, FALSE)) { char szMessage[512]; wsprintf(szMessage, "File '%s'\n probably exists. Overwrite?", szFile); if(IDYES == m_pPlugin->messageBox(szMessage, "", MB_ICONQUESTION | MB_YESNO)) { if(!m_pLogFile->create(szFile, TRUE)) { m_pPlugin->messageBox("Cannot create file.", "", MB_ICONERROR | MB_OK); delete m_pLogFile; m_pLogFile = NULL; return FALSE; } } else { delete m_pLogFile; m_pLogFile = NULL; goto Frame; } } } else // NP_FULL { if(!m_pLogFile->create(szFile, TRUE)) { delete m_pLogFile; m_pLogFile = NULL; return FALSE; } } } formatLogItem(plis, szOutput, m_szItemSeparator, TRUE); m_pLogFile->write(szOutput); m_pLogFile->flush(); } Frame: // dump to frame if(m_bLogToFrame && !m_bBlockLogToFrame) { if(m_bShowImmediately) { BOOL dosstyle = (m_pPlugin && m_pPlugin->isStandAlone()); int iLength = formatLogItem(plis, szOutput, "", dosstyle); // we should fix the output string if it contains symbols <html // If this is the case the browser will display the whole output // in HTML format while we still want it to be in plain text. // I do not know if this is a bug in the browser or not. FixUpOutputString(szOutput); if (m_pPlugin && m_pPlugin->isStandAlone()) { m_pPlugin->outputToNativeWindow(szOutput); } else { if(m_pStream == NULL) NPN_NewStream(m_pPluginInstance, m_szStreamType, m_szTarget, &m_pStream); NPN_Write(m_pPluginInstance, m_pStream, iLength, (void *)szOutput); } delete plis; } else m_pLog->add(plis); } return TRUE; }
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; }