You should throw/log an error if the line is oversize, and maybe if the
message name contains an =.
On Monday 19 January 2009 19:39, saces at freenetproject.org wrote:
> Author: saces
> Date: 2009-01-19 19:39:19 +0000 (Mon, 19 Jan 2009)
> New Revision: 25124
>
> Added:
> trunk/apps/wxFCP/include/wx/fcp/connection.h
> trunk/apps/wxFCP/include/wx/fcp/ioconnection.h
> trunk/apps/wxFCP/include/wx/fcp/logger.h
> trunk/apps/wxFCP/include/wx/fcp/message.h
> trunk/apps/wxFCP/src/fcp/connection.cpp
> trunk/apps/wxFCP/src/fcp/ioconnection.cpp
> trunk/apps/wxFCP/src/fcp/logger.cpp
> trunk/apps/wxFCP/src/fcp/message.cpp
> Modified:
> trunk/apps/wxFCP/include/wx/fcp/fcp.h
> trunk/apps/wxFCP/samples/fcp/nodeinfo.cpp
> Log:
> initial files
>
> Added: trunk/apps/wxFCP/include/wx/fcp/connection.h
> ===================================================================
> --- trunk/apps/wxFCP/include/wx/fcp/connection.h
(rev 0)
> +++ trunk/apps/wxFCP/include/wx/fcp/connection.h 2009-01-19 19:39:19 UTC
(rev 25124)
> @@ -0,0 +1,57 @@
>
+/////////////////////////////////////////////////////////////////////////////
> +// Name: wx/fcp/connection.h
> +// Purpose: declaration for fcp connections
> +// Author: saces
> +// Modified by:
> +// Created: 14.01.2009
> +// RCS-ID: $Id$
> +// Copyright: (c) 2009 saces <saces at freenetproject.org>
> +// Licence: wxWindows licence
>
+/////////////////////////////////////////////////////////////////////////////
> +
> +#ifndef _FCP_CONNECTION_H_
> +#define _FCP_CONNECTION_H_
> +
> +#include "wx/wxprec.h"
> +#ifndef WX_PRECOMP
> + #include "wx/wx.h"
> +#endif
> +
> +#include <wx/socket.h>
> +
> +#include "wx/fcp/ioconnection.h"
> +#include "wx/fcp/message.h"
> +
> +class wxFCPConnection : protected wxFCPIOConnection
> +{
> +public:
> +
> + wxFCPConnection(wxString *host, wxUint16 port, wxUint32 timeout,
wxFCPLogger *logger=NULL);
> +
> + bool setFCPLogger(wxFCPLogger *logger);
> + bool Connect();
> + bool ReConnect();
> + bool Close(bool flush=false);
> + bool IsConnected();
> + bool readLine(wxString& line);
> +
> +public:
> + bool readEndMessage(wxFCPNodeMessage& message);
> + bool sendCommand(wxFCPCommand *command);
> + bool sendCommand(wxFCPCommand& command);
> +private:
> +#if wxUSE_IPV6
> + wxIPV6address m_sockaddress;
> +#else
> + wxIPV4address m_sockaddress;
> +#endif
> + wxUint32 m_timeout;
> + wxFCPNodeMessage* m_nodehellomessage;
> +};
> +
> +// async stuff
> +class wxFCPConnectionRunner : protected wxFCPConnection
> +{
> +};
> +
> +#endif // ifndef _FCP_CONNECTION_H_
>
> Modified: trunk/apps/wxFCP/include/wx/fcp/fcp.h
> ===================================================================
> --- trunk/apps/wxFCP/include/wx/fcp/fcp.h 2009-01-17 23:59:33 UTC (rev
25123)
> +++ trunk/apps/wxFCP/include/wx/fcp/fcp.h 2009-01-19 19:39:19 UTC (rev
25124)
> @@ -17,12 +17,49 @@
> #include "wx/wx.h"
> #endif
>
> -#define DEFAULT_FCP_HOST "127.0.0.1"
> -#define DEFAULT_FCP_PORT 9481
> -#define DEFAULT_FCP_TIMEOUT 300
> +#ifndef DEFAULT_FCP_HOST
> + #define DEFAULT_FCP_HOST "127.0.0.1"
> +#endif
>
> -#define FCP_HOST_ENV_NAME "FCP_HOST"
> -#define FCP_PORT_ENV_NAME "FCP_PORT"
> -#define FCP_TIMEOUT_ENV_NAME "FCP_TIMEOUT"
> +#ifndef DEFAULT_FCP_PORT
> + #define DEFAULT_FCP_PORT 9481
> +#endif
>
> +#ifndef DEFAULT_FCP_TIMEOUT
> + #define DEFAULT_FCP_TIMEOUT 300
> +#endif
> +
> +#ifndef FCP_HOST_ENV_NAME
> + #define FCP_HOST_ENV_NAME "FCP_HOST"
> +#endif
> +
> +#ifndef FCP_PORT_ENV_NAME
> + #define FCP_PORT_ENV_NAME "FCP_PORT"
> +#endif
> +
> +#ifndef FCP_TIMEOUT_ENV_NAME
> + #define FCP_TIMEOUT_ENV_NAME "FCP_TIMEOUT"
> +#endif
> +
> +#ifndef REQUIRED_NODE_VERSION
> + #define REQUIRED_NODE_VERSION 1197
> +#endif
> +
> +#ifndef REQUIRED_NODE_BUILD
> + #define REQUIRED_NODE_BUILD 25053
> +#endif
> +
> +#ifndef REQUIRED_EXT_VERSION
> + #define REQUIRED_EXT_VERSION 26
> +#endif
> +
> +#ifndef REQUIRED_EXT_BUILD
> + #define REQUIRED_EXT_BUILD 23771
> +#endif
> +
> +#include "wx/fcp/connection.h"
> +#include "wx/fcp/message.h"
> +#include "wx/fcp/job.h"
> +#include "wx/fcp/session.h"
> +
> #endif // ifndef _FCP_FCP_H_
>
> Added: trunk/apps/wxFCP/include/wx/fcp/ioconnection.h
> ===================================================================
> --- trunk/apps/wxFCP/include/wx/fcp/ioconnection.h
(rev 0)
> +++ trunk/apps/wxFCP/include/wx/fcp/ioconnection.h 2009-01-19 19:39:19 UTC
(rev 25124)
> @@ -0,0 +1,48 @@
>
+/////////////////////////////////////////////////////////////////////////////
> +// Name: wx/fcp/ioconnection.h
> +// Purpose: declaration for fcp io connections
> +// Author: saces
> +// Modified by:
> +// Created: 14.01.2009
> +// RCS-ID: $Id$
> +// Copyright: (c) 2009 saces <saces at freenetproject.org>
> +// Licence: wxWindows licence
>
+/////////////////////////////////////////////////////////////////////////////
> +
> +#ifndef _FCP_IOCONNECTION_H_
> +#define _FCP_IOCONNECTION_H_
> +
> +#include "wx/wxprec.h"
> +#ifndef WX_PRECOMP
> + #include "wx/wx.h"
> +#endif
> +
> +#include "wx/fcp/logger.h"
> +#include <wx/socket.h>
> +
> +class wxFCPIOConnection
> +{
> +protected:
> + wxFCPIOConnection();
> + ~wxFCPIOConnection();
> +
> + bool setFCPLogger(wxFCPLogger *fcplogger);
> + void setTimeout(wxUint32 timeout);
> + bool Connect(wxSockAddress& sockaddress);
> + bool ReConnect();
> + bool Close(bool flush=false);
> + bool isOK();
> + bool IsConnected();
> +
> + bool writeLine(const wxString& line);
> + bool readLine(wxString& line);
> + bool writeData(const void* buffer, wxUint32 nbytes);
> + bool readData(void* buffer, wxUint32 nbytes);
> +
> +private:
> + wxSocketClient *m_sock;
> + wxFCPLogger *m_fcplogger;
> + bool write(const void* buffer, wxUint32 nbytes);
> +};
> +
> +#endif // ifndef _FCP_IOCONNECTION_H_
>
> Added: trunk/apps/wxFCP/include/wx/fcp/logger.h
> ===================================================================
> --- trunk/apps/wxFCP/include/wx/fcp/logger.h (rev 0)
> +++ trunk/apps/wxFCP/include/wx/fcp/logger.h 2009-01-19 19:39:19 UTC (rev
25124)
> @@ -0,0 +1,50 @@
>
+/////////////////////////////////////////////////////////////////////////////
> +// Name: wx/fcp/logger.h
> +// Purpose: declaration for fcp logger
> +// Author: saces
> +// Modified by:
> +// Created: 14.01.2009
> +// RCS-ID: $Id$
> +// Copyright: (c) 2009 saces <saces at freenetproject.org>
> +// Licence: wxWindows licence
>
+/////////////////////////////////////////////////////////////////////////////
> +
> +#ifndef _FCP_LOGGER_H_
> +#define _FCP_LOGGER_H_
> +
> +#include "wx/wxprec.h"
> +#ifndef WX_PRECOMP
> + #include "wx/wx.h"
> +#endif
> +
> +class wxFCPLogger
> +{
> +public:
> + wxFCPLogger() {};
> + virtual ~wxFCPLogger() {};
> +
> + virtual void incomingLine(const wxString& line)=0;
> + virtual void outgoingLine(const wxString& line)=0;
> + virtual void incomingData(const wxUint32 nbytes)=0;
> + virtual void outgoingData(const wxUint32 nbytes)=0;
> +};
> +
> +class wxFCPNullLogger : public wxFCPLogger
> +{
> +public:
> + virtual void incomingLine(const wxString& WXUNUSED(line)) { }
> + virtual void outgoingLine(const wxString& WXUNUSED(line)) { }
> + virtual void incomingData(const wxUint32 WXUNUSED(nbytes)) { }
> + virtual void outgoingData(const wxUint32 WXUNUSED(nbytes)) { }
> +};
> +
> +class wxFCPSimpleLogger : public wxFCPLogger
> +{
> +public:
> + virtual void incomingLine(const wxString& line);
> + virtual void outgoingLine(const wxString& line);
> + virtual void incomingData(const wxUint32 nbytes);
> + virtual void outgoingData(const wxUint32 nbytes);
> +};
> +
> +#endif // ifndef _FCP_LOGGER_H_
>
> Added: trunk/apps/wxFCP/include/wx/fcp/message.h
> ===================================================================
> --- trunk/apps/wxFCP/include/wx/fcp/message.h (rev
0)
> +++ trunk/apps/wxFCP/include/wx/fcp/message.h 2009-01-19 19:39:19 UTC (rev
25124)
> @@ -0,0 +1,70 @@
>
+/////////////////////////////////////////////////////////////////////////////
> +// Name: wx/fcp/message.h
> +// Purpose: declaration for fcp messages
> +// Author: saces
> +// Modified by:
> +// Created: 14.01.2009
> +// RCS-ID: $Id$
> +// Copyright: (c) 2009 saces <saces at freenetproject.org>
> +// Licence: wxWindows licence
>
+/////////////////////////////////////////////////////////////////////////////
> +
> +#ifndef _FCP_MESSAGE_H_
> +#define _FCP_MESSAGE_H_
> +
> +#include "wx/wxprec.h"
> +#ifndef WX_PRECOMP
> + #include "wx/wx.h"
> +#endif
> +
> +WX_DECLARE_STRING_HASH_MAP( wxString, MessageItems );
> +
> +class wxFCPBaseMessage
> +{
> +public:
> + wxFCPBaseMessage();
> + virtual ~wxFCPBaseMessage();
> + wxString toString();
> +
> + virtual bool isDataCarrying()=0;
> +
> + void Clear();
> + bool setName(wxString name);
> + const wxString getName();
> + bool setEndMarker(wxString endmarker);
> + const wxString getEndMarker();
> + bool setItem(const wxString key, const wxString value);
> + wxString getItem(const wxString key);
> +
> +public:
> + wxString m_name;
> + wxString m_endmarker;
> + MessageItems m_items;
> +};
> +
> +// node to client
> +class wxFCPNodeMessage : public wxFCPBaseMessage
> +{
> +public:
> + wxFCPNodeMessage();
> + bool isMessageName(const wxString name);
> + virtual bool isDataCarrying();
> +};
> +
> +// client to node
> +class wxFCPCommand : public wxFCPBaseMessage
> +{
> +public:
> + wxFCPCommand();
> + virtual bool isDataCarrying();
> +};
> +
> +class wxFCPCommandFactory
> +{
> +public:
> + static wxFCPCommand* VoidMessage();
> + static wxFCPCommand* ClientHello(const wxString name);
> + static wxFCPCommand* GenerateSSK();
> +};
> +
> +#endif // ifndef _FCP_MESSAGE_H_
>
> Modified: trunk/apps/wxFCP/samples/fcp/nodeinfo.cpp
> ===================================================================
> --- trunk/apps/wxFCP/samples/fcp/nodeinfo.cpp 2009-01-17 23:59:33 UTC (rev
25123)
> +++ trunk/apps/wxFCP/samples/fcp/nodeinfo.cpp 2009-01-19 19:39:19 UTC (rev
25124)
> @@ -13,9 +13,11 @@
> // This application is used more for testing rather than as sample.
> // If you're looking at this file to learn how to use the wxFCP library,
> // you may better use the generated api documentation instead.
> -
> -#include "wx/cmdline.h"
>
> +// Overwrite defaults, less typing while testing
> +// or make it fit for your envirionment
> +//#define DEFAULT_FCP_PORT 9482
> +//#define DEFAULT_FCP_TIMEOUT 20
> #include "wx/fcp/fcp.h"
>
> #include "wx/wxprec.h"
> @@ -23,6 +25,8 @@
> #include "wx/wx.h"
> #endif
>
> +#include <wx/cmdline.h>
> +
> int main(int argc, char **argv)
> {
> #if !wxUSE_UNICODE
> @@ -54,16 +58,26 @@
> static const wxCmdLineEntryDesc cmdLineDesc[] =
> {
> { wxCMD_LINE_SWITCH, _T("h"), _T("help"), _T("show this help
message"),
> - wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
> - { wxCMD_LINE_SWITCH, _T("v"), _T("verbose"), _T("be verbose") },
> + wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
> + { wxCMD_LINE_SWITCH, _T("q"), _T("quiet"), _T("be quiet (don't log
fcp)") },
> + { wxCMD_LINE_OPTION, _T("o"), _T("fcphost"), _T("use given fcp
host"),
> + wxCMD_LINE_VAL_STRING },
> + { wxCMD_LINE_OPTION, _T("p"), _T("fcpport"), _T("use given fcp
port"),
> + wxCMD_LINE_VAL_NUMBER },
> + { wxCMD_LINE_OPTION, _T("t"), _T("fcptimeout"), _T("set connection
timeout for fcp"),
> + wxCMD_LINE_VAL_NUMBER },
> { wxCMD_LINE_NONE }
> };
>
> + // init logging
> + wxLog *logger=new wxLogStream(&std::cout);
> + wxLog::SetActiveTarget(logger);
> +
> wxCmdLineParser parser(cmdLineDesc, argc, wxArgv);
> - switch ( parser.Parse() )
> + switch ( parser.Parse(true) )
> {
> case -1:
> - wxLogMessage(_T("Help was given, terminating."));
> + return 0; // Help was shown, go away.
> break;
>
> case 0:
> @@ -71,11 +85,92 @@
> break;
>
> default:
> - wxLogMessage(_T("Syntax error detected, aborting."));
> + wxLogFatalError(_T("Syntax error detected, aborting."));
> break;
> }
>
> - // do something useful here
> + wxString host;
> + if ( !parser.Found(_T("o"), &host) )
> + {
> + if ( !wxGetEnv(_T(FCP_HOST_ENV_NAME), &host) )
> + {
> + host = _T(DEFAULT_FCP_HOST);
> + }
> + }
>
> + long port;
> + if ( !parser.Found(_T("p"), &port) )
> + {
> + wxString sport;
> + if ( wxGetEnv(_T(FCP_PORT_ENV_NAME), &sport) )
> + {
> + if ( !sport.ToLong(&port) )
> + {
> + wxLogFatalError(_T("not a valid number"));
> + }
> + }
> + else
> + {
> + port = DEFAULT_FCP_PORT;
> + }
> + }
> +
> + long timeout;
> + if ( !parser.Found(_T("t"), &timeout) )
> + {
> + wxString stimeout;
> + if ( wxGetEnv(_T(FCP_TIMEOUT_ENV_NAME), &stimeout) )
> + {
> + if ( !stimeout.ToLong(&timeout) )
> + {
> + wxLogFatalError(_T("not a valid number"));
> + }
> + }
> + else
> + {
> + timeout = DEFAULT_FCP_TIMEOUT;
> + }
> + }
> +
> + // hack somewhat to get a first successfull hello
> +
> + wxFCPConnection conn = wxFCPConnection(&host, port, timeout);
> +
> + if ( !parser.Found(_T("q")) )
> + {
> + wxFCPSimpleLogger *fcplogger = new wxFCPSimpleLogger();
> + conn.setFCPLogger(fcplogger);
> + }
> +
> + conn.Connect();
> +
> + if (conn.IsConnected())
> + wxLogMessage(_T("Succeeded ! FCP Connection established (helo
done)"));
> + else
> + {
> + wxLogMessage(_T("Can't connect/helo to the specified host"));
> + return 1;
> + }
> +
> + conn.sendCommand(wxFCPCommandFactory::GenerateSSK());
> +
> + wxFCPNodeMessage message = wxFCPNodeMessage();
> + conn.readEndMessage(message);
> +
> + if ( !message.isMessageName(_T("SSKKeypair")) )
> + {
> + wxLogMessage(_T("Unexpected reply from node, generate ssk
failed"));
> + return 1;
> + }
> +
> + wxString readkey = message.getItem(_T("RequestURI"));
> + wxString writekey = message.getItem(_T("InsertURI"));
> +
> + wxLogMessage(_T("Got a keypair from node:\n Insert URI: %s\n Request
URI: %s"), writekey.c_str(), readkey.c_str());
> +
> + conn.Close(true);
> +
> + wxLogMessage(_T("Socket closed. Bye"));
> +
> return 0;
> }
>
> Added: trunk/apps/wxFCP/src/fcp/connection.cpp
> ===================================================================
> --- trunk/apps/wxFCP/src/fcp/connection.cpp (rev 0)
> +++ trunk/apps/wxFCP/src/fcp/connection.cpp 2009-01-19 19:39:19 UTC (rev
25124)
> @@ -0,0 +1,132 @@
>
+/////////////////////////////////////////////////////////////////////////////
> +// Name: src/fcp/connection.cpp
> +// Purpose: fcp connection classes
> +// Author: saces
> +// Modified by:
> +// Created: 14.01.2009
> +// RCS-ID: $Id$
> +// Copyright: (c) 2009 saces <saces at freenetproject.org>
> +// Licence: wxWindows license
>
+/////////////////////////////////////////////////////////////////////////////
> +
> +#include "wx/fcp/connection.h"
> +
> +#include "wx/wxprec.h"
> +#ifndef WX_PRECOMP
> + #include "wx/wx.h"
> +#endif
> +
> +wxFCPConnection::wxFCPConnection(wxString *host, wxUint16 port, wxUint32
timeout, wxFCPLogger *logger) : wxFCPIOConnection()
> +{
> +#if wxUSE_IPV6
> + m_sockaddress = wxIPV6address();
> +#else
> + m_sockaddress = wxIPV4address();
> +#endif
> + m_sockaddress.Hostname(*host);
> + m_sockaddress.Service(port);
> + m_timeout = timeout;
> +}
> +
> +bool wxFCPConnection::Connect()
> +{
> + wxFCPIOConnection::setTimeout(m_timeout);
> + wxFCPIOConnection::Connect(m_sockaddress);
> +
> + wxFCPCommand *helocommand =
wxFCPCommandFactory::ClientHello(_T("F??B?r"));
> +
> + sendCommand(helocommand);
> +
> + wxFCPNodeMessage *message = new wxFCPNodeMessage();
> + readEndMessage(*message);
> +
> + if ( !message->isMessageName(_T("NodeHello")) )
> + {
> + wxLogMessage(_T("Unexpected reply from node, helo failed"));
> + m_nodehellomessage = NULL;
> + delete message;
> + return false;
> + }
> +
> + m_nodehellomessage = message;
> + return true;
> +}
> +
> +bool wxFCPConnection::Close(bool flush)
> +{
> + return wxFCPIOConnection::Close(flush);
> +}
> +
> +bool wxFCPConnection::readLine(wxString& line)
> +{
> + return wxFCPIOConnection::readLine(line);
> +}
> +
> +bool wxFCPConnection::readEndMessage(wxFCPNodeMessage& message)
> +{
> + message.Clear();
> +
> + wxString line = wxString();
> + readLine(line);
> + message.setName(line);
> +
> + while ( true )
> + {
> + readLine(line);
> + int pos = line.Find('=');
> + if (pos == wxNOT_FOUND)
> + {
> + message.setEndMarker(line);
> + break;
> + }
> + else
> + {
> + wxString k = line.Left(pos);
> + //wxLogMessage(_T("Key %s"), k.c_str());
> + wxString v = line.Mid(pos+1);
> + //wxLogMessage(_T("Val %s"), v.c_str());
> + message.setItem(k, v);
> + }
> + }
> +
> + return true;
> +}
> +
> +bool wxFCPConnection::IsConnected()
> +{
> + if ( !wxFCPIOConnection::IsConnected() )
> + return false;
> + return ( m_nodehellomessage );
> +}
> +
> +bool wxFCPConnection::setFCPLogger(wxFCPLogger *logger)
> +{
> + return wxFCPIOConnection::setFCPLogger(logger);
> +}
> +
> +bool wxFCPConnection::sendCommand(wxFCPCommand *command)
> +{
> + bool result = sendCommand(*command);
> + if ( result )
> + delete command;
> + return result;
> +}
> +
> +bool wxFCPConnection::sendCommand(wxFCPCommand& command)
> +{
> + writeLine(command.getName());
> +
> + // iterate over all the items
> + MessageItems::iterator it;
> + for( it = command.m_items.begin(); it != command.m_items.end(); ++it )
> + {
> + wxString line = it->first;
> + line += '=';
> + line += it->second;
> + writeLine(line);
> + }
> +
> + writeLine(command.getEndMarker());
> +
> + return true;
> +}
>
> Added: trunk/apps/wxFCP/src/fcp/ioconnection.cpp
> ===================================================================
> --- trunk/apps/wxFCP/src/fcp/ioconnection.cpp (rev
0)
> +++ trunk/apps/wxFCP/src/fcp/ioconnection.cpp 2009-01-19 19:39:19 UTC (rev
25124)
> @@ -0,0 +1,130 @@
>
+/////////////////////////////////////////////////////////////////////////////
> +// Name: src/fcp/ioconnection.cpp
> +// Purpose: fcp connection io classes
> +// Author: saces
> +// Modified by:
> +// Created: 14.01.2009
> +// RCS-ID: $Id$
> +// Copyright: (c) 2009 saces <saces at freenetproject.org>
> +// Licence: wxWindows license
>
+/////////////////////////////////////////////////////////////////////////////
> +
> +#include "wx/fcp/ioconnection.h"
> +
> +#include "wx/wxprec.h"
> +#ifndef WX_PRECOMP
> + #include "wx/wx.h"
> +#endif
> +
> +const char nl = '\n';
> +
> +wxFCPIOConnection::wxFCPIOConnection()
> +{
> + m_sock = new wxSocketClient(wxSOCKET_WAITALL);
> + m_sock->Notify(false);
> + m_fcplogger = NULL;
> +}
> +
> +wxFCPIOConnection::~wxFCPIOConnection()
> +{
> + delete m_sock;
> +}
> +
> +bool wxFCPIOConnection::Connect(wxSockAddress& sockaddress)
> +{
> + return m_sock->Connect(sockaddress, true);
> +}
> +
> +bool wxFCPIOConnection::IsConnected()
> +{
> + if ( !m_sock )
> + return false;
> + return m_sock->IsConnected();
> +}
> +
> +bool wxFCPIOConnection::Close(bool flush)
> +{
> + return false;
> +}
> +
> +bool wxFCPIOConnection::setFCPLogger(wxFCPLogger *logger)
> +{
> +// if ( !m_fcplogger )
> +// {
> + m_fcplogger = logger;
> + return true;
> +// }
> +// return false;
> +}
> +
> +void wxFCPIOConnection::setTimeout(wxUint32 timeout)
> +{
> + m_sock->SetTimeout(timeout);
> +}
> +
> +bool wxFCPIOConnection::writeLine(const wxString& line)
> +{
> + // TODO wxString::utf8_str() is since 2.8.4,
> + // invent our own convert for older versions
> + const wxCharBuffer cbuf = line.utf8_str();
> + if ( m_fcplogger )
> + m_fcplogger->outgoingLine(line);
> + write(cbuf, strlen(cbuf));
> + return write(&nl, 1);
> +}
> +
> +bool wxFCPIOConnection::readLine(wxString& line)
> +{
> + static const int MAX_LINE_LEN = 4096;
> +
> + line.Empty();
> +
> + int n;
> + for ( n = 1; n < MAX_LINE_LEN; n++ )
> + {
> + char c;
> + m_sock->Read( &c, 1 );
> + int charsread = m_sock->LastCount();
> +
> + if ( charsread == 1 )
> + {
> + if ( c == '\n' )
> + break;
> + line += c;
> + }
> + else if ( charsread == 0 )
> + {
> + if ( n == 1 )
> + return false;
> + else
> + break;
> + }
> + }
> + if ( m_fcplogger )
> + m_fcplogger->incomingLine(line);
> +
> +// TODO static wxString FromUTF8(const char* s)
> + return true;
> +}
> +
> +bool wxFCPIOConnection::writeData(const void* buffer, wxUint32 nbytes)
> +{
> + m_sock->Write(buffer, nbytes);
> +
> + if ( m_fcplogger )
> + m_fcplogger->outgoingData(nbytes);
> +
> + return !m_sock->Error();
> +}
> +
> +bool wxFCPIOConnection::write(const void* buffer, wxUint32 nbytes)
> +{
> + m_sock->Write(buffer, nbytes);
> + return !m_sock->Error();
> +}
> +
> +bool wxFCPIOConnection::readData(void* buffer, wxUint32 nbytes)
> +{
> + m_sock->Read(buffer, nbytes);
> + return !m_sock->Error();
> +}
>
> Added: trunk/apps/wxFCP/src/fcp/logger.cpp
> ===================================================================
> --- trunk/apps/wxFCP/src/fcp/logger.cpp (rev 0)
> +++ trunk/apps/wxFCP/src/fcp/logger.cpp 2009-01-19 19:39:19 UTC (rev
> 25124)
> @@ -0,0 +1,37 @@
>
+/////////////////////////////////////////////////////////////////////////////
> +// Name: src/fcp/logger.cpp
> +// Purpose: fcp logger classes
> +// Author: saces
> +// Modified by:
> +// Created: 14.01.2009
> +// RCS-ID: $Id$
> +// Copyright: (c) 2009 saces <saces at freenetproject.org>
> +// Licence: wxWindows license
>
+/////////////////////////////////////////////////////////////////////////////
> +
> +#include "wx/wxprec.h"
> +#ifndef WX_PRECOMP
> + #include "wx/wx.h"
> +#endif
> +
> +#include "wx/fcp/logger.h"
> +
> +void wxFCPSimpleLogger::incomingLine(const wxString& line)
> +{
> + wxLogMessage(_T("FCP in: %s"), line.c_str());
> +}
> +
> +void wxFCPSimpleLogger::outgoingLine(const wxString& line)
> +{
> + wxLogMessage(_T("FCP out: %s"), line.c_str());
> +}
> +
> +void wxFCPSimpleLogger::incomingData(const wxUint32 nbytes)
> +{
> + wxLogMessage(_T("FCP in: <%d> bytes of data"), nbytes);
> +}
> +
> +void wxFCPSimpleLogger::outgoingData(const wxUint32 nbytes)
> +{
> + wxLogMessage(_T("FCP out: <%d> bytes of data"), nbytes);
> +}
>
> Added: trunk/apps/wxFCP/src/fcp/message.cpp
> ===================================================================
> --- trunk/apps/wxFCP/src/fcp/message.cpp (rev 0)
> +++ trunk/apps/wxFCP/src/fcp/message.cpp 2009-01-19 19:39:19 UTC (rev
> 25124)
> @@ -0,0 +1,122 @@
>
+/////////////////////////////////////////////////////////////////////////////
> +// Name: src/fcp/message.cpp
> +// Purpose: fcp message classes
> +// Author: saces
> +// Modified by:
> +// Created: 16.01.2009
> +// RCS-ID: $Id$
> +// Copyright: (c) 2009 saces <saces at freenetproject.org>
> +// Licence: wxWindows license
>
+/////////////////////////////////////////////////////////////////////////////
> +
> +#include "wx/wxprec.h"
> +#ifndef WX_PRECOMP
> + #include "wx/wx.h"
> +#endif
> +
> +#include "wx/fcp/message.h"
> +
> +#define NORMAL_ENDMARKER "EndMessage"
> +#define DATA_ENDMARKER "Data"
> +
> +wxFCPBaseMessage::wxFCPBaseMessage()
> +{
> + m_name = wxString();
> + m_endmarker = wxString();
> + m_items = MessageItems();
> +}
> +
> +wxFCPBaseMessage::~wxFCPBaseMessage() {
> + Clear();
> +}
> +
> +void wxFCPBaseMessage::Clear()
> +{
> + m_name.Clear();
> + m_endmarker.Clear();
> + m_items.clear();
> +}
> +
> +bool wxFCPBaseMessage::setName(wxString name)
> +{
> + m_name = name;
> + return true;
> +}
> +
> +const wxString wxFCPBaseMessage::getName()
> +{
> + return m_name;
> +}
> +
> +bool wxFCPBaseMessage::setEndMarker(wxString endmarker)
> +{
> + m_endmarker = endmarker;
> + return true;
> +}
> +
> +const wxString wxFCPBaseMessage::getEndMarker()
> +{
> + return _T(NORMAL_ENDMARKER);
> +}
> +
> +bool wxFCPBaseMessage::setItem(const wxString key, const wxString value)
> +{
> + m_items[key] = value;
> + return true;
> +}
> +
> +wxString wxFCPBaseMessage::getItem(const wxString key)
> +{
> + return m_items[key];
> +}
> +
> +wxFCPNodeMessage::wxFCPNodeMessage() :
> +wxFCPBaseMessage()
> +{
> + ;
> +}
> +
> +bool wxFCPNodeMessage::isDataCarrying()
> +{
> + return false;
> +}
> +
> +bool wxFCPNodeMessage::isMessageName(const wxString name)
> +{
> + return ( m_name == name );
> +}
> +
> +//----
> +
> +wxFCPCommand::wxFCPCommand() :
> +wxFCPBaseMessage()
> +{
> + ;
> +}
> +
> +bool wxFCPCommand::isDataCarrying()
> +{
> + return false;
> +}
> +
> +//----
> +
> +wxFCPCommand* wxFCPCommandFactory::ClientHello(const wxString name)
> +{
> + wxFCPCommand *ch = new wxFCPCommand();
> + ch->setName(_T("ClientHello"));
> + ch->setItem(_T("Name"), name);
> + ch->setItem(_T("ExpectedVersion"), _T("2.0"));
> + return ch;
> +};
> +
> +wxFCPCommand* wxFCPCommandFactory::GenerateSSK()
> +{
> + wxFCPCommand *ch = new wxFCPCommand();
> + ch->setName(_T("GenerateSSK"));
> + //ch->setItem(_T("Name"), name);
> + //ch->setItem(_T("ExpectedVersion"), _T("2.0"));
> + return ch;
> +};
> +
> +
>
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: not available
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20090121/9dff0be6/attachment.pgp>