Author: tullyvey
Date: 2007-06-18 02:53:30 +0000 (Mon, 18 Jun 2007)
New Revision: 13643
Added:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/package.html
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/FcpSSKKeypairEventSupport.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/package.html
trunk/apps/jfcp/src/org/freenet/contrib/fcp/listener/package.html
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/DataHoldingMessage.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/FcpMessageInputStream.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/client/package.html
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/package.html
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/package.html
Removed:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/DataHoldingMessage.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/NodeMessageBuilder.java
Modified:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/FcpConnection.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/FreenetClient.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/AbstractFcpEventSupport.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/FcpEventSource.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/FcpEventSupportRepository.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/FcpMessage.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/AllData.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/NodeHello.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/NodeMessage.java
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/SSKKeypair.java
Log:
Fixed char/byte reading problem with the help of Toad's advice (next the
writing...)
More comments and tidying
Modified: trunk/apps/jfcp/src/org/freenet/contrib/fcp/FcpConnection.java
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/FcpConnection.java
2007-06-18 00:26:54 UTC (rev 13642)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/FcpConnection.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -4,9 +4,7 @@
package org.freenet.contrib.fcp;
-import java.io.BufferedReader;
import java.io.IOException;
-import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
@@ -14,11 +12,11 @@
import java.util.concurrent.Executors;
import java.util.logging.Logger;
import org.freenet.contrib.fcp.event.support.FcpEventSupportRepository;
+import org.freenet.contrib.fcp.message.FcpMessageInputStream;
import org.freenet.contrib.fcp.message.MessageBuilderException;
import org.freenet.contrib.fcp.message.client.ClientHello;
import org.freenet.contrib.fcp.message.client.ClientMessage;
import org.freenet.contrib.fcp.message.node.NodeMessage;
-import org.freenet.contrib.fcp.message.node.NodeMessageBuilder;
@@ -35,7 +33,7 @@
private Socket _socket;
private PrintStream _out;
- private BufferedReader _in;
+ private FcpMessageInputStream _mis;
private NodeAddress _nodeAddress;
private ExecutorService _messageSender;
private boolean _socketOpen;
@@ -60,14 +58,16 @@
* @throws java.io.IOException on IO error.
*/
public void open() throws UnknownHostException, IOException{
+ if(_socketOpen)
+ return;
logger.fine("opening socket to " + _nodeAddress.getHostName() + ":" +
_nodeAddress.getPort());
_socket = new Socket(_nodeAddress.getHostName(),
_nodeAddress.getPort());
- _in = new BufferedReader(new
InputStreamReader(_socket.getInputStream()));
+ _mis = new FcpMessageInputStream(_socket.getInputStream());
_out = new PrintStream(_socket.getOutputStream());
_messageSender = Executors.newSingleThreadExecutor();
_messageReaderThread = new MessageReaderThread();
- _messageReaderThread.start();
_socketOpen = true;
+ _messageReaderThread.start();
sendMessage(new ClientHello(_fcpVersion, _clientName));
}
@@ -89,13 +89,13 @@
}
_socket = null;
}
- if(_in != null){
+ if(_mis != null){
try {
- _in.close();
+ _mis.close();
} catch (Exception ex) {
logger.warning("error closing input stream: " +
ex.getMessage());
}
- _in = null;
+ _mis = null;
}
if(_out != null){
try {
@@ -109,7 +109,7 @@
}
/**
- * Sends a message to the node. This method returns immediately,
+ * Sends a message to the node. This method returns immediately,
* the message is put in a queue to be sent.
* @param message The message to be sent.
*/
@@ -126,7 +126,8 @@
}
public void run() {
-// logger.fine("sending message : " + _message.getHeaderString());
+ if(_out == null)
+ return;
_message.writeMessage(_out);
if(_out.checkError()){
logger.warning("error sending message:\n\n" +
_message.getMessageString());
@@ -160,7 +161,7 @@
* @param nodeAddress the new {@link NodeAddress NodeAddress}
*/
public void setNodeAddress(NodeAddress nodeAddress) {
- this._nodeAddress = nodeAddress;
+ _nodeAddress = nodeAddress;
}
@@ -173,20 +174,18 @@
try {
while(_socketOpen){
- NodeMessageBuilder builder = new NodeMessageBuilder();
try {
- builder.parse(_in);
- NodeMessage message = builder.build();
+ NodeMessage message = _mis.readMessage();
message.fireEvents(_eventSupport);
} catch (MessageBuilderException ex) {
if(_socketOpen)
logger.warning("error building node message: " +
ex.getMessage());
}
-
}
} catch (IOException ex) {
- logger.warning("error reading stream: " + ex.getMessage());
+ if(_socketOpen)
+ logger.warning("error reading stream: " + ex.getMessage());
}
_running = false;
Modified: trunk/apps/jfcp/src/org/freenet/contrib/fcp/FreenetClient.java
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/FreenetClient.java
2007-06-18 00:26:54 UTC (rev 13642)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/FreenetClient.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -54,7 +54,7 @@
/**
* Returns an object by which interested classes can register to listen
* for incoming message events.
- * @return teh event source
+ * @return the event source
*/
public FcpEventSource getEventSource(){
return _eventSource;
Added: trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/package.html
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/package.html
(rev 0)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/package.html
2007-06-18 02:53:30 UTC (rev 13643)
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+ <head>
+ </head>
+ <body>
+ <h1>FCP event classes</h1>
+ <p>
+ The events that are generated upon receipt and transmission of
messages
+ and such.
+ </p>
+ </body>
+</html>
Modified:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/AbstractFcpEventSupport.java
===================================================================
---
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/AbstractFcpEventSupport.java
2007-06-18 00:26:54 UTC (rev 13642)
+++
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/AbstractFcpEventSupport.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -9,8 +9,8 @@
import java.util.Set;
/**
- *
- * @author res
+ * Support class to allow event support to be achieved more tersely.
+ * @author Ralph Smithen
*/
class AbstractFcpEventSupport<ListenerType> {
Set<ListenerType> _listeners = Collections.synchronizedSet(new HashSet());
Modified:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/FcpEventSource.java
===================================================================
---
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/FcpEventSource.java
2007-06-18 00:26:54 UTC (rev 13642)
+++
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/FcpEventSource.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -7,10 +7,11 @@
import org.freenet.contrib.fcp.listener.FcpConnectionListener;
import org.freenet.contrib.fcp.listener.FcpPeerListListener;
import org.freenet.contrib.fcp.listener.FcpQueueListener;
+import org.freenet.contrib.fcp.listener.FcpSSKKeypairListener;
/**
- *
- * @author res
+ * Serves to hide the event-firing functionality.
+ * @author Ralph Smithen
*/
public class FcpEventSource {
private FcpEventSupportRepository _repository;
@@ -23,7 +24,7 @@
_repository.getConnectionEventSupport().addListener(l);
}
- public void removeFcpConnectionListener(FcpConnectionListener l){
+ public void removeConnectionListener(FcpConnectionListener l){
_repository.getConnectionEventSupport().removeListener(l);
}
@@ -31,8 +32,24 @@
_repository.getPeerListEventSupport().addListener(l);
}
+ public void removePeerListListener(FcpPeerListListener l){
+ _repository.getPeerListEventSupport().removeListener(l);
+ }
+
public void addQueueListener(FcpQueueListener l){
_repository.getQueueEventSupport().addListener(l);
}
+
+ public void removeQueueListener(FcpQueueListener l){
+ _repository.getQueueEventSupport().removeListener(l);
+ }
+
+ public void addKeypairListener(FcpSSKKeypairListener l){
+ _repository.getSSKKeypairEventSupport().addListener(l);
+ }
+
+ public void removeKeypairListener(FcpSSKKeypairListener l){
+ _repository.getSSKKeypairEventSupport().removeListener(l);
+ }
}
Modified:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/FcpEventSupportRepository.java
===================================================================
---
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/FcpEventSupportRepository.java
2007-06-18 00:26:54 UTC (rev 13642)
+++
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/FcpEventSupportRepository.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -5,14 +5,15 @@
package org.freenet.contrib.fcp.event.support;
/**
- *
- * @author res
+ * Holds references to all the client's event sources.
+ * @author Ralph Smithen
*/
public class FcpEventSupportRepository {
private FcpConnectionEventSupport _connectionEventSupport = new
FcpConnectionEventSupport();
private FcpPeerListEventSupport _peerListEventSupport = new
FcpPeerListEventSupport();
private FcpQueueEventSupport _queueEventSupport = new
FcpQueueEventSupport();
+ private FcpSSKKeypairEventSupport _keypairEventSupport = new
FcpSSKKeypairEventSupport();
public FcpConnectionEventSupport getConnectionEventSupport() {
return _connectionEventSupport;
@@ -25,5 +26,9 @@
public FcpQueueEventSupport getQueueEventSupport() {
return _queueEventSupport;
}
+
+ public FcpSSKKeypairEventSupport getSSKKeypairEventSupport() {
+ return _keypairEventSupport;
+ }
}
Added:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/FcpSSKKeypairEventSupport.java
===================================================================
---
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/FcpSSKKeypairEventSupport.java
(rev 0)
+++
trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/FcpSSKKeypairEventSupport.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -0,0 +1,30 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+
+package org.freenet.contrib.fcp.event.support;
+
+import java.util.logging.Logger;
+import org.freenet.contrib.fcp.event.SSKKeypairEvent;
+import
org.freenet.contrib.fcp.event.support.AbstractFcpEventSupport.NotifyHelper;
+import org.freenet.contrib.fcp.listener.FcpSSKKeypairListener;
+import org.freenet.contrib.fcp.message.node.SSKKeypair;
+
+/**
+ *
+ * @author Ralph Smithen
+ */
+public class FcpSSKKeypairEventSupport extends
AbstractFcpEventSupport<FcpSSKKeypairListener>{
+ private static Logger logger =
Logger.getLogger(FcpSSKKeypairEventSupport.class.getName());
+
+ NotifyHelper _keypairReceivedNotifier = new
NotifyHelper<SSKKeypairEvent>() {
+ void notifyListener(FcpSSKKeypairListener l, SSKKeypairEvent e)
{l.keypairReceived(e);}
+ };
+
+
+
+ public void fireKeypairReceived(SSKKeypair kp){
+ _keypairReceivedNotifier.notifyListeners(new SSKKeypairEvent(kp));
+ }
+
+}
Added: trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/package.html
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/package.html
(rev 0)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/event/support/package.html
2007-06-18 02:53:30 UTC (rev 13643)
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+ <head>
+ </head>
+ <body>
+ <h1>Event support</h1>
+ <p>
+ Provide support for events.
+ </p>
+ </body>
+</html>
Added: trunk/apps/jfcp/src/org/freenet/contrib/fcp/listener/package.html
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/listener/package.html
(rev 0)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/listener/package.html
2007-06-18 02:53:30 UTC (rev 13643)
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+ <head>
+ </head>
+ <body>
+ <h1>FCP event listener interfaces</h1>
+ <p>
+ Interfaces by which interested applications can register to listen
for
+ FCP events.
+ </p>
+ </body>
+</html>
Copied:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/DataHoldingMessage.java
(from rev 13635,
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/DataHoldingMessage.java)
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/DataHoldingMessage.java
(rev 0)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/DataHoldingMessage.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -0,0 +1,16 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+
+package org.freenet.contrib.fcp.message;
+
+/**
+ *Interface for manipulating a message with a data payload.
+ *
+ * @author Ralph Smithen
+ */
+public interface DataHoldingMessage {
+ public byte[] getData();
+ public void setData(byte[] data);
+ public int getDataLength();
+}
Modified: trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/FcpMessage.java
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/FcpMessage.java
2007-06-18 00:26:54 UTC (rev 13642)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/FcpMessage.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -12,33 +12,60 @@
import org.freenet.contrib.fcp.event.support.FcpEventSupportRepository;
/**
- *
- * @author res
+ * The superclass of all FCP messages.
+ * @author Ralph Smithen
*/
public abstract class FcpMessage {
+ /**
+ * the name=value pairs of the message
+ */
protected Map<String, String> _fields = new HashMap();
+ /**
+ * the name of the message
+ */
protected String _headerString;
+ /**
+ * Creates new instance, assigns {@link #_headerString _headerString}.
+ */
public FcpMessage(){
-// String name = this.getClass().getName();
-// _headerString = name.substring(name.lastIndexOf('.') + 1);
_headerString = this.getClass().getSimpleName();
}
+ /**
+ * Accessor for message's fields.
+ * @return the message fields
+ */
public Map<String, String> getFields() {
return _fields;
}
+ /**
+ * Get the name of the message.
+ * @return the name
+ */
public String getHeaderString(){
return _headerString;
}
+ /**
+ * Trigger the events upon receipt or transmission of a message.
+ * @param eventSupport the object to be notified of message events
+ */
public abstract void fireEvents(FcpEventSupportRepository eventSupport);
+ /**
+ * Get the fields that must be non-null in a valid message.
+ * @return an array of <code>String</code>s, the names of the mandatory
fields
+ */
public String[] getMandatoryFields() {
return new String[] {};
}
+ /**
+ * Stream the message.
+ * @param out the stream to be written to
+ */
public void writeMessage(PrintStream out){
out.println(_headerString);
for(Map.Entry entry : _fields.entrySet()){
@@ -48,6 +75,10 @@
}
+ /**
+ * Get the text representation of the message.
+ * @return a <code>String</code> of the message's FCP representation
+ */
public String getMessageString(){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
writeMessage(new PrintStream(baos));
Added:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/FcpMessageInputStream.java
===================================================================
---
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/FcpMessageInputStream.java
(rev 0)
+++
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/FcpMessageInputStream.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -0,0 +1,120 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+
+package org.freenet.contrib.fcp.message;
+
+import java.io.BufferedInputStream;
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import org.freenet.contrib.fcp.message.DataHoldingMessage;
+import org.freenet.contrib.fcp.message.node.NodeMessage;
+
+/**
+ * Reads FCP node messages from a given stream.
+ * @author Ralph Smithen
+ */
+public class FcpMessageInputStream {
+ private static final String MESSAGE_PACKAGE =
NodeMessage.class.getPackage().getName();
+ private DataInputStream _dis;
+
+ /**
+ * Creates a new instance of FcpMessageStream, wraps a buffer around the
<code>InputStream</code>.
+ * @param in the stream from which to read FCP data
+ */
+ public FcpMessageInputStream(InputStream in) {
+ _dis = new DataInputStream(new BufferedInputStream(in));
+ }
+
+ String readLine() throws IOException{
+ StringBuffer sb = new StringBuffer();
+ byte b;
+
+ while(true){
+ b = _dis.readByte();
+
+ if(b == '\n'){
+ if(sb.length() == 0){ // blank line
+ continue;
+ }else{ // end of line
+ break;
+ }
+ }
+ sb.append((char) b);
+ }
+ String line = sb.toString();
+ return line.trim().length() == 0 ? readLine() : line;
+ }
+
+ /**
+ * Reads and returns the next message.
+ * @return the next message
+ * @throws java.io.IOException if thrown on underlying stream
+ * @throws org.freenet.contrib.fcp.message.MessageBuilderException if the
data seems garbled
+ */
+ public NodeMessage readMessage() throws IOException,
MessageBuilderException{
+ NodeMessage m;
+ String line = readLine();
+
+ try {
+ m = (NodeMessage) Class.forName(MESSAGE_PACKAGE + "." +
line).newInstance();
+ } catch (Exception ex) {
+ throw new MessageBuilderException("unknown message header (" +
line + ")");
+ }
+ while(readField(m))
+ ; // read all message fields
+
+ String[] mandatoryFields = m.getMandatoryFields();
+
+ for(String field : mandatoryFields){
+
+ if(m.getFields().get(field) == null)
+ throw new MessageBuilderException(
+ "mandatory field " + field + " not found in message "
+
+ m.getHeaderString());
+ }
+
+ return m;
+ }
+
+ boolean readField(NodeMessage m) throws IOException,
MessageBuilderException{
+ String line = readLine();
+
+ int pos = line.indexOf('=');
+
+ if(pos > 0){ //set field value
+ m.getFields().put(line.substring(0, pos), line.substring(pos + 1));
+ return true;
+ }
+
+ if(line.equals("EndMessage"))
+ return false;
+
+ if(!line.equals("Data")){
+ throw new MessageBuilderException(
+ "unknown tag (" + line + ") in message " +
m.getHeaderString());
+ }
+
+ DataHoldingMessage dhm = (DataHoldingMessage) m;
+
+ byte[] data = new byte[dhm.getDataLength()];
+ _dis.read(data, 0, data.length);
+
+ dhm.setData(data);
+ return false;
+ }
+
+ /**
+ * Closes the delegate stream.
+ * @throws java.io.IOException if thrown on underlying stream
+ */
+ public void close() throws IOException {
+ _dis.close();
+ }
+
+}
+
+
+
+
Added: trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/client/package.html
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/client/package.html
(rev 0)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/client/package.html
2007-06-18 02:53:30 UTC (rev 13643)
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+ <head>
+ </head>
+ <body>
+ <h1>Client messages</h1>
+ <p>
+ Messages sent from the client to the node.
+ </p>
+ </body>
+</html>
Modified: trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/AllData.java
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/AllData.java
2007-06-18 00:26:54 UTC (rev 13642)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/AllData.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -7,17 +7,31 @@
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.freenet.contrib.fcp.event.support.FcpEventSupportRepository;
+import org.freenet.contrib.fcp.message.DataHoldingMessage;
/**
+ *For a ClientGet with ReturnType=direct, the data is returned directly to the
client,
+ * all at once, using the AllData message. Obviously in many situations this
will not be desirable,
+ * hence the other ReturnType options. Persistent direct requests will not
send this
+ * immediately on completion of the request; see GetRequestStatus.
*
- * @author res
+ * @author Ralph Smithen
*/
public class AllData extends NodeMessage implements DataHoldingMessage{
private String _uri;
- /** Creates a new instance of DataFound */
+ private byte[] _data;
+
+ /**
+ * Creates a new instance of AllData
+ */
public AllData() {
}
+
+ /**
+ *
+ * @inheritDoc
+ */
public void fireEvents(FcpEventSupportRepository eventSupport) {
eventSupport.getQueueEventSupport().fireAllData(this);
}
@@ -38,12 +52,12 @@
_fields.put("DataLength", String.valueOf(dataLength));
}
- public String getData() {
- return _fields.get("Data");
+ public byte[] getData() {
+ return _data;
}
- public void setData(String data) {
- _fields.put("Data", data);
+ public void setData(byte[] data) {
+ _data = data;
}
public String getUri() {
Deleted:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/DataHoldingMessage.java
===================================================================
---
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/DataHoldingMessage.java
2007-06-18 00:26:54 UTC (rev 13642)
+++
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/DataHoldingMessage.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -1,15 +0,0 @@
-/* This code is part of Freenet. It is distributed under the GNU General
- * Public License, version 2 (or at your option any later version). See
- * http://www.gnu.org/ for further details of the GPL. */
-
-package org.freenet.contrib.fcp.message.node;
-
-/**
- *
- * @author res
- */
-public interface DataHoldingMessage {
- public String getData();
- public void setData(String data);
- public int getDataLength();
-}
Modified:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/NodeHello.java
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/NodeHello.java
2007-06-18 00:26:54 UTC (rev 13642)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/NodeHello.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -7,16 +7,65 @@
import org.freenet.contrib.fcp.event.support.FcpEventSupportRepository;
/**
+ *Sent from the Freenet node in response to a
+ * {@link org.freenet.contrib.fcp.message.client.ClientHello ClientHello}
message. The node tells us
+ * what version it is, what protocol version it's using, whether testnet mode
is enabled, and how many
+ * compression codecs are currently supported (this is important with the
StartedCompression message).
*
- * @author res
+ * @author Ralph Smithen
*/
public class NodeHello extends NodeMessage{
+ /**
+ *
+ * @inheritDoc
+ */
public void fireEvents(FcpEventSupportRepository eventSupport) {
eventSupport.getConnectionEventSupport().fireFcpConnected(this);
}
+ public int getCompressionCodecs(){
+ return Integer.parseInt(_fields.get("CompressionCodecs"));
+ }
+
+ public boolean isTestNet(){
+ return Boolean.parseBoolean(_fields.get("TestNet"));
+ }
+
+ public String getNodeLanguage(){
+ return _fields.get("NodeLanguage");
+ }
+
+ public String getExtRevision(){
+ return _fields.get("ExtRevision");
+ }
+
+ public String getNode(){
+ return _fields.get("Node");
+ }
+
+ public String getBuild(){
+ return _fields.get("Build");
+ }
+
+ public String getFCPVersion(){
+ return _fields.get("FCPVersion");
+ }
+
public String getConnectionIdentifier(){
return _fields.get("ConnectionIdentifier");
}
+
+ public String getRevision(){
+ return _fields.get("Revision");
+ }
+
+ public String getVersion(){
+ return _fields.get("Version");
+ }
+
+ public String getExtBuild(){
+ return _fields.get("ExtBuild");
+ }
+
}
Modified:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/NodeMessage.java
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/NodeMessage.java
2007-06-18 00:26:54 UTC (rev 13642)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/NodeMessage.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -8,11 +8,10 @@
import org.freenet.contrib.fcp.message.FcpMessage;
/**
+ *All node messages are a subclass of this.
*
- * @author res
+ * @author Ralph Smithen
*/
public abstract class NodeMessage extends FcpMessage{
-
-
}
Deleted:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/NodeMessageBuilder.java
===================================================================
---
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/NodeMessageBuilder.java
2007-06-18 00:26:54 UTC (rev 13642)
+++
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/NodeMessageBuilder.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -1,90 +0,0 @@
-/* This code is part of Freenet. It is distributed under the GNU General
- * Public License, version 2 (or at your option any later version). See
- * http://www.gnu.org/ for further details of the GPL. */
-
-package org.freenet.contrib.fcp.message.node;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.logging.Logger;
-import org.freenet.contrib.fcp.FcpConnection;
-import org.freenet.contrib.fcp.message.FcpMessage;
-import org.freenet.contrib.fcp.message.MessageBuilderException;
-
-/**
- *
- * @author res
- */
-public class NodeMessageBuilder {
- private static Logger logger =
Logger.getLogger(NodeMessageBuilder.class.getName());
- // FcpMessage
- private NodeMessage _message;
-
- public void parse(BufferedReader in) throws MessageBuilderException,
IOException{
- String line;
- boolean firstLine = true;
-
- while((line = in.readLine()) != null){
-
- if(line.trim().equals(""))
- continue; // blank lines allowed for debugging
-
-
- if(firstLine){
- try {
- _message = (NodeMessage) Class.forName(
- this.getClass().getPackage().getName() + "." +
line).newInstance();
- firstLine = false;
- } catch (Exception ex) {
- throw new MessageBuilderException("unknown message header
(" + line + ")");
- }
- continue;
- }
-
- if(line.equals("EndMessage"))
- break;
-
-
- int pos = line.indexOf('=');
- if(pos < 0){
- if(line.equals("Data") && _message instanceof
DataHoldingMessage){
-
- DataHoldingMessage m = (DataHoldingMessage) _message;
- char[] data = new char[m.getDataLength()];
- StringBuffer sb = new StringBuffer();
- char[] b = new char[4096];
- int read = 0, toRead = m.getDataLength();
- while(toRead > 0 &&
- (read = in.read(b, 0, toRead > b.length ? b.length
: toRead)) != -1){
- sb.append(b, 0, read);
- toRead -= read;
- }
- m.setData(sb.toString());
- break;
-
- }else{
- throw new MessageBuilderException(
- "unknown tag (" + line + ") in message " +
_message.getHeaderString());
- }
-
- }else
- _message.getFields().put(line.substring(0, pos),
line.substring(pos + 1));
- }
-
-
- }
-
-
- public NodeMessage build() throws MessageBuilderException{
- String[] mandatoryFields = _message.getMandatoryFields();
-
- for(String field : mandatoryFields){
- if(((FcpMessage) _message).getFields().get(field) == null)
- throw new MessageBuilderException(
- "mandatory field " + field + " not found in message "
+ ((FcpMessage) _message).getHeaderString()
- );
- }
-
- return _message;
- }
-}
Modified:
trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/SSKKeypair.java
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/SSKKeypair.java
2007-06-18 00:26:54 UTC (rev 13642)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/SSKKeypair.java
2007-06-18 02:53:30 UTC (rev 13643)
@@ -7,10 +7,10 @@
import org.freenet.contrib.fcp.event.support.FcpEventSupportRepository;
/**
- * This is a message of the Freenet Client Protocol 2.0 (FCP 2.0).
- * It is sent from the Freenet node to a client program in response to the
client
- * issuing a GenerateSSK command.
- * @author res
+ * This is sent from the Freenet node to a client program in response to the
client
+ * issuing a {@link org.freenet.contrib.fcp.message.client.GenerateSSK
GenerateSSK} command.
+ *
+ * @author Ralph Smithen
*/
public class SSKKeypair extends NodeMessage{
@@ -23,7 +23,7 @@
* @inheritDoc
*/
public void fireEvents(FcpEventSupportRepository eventSupport) {
-
+ eventSupport.getSSKKeypairEventSupport().fireKeypairReceived(this);
}
public String getId() {
Added: trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/package.html
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/package.html
(rev 0)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/node/package.html
2007-06-18 02:53:30 UTC (rev 13643)
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+ <head>
+ </head>
+ <body>
+ <h1>Node messages</h1>
+ <p>
+ Messages sent from the node to the client.
+ </p>
+ </body>
+</html>
Added: trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/package.html
===================================================================
--- trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/package.html
(rev 0)
+++ trunk/apps/jfcp/src/org/freenet/contrib/fcp/message/package.html
2007-06-18 02:53:30 UTC (rev 13643)
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+ <head>
+ </head>
+ <body>
+ <h1>Message utility classes</h1>
+ <p>
+ Core classes for handling FCP messages.
+ </p>
+ </body>
+</html>