00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 #include "C_DataDecode.hpp"
00021 #include "Utils.hpp"
00022 
00023 #include <cstring>
00024 
00025 #define SOCKET_ERROR(l,m) iostream_error << m << iostream_endl << iostream_flush
00026 #ifdef DEBUG_MODE
00027 #define SOCKET_DEBUG(l,m) iostream_error << m << iostream_endl << iostream_flush
00028 #else
00029 #define SOCKET_DEBUG(l,m)
00030 #endif
00031 
00032 C_DataDecode::C_DataDecode(size_t P_buf_size) {
00033   SOCKET_DEBUG(0, "C_DataDecode::C_DataDecode (" 
00034             << P_buf_size << ")");
00035   m_segm_size = 0 ;
00036   m_buf_size = P_buf_size;
00037   ALLOC_TABLE(m_buffer,
00038               unsigned char*,
00039               sizeof(unsigned char),
00040               m_buf_size);
00041 }
00042 
00043 C_DataDecode::~C_DataDecode() {
00044   SOCKET_DEBUG(0, "C_DataDecode::~C_DataDecode ()");
00045   m_segm_size = 0 ;
00046   FREE_TABLE(m_buffer);
00047   m_buf_size = 0 ;
00048 }
00049 
00050 void C_DataDecode::init () {
00051   SOCKET_DEBUG(0, "C_DataDecode::init ()");
00052   m_segm_size = 0 ;
00053 }
00054 
00055 void C_DataDecode::reset_buffer() {
00056   SOCKET_DEBUG(0, "C_DataDecode::reset_buffer ()");
00057   m_segm_size = 0 ;
00058 }
00059 
00060 unsigned char *C_DataDecode::get_buffer (unsigned char* P_buf, 
00061                                          size_t       * P_pSize) {
00062 
00063   size_t L_final_size = (*P_pSize) ;
00064 
00065   SOCKET_DEBUG(0, "C_DataDecode::get_buffer (" 
00066             << (void*)&P_buf[0] << "," << *P_pSize << ")");
00067 
00068   SOCKET_DEBUG(0, "C_DataDecode::get_buffer() segment = " << m_segm_size);
00069 
00070   
00071   L_final_size += m_segm_size;
00072   if (L_final_size <= m_buf_size) {
00073     memcpy (m_buffer+m_segm_size, P_buf, *P_pSize);
00074     m_segm_size = 0 ;
00075     *P_pSize = L_final_size ;
00076   } else {
00077     
00078     *P_pSize = 0 ;
00079   }
00080 
00081   SOCKET_DEBUG(0, "C_DataDecode::get_buffer () return " 
00082             << &m_buffer);
00083 
00084   return (m_buffer);
00085 }
00086 
00087 int           C_DataDecode::set_buffer (unsigned char* P_buf, 
00088                                          size_t         P_size) {
00089   int L_ret = 0 ;
00090   SOCKET_DEBUG(0, "C_DataDecode::set_buffer (" 
00091             << &P_buf[0] << "," << P_size << ")");
00092 
00093   if (P_size <= m_buf_size) {
00094     memmove(m_buffer, P_buf, P_size);
00095     m_segm_size = P_size ;
00096   } else {
00097     SOCKET_ERROR(E_GEN_FATAL_ERROR, "session maximum size buffer=" << m_buf_size << " data=" << P_size);
00098     L_ret = -1 ;
00099   }
00100   return (L_ret);
00101 }