plugin-setup.cpp
上传用户:hongyu5696
上传日期:2018-01-22
资源大小:391k
文件大小:46k
源码类别:

PlugIns编程

开发平台:

Unix_Linux

  1. #include "plugin.h"
  2. #include <sys/stat.h>
  3. #ifndef STATICDECLS
  4. #define STATICDECLS
  5. int DEBUG = 0;
  6. int instance_counter = 0;
  7. #define MAX_BUF_LEN 255
  8. #define STATE_RESET 0
  9. #define STATE_NEW 1
  10. #define STATE_HAVEURL 3
  11. #define STATE_WINDOWSET 4
  12. #define STATE_READY 5
  13. #define STATE_QUEUED 6
  14. #define STATE_DOWNLOADING 7
  15. #define STATE_DOWNLOADED_ENOUGH 8
  16. #define STATE_CANCELLED 11
  17. #define STATE_NEWINSTANCE 100
  18. #define STATE_GETTING_PLAYLIST 110
  19. #define STATE_STARTED_PLAYER 115
  20. #define STATE_PLAYLIST_COMPLETE 120
  21. #define STATE_PLAYLIST_NEXT 125
  22. #define STATE_PLAYING 130
  23. #define STATE_PLAY_COMPLETE 140
  24. #define STATE_PLAY_CANCELLED 150
  25. // speed options
  26. #define SPEED_LOW 1
  27. #define SPEED_MED 2
  28. #define SPEED_HIGH 3
  29. #endif
  30. char *GetMIMEDescription()
  31. {
  32.     char *ret;
  33.     char MimeTypes[4000], parse[1000], buffer[1000];
  34.     FILE *config;
  35.     int i, use_custom_mime_types;
  36.     int standard;
  37.     int enable_mpeg;
  38.     int enable_ogg;
  39.     int enable_smil;
  40.     int enable_helix;
  41.     int enable_wmp;
  42.     int enable_qt;
  43.     int enable_rm;
  44.     int enable_gmp;
  45.     int enable_dvx;
  46.     int enable_mp3;
  47.     int enable_midi;
  48.     int enable_pls;
  49. #ifdef STD
  50.     FILE *customtypes;
  51.     char customline[255];
  52. #endif
  53.     char config_name[3][1000];
  54.     // load config file
  55.     snprintf(config_name[0], 1000, "/etc/downloadplug-in.conf");
  56.     snprintf(config_name[1], 1000, "%s", getenv("HOME"));
  57.     strlcat(config_name[1], "/.mozilla/downloadplug-in.conf", 1000);
  58.     snprintf(config_name[2], 1000, "%s", getenv("HOME"));
  59.     strlcat(config_name[2], "/.download/downloadplug-in.conf", 1000);
  60.     config = NULL;
  61.     enable_mpeg = 1;
  62.     enable_ogg = 1;
  63.     enable_smil = 1;
  64.     enable_helix = 1;
  65.     enable_wmp = 1;
  66.     enable_qt = 1;
  67.     enable_rm = 1;
  68.     enable_gmp = 1;
  69.     enable_dvx = 1;
  70.     enable_midi = 0;
  71.     enable_pls = 0;
  72.     use_custom_mime_types = 0;
  73.     DEBUG = 0; //set to 1 when debugging this function
  74.     if (DEBUG)
  75. printf("Reading config file for codecsn");
  76.     // clear the buffer
  77.     for (i = 0; i < 4000; i++) {
  78. MimeTypes[i] = '';
  79.     }
  80.     config = NULL;
  81.     for (i = 0; i < 3; i++) {
  82. config = fopen(config_name[i], "r");
  83. if (config == NULL) {
  84.     // no config file
  85. } else {
  86.     while (fgets(buffer, 1000, config) != NULL) {
  87. if (DEBUG)
  88.     printf("Buffer: %sn", buffer);
  89. // SMIL
  90. if (strncasecmp(buffer, "enable-smil", 11) == 0) {
  91.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  92.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  93.     sscanf(parse, "%i", &enable_smil);
  94.     if (DEBUG)
  95. printf("real:%in", enable_smil);
  96.     continue;
  97. }
  98. // Helix RPM MimeType
  99. if (strncasecmp(buffer, "enable-helix", 12) == 0) {
  100.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  101.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  102.     sscanf(parse, "%i", &enable_helix);
  103.     if (DEBUG)
  104. printf("helix:%in", enable_helix);
  105.     continue;
  106. }
  107. // MPEG
  108. if (strncasecmp(buffer, "enable-mpeg", 11) == 0) {
  109.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  110.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  111.     sscanf(parse, "%i", &enable_mpeg);
  112.     if (DEBUG)
  113. printf("mpeg:%in", enable_mpeg);
  114.     continue;
  115. }
  116. // Ogg Vorbis
  117. if (strncasecmp(buffer, "enable-ogg", 10) == 0) {
  118.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  119.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  120.     sscanf(parse, "%i", &enable_ogg);
  121.     if (DEBUG)
  122. printf("ogg:%in", enable_ogg);
  123.     continue;
  124. }
  125. if (strncasecmp(buffer, "use-mimetypes", 13) == 0) {
  126.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  127.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  128.     sscanf(parse, "%i", &use_custom_mime_types);
  129.     if (DEBUG)
  130. printf("custom mimetypes:%in",
  131.        use_custom_mime_types);
  132.     continue;
  133. }
  134. // Windows Media Player
  135. if (strncasecmp(buffer, "enable-wmp", 10) == 0) {
  136.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  137.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  138.     sscanf(parse, "%i", &enable_wmp);
  139.     if (DEBUG)
  140. printf("wmp:%in", enable_wmp);
  141.     continue;
  142. }
  143. // QuickTime
  144. if (strncasecmp(buffer, "enable-qt", 9) == 0) {
  145.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  146.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  147.     sscanf(parse, "%i", &enable_qt);
  148.     if (DEBUG)
  149. printf("qt:%in", enable_qt);
  150.     continue;
  151. }
  152. // RealMedia
  153. if (strncasecmp(buffer, "enable-rm", 9) == 0) {
  154.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  155.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  156.     sscanf(parse, "%i", &enable_rm);
  157.     if (DEBUG)
  158. printf("rm:%in", enable_rm);
  159.     continue;
  160. }
  161. // Google Media Player
  162. if (strncasecmp(buffer, "enable-gmp", 10) == 0) {
  163.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  164.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  165.     sscanf(parse, "%i", &enable_gmp);
  166.     if (DEBUG)
  167. printf("gmp:%in", enable_gmp);
  168.     continue;
  169. }
  170. // Divx Media Player
  171. if (strncasecmp(buffer, "enable-dvx", 10) == 0) {
  172.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  173.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  174.     sscanf(parse, "%i", &enable_dvx);
  175.     if (DEBUG)
  176. printf("dvx:%in", enable_dvx);
  177.     continue;
  178. }
  179. // MP3
  180. if (strncasecmp(buffer, "enable-mp3", 10) == 0) {
  181.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  182.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  183.     sscanf(parse, "%i", &enable_mp3);
  184.     if (DEBUG)
  185. printf("mp3:%in", enable_mp3);
  186.     continue;
  187. }
  188. // MIDI
  189. if (strncasecmp(buffer, "enable-midi", 11) == 0) {
  190.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  191.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  192.     sscanf(parse, "%i", &enable_midi);
  193.     if (DEBUG)
  194. printf("midi:%in", enable_midi);
  195.     continue;
  196. }
  197. // PLS
  198. if (strncasecmp(buffer, "enable-pls", 10) == 0) {
  199.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  200.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  201.     sscanf(parse, "%i", &enable_pls);
  202.     if (DEBUG)
  203. printf("pls:%in", enable_pls);
  204.     continue;
  205. }
  206.     }
  207.     fclose(config);
  208. }
  209.     }
  210. #ifdef STD
  211.     standard = 1;
  212. #endif
  213. #ifndef STD
  214.     standard = 0;
  215. #endif
  216.     if (use_custom_mime_types == 1 && standard == 1) {
  217. #ifdef STD
  218. customtypes = NULL;
  219. if (customtypes == NULL) {
  220.     snprintf(buffer, 1000, "%s", getenv("HOME"));
  221.     strlcat(buffer, "/.download/downloadplug-in.types", 1000);
  222.     customtypes = fopen(buffer, "r");
  223. }
  224. if (customtypes == NULL) {
  225.     snprintf(buffer, 1000, "%s", getenv("HOME"));
  226.     strlcat(buffer, "/.mozilla/downloadplug-in.types", 1000);
  227.     config = fopen(buffer, "r");
  228. }
  229. if (customtypes == NULL) {
  230.     customtypes = fopen("/etc/downloadplug-in.types", "r");
  231. }
  232. if (customtypes != NULL) {
  233.     while (fgets(customline, sizeof(customline), customtypes)) {
  234. if (customline[0] != '' && customline[0] != '#'
  235.     && customline[0] != 'n')
  236.     strlcat(MimeTypes, customline, sizeof(MimeTypes));
  237.     }
  238.     fclose(customtypes);
  239. }
  240. #endif
  241.     } else {
  242. #ifdef QT
  243. if (enable_qt) {
  244.     strlcat(MimeTypes,
  245.     "video/quicktime:mov:Quicktime;"
  246.     "video/x-quicktime:mov:Quicktime;"
  247.     "image/x-quicktime:mov:Quicktime;"
  248.     "video/quicktime:mp4:Quicktime;"
  249.     "video/quicktime:sdp:Quicktime - Session Description Protocol;"
  250.     "application/x-quicktimeplayer:mov:Quicktime;",
  251.     sizeof(MimeTypes));
  252.     if (enable_smil)
  253. strlcat(MimeTypes,
  254. "application/smil:smil:SMIL;", sizeof(MimeTypes));
  255. }
  256. #endif
  257. #ifdef WMP
  258. if (enable_wmp) {
  259.     strlcat(MimeTypes,
  260.     "application/asx:*:Media Files;"
  261.     "video/x-ms-asf-plugin:*:Media Files;"
  262.     "video/x-msvideo:avi,*:AVI;"
  263.     "video/msvideo:avi,*:AVI;"
  264.     "application/x-download2:*:Media Files;"
  265.     "application/x-ms-wmv:wmv,*:Microsoft WMV video;"
  266.     "video/x-ms-asf:asf,asx,*:Media Files;"
  267.     "video/x-ms-wm:wm,*:Media Files;"
  268.     "video/x-ms-wmv:wmv,*:Microsoft WMV video;"
  269.     "audio/x-ms-wmv:wmv,*:Windows Media;"
  270.     "video/x-ms-wmp:wmp,*:Windows Media;"
  271.     "video/x-ms-wvx:wvx,*:Windows Media;"
  272.     "audio/x-ms-wax:wax,*:Windows Media;"
  273.     "audio/x-ms-wma:wma,*:Windows Media;"
  274.     "application/x-drm-v2:asx,*:Windows Media;"
  275.     "audio/wav:wav,*:Microsoft wave file;"
  276.     "audio/x-wav:wav,*:Microsoft wave file;",
  277.     sizeof(MimeTypes));
  278. }
  279. #endif
  280. #ifdef RM
  281. if (enable_rm) {
  282.     strlcat(MimeTypes,
  283.     "audio/x-pn-realaudio:ram,rm:RealAudio;"
  284.     "application/vnd.rn-realmedia:rm:RealMedia;"
  285.     "application/vnd.rn-realaudio:ra,ram:RealAudio;"
  286.     "video/vnd.rn-realvideo:rv:RealVideo;"
  287.     "audio/x-realaudio:ra:RealAudio;", sizeof(MimeTypes));
  288.     if (enable_helix)
  289. strlcat(MimeTypes,
  290. "audio/x-pn-realaudio-plugin:rpm:RealAudio;",
  291. sizeof(MimeTypes));
  292.     if (enable_smil)
  293. strlcat(MimeTypes,
  294. "application/smil:smil:SMIL;", sizeof(MimeTypes));
  295. }
  296. #endif
  297. #ifdef STD
  298. if (enable_mpeg) {
  299.     strlcat(MimeTypes,
  300.     "video/mpeg:mpg,mpeg:MPEG;"
  301.     "audio/mpeg:mpg,mpeg:MPEG;"
  302.     "video/x-mpeg:mpg,mpeg:MPEG;"
  303.     "video/x-mpeg2:mpv2,mp2ve:MPEG2;"
  304.     "audio/mpeg:mpg,mpeg:MPEG;"
  305.     "audio/x-mpeg:mpg,mpeg:MPEG;"
  306.     "audio/mpeg2:mp2:MPEG audio;"
  307.     "audio/x-mpeg2:mp2:MPEG audio;"
  308.     "video/mp4:mp4:MPEG 4 Video;", sizeof(MimeTypes));
  309.     if (enable_mp3)
  310. strlcat(MimeTypes,
  311. "audio/mpeg3:mp3:MPEG audio;"
  312. "audio/x-mpeg3:mp3:MPEG audio;"
  313. "audio/x-mpegurl:m3u:MPEG url;"
  314. "audio/mp3:mp3:MPEG audio;", sizeof(MimeTypes));
  315. }
  316. if (enable_ogg) {
  317.     strlcat(MimeTypes,
  318.     "application/x-ogg:ogg:Ogg Vorbis Media;"
  319.     "audio/ogg:ogg:Ogg Vorbis Audio;"
  320.     "application/ogg:ogg:Ogg Vorbis / Ogg Theora;",
  321.     sizeof(MimeTypes));
  322. }
  323. // FLI
  324. strlcat(MimeTypes,
  325. "video/fli:fli,flc:FLI animation;"
  326. "video/x-fli:fli,flc:FLI animation;", sizeof(MimeTypes));
  327. // Vivo
  328. strlcat(MimeTypes, "video/vnd.vivo:viv,vivo:VivoActive;",
  329. sizeof(MimeTypes));
  330. // NSV
  331. strlcat(MimeTypes,
  332. "application/x-nsv-vp3-mp3:nsv:Nullsoft Streaming Video;",
  333. sizeof(MimeTypes));
  334. // Soundtracker
  335. strlcat(MimeTypes,
  336. "audio/x-mod:mod:Soundtracker;",
  337. sizeof(MimeTypes));
  338.     
  339.   // Basic
  340. strlcat(MimeTypes,
  341. "audio/basic:au,snd:Basic Audio File;"
  342. "audio/x-basic:au,snd:Basic Audio File;",
  343. sizeof(MimeTypes));
  344. // MIDI
  345. if (enable_midi) {
  346.     strlcat(MimeTypes,
  347.     "audio/midi:mid,midi,kar:MIDI Audio;",
  348.     sizeof(MimeTypes));
  349. }
  350. // PLS
  351. if (enable_pls) {
  352.     strlcat(MimeTypes,
  353.     "audio/x-scpls:pls:Shoutcast Playlist;",
  354.     sizeof(MimeTypes));
  355. }
  356. #endif
  357. // Google Video
  358. #ifdef GMP
  359. if (enable_gmp) {
  360.     strlcat(MimeTypes,
  361.     "application/x-google-vlc-plugin::Google Video;",
  362.     sizeof(MimeTypes));
  363. }
  364. #endif
  365. #ifdef DVX
  366.        // DIVX
  367.      if (enable_dvx) {
  368. strlcat(MimeTypes,
  369. "video/divx:divx:DivX Media Format;"
  370. "video/vnd.divx:divx:DivX Media Format;",
  371. sizeof(MimeTypes));
  372. }
  373. #endif    
  374.     
  375.     
  376.     }
  377.     ret = strdup(MimeTypes);
  378.     if (DEBUG)
  379. printf("%sn", ret);
  380.     DEBUG = 0;
  381.     return ret;
  382. }
  383. NPError GetValue(NPPVariable variable, void *value)
  384. {
  385.     NPError err = NPERR_NO_ERROR;
  386.     DEBUG = 0; // set to 1 when debugging this function
  387.     // some sites use this description to figure out what formats can be played. So we have to make sure the 
  388.     // description matches the features
  389.     if (variable == NPPVpluginNameString) {
  390. #ifdef STD
  391. *((const char **) value) = "downloadplug-in " PACKAGE_VERSION;
  392. #endif
  393. #ifdef WMP
  394. *((const char **) value) = "Windows Media Player Plugin";
  395. #endif
  396. #ifdef QT
  397. *((const char **) value) = "QuickTime Plug-in 6.0 / 7";
  398. #endif
  399. #ifdef RM
  400. *((const char **) value) = "RealPlayer 9";
  401. #endif
  402. #ifdef GMP
  403. *((const char **) value) = "Google VLC multimedia plugin 1.0";
  404. #endif
  405. #ifdef DVX
  406. *((const char **) value) = "DivX Browser Plug-In";
  407. #endif
  408.     }
  409.     if (variable == NPPVpluginDescriptionString) {
  410. #ifdef GTK2_ENABLED
  411. *((const char **) value) =
  412.     "<br>Download Plugin for Firefox<br>";
  413. #endif
  414. #ifdef GTK1_ENABLED
  415. *((const char **) value) =
  416.     "downloadplug-in"
  417.     PACKAGE_VERSION
  418.     "<br>Download Plugin for Firefox<br>";
  419. #endif
  420. #ifdef X_ENABLED
  421. *((const char **) value) =
  422.             "downloadplug-in"
  423.             PACKAGE_VERSION
  424.             "<br>Download Plugin for Firefox<br>";
  425. #endif
  426.     }
  427.     if (variable == NPPVpluginNeedsXEmbed) {
  428. #ifdef GTK2_ENABLED
  429. *((PRBool *) value) = PR_FALSE;
  430. #endif
  431. #ifdef GTK1_ENABLED
  432. *((PRBool *) value) = PR_TRUE;
  433. #endif
  434.     }
  435.     if ((variable != NPPVpluginNameString)
  436. && (variable != NPPVpluginDescriptionString)
  437. && (variable != NPPVpluginNeedsXEmbed)) {
  438. err = NPERR_GENERIC_ERROR;
  439.     }
  440.     DEBUG = 0;
  441.     return err;
  442. }
  443. void New(nsPluginInstance * instance, nsPluginCreateData * parameters)
  444. {
  445.     int i;
  446.     int real_master_console = 0;
  447.     char parse[1000];
  448.     char *cp;
  449.     if (DEBUG)
  450. printf("mimetype: %sn", parameters->type);
  451.     instance->mode = parameters->mode;
  452.     instance->mInstance = parameters->instance;
  453.     instance->mimetype = strdup(parameters->type);
  454. /*
  455.     if ((strstr(instance->mimetype, "mpeg") != NULL)
  456. || (strstr(instance->mimetype, "mp3") != NULL)) {
  457. instance->cache_percent = 100;
  458.     }
  459. */
  460.     if (parameters->mode == NP_EMBED) {
  461. if (DEBUG)
  462.     printf("Embedded moden");
  463. for (i = 0; i < parameters->argc; i++) {
  464.     if (DEBUG) {
  465. printf("Argument Name: %sn", parameters->argn[i]);
  466. printf("Argument Value: %sn", parameters->argv[i]);
  467.     }
  468.     if (parameters->argn[i] == NULL || parameters->argv[i] == NULL) {
  469. break;
  470.     }
  471.     if (strncasecmp(parameters->argn[i], "debug", 5) == 0) {
  472. lowercase(parameters->argv[i]);
  473. if (strstr(parameters->argv[i], "true")
  474.     || strstr(parameters->argv[i], "yes")
  475.     || strstr(parameters->argv[i], "1")) {
  476.     DEBUG = 0;
  477. }
  478.     }
  479.     if (strncasecmp(parameters->argn[i], "nocache", 7) == 0) {
  480. lowercase(parameters->argv[i]);
  481. if (strstr(parameters->argv[i], "true")
  482.     || strstr(parameters->argv[i], "yes")
  483.     || strstr(parameters->argv[i], "1")) {
  484.     instance->nomediacache = 1;
  485. }
  486.     }
  487.     if (strncasecmp(parameters->argn[i], "src", 3) == 0) {
  488. if (instance->fname != NULL) {
  489.     if (strcmp(instance->fname, parameters->argv[i]) != 0) {
  490. instance->url = strdup(parameters->argv[i]);
  491. if (strncasecmp(parameters->argv[i], "file://", 7)
  492.     == 0)
  493.     fullyQualifyURL(instance, parameters->argv[i],
  494.     instance->url);
  495. instance->state = STATE_HAVEURL;
  496.     }
  497. } else {
  498.     instance->url = strdup(parameters->argv[i]);
  499.     if (strncasecmp(parameters->argv[i], "file://", 7) ==
  500. 0)
  501. fullyQualifyURL(instance, parameters->argv[i],
  502. instance->url);
  503.     instance->state = STATE_HAVEURL;
  504. }
  505.     }
  506.     if (strncasecmp(parameters->argn[i], "type", 4) == 0) {
  507. if (instance->mimetype != NULL)
  508.     free(instance->mimetype);
  509. instance->mimetype = strdup(parameters->argv[i]);
  510.     }
  511.     if ((strncasecmp(parameters->argn[i], "filename", 8) == 0)
  512. || (strncasecmp(parameters->argn[i], "url", 3) == 0)
  513. || (strncasecmp(parameters->argn[i], "location", 8) == 0)) {
  514. if (instance->url != NULL) {
  515.     if (strcmp(instance->url, parameters->argv[i]) != 0) {
  516. instance->fname = strdup(parameters->argv[i]);
  517. if (strncasecmp(parameters->argv[i], "file://", 7)
  518.     == 0)
  519.     fullyQualifyURL(instance, parameters->argv[i],
  520.     instance->fname);
  521. instance->state = STATE_HAVEURL;
  522.     }
  523. } else {
  524.     instance->fname = strdup(parameters->argv[i]);
  525.     if (strncasecmp(parameters->argv[i], "file://", 7) ==
  526. 0)
  527. fullyQualifyURL(instance, parameters->argv[i],
  528. instance->fname);
  529.     instance->state = STATE_HAVEURL;
  530. }
  531.     }
  532.     if ((strncasecmp(parameters->argn[i], "href", 4) == 0)
  533. || (strncasecmp(parameters->argn[i], "qtsrc", 5) == 0)) {
  534. instance->href = strdup(parameters->argv[i]);
  535. if (strncasecmp(parameters->argv[i], "file://", 7) == 0)
  536.     fullyQualifyURL(instance, parameters->argv[i],
  537.     instance->href);
  538. if (strstr(parameters->argv[i], "<") != NULL)
  539.     fullyQualifyURL(instance, parameters->argv[i],
  540.     instance->href);
  541. instance->state = STATE_HAVEURL;
  542.     }
  543.     if (strncasecmp(parameters->argn[i], "height", 6) == 0) {
  544. if (strstr(parameters->argv[i], "%") == NULL)
  545.     sscanf(parameters->argv[i], "%i",
  546.    &instance->embed_height);
  547.     }
  548.     if (strncasecmp(parameters->argn[i], "width", 5) == 0) {
  549. if (strstr(parameters->argv[i], "%") == NULL)
  550.     sscanf(parameters->argv[i], "%i",
  551.    &instance->embed_width);
  552.     }
  553.     if (strncasecmp(parameters->argn[i], "starttime", 9) == 0) {
  554. sscanf(parameters->argv[i], "%li", &instance->starttime);
  555.     }
  556.     if (strncasecmp(parameters->argn[i], "hidden", 6) == 0) {
  557. lowercase(parameters->argv[i]);
  558. if (DEBUG)
  559.     printf("argv[i]=%sn", parameters->argv[i]);
  560. if (strstr(parameters->argv[i], "true")
  561.     || strstr(parameters->argv[i], "yes")
  562.     || strstr(parameters->argv[i], "1")) {
  563.     instance->hidden = 1;
  564. } else {
  565.     instance->hidden = 0;
  566. }
  567. if (DEBUG)
  568.     printf("hidden=%in", instance->hidden);
  569.     }
  570.     if (strncasecmp
  571. (parameters->argn[i], "nopauseonhide",
  572.  strlen("nopauseonhide")) == 0) {
  573. lowercase(parameters->argv[i]);
  574. if (DEBUG)
  575.     printf("argv[i]=%sn", parameters->argv[i]);
  576. if (strstr(parameters->argv[i], "true")
  577.     || strstr(parameters->argv[i], "yes")
  578.     || strstr(parameters->argv[i], "1")) {
  579.     instance->nopauseonhide = 1;
  580. } else {
  581.     instance->nopauseonhide = 0;
  582. }
  583. if (DEBUG)
  584.     printf("hidden=%in", instance->hidden);
  585.     }
  586.     // target is used by Google Video to specifiy the URL to be played
  587.     // so we might have to do something here.
  588.     if (strncasecmp(parameters->argn[i], "target", 6) == 0) {
  589. if (strncasecmp(parameters->argv[i], "quicktimeplayer", 15)
  590.     == 0) {
  591. #ifdef GTK2_ENABLED
  592.     instance->targetplayer = 1;
  593. #endif
  594. #ifndef GTK2_ENABLED
  595.     instance->targetplayer = 0;
  596.     instance->noembed = 1;
  597. #endif
  598. }
  599. #ifdef GMP
  600. instance->fname = strdup(parameters->argv[i]);
  601. if (strncasecmp(parameters->argv[i], "file://", 7) == 0)
  602.     fullyQualifyURL(instance, parameters->argv[i],
  603.     instance->url);
  604. instance->state = STATE_HAVEURL;
  605. #endif
  606.     }
  607.     /* handle 'scale' attribute used by QT instance */
  608.     if (strncasecmp(parameters->argn[i], "scale", 5) == 0) {
  609. if (strncasecmp(parameters->argv[i], "aspect", 6) == 0) {
  610.     instance->maintain_aspect = 1;
  611. }
  612.     }
  613.     if ((strncasecmp(parameters->argn[i], "loop", 4) == 0)
  614. || (strncasecmp(parameters->argn[i], "autorewind", 10)
  615.     == 0)
  616. || (strncasecmp(parameters->argn[i], "repeat", 6) == 0)) {
  617. lowercase(parameters->argv[i]);
  618. if (DEBUG)
  619.     printf("argv[i]=%sn", parameters->argv[i]);
  620. if (strstr(parameters->argv[i], "true")
  621.     || strstr(parameters->argv[i], "yes")
  622.     || strstr(parameters->argv[i], "infinite")) {
  623.     instance->loop = 0; // 0 = infinite (like download)
  624. } else if (isdigit((int) *(parameters->argv[i]))) {
  625.     sscanf(parameters->argv[i], "%i", &instance->loop);
  626. } else {
  627.     instance->loop = -1; // -1 = loop disabled
  628. }
  629. if (DEBUG)
  630.     printf("loop=%in", instance->loop);
  631.     }
  632.     if ((strncasecmp(parameters->argn[i], "autostart", 9) == 0)
  633. || (strncasecmp(parameters->argn[i], "autoplay", 8) == 0)) {
  634. lowercase(parameters->argv[i]);
  635. if (DEBUG)
  636.     printf("argv[i]=%sn", parameters->argv[i]);
  637. if (strstr(parameters->argv[i], "true")
  638.     || strstr(parameters->argv[i], "yes")
  639.     || strstr(parameters->argv[i], "1")) {
  640.     // instance->autostart = 1;
  641. } else {
  642.     instance->autostart = 0;
  643. }
  644. if (DEBUG)
  645.     printf("autostart=%in", instance->autostart);
  646.     }
  647.     if ((strncasecmp(parameters->argn[i], "showcontrols", 12)
  648.  == 0)
  649. || ((strncasecmp(parameters->argn[i], "controls", 8) == 0)
  650.     && (strstr(instance->mimetype, "quicktime") != NULL))) {
  651. lowercase(parameters->argv[i]);
  652. if (DEBUG)
  653.     printf("argv[i]=%sn", parameters->argv[i]);
  654. if (strstr(parameters->argv[i], "true")
  655.     || strstr(parameters->argv[i], "yes")
  656.     || strstr(parameters->argv[i], "1")) {
  657.     instance->showcontrols = 1;
  658. } else {
  659.     instance->showcontrols = 0;
  660. }
  661. if (DEBUG)
  662.     printf("showcontrols=%in", instance->showcontrols);
  663.     }
  664.     if (strncasecmp(parameters->argn[i], "showtracker", 11) == 0) {
  665. lowercase(parameters->argv[i]);
  666. if (DEBUG)
  667.     printf("argv[i]=%sn", parameters->argv[i]);
  668. if (strstr(parameters->argv[i], "true")
  669.     || strstr(parameters->argv[i], "yes")
  670.     || strstr(parameters->argv[i], "1")) {
  671.     instance->showtracker = 1;
  672. } else {
  673.     instance->showtracker = 0;
  674. }
  675. if (DEBUG)
  676.     printf("showtracker=%in", instance->showtracker);
  677.     }
  678.     if (strncasecmp(parameters->argn[i], "showbuttons", 11) == 0) {
  679. lowercase(parameters->argv[i]);
  680. if (DEBUG)
  681.     printf("argv[i]=%sn", parameters->argv[i]);
  682. if (strstr(parameters->argv[i], "true")
  683.     || strstr(parameters->argv[i], "yes")
  684.     || strstr(parameters->argv[i], "1")) {
  685.     instance->showbuttons = 1;
  686. } else {
  687.     instance->showbuttons = 0;
  688. }
  689. if (DEBUG)
  690.     printf("showbuttons=%in", instance->showbuttons);
  691.     }
  692.     if (strncasecmp(parameters->argn[i], "showfsbutton", 12) == 0) {
  693. lowercase(parameters->argv[i]);
  694. if (DEBUG)
  695.     printf("argv[i]=%sn", parameters->argv[i]);
  696. if (strstr(parameters->argv[i], "true")
  697.     || strstr(parameters->argv[i], "yes")
  698.     || strstr(parameters->argv[i], "1")) {
  699.     instance->showfsbutton = 1;
  700. } else {
  701.     instance->showfsbutton = 0;
  702. }
  703. if (DEBUG)
  704.     printf("showfsbutton=%in", instance->showfsbutton);
  705.     }
  706.     if (strncasecmp(parameters->argn[i], "showlogo", 8) == 0) {
  707. lowercase(parameters->argv[i]);
  708. if (DEBUG)
  709.     printf("argv[i]=%sn", parameters->argv[i]);
  710. if (strstr(parameters->argv[i], "false")
  711.     || strstr(parameters->argv[i], "no")
  712.     || strstr(parameters->argv[i], "0")) {
  713.     instance->showlogo = 0;
  714. } else {
  715.     instance->showlogo = 1;
  716. }
  717. if (DEBUG)
  718.     printf("showlogo=%in", instance->showlogo);
  719.     }
  720.     if (strncasecmp(parameters->argn[i], "enablecontextmenu", 8) == 0) {
  721. lowercase(parameters->argv[i]);
  722. if (DEBUG)
  723.     printf("argv[i]=%sn", parameters->argv[i]);
  724. if (strstr(parameters->argv[i], "false")
  725.     || strstr(parameters->argv[i], "no")
  726.     || strstr(parameters->argv[i], "0")) {
  727.     instance->enablecontextmenu = 0;
  728. } else {
  729.     instance->enablecontextmenu = 1;
  730. }
  731. if (DEBUG)
  732.     printf("enablecontextmenu=%in", instance->enablecontextmenu);
  733.     }
  734.     if ((strncasecmp(parameters->argn[i], "controls", 8) == 0)
  735. && (strstr(instance->mimetype, "quicktime") == NULL)) {
  736. lowercase(parameters->argv[i]);
  737. if (DEBUG)
  738.     printf("argv[i]=%sn", parameters->argv[i]);
  739. if (strstr(parameters->argv[i], "statusfield")
  740.     || strstr(parameters->argv[i], "statuspanel")
  741.     || strstr(parameters->argv[i], "playbutton")
  742.     || strstr(parameters->argv[i], "volumeslider")
  743.     || strstr(parameters->argv[i], "stopbutton")
  744.     || strstr(parameters->argv[i], "positionslider")) {
  745.     instance->controlwindow = 1;
  746. } else {
  747.     instance->controlwindow = 0;
  748. }
  749. if (strstr(parameters->argv[i], "controlpanel")
  750.     || strstr(parameters->argv[i], "statusbar")) {
  751.     instance->showcontrols = 1;
  752.     if (instance_counter > 1)
  753. instance->controlwindow = 1;
  754. }
  755. if (strstr(parameters->argv[i], "imagewindow")
  756.     || strstr(parameters->argv[i], "true")
  757.     || strstr(parameters->argv[i], "yes")
  758.     || strstr(parameters->argv[i], "1")
  759.     || strstr(parameters->argv[i], "all")) {
  760.     instance->controlwindow = 0;
  761. }
  762. if (DEBUG)
  763.     printf("controlwindow=%in", instance->controlwindow);
  764.     }
  765.     if ((strncasecmp(parameters->argn[i], "console", 7) == 0)
  766. && (strstr(instance->mimetype, "quicktime") == NULL)) {
  767. lowercase(parameters->argv[i]);
  768. if (DEBUG)
  769.     printf("argv[i]=%sn", parameters->argv[i]);
  770. if (strstr(parameters->argv[i], "_master")) {
  771.     real_master_console = 1;
  772. } else {
  773.     real_master_console = 0;
  774. }
  775.     }
  776.     if ((strncasecmp
  777.  (parameters->argn[i], "onmediacomplete", 15) == 0)
  778. || (strncasecmp(parameters->argn[i], "onendofstream", 13)
  779.     == 0)) {
  780. instance->mediaCompleteCallback =
  781.     (char *) NPN_MemAlloc(strlen(parameters->argv[i]) +
  782.   12);
  783. if (strncasecmp(parameters->argv[i], "javascript:", 11)
  784.     == 0) {
  785.     snprintf(instance->mediaCompleteCallback,
  786.      strlen(parameters->argv[i]), "%s",
  787.      parameters->argv[i]);
  788. } else {
  789.     snprintf(instance->mediaCompleteCallback,
  790.      strlen(parameters->argv[i]) + 12,
  791.      "javascript:%s", parameters->argv[i]);
  792. }
  793. if (DEBUG)
  794.     printf("mediaCompleteCallback=%sn",
  795.    instance->mediaCompleteCallback);
  796.     }
  797.     if (strncasecmp
  798. (parameters->argn[i], "onmediacompletewitherror",
  799.  24) == 0) {
  800. instance->mediaCompleteWithErrorCallback =
  801.     (char *) NPN_MemAlloc(strlen(parameters->argv[i]) +
  802.   12);
  803. if (strncasecmp(parameters->argv[i], "javascript:", 11)
  804.     == 0) {
  805.     snprintf(instance->mediaCompleteWithErrorCallback,
  806.      strlen(parameters->argv[i]), "%s",
  807.      parameters->argv[i]);
  808. } else {
  809.     snprintf(instance->mediaCompleteWithErrorCallback,
  810.      strlen(parameters->argv[i]) + 12,
  811.      "javascript:%s", parameters->argv[i]);
  812. }
  813. if (DEBUG)
  814.     printf("mediaCompleteWithErrorCallback=%sn",
  815.    instance->mediaCompleteWithErrorCallback);
  816.     }
  817.     if (strncasecmp(parameters->argn[i], "onclick", 7) == 0) {
  818. instance->mouseClickCallback =
  819.     (char *) NPN_MemAlloc(strlen(parameters->argv[i]) +
  820.   12);
  821. if (strncasecmp(parameters->argv[i], "javascript:", 11)
  822.     == 0) {
  823.     snprintf(instance->mouseClickCallback,
  824.      strlen(parameters->argv[i]), "%s",
  825.      parameters->argv[i]);
  826. } else {
  827.     snprintf(instance->mouseClickCallback,
  828.      strlen(parameters->argv[i]) + 12,
  829.      "javascript:%s", parameters->argv[i]);
  830. }
  831. if (DEBUG)
  832.     printf("mouseClickCallback=%sn",
  833.    instance->mouseClickCallback);
  834.     }
  835.     if (strncasecmp(parameters->argn[i], "onmousedown", 11) == 0) {
  836. instance->mouseDownCallback =
  837.     (char *) NPN_MemAlloc(strlen(parameters->argv[i]) +
  838.   12);
  839. if (strncasecmp(parameters->argv[i], "javascript:", 11)
  840.     == 0) {
  841.     snprintf(instance->mouseDownCallback,
  842.      strlen(parameters->argv[i]), "%s",
  843.      parameters->argv[i]);
  844. } else {
  845.     snprintf(instance->mouseDownCallback,
  846.      strlen(parameters->argv[i]) + 12,
  847.      "javascript:%s", parameters->argv[i]);
  848. }
  849. if (DEBUG)
  850.     printf("mouseDownCallback=%sn",
  851.    instance->mouseDownCallback);
  852.     }
  853.     if (strncasecmp(parameters->argn[i], "onmouseup", 9) == 0) {
  854. instance->mouseUpCallback =
  855.     (char *) NPN_MemAlloc(strlen(parameters->argv[i]) +
  856.   12);
  857. if (strncasecmp(parameters->argv[i], "javascript:", 11)
  858.     == 0) {
  859.     snprintf(instance->mouseUpCallback,
  860.      strlen(parameters->argv[i]), "%s",
  861.      parameters->argv[i]);
  862. } else {
  863.     snprintf(instance->mouseUpCallback,
  864.      strlen(parameters->argv[i]) + 12,
  865.      "javascript:%s", parameters->argv[i]);
  866. }
  867. if (DEBUG)
  868.     printf("mouseUpCallback=%sn",
  869.    instance->mouseUpCallback);
  870.     }
  871.     if (strncasecmp(parameters->argn[i], "onmouseover", 11) == 0) {
  872. instance->mouseEnterCallback =
  873.     (char *) NPN_MemAlloc(strlen(parameters->argv[i]) +
  874.   12);
  875. if (strncasecmp(parameters->argv[i], "javascript:", 11)
  876.     == 0) {
  877.     snprintf(instance->mouseEnterCallback,
  878.      strlen(parameters->argv[i]), "%s",
  879.      parameters->argv[i]);
  880. } else {
  881.     snprintf(instance->mouseEnterCallback,
  882.      strlen(parameters->argv[i]) + 12,
  883.      "javascript:%s", parameters->argv[i]);
  884. }
  885. if (DEBUG)
  886.     printf("mouseEnterCallback=%sn",
  887.    instance->mouseEnterCallback);
  888.     }
  889.     if (strncasecmp(parameters->argn[i], "onmouseout", 10) == 0) {
  890. instance->mouseLeaveCallback =
  891.     (char *) NPN_MemAlloc(strlen(parameters->argv[i]) +
  892.   12);
  893. if (strncasecmp(parameters->argv[i], "javascript:", 11)
  894.     == 0) {
  895.     snprintf(instance->mouseLeaveCallback,
  896.      strlen(parameters->argv[i]), "%s",
  897.      parameters->argv[i]);
  898. } else {
  899.     snprintf(instance->mouseLeaveCallback,
  900.      strlen(parameters->argv[i]) + 12,
  901.      "javascript:%s", parameters->argv[i]);
  902. }
  903. if (DEBUG)
  904.     printf("mouseLeaveCallback=%sn",
  905.    instance->mouseLeaveCallback);
  906.     }
  907.     if (strncasecmp
  908. (parameters->argn[i], "onvisible",
  909.  strlen("onvisible")) == 0) {
  910. instance->onVisibleCallback =
  911.     (char *) NPN_MemAlloc(strlen(parameters->argv[i]) +
  912.   12);
  913. if (strncasecmp(parameters->argv[i], "javascript:", 11)
  914.     == 0) {
  915.     snprintf(instance->onVisibleCallback,
  916.      strlen(parameters->argv[i]), "%s",
  917.      parameters->argv[i]);
  918. } else {
  919.     snprintf(instance->onVisibleCallback,
  920.      strlen(parameters->argv[i]) + 12,
  921.      "javascript:%s", parameters->argv[i]);
  922. }
  923. if (DEBUG)
  924.     printf("onVisibleCallback=%sn",
  925.    instance->onVisibleCallback);
  926.     }
  927.     if (strncasecmp
  928. (parameters->argn[i], "onhidden",
  929.  strlen("onhidden")) == 0) {
  930. instance->onHiddenCallback =
  931.     (char *) NPN_MemAlloc(strlen(parameters->argv[i]) +
  932.   12);
  933. if (strncasecmp(parameters->argv[i], "javascript:", 11)
  934.     == 0) {
  935.     snprintf(instance->onHiddenCallback,
  936.      strlen(parameters->argv[i]), "%s",
  937.      parameters->argv[i]);
  938. } else {
  939.     snprintf(instance->onHiddenCallback,
  940.      strlen(parameters->argv[i]) + 12,
  941.      "javascript:%s", parameters->argv[i]);
  942. }
  943. if (DEBUG)
  944.     printf("onHiddenCallback=%sn",
  945.    instance->onHiddenCallback);
  946.     }
  947.     if (strncasecmp
  948. (parameters->argn[i], "ondestroy",
  949.  strlen("ondestroy")) == 0) {
  950. instance->onDestroyCallback =
  951.     (char *) NPN_MemAlloc(strlen(parameters->argv[i]) +
  952.   12);
  953. if (strncasecmp(parameters->argv[i], "javascript:", 11)
  954.     == 0) {
  955.     snprintf(instance->onDestroyCallback,
  956.      strlen(parameters->argv[i]), "%s",
  957.      parameters->argv[i]);
  958. } else {
  959.     snprintf(instance->onDestroyCallback,
  960.      strlen(parameters->argv[i]) + 12,
  961.      "javascript:%s", parameters->argv[i]);
  962. }
  963. if (DEBUG)
  964.     printf("onDestroyCallback=%sn",
  965.    instance->onDestroyCallback);
  966.     }
  967.     if (instance->nQtNext < 256
  968. && (strncasecmp(parameters->argn[i], "qtnext", 6) == 0)
  969. && parameters->argv[i][0] == '<') {
  970. snprintf(parse, 1000, "%s",
  971.  strtok(&parameters->argv[i][1], ">"));
  972. if ((cp = strchr(parse, ' '))
  973.     && strlen(parse) == (unsigned int) (cp - parse + 1))
  974.     *cp = (char) NULL;
  975. instance->qtNext[instance->nQtNext++] = strdup(parse);
  976. snprintf(parse, 1000, "%s", strtok(NULL, "<"));
  977. if (strcmp(parse, "T")) {
  978.     if (DEBUG)
  979. printf
  980.     ("qtNext%i expected "T" found "%s"n",
  981.      instance->nQtNext, parse);
  982.     instance->nQtNext--;
  983. } else {
  984.     snprintf(parse, 1000, "%s", strtok(NULL, ">n"));
  985.     if (strcmp(parse, "myself")) {
  986. if (DEBUG)
  987.     printf
  988. ("qtNext%i expected "myself" found "%s"n",
  989.  instance->nQtNext, parse);
  990. instance->nQtNext--;
  991.     } else if (DEBUG)
  992. printf("qtNext%i=%sn",
  993.        instance->nQtNext,
  994.        instance->qtNext[instance->nQtNext - 1]);
  995. }
  996.     }
  997. }
  998. if (instance->controlwindow == 1 && real_master_console == 1)
  999.     instance->controlwindow = 0;
  1000. if (instance->controlwindow == 0) {
  1001.     if ((instance->fname != NULL)
  1002. && (!isMms(instance->fname, instance->nomediacache))) {
  1003. NPN_GetURL(parameters->instance, instance->fname, NULL);
  1004.     }
  1005. }
  1006. if (instance->targetplayer == 1 && instance->href == NULL) {
  1007.     instance->targetplayer = 0;
  1008. }
  1009.     } else {
  1010. if (DEBUG)
  1011.     printf("New, full mode %in", instance->mode);
  1012.     }
  1013.     return;
  1014. }
  1015. void LoadConfigFile(nsPluginInstance * instance)
  1016. {
  1017.     FILE *config;
  1018.     int i;
  1019.     char buffer[1000];
  1020.     char parse[1000];
  1021.     char config_name[3][1000];
  1022.     // load config file
  1023.     snprintf(config_name[0], 1000, "/etc/downloadplug-in.conf");
  1024.     snprintf(config_name[1], 1000, "%s", getenv("HOME"));
  1025.     strlcat(config_name[1], "/.mozilla/downloadplug-in.conf", 1000);
  1026.     snprintf(config_name[2], 1000, "%s", getenv("HOME"));
  1027.     strlcat(config_name[2], "/.download/downloadplug-in.conf", 1000);
  1028.     config = NULL;
  1029.     for (i = 0; i < 3; i++) {
  1030. config = fopen(config_name[i], "r");
  1031. if (config == NULL) {
  1032.     // no config file
  1033. } else {
  1034.     while (fgets(buffer, sizeof(buffer), config) != NULL) {
  1035. if ((strncasecmp(buffer, "cachesize", 9) == 0)
  1036.     || (strncasecmp(buffer, "cachemin", 8) == 0)) {
  1037.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1038.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1039.     sscanf(parse, "%i", &instance->cachesize);
  1040.     if (instance->cachesize < 0)
  1041. instance->cachesize = 0;
  1042.     if (instance->cachesize > 65535)
  1043. instance->cachesize = 65535;
  1044.     continue;
  1045. }
  1046. if (strncasecmp(buffer, "debug", 5) == 0) {
  1047.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1048.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1049.     sscanf(parse, "%i", &DEBUG);
  1050. //              if (DEBUG != 0)
  1051. //                  DEBUG = 0;
  1052.     continue;
  1053. }
  1054. if (strncasecmp(buffer, "showlogo", 8) == 0) {
  1055.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1056.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1057.     sscanf(parse, "%i", &instance->showlogo);
  1058.     if (instance->showlogo != 0)
  1059. instance->showlogo = 1;
  1060.     continue;
  1061. }
  1062. if (strncasecmp(buffer, "showtime", 8) == 0) {
  1063.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1064.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1065.     sscanf(parse, "%i", &instance->showtime);
  1066.     if (instance->showtime != 0)
  1067. instance->showtime = 1;
  1068.     continue;
  1069. }
  1070. if (strncasecmp(buffer, "hidestatus", 10) == 0) {
  1071.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1072.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1073.     sscanf(parse, "%i", &instance->hidestatus);
  1074.     if (instance->hidestatus != 0)
  1075. instance->hidestatus = 1;
  1076.     continue;
  1077. }
  1078. if (strncasecmp(buffer, "showstatus", 10) == 0) {
  1079.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1080.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1081.     // crappy reuse of the hidestatus variable
  1082.     sscanf(parse, "%i", &instance->hidestatus);
  1083.     // flip the logic here
  1084.     if (instance->hidestatus == 0) {
  1085. instance->hidestatus = 1;
  1086.     } else {
  1087. instance->hidestatus = 0;
  1088.     }
  1089.     continue;
  1090. }
  1091. if (strncasecmp(buffer, "showtracker", 11) == 0) {
  1092.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1093.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1094.     sscanf(parse, "%i", &instance->showtracker);
  1095.     if (instance->showtracker != 0)
  1096. instance->showtracker = 1;
  1097.     continue;
  1098. }
  1099. if (strncasecmp(buffer, "showcontrols", 12) == 0) {
  1100.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1101.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1102.     sscanf(parse, "%i", &instance->showcontrols);
  1103.     if (instance->showcontrols != 0)
  1104. instance->showcontrols = 1;
  1105.     continue;
  1106. }
  1107. if (strncasecmp(buffer, "novop", 5) == 0) {
  1108.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1109.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1110.     sscanf(parse, "%i", &instance->novop);
  1111.     if (instance->novop != 0)
  1112. instance->novop = 1;
  1113.     continue;
  1114. }
  1115. if (strncasecmp(buffer, "noembed", 7) == 0) {
  1116.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1117.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1118.     sscanf(parse, "%i", &instance->noembed);
  1119.     if (instance->noembed != 0)
  1120. instance->noembed = 1;
  1121.     continue;
  1122. }
  1123. if (strncasecmp(buffer, "nomediacache", 12) == 0) {
  1124.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1125.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1126.     sscanf(parse, "%i", &instance->nomediacache);
  1127.     if (instance->nomediacache != 0)
  1128. instance->nomediacache = 1;
  1129.     continue;
  1130. }
  1131. if (strncasecmp(buffer, "vopopt", 6) == 0) {
  1132.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1133.     snprintf(parse, 1000, "%s", strtok(NULL, "n"));
  1134.     instance->novop = 0;
  1135.     if (instance->vop != NULL)
  1136. free(instance->vop);
  1137.     instance->vop = strdup(parse);
  1138.     continue;
  1139. }
  1140. if (strncasecmp(buffer, "af", 2) == 0) {
  1141.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1142.     snprintf(parse, 1000, "%s", strtok(NULL, "n"));
  1143.     if (instance->af != NULL)
  1144. free(instance->af);
  1145.     instance->af = strdup(parse);
  1146.     continue;
  1147. }
  1148. if (strncasecmp(buffer, "prefer-aspect", 13) == 0) {
  1149.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1150.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1151.     sscanf(parse, "%i", &instance->maintain_aspect);
  1152.     if (instance->maintain_aspect != 0)
  1153. instance->maintain_aspect = 1;
  1154.     continue;
  1155. }
  1156. if (strncasecmp(buffer, "rtsp-use-tcp", 12) == 0) {
  1157.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1158.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1159.     sscanf(parse, "%i", &instance->rtsp_use_tcp);
  1160.     if (instance->rtsp_use_tcp != 0)
  1161. instance->rtsp_use_tcp = 1;
  1162.     continue;
  1163. }
  1164. if (strncasecmp(buffer, "rtsp-use-http", 13) == 0) {
  1165.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1166.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1167.     sscanf(parse, "%i", &instance->rtsp_use_http);
  1168.     if (instance->rtsp_use_http != 0)
  1169. instance->rtsp_use_http = 1;
  1170.     continue;
  1171. }
  1172. if (strncasecmp(buffer, "qt-speed", 8) == 0) {
  1173.     sprintf(parse, "%s", strtok(buffer, "="));
  1174.     sprintf(parse, "%s", strtok(NULL, "="));
  1175.     if (strncasecmp(parse, "low", 3) == 0)
  1176. instance->qt_speed = SPEED_LOW;
  1177.     if (strncasecmp(parse, "medium", 6) == 0)
  1178. instance->qt_speed = SPEED_MED;
  1179.     if (strncasecmp(parse, "high", 4) == 0)
  1180. instance->qt_speed = SPEED_HIGH;
  1181.     if (DEBUG)
  1182. printf("QT Speed: %in", instance->qt_speed);
  1183.     continue;
  1184. }
  1185. if (strncasecmp(buffer, "vo", 2) == 0) {
  1186.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1187.     snprintf(parse, 1000, "%s", strtok(NULL, "=n"));
  1188.     if (instance->vo != NULL)
  1189. free(instance->vo);
  1190.     if (strstr(parse, "`") == NULL) // don't allow shell commands
  1191. instance->vo = strdup(parse);
  1192.     continue;
  1193. }
  1194. if (strncasecmp(buffer, "ao", 2) == 0) {
  1195.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1196.     snprintf(parse, 1000, "%s", strtok(NULL, "n"));
  1197.     if (instance->ao != NULL)
  1198. free(instance->ao);
  1199.     if (strstr(parse, "`") == NULL) // don't allow shell commands
  1200. instance->ao = strdup(parse);
  1201.     continue;
  1202. }
  1203. if (strncasecmp(buffer, "display", 7) == 0) {
  1204.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1205.     snprintf(parse, 1000, "%s", strtok(NULL, "=n"));
  1206.     if (instance->output_display != NULL)
  1207. free(instance->output_display);
  1208.     if (strstr(parse, "`") == NULL) // don't allow shell commands
  1209. instance->output_display = strdup(parse);
  1210.     continue;
  1211. }
  1212. if (strncasecmp(buffer, "dload-dir", 9) == 0) {
  1213.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1214.     snprintf(parse, 1000, "%s", strtok(NULL, "=n"));
  1215.     if (strstr(parse, "$HOME") != NULL) {
  1216. snprintf(buffer, sizeof(buffer), "%s%s",
  1217.  getenv("HOME"), parse + 5);
  1218. strlcpy(parse, buffer, sizeof(parse));
  1219.     }
  1220.     if (instance->download_dir != NULL)
  1221. free(instance->download_dir);
  1222.     instance->download_dir = strdup(parse);
  1223.     mkdir(instance->download_dir, 0777);
  1224.     continue;
  1225. }
  1226. if (strncasecmp(buffer, "keep-download", 13) == 0) {
  1227.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1228.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1229.     sscanf(parse, "%i", &instance->keep_download);
  1230.     if (instance->keep_download != 0)
  1231. instance->keep_download = 1;
  1232.     continue;
  1233. }
  1234. if (strncasecmp(buffer, "framedrop", 9) == 0) {
  1235.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1236.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1237.     sscanf(parse, "%i", &instance->framedrop);
  1238.     if (instance->framedrop != 0)
  1239. instance->framedrop = 1;
  1240.     continue;
  1241. }
  1242. if (strncasecmp(buffer, "autosync", 8) == 0) {
  1243.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1244.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1245.     sscanf(parse, "%i", &instance->autosync);
  1246.     if (instance->autosync < 0)
  1247. instance->autosync = 0;
  1248.     continue;
  1249. }
  1250. if ((strncasecmp(buffer, "autoplay", 8) == 0)
  1251.     || (strncasecmp(buffer, "autostart", 9) == 0)) {
  1252.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1253.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1254.     sscanf(parse, "%i", &instance->autostart);
  1255.     if (instance->autostart < 0)
  1256. instance->autostart = 0;
  1257.     continue;
  1258. }
  1259. if (strncasecmp(buffer, "mc", 2) == 0) {
  1260.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1261.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1262.     sscanf(parse, "%i", &instance->mc);
  1263.     if (instance->mc < 0)
  1264. instance->mc = 0;
  1265.     continue;
  1266. }
  1267. if (strncasecmp(buffer, "black-background", 16) == 0) {
  1268.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1269.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1270.     sscanf(parse, "%i", &instance->black_background);
  1271.     if (instance->black_background != 0)
  1272. instance->black_background = 1;
  1273.     continue;
  1274. }
  1275. if (strncasecmp(buffer, "nomouseinput", 12) == 0) {
  1276.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1277.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1278.     sscanf(parse, "%i", &instance->nomouseinput);
  1279.     if (instance->nomouseinput != 0)
  1280. instance->nomouseinput = 1;
  1281.     continue;
  1282. }
  1283. if (strncasecmp(buffer, "noconsolecontrols", 17) == 0) {
  1284.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1285.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1286.     sscanf(parse, "%i", &instance->noconsolecontrols);
  1287.     if (instance->noconsolecontrols != 0)
  1288. instance->noconsolecontrols = 1;
  1289.     continue;
  1290. }
  1291. if (strncasecmp(buffer, "cookies", 7) == 0) {
  1292.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1293.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1294.     sscanf(parse, "%i", &instance->cookies);
  1295.     if (instance->cookies != 0)
  1296. instance->cookies = 1;
  1297.     continue;
  1298. }
  1299. if (strncasecmp
  1300.     (buffer, "nopauseonhide",
  1301.      strlen("nopauseonhide")) == 0) {
  1302.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1303.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1304.     sscanf(parse, "%i", &instance->nopauseonhide);
  1305.     if (instance->nopauseonhide != 0)
  1306. instance->nopauseonhide = 1;
  1307.     continue;
  1308. }
  1309. if (strncasecmp(buffer, "osdlevel", 8) == 0) {
  1310.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1311.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1312.     sscanf(parse, "%i", &instance->osdlevel);
  1313.     if (instance->osdlevel < 0)
  1314. instance->osdlevel = 0;
  1315.     if (instance->osdlevel > 3)
  1316. instance->osdlevel = 3;
  1317. }
  1318. if (strncasecmp(buffer, "cache-percent", 13) == 0) {
  1319.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1320.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1321.     sscanf(parse, "%i", &instance->cache_percent);
  1322.     if (instance->cache_percent < 0)
  1323. instance->cache_percent = 0;
  1324.     if (instance->cache_percent > 100)
  1325. instance->cache_percent = 100;
  1326. }
  1327. if (strncasecmp(buffer, "user-agent", 10) == 0) {
  1328.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1329.     snprintf(parse, 1000, "%s", strtok(NULL, "=n"));
  1330.     if (instance->useragent != NULL)
  1331. free(instance->useragent);
  1332.     if (strstr(parse, "`") == NULL) // don't allow shell commands
  1333. instance->useragent = strdup(parse);
  1334.     continue;
  1335. }
  1336. // SMIL
  1337. if (strncasecmp(buffer, "enable-smil", 11) == 0) {
  1338.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1339.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1340.     sscanf(parse, "%i", &instance->enable_smil);
  1341.     if (DEBUG)
  1342. printf("smil:%in", instance->enable_smil);
  1343.     continue;
  1344. }
  1345. // Helix RPM MimeType
  1346. if (strncasecmp(buffer, "enable-helix", 12) == 0) {
  1347.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1348.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1349.     sscanf(parse, "%i", &instance->enable_helix);
  1350.     if (DEBUG)
  1351. printf("helix:%in", instance->enable_helix);
  1352.     continue;
  1353. }
  1354. // Windows Media Player
  1355. if (strncasecmp(buffer, "enable-wmp", 10) == 0) {
  1356.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1357.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1358.     sscanf(parse, "%i", &instance->enable_wmp);
  1359.     if (DEBUG)
  1360. printf("wmp:%in", instance->enable_wmp);
  1361.     continue;
  1362. }
  1363. // QuickTime
  1364. if (strncasecmp(buffer, "enable-qt", 9) == 0) {
  1365.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1366.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1367.     sscanf(parse, "%i", &instance->enable_qt);
  1368.     if (DEBUG)
  1369. printf("qt:%in", instance->enable_qt);
  1370.     continue;
  1371. }
  1372. // RealMedia
  1373. if (strncasecmp(buffer, "enable-rm", 9) == 0) {
  1374.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1375.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1376.     sscanf(parse, "%i", &instance->enable_rm);
  1377.     if (DEBUG)
  1378. printf("rm:%in", instance->enable_rm);
  1379.     continue;
  1380. }
  1381. // Google Media Player
  1382. if (strncasecmp(buffer, "enable-gmp", 10) == 0) {
  1383.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1384.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1385.     sscanf(parse, "%i", &instance->enable_gmp);
  1386.     if (DEBUG)
  1387. printf("gmp:%in", instance->enable_gmp);
  1388.     continue;
  1389. }
  1390. // MP3
  1391. if (strncasecmp(buffer, "enable-mp3", 10) == 0) {
  1392.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1393.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1394.     sscanf(parse, "%i", &instance->enable_mp3);
  1395.     if (DEBUG)
  1396. printf("mp3:%in", instance->enable_mp3);
  1397.     continue;
  1398. }
  1399. // MIDI
  1400. if (strncasecmp(buffer, "enable-midi", 11) == 0) {
  1401.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1402.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1403.     sscanf(parse, "%i", &instance->enable_midi);
  1404.     if (DEBUG)
  1405. printf("midi:%in", instance->enable_midi);
  1406.     continue;
  1407. }
  1408. // PLS
  1409. if (strncasecmp(buffer, "enable-pls", 10) == 0) {
  1410.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1411.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1412.     sscanf(parse, "%i", &instance->enable_pls);
  1413.     if (DEBUG)
  1414. printf("pls:%in", instance->enable_pls);
  1415.     continue;
  1416. }
  1417. // Ogg
  1418. if (strncasecmp(buffer, "enable-ogg", 10) == 0) {
  1419.     snprintf(parse, 1000, "%s", strtok(buffer, "="));
  1420.     snprintf(parse, 1000, "%s", strtok(NULL, "="));
  1421.     sscanf(parse, "%i", &instance->enable_ogg);
  1422.     if (DEBUG)
  1423. printf("ogg:%in", instance->enable_ogg);
  1424.     continue;
  1425. }
  1426.     }
  1427.     fclose(config);
  1428. }
  1429.     }
  1430.     if (instance->useragent == NULL)
  1431. instance->useragent = strdup("NSPlayer");
  1432.     if (instance->download_dir == NULL && instance->keep_download == 1)
  1433. instance->download_dir = strdup(getenv("HOME"));
  1434. }