Freenet Client Protocol 2.0
FCP (Protocolo del cliente de Freenet) funciona como una interfaz simple, basada en texto, para que aplicaciones de terceros puedan interactuar con el nodo de Freenet. Actualmente sus funcionalidades son:
- Insertar datos a Freenet
- Pedir/Bajar datos de Freenet
- Consultar el estado de la red
- Agregar/Eliminar conexiones con otros nodos
Las versiones anteriores de FCP no son compatibles con la actual debido a la complejidad de los cambios efectuados en el funcionamiento de la red en esta ultima version.
Transporte
Opera sobre una conexion TCP entre el nodo de Freenet y la otra aplicacion. Se abre un puerto (
Sintaxis Basica
La unidad basica de FCP es el mensaje, que consiste en un nombre del mensaje y ningun o mas de un par de de valores llamados campos. Los nombres de los mensajes y sus campos generalmente se escriben utilizando el estilo
CamelCase∞.
NombreDelMensaje
Campo1=Valor1
Campo2=Valor2
...
End
Comandos/Mensajes Disponibles
A continuacion una lista, explicacion y ejemplo de algunos de los comandos y mensajes disponibles via FCP. Si se los desea probar, se puede iniciar una session de telnet a localhost y el puerto es, en donde corremos el nodo, mas 3000. En mi caso, mi nodo esta corriendo en el puerto 17247 por lo que debo apuntar al puerto 20247 para conectarme.
$ telnet localhost 20247
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
A partir de aca puedo empezar a enviar los comandos.
ClientHello
Este debe ser el primer comando que tenemos que ejecutar cuando nos conectamos con el nodo. A esto, el nodo responde con un mensaje
NodeHello.
ClientHello
Name=conexion-prueba
ExpectedVersion=2.0
EndMessage
El campo 'Name' puede ser cualquier cosa, sirve para identificar los request y, de momento, el campo '
ExpectedVersion' no cumple ninguna funcion.
NodeHello
NodeHello
FCPVersion=2.0
Version=Fred,0.7,1.0,429
Node=Fred
Testnet=true
EndMessage
El nodo responde con algo de informacion sobre el, como la version de FCP, la version de Fred y si esta corriendo en modo 'Testnet'.
ClientGet
Con la instruccion '
ClientGet' pedimos una key y obtenemos su contenido. Podemos especificar si queremos que ignore el
DataStore o si el pedido queremos que sea exclusivamente del
DataStore. En el campo 'URI' ingresamos la key que queremos solicitar y el campo 'Identifier' para identificar el pedido. Terminamos el comando con un
EndMessage.
ClientGet
IgnoreDS=false
DSOnly=false
URI=CHK@IRbQKR6SHxgWfh5owr96~5XaXstzRJMnT9u6ZaAlHw0,QwOCvc04YmuTm6Vgig4xUz7HJNzqQy5UUDrSZPfbCYs,AAEA--8
Identifier=get-prueba
EndMessage
En caso de encontrar el contenido, el nodo respondera de la siguiente manera, indicando que encontro el contenido, la informacion del
MetaData, la longitud de los datos en Bytes y a continuacion mostrata el contenido de los datos pedidos despues de la etiqueta '
AllData', mostar el identificador y el tamanio nuevamente. El contenido de lo que pedimos era efectivamente "Esto es una prueba! Y creo que funciona!".
DataFound
Metadata.ContentType=application/octet-stream
Identifier=get-prueba
DataLength=40
EndMessage
AllData
Identifier=get-prueba
DataLength=40
Data
Esto es una prueba! Y creo que funciona!
ClientPut
PutSuccessful