This is the JavaScript code of the extension:
------------------------------------------------------------------------------------------
function getPageContent()
{
var listener = {
finished : function(data){
alert("Inizio dati letti\n"+data+"\nFine dati letti");
}
}
readAllFromSocket("192.168.1.2",9999,"Prova messaggio da
Firefox",listener);
}
function readAllFromSocket(host,port,outputData,listener)
{
try {
var transportService = Components.classes["@mozilla.org/network/
socket-transport-service;1"].getService
(Components.interfaces.nsISocketTransportService);
var transport = transportService.createTransport(null,
0,host,port,null);
if(transport) alert("Creata la socket");
else alert("Errore creazione socket");
var outstream = transport.openOutputStream(0,0,0);
outstream.write(outputData,outputData.length);
alert("Creato l'output stream e inviato il messaggio");
var stream = transport.openInputStream(0,0,0);
var instream = Components.classes["@mozilla.org/
scriptableinputstream;1"].createInstance
(Components.interfaces.nsIScriptableInputStream);
instream.init(stream);
alert("Creato l'input stream");
var dataListener = {
data : "",
onStartRequest: function(request, context){},
onStopRequest: function(request, context, status) {
instream.close();
outstream.close();
listener.finished(this.data);
},
onDataAvailable: function(request, context, inputStream, offset,
count){
this.data += instream.read(count);
alert("Ho aggiunto dati al buffer");
},
};
var pump = Components.classes["@mozilla.org/network/input-stream-
pump;1"].createInstance(Components.interfaces.nsIInputStreamPump);
pump.init(stream, -1, -1, 0, 0, false);
while(true) pump.asyncRead(dataListener,null);
} catch (ex){
throw ex;
}
return null;
}
------------------------------------------------------------------------------------------
And this is the php code:
------------------------------------------------------------------------------------------
<?php
$fp=fsockopen("192.168.1.5", 9999, $errno, $errstr, 100);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
}
else {
fwrite($fp, "Prova messaggio da PHP");
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
------------------------------------------------------------------------------------------
I hope that someone can help me.
Thanks,
Antonello
My purpose is just to open a socket and exchanging data between a
server and a Firefox extension, in this case I'm trying with a php
script. The problem is that the extension does not seem to get
anything.
-------------------------8<---------------------------
tcpConnect('http://www.google.com',80,"HEAD / HTTP/1.0\n\n");
------------------------->8---------------------------
-------------------------8<---------------------------
function tcpConnect(uri,port,header){
var listener = {
finished : function(packet){
if(packet) {
portstate = '';
packet.split("\r\n");
packetset = packet[8]+packet[9]+packet[10]+packet[11];
portstate = 'open';
} else { portstate = 'closed'; }
if(portstate == 'closed') {} else {
document.getElementById('httpresult').value =
document.getElementById('httpresult').value +="\r\n" + port + "/
tcp " + portstate;
}
},
};
readSocket(uri,port,header,listener);
}
function readSocket(host,port,outputData,listener) {
var transportService = Components.classes["@mozilla.org/network/
socket-transport-service;1"].getService
(Components.interfaces.nsISocketTransportService);
var transport = transportService.createTransport(["starttls"],
0,host,port,null);
var outstream = transport.openOutputStream(0,0,0);
outstream.write(outputData,outputData.length);
var stream = transport.openInputStream(0,0,0);
var instream = Components.classes["@mozilla.org/
scriptableinputstream;1"].createInstance
(Components.interfaces.nsIScriptableInputStream);
instream.init(stream);
var dataListener = {
data : "",
onStartRequest: function(request, context){},
onStopRequest: function(request, context, status){
instream.close();
outstream.close();
return listener.finished(this.data);
},
onDataAvailable: function(request, context, inputStream, offset,
count){
this.data += instream.read(count);
},
};
var pump = Components.classes["@mozilla.org/network/input-stream-
pump;1"].createInstance(Components.interfaces.nsIInputStreamPump);
pump.init(stream, -1, -1, 0, 0, false);
pump.asyncRead(dataListener,null);
return null;
}
------------------------->8---------------------------
"Warning: socket_bind() [function.socket-bind]: unable to bind address
[99]: Cannot assign requested address in /var/www/socket_server.php on
line 21"
This is the new extension javascript code:
-------------------------------------------------------------------------------
function main()
{
var host = "192.168.1.2";
var port = 9999;
var delay = new Array();
var lung_pkt = 288;
var num_pkg = 100;
var num_str = 12;
var nPkg = 0;
try {
window.open("http://"+host+"/
socket_server.php","Socket","width=500,height=400");
var transportService = Components.classes["@mozilla.org/network/
socket-transport-service;1"].getService
(Components.interfaces.nsISocketTransportService);
var transport = transportService.createTransport(null,
0,host,port,null);
var stream = transport.openInputStream(0,0,0);
var instream = Components.classes["@mozilla.org/
scriptableinputstream;1"].createInstance
(Components.interfaces.nsIScriptableInputStream);
instream.init(stream);
var dataListener = {
onStartRequest: function(request, context){},
onStopRequest: function(request, context, status) {
instream.close();
outstream.close();
var stampa="";
var i=0;
for(i=0; i<delay.length; i++) {
stampa+=(delay[i].toString()+"\n");
}
alert(stampa);
},
onDataAvailable: function(request, context, inputStream, offset,
count){
var ora = new Date();
var partenza = parseInt(instream.read(lung_pkt).substring
(0,13));
var arrivo = ora.getTime();
var d = arrivo - partenza;
delay.push(d);
},
};
var pump = Components.classes["@mozilla.org/network/input-stream-
pump;1"].createInstance(Components.interfaces.nsIInputStreamPump);
pump.init(stream, -1, -1, 0, 0, false);
pump.asyncRead(dataListener,null);
} catch (ex){
alert(ex);
}
return null;
}
-------------------------------------------------------------------------------
And this is the new PHP code:
-------------------------------------------------------------------------------
$host = "192.168.1.5";
$port = 9999;
$lung_pkg = 288; //lunghezza del pacchetto, bytes
$periodo = 100; //periodo di trasmissione, usec
$delta = 10000; //pausa tra stream, usec
$num_pkg = 100; //numero di pacchetti nello stream
$num_str= 12; //numero di stream nel fleet
//numero di millisecondi trascorsi dalla UNIX Epoque
function timestamp() {
list($usec, $sec) = explode(" ", microtime());
$usec = substr($usec,2,3);
$sec = $sec*1000;
return $sec+$usec;
}
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die
(socket_strerror
(socket_last_error($socket)));
echo(date("H:i:s")." Socket creata<br>");
socket_bind($socket, $host, $port) or die(socket_strerror
(socket_last_error($socket)));
echo(date("H:i:s")." Socket connessa<br>");
socket_listen($socket) or die(socket_strerror(socket_last_error
($socket)));
echo(date("H:i:s")." Socket listener creato<br>");
$client = socket_accept($socket) or die(socket_strerror
(socket_last_error($client)));
echo(date("H:i:s")." Connessione accettata<br>");
//invio del fleet
for ($n=0; $n<$num_str; $n++) {
//invio dello stream
for ($k=0; $k<$num_pkg; $k++) {
$output = timestamp();
while(strlen($output)<$lung_pkg) $output.="A";
socket_write($client, $output, $lung_pkg) or die(socket_strerror
(socket_last_error($client)));
usleep($periodo);
}
echo(date("H:i:s")." Stream $n inviato<br>");
usleep($delta);
}
socket_close($client);
socket_close($socket);
echo(date("H:i:s")." Fine");
?>
-------------------------------------------------------------------------------