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, [email protected] 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 <[email protected]>
> +// 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 <[email protected]>
> +// 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 <[email protected]>
> +// 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 <[email protected]>
> +// 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 <[email protected]>
> +// 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 <[email protected]>
> +// 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 <[email protected]>
> +// 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 <[email protected]>
> +// 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
> [email protected]
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Attachment: pgpmLaRWSOohW.pgp
Description: PGP signature

_______________________________________________
Devl mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to