| OLD | NEW |
| (Empty) |
| 1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | |
| 2 /* ***** BEGIN LICENSE BLOCK ***** | |
| 3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |
| 4 * | |
| 5 * The contents of this file are subject to the Mozilla Public License Version | |
| 6 * 1.1 (the "License"); you may not use this file except in compliance with | |
| 7 * the License. You may obtain a copy of the License at | |
| 8 * http://www.mozilla.org/MPL/ | |
| 9 * | |
| 10 * Software distributed under the License is distributed on an "AS IS" basis, | |
| 11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |
| 12 * for the specific language governing rights and limitations under the | |
| 13 * License. | |
| 14 * | |
| 15 * The Original Code is mozilla.org code. | |
| 16 * | |
| 17 * The Initial Developer of the Original Code is | |
| 18 * Netscape Communications Corporation. | |
| 19 * Portions created by the Initial Developer are Copyright (C) 1998 | |
| 20 * the Initial Developer. All Rights Reserved. | |
| 21 * | |
| 22 * Contributor(s): | |
| 23 * | |
| 24 * Alternatively, the contents of this file may be used under the terms of | |
| 25 * either the GNU General Public License Version 2 or later (the "GPL"), or | |
| 26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | |
| 27 * in which case the provisions of the GPL or the LGPL are applicable instead | |
| 28 * of those above. If you wish to allow use of your version of this file only | |
| 29 * under the terms of either the GPL or the LGPL, and not to allow others to | |
| 30 * use your version of this file under the terms of the MPL, indicate your | |
| 31 * decision by deleting the provisions above and replace them with the notice | |
| 32 * and other provisions required by the GPL or the LGPL. If you do not delete | |
| 33 * the provisions above, a recipient may use your version of this file under | |
| 34 * the terms of any one of the MPL, the GPL or the LGPL. | |
| 35 * | |
| 36 * ***** END LICENSE BLOCK ***** */ | |
| 37 | |
| 38 #include <string> | |
| 39 | |
| 40 #include "xp.h" | |
| 41 | |
| 42 #include "logger.h" | |
| 43 #include "profile.h" | |
| 44 #include "plugload.h" | |
| 45 | |
| 46 Logger::Logger() : | |
| 47 bMutedAll(FALSE), | |
| 48 bOnTop(TRUE), | |
| 49 bToWindow(TRUE), | |
| 50 bToConsole(FALSE), | |
| 51 bToFile(FALSE), | |
| 52 bSPALID(FALSE) | |
| 53 { | |
| 54 if(0 != GetPluginsDir(szFile, sizeof(szFile))) | |
| 55 { | |
| 56 strcat(szFile, DIR_SEPARATOR); | |
| 57 strcat(szFile, DEFAULT_LOG_FILE_NAME); | |
| 58 } | |
| 59 else | |
| 60 szFile[0] = '\0'; | |
| 61 | |
| 62 for(int i = 0; i < sizeof(bMutedCalls)/sizeof(BOOL); i++) | |
| 63 bMutedCalls[i] = FALSE; | |
| 64 | |
| 65 bMutedCalls[action_npn_mem_alloc] = TRUE; | |
| 66 bMutedCalls[action_npn_mem_free] = TRUE; | |
| 67 bMutedCalls[action_npn_mem_flush] = TRUE; | |
| 68 } | |
| 69 | |
| 70 Logger::~Logger() | |
| 71 { | |
| 72 } | |
| 73 | |
| 74 BOOL Logger::init() | |
| 75 { | |
| 76 if(bToFile) | |
| 77 filer.create(szFile, TRUE); | |
| 78 | |
| 79 return TRUE; | |
| 80 } | |
| 81 | |
| 82 void Logger::shut() | |
| 83 { | |
| 84 filer.close(); | |
| 85 } | |
| 86 | |
| 87 #define MAX_OUTPUT_SIZE 8192 | |
| 88 | |
| 89 void Logger::logNS_NP_GetEntryPoints() | |
| 90 { | |
| 91 char szLog[] = "NP_GetEntryPoints by Netscape\r\n"; | |
| 92 | |
| 93 if(bToConsole) | |
| 94 printf("%s", szLog); | |
| 95 | |
| 96 if(bToFile) | |
| 97 filer.write(szLog); | |
| 98 | |
| 99 if(bToWindow) | |
| 100 dumpStringToMainWindow(szLog); | |
| 101 } | |
| 102 | |
| 103 void Logger::logNS_NP_Initialize() | |
| 104 { | |
| 105 char szLog[] = "NP_Initialize by Netscape\r\n"; | |
| 106 | |
| 107 if(bToConsole) | |
| 108 printf("%s", szLog); | |
| 109 | |
| 110 if(bToFile) | |
| 111 filer.write(szLog); | |
| 112 | |
| 113 if(bToWindow) | |
| 114 dumpStringToMainWindow(szLog); | |
| 115 } | |
| 116 | |
| 117 void Logger::logNS_NP_Shutdown() | |
| 118 { | |
| 119 char szLog[] = "NP_Shutdown by Netscape\r\n"; | |
| 120 | |
| 121 if(bToConsole) | |
| 122 printf("%s", szLog); | |
| 123 | |
| 124 if(bToFile) | |
| 125 filer.write(szLog); | |
| 126 | |
| 127 if(bToWindow) | |
| 128 dumpStringToMainWindow(szLog); | |
| 129 } | |
| 130 | |
| 131 void Logger::logSPY_NP_GetEntryPoints(NPPluginFuncs * pNPPFuncs) | |
| 132 { | |
| 133 char szLog[80] = "NP_GetEntryPoints by NPSpy\r\n"; | |
| 134 | |
| 135 if(bToConsole) | |
| 136 printf("%s", szLog); | |
| 137 | |
| 138 if(bToFile) | |
| 139 filer.write(szLog); | |
| 140 | |
| 141 if(bToWindow) | |
| 142 dumpStringToMainWindow(szLog); | |
| 143 | |
| 144 if(!pNPPFuncs) | |
| 145 return; | |
| 146 | |
| 147 char szLog1[80],szLog2[80],szLog3[80],szLog4[80],szLog5[80],szLog6[80],szLog7[
80], | |
| 148 szLog8[80],szLog9[80],szLog10[80],szLog11[80],szLog12[80],szLog13[80],szL
og14[80], | |
| 149 szLog15[80],szLog16[80],szLog17[80],szLog18[80],szLog19[80],szLog20[80]; | |
| 150 | |
| 151 sprintf(szLog1, "\r\n"); | |
| 152 sprintf(szLog2, " Plugin entry point table\r\n"); | |
| 153 sprintf(szLog3, " ========================\r\n"); | |
| 154 | |
| 155 if(pNPPFuncs->size) | |
| 156 sprintf(szLog4, " size = %i\r\n", pNPPFuncs->size); | |
| 157 else | |
| 158 sprintf(szLog4, " size = not set!\r\n"); | |
| 159 | |
| 160 if(pNPPFuncs->version) | |
| 161 sprintf(szLog5, " version = %i\r\n", pNPPFuncs->version); | |
| 162 else | |
| 163 sprintf(szLog5, " version = not set!\r\n"); | |
| 164 | |
| 165 if(pNPPFuncs->newp) | |
| 166 sprintf(szLog6, " newp = %#08lx\r\n", pNPPFuncs->newp); | |
| 167 else | |
| 168 sprintf(szLog6, " newp = not set!\r\n"); | |
| 169 | |
| 170 if(pNPPFuncs->destroy) | |
| 171 sprintf(szLog7, " destroy = %#08lx\r\n", pNPPFuncs->destroy); | |
| 172 else | |
| 173 sprintf(szLog7, " destroy = not set!\r\n"); | |
| 174 | |
| 175 if(pNPPFuncs->setwindow) | |
| 176 sprintf(szLog8, " setwindow = %#08lx\r\n", pNPPFuncs->setwindow); | |
| 177 else | |
| 178 sprintf(szLog8, " setwindow = not set!\r\n"); | |
| 179 | |
| 180 if(pNPPFuncs->newstream) | |
| 181 sprintf(szLog9, " newstream = %#08lx\r\n", pNPPFuncs->newstream); | |
| 182 else | |
| 183 sprintf(szLog9, " newstream = not set!\r\n"); | |
| 184 | |
| 185 if(pNPPFuncs->destroystream) | |
| 186 sprintf(szLog10, " destroystream = %#08lx\r\n", pNPPFuncs->destroystream)
; | |
| 187 else | |
| 188 sprintf(szLog10, " destroystream = not set!\r\n"); | |
| 189 | |
| 190 if(pNPPFuncs->asfile) | |
| 191 sprintf(szLog11, " asfile = %#08lx\r\n", pNPPFuncs->asfile); | |
| 192 else | |
| 193 sprintf(szLog11, " asfile = not set!\r\n"); | |
| 194 | |
| 195 if(pNPPFuncs->writeready) | |
| 196 sprintf(szLog12, " writeready = %#08lx\r\n", pNPPFuncs->writeready); | |
| 197 else | |
| 198 sprintf(szLog12, " writeready = not set!\r\n"); | |
| 199 | |
| 200 if(pNPPFuncs->write) | |
| 201 sprintf(szLog13, " write = %#08lx\r\n", pNPPFuncs->write); | |
| 202 else | |
| 203 sprintf(szLog13, " write = not set!\r\n"); | |
| 204 | |
| 205 if(pNPPFuncs->print) | |
| 206 sprintf(szLog14, " print = %#08lx\r\n", pNPPFuncs->print); | |
| 207 else | |
| 208 sprintf(szLog14, " print = not set!\r\n"); | |
| 209 | |
| 210 if(pNPPFuncs->event) | |
| 211 sprintf(szLog15, " event = %#08lx\r\n", pNPPFuncs->event); | |
| 212 else | |
| 213 sprintf(szLog15, " event = not set!\r\n"); | |
| 214 | |
| 215 if(pNPPFuncs->urlnotify) | |
| 216 sprintf(szLog16, " urlnotify = %#08lx\r\n", pNPPFuncs->urlnotify); | |
| 217 else | |
| 218 sprintf(szLog16, " urlnotify = not set!\r\n"); | |
| 219 | |
| 220 if(pNPPFuncs->javaClass) | |
| 221 sprintf(szLog17, " javaClass = %#08lx\r\n", pNPPFuncs->javaClass); | |
| 222 else | |
| 223 sprintf(szLog17, " javaClass = not set!\r\n"); | |
| 224 | |
| 225 if(pNPPFuncs->getvalue) | |
| 226 sprintf(szLog18, " getvalue = %#08lx\r\n", pNPPFuncs->getvalue); | |
| 227 else | |
| 228 sprintf(szLog18, " getvalue = not set!\r\n"); | |
| 229 | |
| 230 if(pNPPFuncs->setvalue) | |
| 231 sprintf(szLog19, " setvalue = %#08lx\r\n", pNPPFuncs->setvalue); | |
| 232 else | |
| 233 sprintf(szLog19, " setvalue = not set!\r\n"); | |
| 234 | |
| 235 sprintf(szLog20, "\r\n"); | |
| 236 | |
| 237 if(bToConsole) | |
| 238 { | |
| 239 printf("%s", szLog1); printf("%s", szLog2); printf("%s", szLog3); printf("%s
", szLog4); | |
| 240 printf("%s", szLog5); printf("%s", szLog6); printf("%s", szLog7); printf("%s
", szLog8); | |
| 241 printf("%s", szLog9); printf("%s", szLog10); printf("%s", szLog11); printf("
%s", szLog12); | |
| 242 printf("%s", szLog13); printf("%s", szLog14); printf("%s", szLog15); printf(
"%s", szLog16); | |
| 243 printf("%s", szLog17); printf("%s", szLog18); printf("%s", szLog19); printf(
"%s", szLog20); | |
| 244 } | |
| 245 | |
| 246 if(bToFile) | |
| 247 { | |
| 248 filer.write(szLog1); filer.write(szLog2); filer.write(szLog3); filer.write(s
zLog4); | |
| 249 filer.write(szLog5); filer.write(szLog6); filer.write(szLog7); filer.write(s
zLog8); | |
| 250 filer.write(szLog9); filer.write(szLog10); filer.write(szLog11); filer.write
(szLog12); | |
| 251 filer.write(szLog13); filer.write(szLog14); filer.write(szLog15); filer.writ
e(szLog16); | |
| 252 filer.write(szLog17); filer.write(szLog18); filer.write(szLog19); filer.writ
e(szLog20); | |
| 253 } | |
| 254 | |
| 255 if(bToWindow) | |
| 256 { | |
| 257 dumpStringToMainWindow(szLog1); dumpStringToMainWindow(szLog2); | |
| 258 dumpStringToMainWindow(szLog3); dumpStringToMainWindow(szLog4); | |
| 259 dumpStringToMainWindow(szLog5); dumpStringToMainWindow(szLog6); | |
| 260 dumpStringToMainWindow(szLog7); dumpStringToMainWindow(szLog8); | |
| 261 dumpStringToMainWindow(szLog9); dumpStringToMainWindow(szLog10); | |
| 262 dumpStringToMainWindow(szLog11); dumpStringToMainWindow(szLog12); | |
| 263 dumpStringToMainWindow(szLog13); dumpStringToMainWindow(szLog14); | |
| 264 dumpStringToMainWindow(szLog15); dumpStringToMainWindow(szLog16); | |
| 265 dumpStringToMainWindow(szLog17); dumpStringToMainWindow(szLog18); | |
| 266 dumpStringToMainWindow(szLog19); dumpStringToMainWindow(szLog20); | |
| 267 } | |
| 268 } | |
| 269 | |
| 270 void Logger::logSPY_NP_Initialize() | |
| 271 { | |
| 272 char szLog[] = "NP_Initialize by NPSpy\r\n"; | |
| 273 | |
| 274 if(bToConsole) | |
| 275 printf("%s", szLog); | |
| 276 | |
| 277 if(bToFile) | |
| 278 filer.write(szLog); | |
| 279 | |
| 280 if(bToWindow) | |
| 281 dumpStringToMainWindow(szLog); | |
| 282 } | |
| 283 | |
| 284 void Logger::logSPY_NP_Shutdown(char * mimetype) | |
| 285 { | |
| 286 char szLog[512] = "NP_Shutdown by NPSpy\r\n"; | |
| 287 if(mimetype) | |
| 288 { | |
| 289 strcat(szLog, " for \""); | |
| 290 strcat(szLog, mimetype); | |
| 291 strcat(szLog, "\"\r\n"); | |
| 292 } | |
| 293 | |
| 294 if(bToConsole) | |
| 295 printf("%s", szLog); | |
| 296 | |
| 297 if(bToFile) | |
| 298 filer.write(szLog); | |
| 299 | |
| 300 if(bToWindow) | |
| 301 dumpStringToMainWindow(szLog); | |
| 302 } | |
| 303 | |
| 304 void Logger::logCall(NPAPI_Action action, DWORD dw1, DWORD dw2, DWORD dw3, DWORD
dw4, DWORD dw5, DWORD dw6, DWORD dw7) | |
| 305 { | |
| 306 if(isMuted(action)) | |
| 307 return; | |
| 308 | |
| 309 std::string log; | |
| 310 | |
| 311 LogItemStruct * lis = makeLogItemStruct(action, dw1, dw2, dw3, dw4, dw5, dw6,
dw7); | |
| 312 formatLogItem(lis, &log, TRUE); | |
| 313 freeLogItemStruct(lis); | |
| 314 | |
| 315 if(bToConsole) | |
| 316 printf("%s", log.c_str()); | |
| 317 | |
| 318 if(bToFile) | |
| 319 filer.write(log); | |
| 320 | |
| 321 if(bToWindow) | |
| 322 dumpStringToMainWindow(log); | |
| 323 } | |
| 324 | |
| 325 void Logger::logMessage(const char *msg) | |
| 326 { | |
| 327 if(bToConsole) | |
| 328 printf("%s", msg); | |
| 329 | |
| 330 if(bToFile) | |
| 331 filer.write((char *)msg); | |
| 332 | |
| 333 if(bToWindow) | |
| 334 dumpStringToMainWindow((char *)msg); | |
| 335 } | |
| 336 | |
| 337 void Logger::logReturn(NPAPI_Action action, DWORD dwRet) | |
| 338 { | |
| 339 if (isMuted(action)) | |
| 340 return; | |
| 341 | |
| 342 char msg[512]; | |
| 343 sprintf(msg, "---Return: %d\r\n", dwRet); | |
| 344 logMessage(msg); | |
| 345 } | |
| 346 | |
| 347 void Logger::setOnTop(BOOL ontop) | |
| 348 { | |
| 349 bOnTop = ontop; | |
| 350 } | |
| 351 | |
| 352 void Logger::setToFile(BOOL tofile, char * filename) | |
| 353 { | |
| 354 if(!filename || !*filename || (strlen(filename) > _MAX_PATH)) | |
| 355 { | |
| 356 bToFile = FALSE; | |
| 357 return; | |
| 358 } | |
| 359 | |
| 360 //don't screw up the file on false call | |
| 361 BOOL samefile = (_stricmp(szFile, filename) == 0); | |
| 362 BOOL sameaction = (bToFile == tofile); | |
| 363 | |
| 364 if(sameaction) | |
| 365 { | |
| 366 if(samefile) | |
| 367 return; | |
| 368 | |
| 369 strcpy(szFile, filename); | |
| 370 | |
| 371 if(bToFile) | |
| 372 { | |
| 373 filer.close(); | |
| 374 filer.create(szFile, TRUE); | |
| 375 } | |
| 376 } | |
| 377 | |
| 378 if(!sameaction) | |
| 379 { | |
| 380 bToFile = tofile; | |
| 381 | |
| 382 if(!samefile) | |
| 383 strcpy(szFile, filename); | |
| 384 | |
| 385 if(bToFile) | |
| 386 filer.create(szFile, TRUE); | |
| 387 else | |
| 388 filer.close(); | |
| 389 } | |
| 390 } | |
| 391 | |
| 392 BOOL Logger::isMuted(NPAPI_Action action) | |
| 393 { | |
| 394 if(bMutedAll) | |
| 395 return TRUE; | |
| 396 | |
| 397 if(action >= TOTAL_NUMBER_OF_API_CALLS) | |
| 398 { | |
| 399 assert(0); | |
| 400 return FALSE; | |
| 401 } | |
| 402 | |
| 403 return bMutedCalls[action]; | |
| 404 } | |
| 405 | |
| 406 BOOL * Logger::getMutedCalls() | |
| 407 { | |
| 408 return &bMutedCalls[0]; | |
| 409 } | |
| 410 | |
| 411 void Logger::setMutedCalls(BOOL * mutedcalls) | |
| 412 { | |
| 413 for(int i = 0; i < sizeof(bMutedCalls)/sizeof(BOOL); i++) | |
| 414 bMutedCalls[i] = mutedcalls[i]; | |
| 415 } | |
| OLD | NEW |