diff options
Diffstat (limited to '')
-rw-r--r-- | src/protocoltelnet.cpp | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/src/protocoltelnet.cpp b/src/protocoltelnet.cpp index e4fc926..5361a61 100644 --- a/src/protocoltelnet.cpp +++ b/src/protocoltelnet.cpp | |||
@@ -268,17 +268,42 @@ bool Bu::ProtocolTelnet::isCanonical() | |||
268 | 268 | ||
269 | void Bu::ProtocolTelnet::write( const Bu::FString &sData ) | 269 | void Bu::ProtocolTelnet::write( const Bu::FString &sData ) |
270 | { | 270 | { |
271 | pClient->write( sData ); | 271 | write( sData.getStr(), sData.getSize() ); |
272 | } | 272 | } |
273 | 273 | #include "bu/logger.h" | |
274 | void Bu::ProtocolTelnet::write( char *pData, int iSize ) | 274 | void Bu::ProtocolTelnet::write( const char *pData, int iSize ) |
275 | { | 275 | { |
276 | pClient->write( pData, iSize ); | 276 | int iLast = 0, j; |
277 | for( j = iLast; j < iSize; j++ ) | ||
278 | { | ||
279 | if( pData[j] == '\n' ) | ||
280 | { | ||
281 | if( j+1 >= iSize || | ||
282 | (pData[j+1] != '\r' && pData[j+1] != '\0') ) | ||
283 | { | ||
284 | logHexDump( 1, pData+iLast, j-iLast, "bo" ); | ||
285 | pClient->write( pData+iLast, j-iLast ); | ||
286 | logHexDump( 1, "\n\r", 2, "ba" ); | ||
287 | pClient->write( "\n\r", 2 ); | ||
288 | iLast = j+1; | ||
289 | } | ||
290 | else | ||
291 | { | ||
292 | j++; | ||
293 | } | ||
294 | } | ||
295 | } | ||
296 | if( j > iLast ) | ||
297 | { | ||
298 | logHexDump( 1, pData+iLast, iSize-iLast, "bl" ); | ||
299 | pClient->write( pData+iLast, iSize-iLast ); | ||
300 | } | ||
301 | //pClient->write( pData, iSize ); | ||
277 | } | 302 | } |
278 | 303 | ||
279 | void Bu::ProtocolTelnet::write( char cData ) | 304 | void Bu::ProtocolTelnet::write( char cData ) |
280 | { | 305 | { |
281 | pClient->write( &cData, 1 ); | 306 | write( &cData, 1 ); |
282 | } | 307 | } |
283 | 308 | ||
284 | void Bu::ProtocolTelnet::onWill( char cCode ) | 309 | void Bu::ProtocolTelnet::onWill( char cCode ) |