Logo Search packages:      
Sourcecode: tcpreen version File versions  Download package

buflog.h

/*
 * buflog.h - buffer-based DataLog base classes
 * $Id: buflog.h,v 1.2 2004/06/05 15:15:17 rdenisc Exp $
 */

/***********************************************************************
 *  Copyright (C) 2002-2003 Remi Denis-Courmont.                       *
 *  This program is free software; you can redistribute and/or modify  *
 *  it under the terms of the GNU General Public License as published  *
 *  by the Free Software Foundation; version 2 of the license.         *
 *                                                                     *
 *  This program is distributed in the hope that it will be useful,    *
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of     *
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               *
 *  See the GNU General Public License for more details.               *
 *                                                                     *
 *  You should have received a copy of the GNU General Public License  *
 *  along with this program; if not, you can get it from:              *
 *  http://www.gnu.org/copyleft/gpl.html                               *
 ***********************************************************************/

#ifndef __TCPREEN_BUFLOG_H

# define __TCPREEN_BUFLOG_H
# include "log.h"

# ifndef __cplusplus
#  error This is a C++ only header!
# else
/*
 * Base class for (on-demand) line-bufferized log format
 *
 * NOTES:
 *  - Out-of-Band data is not buffered,
 *  when buffering is enabled:
 *  - data might be lost if shutdown occurs in the middle of a line,
 *  - Carriage Return ('\r') are ignored,
 *  - line feeds ('\n') are replaced with '\0',
 *  - data sent to WriteServerLine() or WriteClientLine() is always
 *    nul-terminated.
 */
class LineBufDataLog : public DataLog
{
      private:
            typedef struct
            {
                  char *buf;
                  size_t tsize, usize; // total size, useful size
            } LineBuf;
            LineBuf clb, svb;

            virtual int WriteServerLine (const char *data, int length,
                                    int oob = 0) = 0;
            virtual int WriteClientLine (const char *data, int length,
                                    int oob = 0) = 0;

            int Write (int isout, const char *data, int length, int oob);
            static void SetBuffer (LineBuf *st, char *buf = NULL,
                              size_t len = 0);

            int WriteData (LineBuf* st, const void *data, int len,
                        int oob);


      public:
            LineBufDataLog (void) : DataLog ()
            {
                  SetBuffer (&clb);
                  SetBuffer (&svb);
            }

            // sets up buffer to hold data sent by the server
            void SetServerBuffer (char *ptr = NULL, size_t size = 0)
            {
                  SetBuffer (&svb, ptr, size);
            }

            // same for the client
            void SetClientBuffer (char *ptr = NULL, size_t size = 0)
            {
                  SetBuffer (&clb, ptr, size);
            }

            virtual int WriteServerData (const void *data, int length,
                                    int oob);
            virtual int WriteClientData (const void *data, int length,
                                    int oob);
};
# endif /* ifdef __cplusplus */
#endif /* ifndef __TCPREEN_BUFLOG_H */

Generated by  Doxygen 1.6.0   Back to index