From 5770cbb3c6543a39a79876cd59c4736803c4d988 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:21 +0000 Subject: Utilisateur : Fcolin Date : 16/06/00 Heure : 10:14 Créé (vss 1) --- Ivy/BufferedSocket.cxx | 165 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 Ivy/BufferedSocket.cxx (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx new file mode 100644 index 0000000..33818a0 --- /dev/null +++ b/Ivy/BufferedSocket.cxx @@ -0,0 +1,165 @@ +// BufferedSocket.cpp: implementation of the CBufferedSocket class. +// +////////////////////////////////////////////////////////////////////// + +#include "stdafx.h" +#include "BufferedSocket.h" + +#ifdef _DEBUG +#undef THIS_FILE +static char THIS_FILE[]=__FILE__; +#define new DEBUG_NEW +#endif + +//IMPLEMENT_DYNAMIC(CBufferedSocket, CThreadedSocket) + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +CBufferedSocket::CBufferedSocket() +{ + separator = '\n'; + ptr = buf; + connected = false; + InitializeCriticalSection( &m_CritSection ); +} + +CBufferedSocket::~CBufferedSocket() +{ + +} +void CBufferedSocket::Accept(CBufferedSocket& rConnectedSocket, SOCKADDR* lpSockAddr , int* lpSockAddrLen ) +{ + CThreadedSocket::Accept(rConnectedSocket, lpSockAddr , lpSockAddrLen ); + rConnectedSocket.connected = true; +} +void CBufferedSocket::OnReceive(int nErrorCode) +{ + + + char *ptr_nl; + long nb_to_read = 0; + long nb; + + SOCKADDR addr; + int len; + + /* limitation taille buffer */ + nb_to_read = MAX_BUFFER - ( ptr - buf ); + if( nb_to_read == 0 ) + { + TRACE("Erreur message trop long sans LF\n"); + ptr = buf; + return; + } + nb = ReceiveFrom( ptr, nb_to_read, &addr, &len, MSG_PARTIAL ); + if ( nb == SOCKET_ERROR ) + { + int err = GetLastError(); + if ( err != WSAESHUTDOWN ) // shutdown by remote side ? + TRACE("error Receive %d socket %d\n",GetLastError(),m_hSocket); + Close(); + return; + } + if ( nb == 0 ) // shutdown by remote side ? + { + Close(); + return; + } + + ptr += nb; + assert ( ptr < (buf +sizeof( buf ))); + *ptr = '\0'; + ptr = buf; + while( (ptr_nl = strchr( ptr, '\n' ))) + { + *ptr_nl = '\0'; + //TRACE("message %s\n", ptr ); + OnReceive( ptr ); + ptr = ++ptr_nl; + } + if ( *ptr != '\0' ) + { /* recopie ligne incomplete au debut du buffer */ + strcpy( buf, ptr ); + ptr = buf + strlen(buf); + } + else + { + ptr = buf; + } + + +} + +void CBufferedSocket::OnReceive( char *line ) +{ +} +void CBufferedSocket::SetSeparator( char sep ) +{ + separator = sep; +} +void CBufferedSocket::OnWakeup() +{ + string msg; + BOOL empty; + try + { + // on essaye de garder la section critique a l'interieur de la boucle + // pour permettre l'entrelacement avec la partie emetrice + do + { + EnterCriticalSection( &m_CritSection ); + empty = buf_out.empty(); + if ( !empty ) msg = buf_out.front(); + LeaveCriticalSection( &m_CritSection ); + //TRACE("CBufferedSocket::OnWakeup Sending buffer %s\n",msg.c_str()); + if ( !empty ) + { + int lg = msg.length(); + CThreadedSocket::Send( msg.c_str(), lg ); + EnterCriticalSection( &m_CritSection ); + buf_out.pop_front(); + LeaveCriticalSection( &m_CritSection ); + } + } while ( !empty ); + } + catch ( CThreadedSocketException* e ) + { + int err = e->GetError(); + if ( err == WSAEWOULDBLOCK ) + { + // put back the buffer, preserving the order + //EnterCriticalSection( &m_CritSection ); + //buf_out.push_front( msg); + //LeaveCriticalSection( &m_CritSection ); + } + else TRACE("CBufferedSocket::OnWakeup error %d Sending buffer %s \n",err,msg.c_str()); + } + + +} +void CBufferedSocket::OnSend( int nErrorCode ) +{ + OnWakeup(); +} +void CBufferedSocket::OnConnect( int nErrorCode ) +{ + connected = true; + OnWakeup(); +//TRACE("CBufferedSocket::OnConnect buffer empty %d\n",buf_out.IsEmpty()); +} +void CBufferedSocket::Send ( const char * data ) +{ + //BOOL toBeSignaled; + EnterCriticalSection( &m_CritSection ); + //toBeSignaled = buf_out.IsEmpty() && connected; + buf_out.push_back( string(data) ); + LeaveCriticalSection( &m_CritSection ); + //TRACE("CBufferedSocket::Send Adding buffer to send count %d\n",buf_out.size()); + if ( connected ) + { + BOOL ok = WSASetEvent( m_hEvent[1] ); + if ( !ok ) TRACE( "CBufferedSocket::Send Error SetEvent %d\n", WSAGetLastError()); + } +} -- cgit v1.1 From de0e97b1d6104588a4fe4720d5906507ebd37ada Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:23 +0000 Subject: Utilisateur : Fcolin Date : 14/11/00 Heure : 18:58 Archivé dans $/Ivy (vss 2) --- Ivy/BufferedSocket.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 33818a0..39c7203 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -43,7 +43,7 @@ void CBufferedSocket::OnReceive(int nErrorCode) long nb; SOCKADDR addr; - int len; + int len = sizeof( addr ); /* limitation taille buffer */ nb_to_read = MAX_BUFFER - ( ptr - buf ); -- cgit v1.1 From 30797436d86f3cd922fca6f53536c6805e8d321d Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:24 +0000 Subject: Utilisateur : Fcolin Date : 23/01/01 Heure : 13:12 Archivé dans $/Ivy Commentaire: remove 'using name space std;' (vss 3) --- Ivy/BufferedSocket.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 39c7203..d19b68f 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -101,7 +101,7 @@ void CBufferedSocket::SetSeparator( char sep ) } void CBufferedSocket::OnWakeup() { - string msg; + String msg; BOOL empty; try { @@ -154,7 +154,7 @@ void CBufferedSocket::Send ( const char * data ) //BOOL toBeSignaled; EnterCriticalSection( &m_CritSection ); //toBeSignaled = buf_out.IsEmpty() && connected; - buf_out.push_back( string(data) ); + buf_out.push_back( String(data) ); LeaveCriticalSection( &m_CritSection ); //TRACE("CBufferedSocket::Send Adding buffer to send count %d\n",buf_out.size()); if ( connected ) -- cgit v1.1 From c5851089facb6bcc36b736d21efd9941941667c3 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:26 +0000 Subject: Utilisateur : Fcolin Date : 31/01/01 Heure : 11:18 Archivé dans $/Ivy (vss 4) --- Ivy/BufferedSocket.cxx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index d19b68f..63fd6c0 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -69,7 +69,7 @@ void CBufferedSocket::OnReceive(int nErrorCode) } ptr += nb; - assert ( ptr < (buf +sizeof( buf ))); + ASSERT( ptr < (buf +sizeof( buf ))); *ptr = '\0'; ptr = buf; while( (ptr_nl = strchr( ptr, '\n' ))) @@ -101,8 +101,8 @@ void CBufferedSocket::SetSeparator( char sep ) } void CBufferedSocket::OnWakeup() { - String msg; - BOOL empty; + string msg; + bool empty; try { // on essaye de garder la section critique a l'interieur de la boucle @@ -134,7 +134,7 @@ void CBufferedSocket::OnWakeup() //buf_out.push_front( msg); //LeaveCriticalSection( &m_CritSection ); } - else TRACE("CBufferedSocket::OnWakeup error %d Sending buffer %s \n",err,msg.c_str()); + else TRACE("CBufferedSocket::OnWakeup error %d Sending buffer %s \n",err,msg); } @@ -154,12 +154,12 @@ void CBufferedSocket::Send ( const char * data ) //BOOL toBeSignaled; EnterCriticalSection( &m_CritSection ); //toBeSignaled = buf_out.IsEmpty() && connected; - buf_out.push_back( String(data) ); + buf_out.push_back( string(data) ); LeaveCriticalSection( &m_CritSection ); //TRACE("CBufferedSocket::Send Adding buffer to send count %d\n",buf_out.size()); if ( connected ) { - BOOL ok = WSASetEvent( m_hEvent[1] ); - if ( !ok ) TRACE( "CBufferedSocket::Send Error SetEvent %d\n", WSAGetLastError()); +// BOOL ok = WSASetEvent( m_hEvent[1] ); +// if ( !ok ) TRACE( "CBufferedSocket::Send Error SetEvent %d\n", WSAGetLastError()); } } -- cgit v1.1 From 17b10f43897aec90cf5e4b57ebc7ab0e26ca5b83 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:28 +0000 Subject: Utilisateur : Fcolin Date : 2/02/01 Heure : 18:30 Archivé dans $/Ivy Commentaire: win CE compile not finished (vss 5) --- Ivy/BufferedSocket.cxx | 79 ++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 44 deletions(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 63fd6c0..6a17b71 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -6,13 +6,10 @@ #include "BufferedSocket.h" #ifdef _DEBUG -#undef THIS_FILE -static char THIS_FILE[]=__FILE__; +#define DEBUG_NEW new(__FILE__, __LINE__) #define new DEBUG_NEW #endif -//IMPLEMENT_DYNAMIC(CBufferedSocket, CThreadedSocket) - ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// @@ -99,54 +96,48 @@ void CBufferedSocket::SetSeparator( char sep ) { separator = sep; } -void CBufferedSocket::OnWakeup() +void CBufferedSocket::OnSend( int nErrorCode ) { string msg; bool empty; - try - { - // on essaye de garder la section critique a l'interieur de la boucle - // pour permettre l'entrelacement avec la partie emetrice - do + + // on essaye de garder la section critique a l'interieur de la boucle + // pour permettre l'entrelacement avec la partie emetrice + do + { + EnterCriticalSection( &m_CritSection ); + empty = buf_out.empty(); + if ( !empty ) msg = buf_out.front(); + LeaveCriticalSection( &m_CritSection ); + TRACE("CBufferedSocket::OnSend Sending buffer %s\n",msg.c_str()); + if ( !empty ) { - EnterCriticalSection( &m_CritSection ); - empty = buf_out.empty(); - if ( !empty ) msg = buf_out.front(); - LeaveCriticalSection( &m_CritSection ); - //TRACE("CBufferedSocket::OnWakeup Sending buffer %s\n",msg.c_str()); - if ( !empty ) - { - int lg = msg.length(); - CThreadedSocket::Send( msg.c_str(), lg ); + int lg = msg.length(); + int sent = CThreadedSocket::Send( msg.c_str(), lg ); + if ( sent == lg ) + { // emission correcte on enleve le msg de la file EnterCriticalSection( &m_CritSection ); buf_out.pop_front(); LeaveCriticalSection( &m_CritSection ); } - } while ( !empty ); - } - catch ( CThreadedSocketException* e ) - { - int err = e->GetError(); - if ( err == WSAEWOULDBLOCK ) - { - // put back the buffer, preserving the order - //EnterCriticalSection( &m_CritSection ); - //buf_out.push_front( msg); - //LeaveCriticalSection( &m_CritSection ); + else + { // erreur + int err = GetLastError(); + if ( err == WSAEWOULDBLOCK ) // si la file est pleine on sort en silence ! + { + } + else + TRACE("CBufferedSocket::OnWakeup error %d Sending buffer %s \n",err,msg); + break; } - else TRACE("CBufferedSocket::OnWakeup error %d Sending buffer %s \n",err,msg); - } - - -} -void CBufferedSocket::OnSend( int nErrorCode ) -{ - OnWakeup(); + } + } while ( !empty ); } + void CBufferedSocket::OnConnect( int nErrorCode ) { connected = true; - OnWakeup(); + StartWriter(); //TRACE("CBufferedSocket::OnConnect buffer empty %d\n",buf_out.IsEmpty()); } void CBufferedSocket::Send ( const char * data ) @@ -157,9 +148,9 @@ void CBufferedSocket::Send ( const char * data ) buf_out.push_back( string(data) ); LeaveCriticalSection( &m_CritSection ); //TRACE("CBufferedSocket::Send Adding buffer to send count %d\n",buf_out.size()); - if ( connected ) - { -// BOOL ok = WSASetEvent( m_hEvent[1] ); -// if ( !ok ) TRACE( "CBufferedSocket::Send Error SetEvent %d\n", WSAGetLastError()); - } +// if ( connected ) +// { + bool ok = SignalWriter(); + if ( !ok ) TRACE( "CBufferedSocket::SignalWriter Error %d\n", ::GetLastError()); +// } } -- cgit v1.1 From f5edd45381d5f08f77defbb975e1c8b5df3a18e4 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:31 +0000 Subject: Utilisateur : Fcolin Date : 19/02/01 Heure : 10:37 Archivé dans $/Ivy (vss 6) --- Ivy/BufferedSocket.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 6a17b71..b065a15 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -109,9 +109,10 @@ void CBufferedSocket::OnSend( int nErrorCode ) empty = buf_out.empty(); if ( !empty ) msg = buf_out.front(); LeaveCriticalSection( &m_CritSection ); - TRACE("CBufferedSocket::OnSend Sending buffer %s\n",msg.c_str()); if ( !empty ) { +// TRACE("CBufferedSocket::OnSend Sending buffer %s\n",msg.c_str()); + int lg = msg.length(); int sent = CThreadedSocket::Send( msg.c_str(), lg ); if ( sent == lg ) -- cgit v1.1 From 4c3311ee071d9f58bef1dff82a2772778f251cf1 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:33 +0000 Subject: Utilisateur : Fcolin Date : 19/02/01 Heure : 17:00 Archivé dans $/Ivy (vss 7) --- Ivy/BufferedSocket.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index b065a15..3d3474a 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -50,7 +50,7 @@ void CBufferedSocket::OnReceive(int nErrorCode) ptr = buf; return; } - nb = ReceiveFrom( ptr, nb_to_read, &addr, &len, MSG_PARTIAL ); + nb = ReceiveFrom( ptr, nb_to_read, &addr, &len, 0/*MSG_PARTIAL*/ ); if ( nb == SOCKET_ERROR ) { int err = GetLastError(); -- cgit v1.1 From 2a2c244787f3f9584c49b93d499e1d6f1af114c6 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:34 +0000 Subject: Utilisateur : Fcolin Date : 23/05/01 Heure : 10:25 Archivé dans $/Ivy (vss 8) --- Ivy/BufferedSocket.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 3d3474a..441d580 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -53,9 +53,9 @@ void CBufferedSocket::OnReceive(int nErrorCode) nb = ReceiveFrom( ptr, nb_to_read, &addr, &len, 0/*MSG_PARTIAL*/ ); if ( nb == SOCKET_ERROR ) { - int err = GetLastError(); + int err = this->GetLastError(); if ( err != WSAESHUTDOWN ) // shutdown by remote side ? - TRACE("error Receive %d socket %d\n",GetLastError(),m_hSocket); + TRACE("error Receive %d socket %d\n",this->GetLastError(),m_hSocket); Close(); return; } @@ -123,7 +123,7 @@ void CBufferedSocket::OnSend( int nErrorCode ) } else { // erreur - int err = GetLastError(); + int err = this->GetLastError(); if ( err == WSAEWOULDBLOCK ) // si la file est pleine on sort en silence ! { } @@ -152,6 +152,6 @@ void CBufferedSocket::Send ( const char * data ) // if ( connected ) // { bool ok = SignalWriter(); - if ( !ok ) TRACE( "CBufferedSocket::SignalWriter Error %d\n", ::GetLastError()); + if ( !ok ) TRACE( "CBufferedSocket::SignalWriter Error %d\n", this->GetLastError()); // } } -- cgit v1.1 From e661571a5a49870ebd4df32520c18ffb69e96b50 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:36 +0000 Subject: Utilisateur : Fcolin Date : 17/07/01 Heure : 18:25 Archivé dans $/Ivy (vss 9) --- Ivy/BufferedSocket.cxx | 4 ---- 1 file changed, 4 deletions(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 441d580..2e15cab 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -5,10 +5,6 @@ #include "stdafx.h" #include "BufferedSocket.h" -#ifdef _DEBUG -#define DEBUG_NEW new(__FILE__, __LINE__) -#define new DEBUG_NEW -#endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction -- cgit v1.1 From ff8b9139c740027bbbec018b76a00d5c0ff3ebc5 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:38 +0000 Subject: Utilisateur : Fcolin Date : 20/09/01 Heure : 9:40 Archivé dans $/Ivy (vss 10) --- Ivy/BufferedSocket.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 2e15cab..491098e 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -135,7 +135,7 @@ void CBufferedSocket::OnConnect( int nErrorCode ) { connected = true; StartWriter(); -//TRACE("CBufferedSocket::OnConnect buffer empty %d\n",buf_out.IsEmpty()); + TRACE("CBufferedSocket::OnConnect buffer size %d\n",buf_out.size()); } void CBufferedSocket::Send ( const char * data ) { -- cgit v1.1 From fb5f1f4e3561eba211e9cafc5ea290f2adb88200 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:40 +0000 Subject: Utilisateur : Fcolin Date : 4/02/03 Heure : 8:59 Archivé dans $/Bus/Ivy Commentaire: (vss 11) --- Ivy/BufferedSocket.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 491098e..0265e3b 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -135,7 +135,7 @@ void CBufferedSocket::OnConnect( int nErrorCode ) { connected = true; StartWriter(); - TRACE("CBufferedSocket::OnConnect buffer size %d\n",buf_out.size()); +// TRACE("CBufferedSocket::OnConnect buffer size %d\n",buf_out.size()); } void CBufferedSocket::Send ( const char * data ) { -- cgit v1.1 From 22aa1c6735a22db795f7f10679d285beda36d9be Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:42 +0000 Subject: Utilisateur : Fcolin Date : 9/02/04 Heure : 15:25 Archivé dans $/Bus/Ivy Commentaire: (vss 12) --- Ivy/BufferedSocket.cxx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 0265e3b..03a2704 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -120,11 +120,15 @@ void CBufferedSocket::OnSend( int nErrorCode ) else { // erreur int err = this->GetLastError(); - if ( err == WSAEWOULDBLOCK ) // si la file est pleine on sort en silence ! - { - } - else - TRACE("CBufferedSocket::OnWakeup error %d Sending buffer %s \n",err,msg); + switch ( err ){ + case WSAEWOULDBLOCK: // si la file est pleine on sort en silence ! + break; + case WSAECONNABORTED: // broken pipe on sort en silence + break; + default: + TRACE("CBufferedSocket::OnWakeup error %d Sending buffer %s \n",err,msg.c_str()); + break; + } break; } } -- cgit v1.1 From 00546c6eb0c54919615c1e28858403fcd232c06a Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:44 +0000 Subject: Utilisateur : Fcolin Date : 1/06/05 Heure : 16:45 Archivé dans $/Bus/Ivy Commentaire: (vss 13) --- Ivy/BufferedSocket.cxx | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 03a2704..864da25 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -2,7 +2,7 @@ // ////////////////////////////////////////////////////////////////////// -#include "stdafx.h" +#include "IvyStdAfx.h" #include "BufferedSocket.h" @@ -60,27 +60,27 @@ void CBufferedSocket::OnReceive(int nErrorCode) Close(); return; } - - ptr += nb; - ASSERT( ptr < (buf +sizeof( buf ))); - *ptr = '\0'; - ptr = buf; - while( (ptr_nl = strchr( ptr, '\n' ))) - { - *ptr_nl = '\0'; - //TRACE("message %s\n", ptr ); - OnReceive( ptr ); - ptr = ++ptr_nl; - } + + ptr += nb; + ASSERT( ptr < (buf +sizeof( buf ))); + *ptr = '\0'; + ptr = buf; + while( (ptr_nl = strchr( ptr, '\n' ))) + { + *ptr_nl = '\0'; + //TRACE("message %s\n", ptr ); + OnReceive( ptr ); + ptr = ++ptr_nl; + } if ( *ptr != '\0' ) - { /* recopie ligne incomplete au debut du buffer */ - strcpy( buf, ptr ); - ptr = buf + strlen(buf); - } - else - { - ptr = buf; - } + { /* recopie ligne incomplete au debut du buffer */ + strcpy( buf, ptr ); + ptr = buf + strlen(buf); + } + else + { + ptr = buf; + } } -- cgit v1.1 From 863c7be9778c1dab03380ba7d72e015448ab9206 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:46 +0000 Subject: Utilisateur : Fcolin Date : 1/06/05 Heure : 18:23 Archivé dans $/Bus/Ivy Commentaire: (vss 14) --- Ivy/BufferedSocket.cxx | 50 +++++++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 21 deletions(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 864da25..5f6c994 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -5,6 +5,7 @@ #include "IvyStdAfx.h" #include "BufferedSocket.h" +#define BUFFER_SIZE 4096 ////////////////////////////////////////////////////////////////////// // Construction/Destruction @@ -13,7 +14,9 @@ CBufferedSocket::CBufferedSocket() { separator = '\n'; - ptr = buf; + buffer_size = BUFFER_SIZE; + buffer = (char*)malloc( buffer_size ); + current_ptr = buffer; connected = false; InitializeCriticalSection( &m_CritSection ); } @@ -29,9 +32,8 @@ void CBufferedSocket::Accept(CBufferedSocket& rConnectedSocket, SOCKADDR* lpSock } void CBufferedSocket::OnReceive(int nErrorCode) { - - - char *ptr_nl; + char *ptr_sep; + char *ptr; long nb_to_read = 0; long nb; @@ -39,14 +41,20 @@ void CBufferedSocket::OnReceive(int nErrorCode) int len = sizeof( addr ); /* limitation taille buffer */ - nb_to_read = MAX_BUFFER - ( ptr - buf ); + nb_to_read = buffer_size - (current_ptr - buffer ); if( nb_to_read == 0 ) { - TRACE("Erreur message trop long sans LF\n"); - ptr = buf; - return; + buffer_size *= 2; /* twice old size */ + buffer = (char*)realloc( buffer, buffer_size ); + if (!buffer ) + { + TRACE("HandleSocket Buffer Memory Alloc Error\n"); + exit(0); + } + TRACE( "Buffer Limit reached realloc new size %ld\n", buffer_size ); + nb_to_read = buffer_size - (current_ptr - buffer ); } - nb = ReceiveFrom( ptr, nb_to_read, &addr, &len, 0/*MSG_PARTIAL*/ ); + nb = ReceiveFrom( current_ptr, nb_to_read, &addr, &len, 0/*MSG_PARTIAL*/ ); if ( nb == SOCKET_ERROR ) { int err = this->GetLastError(); @@ -61,26 +69,26 @@ void CBufferedSocket::OnReceive(int nErrorCode) return; } - ptr += nb; - ASSERT( ptr < (buf +sizeof( buf ))); - *ptr = '\0'; - ptr = buf; - while( (ptr_nl = strchr( ptr, '\n' ))) + current_ptr += nb; + ASSERT( current_ptr < (buffer + buffer_size) ); + ptr = buffer; + while ((ptr_sep = (char*)memchr (ptr, separator, current_ptr - ptr ))) { - *ptr_nl = '\0'; + *ptr_sep = '\0'; //TRACE("message %s\n", ptr ); OnReceive( ptr ); - ptr = ++ptr_nl; + ptr = ++ptr_sep; } - if ( *ptr != '\0' ) + if (ptr < current_ptr ) { /* recopie ligne incomplete au debut du buffer */ - strcpy( buf, ptr ); - ptr = buf + strlen(buf); + len = current_ptr - ptr; + memcpy (buffer, ptr, len ); + current_ptr = buffer + len; } else { - ptr = buf; - } + current_ptr = buffer; + } } -- cgit v1.1 From 6df79c23c311d014c426ab00d3bc3c9a8204b429 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:48 +0000 Subject: Utilisateur : Fcolin Date : 2/06/05 Heure : 18:42 Archivé dans $/Bus/Ivy Commentaire: Suppression de la STL et ajout d'un namespace pour les datatypes internes Ivy (vss 15) --- Ivy/BufferedSocket.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 5f6c994..cae2404 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -70,7 +70,7 @@ void CBufferedSocket::OnReceive(int nErrorCode) } current_ptr += nb; - ASSERT( current_ptr < (buffer + buffer_size) ); + //ASSERT( current_ptr < (buffer + buffer_size) ); ptr = buffer; while ((ptr_sep = (char*)memchr (ptr, separator, current_ptr - ptr ))) { @@ -102,7 +102,7 @@ void CBufferedSocket::SetSeparator( char sep ) } void CBufferedSocket::OnSend( int nErrorCode ) { - string msg; + ivy::string msg; bool empty; // on essaye de garder la section critique a l'interieur de la boucle @@ -154,7 +154,7 @@ void CBufferedSocket::Send ( const char * data ) //BOOL toBeSignaled; EnterCriticalSection( &m_CritSection ); //toBeSignaled = buf_out.IsEmpty() && connected; - buf_out.push_back( string(data) ); + buf_out.push_back( ivy::string(data) ); LeaveCriticalSection( &m_CritSection ); //TRACE("CBufferedSocket::Send Adding buffer to send count %d\n",buf_out.size()); // if ( connected ) -- cgit v1.1 From 9b22935b0b601fa0ebce1ced5d8eb2c7499eb2a0 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:50 +0000 Subject: Utilisateur : Fcolin Date : 23/09/05 Heure : 15:27 Archivé dans $/Bus/Ivy Commentaire: (vss 16) --- Ivy/BufferedSocket.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index cae2404..11eecf5 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -34,11 +34,11 @@ void CBufferedSocket::OnReceive(int nErrorCode) { char *ptr_sep; char *ptr; - long nb_to_read = 0; - long nb; + size_t nb_to_read = 0; + size_t nb; SOCKADDR addr; - int len = sizeof( addr ); + size_t len = sizeof( addr ); /* limitation taille buffer */ nb_to_read = buffer_size - (current_ptr - buffer ); @@ -117,8 +117,8 @@ void CBufferedSocket::OnSend( int nErrorCode ) { // TRACE("CBufferedSocket::OnSend Sending buffer %s\n",msg.c_str()); - int lg = msg.length(); - int sent = CThreadedSocket::Send( msg.c_str(), lg ); + size_t lg = msg.length(); + size_t sent = CThreadedSocket::Send( msg.c_str(), lg ); if ( sent == lg ) { // emission correcte on enleve le msg de la file EnterCriticalSection( &m_CritSection ); -- cgit v1.1 From eb8866478a0f97eaa7b9e52259043672da332778 Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:52 +0000 Subject: Utilisateur : Fcolin Date : 17/11/05 Heure : 15:08 Archivé dans $/Bus/Ivy Commentaire: nice Bug in nextArg not reentrant routine due to static variable (vss 17) --- Ivy/BufferedSocket.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 11eecf5..7df2bce 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -55,6 +55,7 @@ void CBufferedSocket::OnReceive(int nErrorCode) nb_to_read = buffer_size - (current_ptr - buffer ); } nb = ReceiveFrom( current_ptr, nb_to_read, &addr, &len, 0/*MSG_PARTIAL*/ ); + ASSERT ( memchr( current_ptr, 0, nb) == NULL ); if ( nb == SOCKET_ERROR ) { int err = this->GetLastError(); @@ -70,7 +71,6 @@ void CBufferedSocket::OnReceive(int nErrorCode) } current_ptr += nb; - //ASSERT( current_ptr < (buffer + buffer_size) ); ptr = buffer; while ((ptr_sep = (char*)memchr (ptr, separator, current_ptr - ptr ))) { @@ -78,6 +78,7 @@ void CBufferedSocket::OnReceive(int nErrorCode) //TRACE("message %s\n", ptr ); OnReceive( ptr ); ptr = ++ptr_sep; + //ASSERT( ptr < (buffer + buffer_size) ); } if (ptr < current_ptr ) { /* recopie ligne incomplete au debut du buffer */ -- cgit v1.1 From 38c6ccda650d81aca69dafa3d033bfeb8160e94c Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:54 +0000 Subject: Utilisateur : Fcolin Date : 18/11/05 Heure : 11:46 Archivé dans $/Bus/Ivy Commentaire: repassage a la STL et correction bug multithread (vss 18) --- Ivy/BufferedSocket.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 7df2bce..3335e09 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -23,7 +23,7 @@ CBufferedSocket::CBufferedSocket() CBufferedSocket::~CBufferedSocket() { - + free( buffer ); } void CBufferedSocket::Accept(CBufferedSocket& rConnectedSocket, SOCKADDR* lpSockAddr , int* lpSockAddrLen ) { -- cgit v1.1 From 98630f19f487c261bd68defc285c8216c0f7718c Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:53:56 +0000 Subject: Utilisateur : Fcolin Date : 19/04/06 Heure : 15:07 Archivé dans $/Bus/Ivy Commentaire: (vss 19) --- Ivy/BufferedSocket.cxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Ivy/BufferedSocket.cxx') diff --git a/Ivy/BufferedSocket.cxx b/Ivy/BufferedSocket.cxx index 3335e09..1a11c56 100644 --- a/Ivy/BufferedSocket.cxx +++ b/Ivy/BufferedSocket.cxx @@ -36,6 +36,7 @@ void CBufferedSocket::OnReceive(int nErrorCode) char *ptr; size_t nb_to_read = 0; size_t nb; + char *tmp_buf; SOCKADDR addr; size_t len = sizeof( addr ); @@ -45,12 +46,13 @@ void CBufferedSocket::OnReceive(int nErrorCode) if( nb_to_read == 0 ) { buffer_size *= 2; /* twice old size */ - buffer = (char*)realloc( buffer, buffer_size ); - if (!buffer ) + tmp_buf = (char*)realloc( buffer, buffer_size ); + if (!tmp_buf ) { TRACE("HandleSocket Buffer Memory Alloc Error\n"); exit(0); } + buffer = tmp_buf; TRACE( "Buffer Limit reached realloc new size %ld\n", buffer_size ); nb_to_read = buffer_size - (current_ptr - buffer ); } -- cgit v1.1