Firefox e Amulecmd (AmuleGUI) - Linux version
Ecco, finalmente la versione per linux dello stesso programma che ho creato per Windows (leggi qui).
Il programma risolve il problema che genera Firefox nel passare i link ed2k al programma amulecmd, sostituendo alcuni caratteri speciali con l’equivalente esadecimale.
Il programma ed2k_remote (scaricatelo già compilato qui), lo potete copiare direttamente in /usr/bin, con i permessi 755
Il programma necessita di un file di configurazione, da copiare in “~/.ed2k_remote/” chiamato ed2k_remote.ini.
Il file ed2k_remote.ini deve necessariamente essere come illustrato di seguito, altrimenti per il programma sarà impossibile trovare l’IP del server aMule e la password di ingresso.
indirizzo_ip=192.168.1.XXX password=MiaPassword
Questo è il sorgente del programma:
/*------------------------------------------------------ | | | Il seguente software è rilasciato sotto licenza GPL | | Autore = Xavio - (xavio2000REMOVE_ME@gmail.com) | | | ------------------------------------------------------*/ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include <cstdlib> #include <iostream> #include <fstream> #include <string> using namespace std; int sostituisci(string *stringa, string trovami, string sostituiscimi); int main(int argc, char *argv[]) { if (!(argc>1)) { cout << "Errore, nessun parametro passato!\n"; return 0; } string temp=getenv("HOME"); temp+="/.ed2k_remote/ed2k_remote.ini"; string sInizio="/usr/bin/amulecmd"; // cout << temp << endl; std::ifstream file(temp.c_str()); if (!file) { cout << "Errore, impossibile aprire il file della configurazione!\n"; return 0; } char buf[250]; int found=0; string sInput(argv[1]); cout << sInput << endl; file.getline(buf,250); temp=(string)buf; found=sostituisci(&temp,"indirizzo_ip=",""); if (!found) { cout << "Errore, impossibile trovare il parametro indirizzo IP!\n"; return 0; } cout << sInput << endl; sInizio+=" -h "+temp; file.getline(buf,250); temp=(string)buf; found=sostituisci(&temp,"password=",""); if (!found) { cout << "Errore, impossibile trovare il parametro password!\n"; return 0; } sInizio+=" -P "+temp; sostituisci(&sInput,"%5B","["); sostituisci(&sInput,"%5D","]"); sostituisci(&sInput,"%7C","|"); sostituisci(&sInput,"%7B","{"); sostituisci(&sInput,"%7D","}"); sostituisci(&sInput,"%20"," "); sostituisci(&sInput,""","'"); sostituisci(&sInput,"&","&"); sostituisci(&sInput,"(","("); sostituisci(&sInput,")",")"); sInizio+=" -c \"add "+sInput+"\""; cout << sInizio << endl; system(sInizio.c_str()); //cout << "Premi un tasto per continuare...\n"; //while(!getchar()=='\n'); return EXIT_SUCCESS; } int sostituisci(string *stringa, string trovami, string sostituiscimi) { int found,lavoro; int i=trovami.size(); lavoro=0; while ((found=stringa->find(trovami))!=string::npos) { stringa->replace(found,i,sostituiscimi); lavoro++; } return lavoro; }
La funzione
sostituisci(&sInput,"%5B","[");
(ad esempio) sostituisce nella stringa ricevuta da Firefox il codice %5B con [. Aumentando le voci sostituisci c’è la possibilità di aumentare le conversioni nel caso ce ne siano altre da aggiungere.
L’unica cosa che non sono riuscito a fare è stata quella di far aprire a Firefox una finestra terminale come in Windows per fare il debug del programma, cmq il problema persiste anche in linux (se disattivo la correzione dei codici esadecimali il programma smette di funzionare). Se avete un consiglio per far aprire il terminale a Firefox in linux postatelo pure nei commenti. Grazie
Ciao a tutti
P.S: Per ulteriori informazione sulla gestione dei link ed2k con aMule andate qui.