From 2fe3e6cae24af2688114ecad3d254a8a3f1e7837 Mon Sep 17 00:00:00 2001 From: ahodgkinson Date: Fri, 16 Feb 2007 00:30:29 +0000 Subject: [PATCH] Added IF_HTTPHeader interface and implementation, improved debug logging code, and fixed issues in the B-Tree result set code. git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@1025 0109f412-320b-0410-ab79-c3e0c5ffbbe6 --- ftk/src/ftk.h | 133 +++++++++++++++++++++++++++++++++++++++++-- ftk/src/ftkbtree.cpp | 18 +++--- ftk/src/ftklog.cpp | 44 +++++++++++--- ftk/src/ftkrset.cpp | 60 +++++++++++-------- ftk/src/ftkstrm.cpp | 119 ++++++++++++++++++++++++++------------ 5 files changed, 293 insertions(+), 81 deletions(-) diff --git a/ftk/src/ftk.h b/ftk/src/ftk.h index 5481ea1..7c08cde 100644 --- a/ftk/src/ftk.h +++ b/ftk/src/ftk.h @@ -582,6 +582,7 @@ #define NE_FLM_BAD_PLATFORM_FORMAT 0xC50B ///< 0xC50B - In-memory alignment of disk structures is incorrect #define NE_FLM_LOCK_REQ_TIMEOUT 0xC50C ///< 0xC50C - Timeout while waiting for a lock object #define NE_FLM_WAIT_TIMEOUT 0xC50D ///< 0xC50D - Timeout while waiting on a semaphore, condition variable, or reader/writer lock + #define NE_FLM_BAD_HTTP_HEADER 0xC50E ///< 0xC50E - Invalid HTTP header format // Network Errors - Must be the same as they were for FLAIM @@ -602,6 +603,51 @@ /// @} + /**************************************************************************** + Desc: HTTP status codes + ****************************************************************************/ + + #define FLM_HTTP_STATUS_CONTINUE 100 + #define FLM_HTTP_STATUS_SWITCHING_PROTOCOLS 101 + #define FLM_HTTP_STATUS_OK 200 + #define FLM_HTTP_STATUS_CREATED 201 + #define FLM_HTTP_STATUS_ACCEPTED 202 + #define FLM_HTTP_STATUS_NON_AUTH_INFO 203 + #define FLM_HTTP_STATUS_NO_CONTENT 204 + #define FLM_HTTP_STATUS_RESET_CONTENT 205 + #define FLM_HTTP_STATUS_PARTIAL_CONTENT 206 + #define FLM_HTTP_STATUS_MULTIPLE_CHOICES 300 + #define FLM_HTTP_STATUS_MOVED_PERMANENTLY 301 + #define FLM_HTTP_STATUS_FOUND 302 + #define FLM_HTTP_STATUS_SEE_OTHER 303 + #define FLM_HTTP_STATUS_NOT_MODIFIED 304 + #define FLM_HTTP_STATUS_USE_PROXY 305 + #define FLM_HTTP_STATUS_TEMPORARY_REDIRECT 307 + #define FLM_HTTP_STATUS_BAD_REQUEST 400 + #define FLM_HTTP_STATUS_UNAUTHORIZED 401 + #define FLM_HTTP_STATUS_PAYMENT_REQUIRED 402 + #define FLM_HTTP_STATUS_FORBIDDEN 403 + #define FLM_HTTP_STATUS_NOT_FOUND 404 + #define FLM_HTTP_STATUS_METHOD_NOT_ALLOWED 405 + #define FLM_HTTP_STATUS_NOT_ACCEPTABLE 406 + #define FLM_HTTP_STATUS_PROXY_AUTH_REQUIRED 407 + #define FLM_HTTP_STATUS_REQUEST_TIMEOUT 408 + #define FLM_HTTP_STATUS_CONFLICT 409 + #define FLM_HTTP_STATUS_GONE 410 + #define FLM_HTTP_STATUS_LENGTH_REQUIRED 411 + #define FLM_HTTP_STATUS_PRECONDITION_FAILED 412 + #define FLM_HTTP_STATUS_ENTITY_TOO_LARGE 413 + #define FLM_HTTP_STATUS_URI_TOO_LONG 414 + #define FLM_HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE 415 + #define FLM_HTTP_STATUS_RANGE_NOT_SATISFIABLE 416 + #define FLM_HTTP_STATUS_EXPECTATION_FAILED 417 + #define FLM_HTTP_STATUS_INTERNAL_SERVER_ERROR 500 + #define FLM_HTTP_STATUS_NOT_IMPLEMENTED 501 + #define FLM_HTTP_STATUS_BAD_GATEWAY 502 + #define FLM_HTTP_STATUS_SERVICE_UNAVAILABLE 503 + #define FLM_HTTP_STATUS_GATEWAY_TIMEOUT 504 + #define FLM_HTTP_STATUS_VERSION_NOT_SUPPORTED 505 + /**************************************************************************** Desc: Return code functions and macros ****************************************************************************/ @@ -1468,7 +1514,12 @@ IF_IOStream ** ppIOStream); RCODE FLMAPI FlmOpenSSLIOStream( - const char * pszTrustStore, + const char * pszHost, + FLMUINT uiPort, + FLMUINT uiFlags, + IF_IOStream ** ppIOStream); + + RCODE FLMAPI FlmOpenTCPIOStream( const char * pszHost, FLMUINT uiPort, FLMUINT uiFlags, @@ -1573,7 +1624,6 @@ flminterface IF_SSLIOStream : public IF_IOStream { virtual RCODE FLMAPI openStream( - const char * pszTrustStore, const char * pszHost, FLMUINT uiPort = 443, FLMUINT uiFlags = 0) = 0; @@ -1593,6 +1643,57 @@ virtual RCODE FLMAPI closeStream( void) = 0; }; + /**************************************************************************** + Desc: + ****************************************************************************/ + + typedef enum + { + METHOD_GET = 0, + METHOD_POST, + METHOD_PUT + } eHttpMethod; + + flminterface IF_HTTPHeader : public F_Object + { + virtual RCODE FLMAPI readResponseHeader( + IF_IStream * pIStream) = 0; + + virtual RCODE FLMAPI writeRequestHeader( + IF_OStream * pOStream) = 0; + + virtual RCODE FLMAPI getHeaderValue( + const char * pszTag, + F_DynaBuf * pBuffer) = 0; + + virtual RCODE FLMAPI setHeaderValue( + const char * pszTag, + const char * pszValue) = 0; + + virtual RCODE FLMAPI getHeaderValue( + const char * pszTag, + FLMUINT * puiValue) = 0; + + virtual RCODE FLMAPI setHeaderValue( + const char * pszTag, + FLMUINT uiValue) = 0; + + virtual FLMUINT FLMAPI getStatusCode( void) = 0; + + virtual RCODE FLMAPI setRequestURL( + const char * pszRequestURL) = 0; + + virtual RCODE FLMAPI setMethod( + eHttpMethod httpMethod) = 0; + + virtual eHttpMethod getMethod( void) = 0; + + virtual void FLMAPI resetHeader( void) = 0; + }; + + RCODE FLMAPI FlmAllocHTTPHeader( + IF_HTTPHeader ** ppHTTPHeader); + /**************************************************************************** /// Message severity. ****************************************************************************/ @@ -1625,7 +1726,17 @@ void FLMAPI f_endLogMessage( IF_LogMessageClient ** ppLogMessage); + + void FLMAPI f_logError( + RCODE rc, + const char * pszDoing, + const char * pszFileName, + FLMINT iLineNumber); + void f_logPrintf( + eLogMessageSeverity msgSeverity, + const char * pszFormatStr, ...); + /**************************************************************************** Desc: ****************************************************************************/ @@ -1637,7 +1748,7 @@ }; void f_setLoggerClient( - IF_LoggerClient * pLogger); + IF_LoggerClient * pLogger); /**************************************************************************** /// This is an abstract base class that allows an application to catch @@ -2349,8 +2460,7 @@ virtual RCODE FLMAPI findEntry( FLMBYTE * pucKey, - FLMUINT uiKeyBufLen, - FLMUINT * puiKeylen, + FLMUINT uiKeyLen, FLMBYTE * pucBuffer, FLMUINT uiBufferLength, FLMUINT * puiReturnLength) = 0; @@ -2359,6 +2469,10 @@ FLMBYTE * pucKey, FLMUINT uiKeyLength) = 0; }; + + RCODE FLMAPI FlmAllocBTreeResultSet( + IF_ResultSetCompare * pCompare, + IF_BTreeResultSet ** ppBTreeResultSet); /**************************************************************************** Desc: Random numbers @@ -3316,6 +3430,13 @@ return( FALSE); } + /**************************************************************************** + Desc: String constants + ****************************************************************************/ + + #define FLM_HTTP_CONTENT_LENGTH ((const char *) "Content-Length") + #define FLM_HTTP_USER_AGENT ((const char *) "User-Agent") + /**************************************************************************** Desc: Endian macros ****************************************************************************/ @@ -5306,7 +5427,7 @@ { if( !f_isHexChar( *pszString)) { - return( TRUE); + return( FALSE); } pszString++; diff --git a/ftk/src/ftkbtree.cpp b/ftk/src/ftkbtree.cpp index 209cc02..ca329b0 100644 --- a/ftk/src/ftkbtree.cpp +++ b/ftk/src/ftkbtree.cpp @@ -1664,6 +1664,7 @@ RCODE F_BTree::btCreate( FLMBYTE ucLEMEntry[ 3]; FLMUINT uiFlags = 0; FLMUINT uiLEMSize; + FLMUINT32 ui32RootBlockAddr = 0; // We can't create a new Btree if we have already been initialized. @@ -1673,23 +1674,19 @@ RCODE F_BTree::btCreate( goto Exit; } - // Initialize the returned root block address to 0 incase of an error. - - *pui32RootBlockAddr = 0; - // Call createBlock to create a new block if (RC_BAD( rc = m_pBlockMgr->createBlock( &pBlock, - &pucBlock, pui32RootBlockAddr))) + &pucBlock, &ui32RootBlockAddr))) { goto Exit; } - setBlockAddr( pucBlock, *pui32RootBlockAddr); + setBlockAddr( pucBlock, ui32RootBlockAddr); // Save the block address and identify the block as the root block. - if( RC_BAD( rc = btOpen( *pui32RootBlockAddr, bCounts, bData, pCompare))) + if( RC_BAD( rc = btOpen( ui32RootBlockAddr, bCounts, bData, pCompare))) { goto Exit; } @@ -1734,6 +1731,13 @@ RCODE F_BTree::btCreate( // There is one entry now. setNumKeys( pucBlock, 1); + + // Return the root block address + + if( pui32RootBlockAddr) + { + *pui32RootBlockAddr = ui32RootBlockAddr; + } Exit: diff --git a/ftk/src/ftklog.cpp b/ftk/src/ftklog.cpp index 30a1c42..628810c 100644 --- a/ftk/src/ftklog.cpp +++ b/ftk/src/ftklog.cpp @@ -42,12 +42,20 @@ public: { m_pLogMsg = pLogMsg; m_pLogMsg->AddRef(); + m_uiCharOffset = 0; + m_eCurrentForeColor = FLM_BLACK; + m_eCurrentBackColor = FLM_WHITE; } virtual ~F_LogPrintfClient() { if( m_pLogMsg) { + if( m_uiCharOffset) + { + flushLogBuffer(); + } + m_pLogMsg->Release(); m_pLogMsg = NULL; } @@ -76,7 +84,7 @@ public: if (m_uiCharOffset == MAX_LOG_BUF_CHARS) { - outputLogBuffer(); + flushLogBuffer(); } } @@ -90,7 +98,7 @@ public: if( m_uiCharOffset == MAX_LOG_BUF_CHARS) { - outputLogBuffer(); + flushLogBuffer(); } return( 1); @@ -120,7 +128,7 @@ public: if (m_uiCharOffset == MAX_LOG_BUF_CHARS) { - outputLogBuffer(); + flushLogBuffer(); } } @@ -134,9 +142,9 @@ public: private: - void outputLogBuffer( void); + void flushLogBuffer( void); - char m_szLogBuf [MAX_LOG_BUF_CHARS + 1]; + char m_szLogBuf[ MAX_LOG_BUF_CHARS + 1]; FLMUINT m_uiCharOffset; IF_LogMessageClient * m_pLogMsg; eColorType m_eCurrentForeColor; @@ -158,6 +166,28 @@ void f_logPrintf( f_va_end( args); } +/**************************************************************************** +Desc: +****************************************************************************/ +void f_logPrintf( + eLogMessageSeverity msgSeverity, + const char * pszFormatStr, ...) +{ + f_va_list args; + IF_LogMessageClient * pLogMsg = NULL; + + if( (pLogMsg = f_beginLogMessage( 0, msgSeverity)) != NULL) + { + F_LogPrintfClient printfClient( pLogMsg); + + f_va_start( args, pszFormatStr); + f_vprintf( &printfClient, pszFormatStr, &args); + f_va_end( args); + + f_endLogMessage( &pLogMsg); + } +} + /**************************************************************************** Desc: Printf routine that accepts a va_list argument ****************************************************************************/ @@ -306,7 +336,7 @@ void f_setLoggerClient( /**************************************************************************** Desc: Output the current log buffer - only called when logging. ****************************************************************************/ -void F_LogPrintfClient::outputLogBuffer( void) +void F_LogPrintfClient::flushLogBuffer( void) { if( m_uiCharOffset) { @@ -331,7 +361,7 @@ FLMINT FLMAPI F_LogPrintfClient::colorFormatter( // Before changing colors, output the current log buffer. - outputLogBuffer(); + flushLogBuffer(); if( cFormatChar == 'F') // Foreground color { diff --git a/ftk/src/ftkrset.cpp b/ftk/src/ftkrset.cpp index e0dd61a..3532b3b 100644 --- a/ftk/src/ftkrset.cpp +++ b/ftk/src/ftkrset.cpp @@ -526,7 +526,6 @@ public: F_BTreeResultSet( void) { m_pBTree = NULL; - m_pCompare = NULL; } virtual ~F_BTreeResultSet() @@ -535,11 +534,6 @@ public: { m_pBTree->Release(); } - - if( m_pCompare) - { - m_pCompare->Release(); - } } RCODE setupResultSet( @@ -598,8 +592,7 @@ public: RCODE FLMAPI findEntry( FLMBYTE * pucKey, - FLMUINT uiKeyBufLen, - FLMUINT * puiKeylen, + FLMUINT uiKeyLen, FLMBYTE * pucBuffer, FLMUINT uiBufferLength, FLMUINT * puiReturnLength); @@ -611,7 +604,6 @@ public: private: IF_BTree * m_pBTree; - IF_ResultSetCompare * m_pCompare; }; /***************************************************************************** @@ -2297,7 +2289,7 @@ RCODE F_ResultSet::unionBlkLists( } } - if( RC_BAD(rc = getNextPtr( &pRightBlk, + if( RC_BAD( rc = getNextPtr( &pRightBlk, &pucRightEntry, &uiRightLength))) { if( rc != NE_FLM_EOF_HIT) @@ -2305,7 +2297,7 @@ RCODE F_ResultSet::unionBlkLists( goto Exit; } - if( RC_BAD(rc = addEntry( pucLeftEntry, uiLeftLength))) + if( RC_BAD( rc = addEntry( pucLeftEntry, uiLeftLength))) { goto Exit; } @@ -3841,17 +3833,37 @@ Desc: RCODE F_BTreeResultSet::setupResultSet( IF_ResultSetCompare * pCompare) { - if( m_pCompare) + RCODE rc = NE_FLM_OK; + IF_BTree * pBTree = NULL; + + + if( m_pBTree) { - m_pCompare->Release(); + m_pBTree->Release(); + m_pBTree = NULL; + } + + if( RC_BAD( rc = FlmAllocBTree( NULL, &pBTree))) + { + goto Exit; + } + + if( RC_BAD( pBTree->btCreate( 0, FALSE, TRUE, NULL, pCompare))) + { + goto Exit; + } + + m_pBTree = pBTree; + pBTree = NULL; + +Exit: + + if( pBTree) + { + pBTree->Release(); } - if( (m_pCompare = pCompare) != NULL) - { - m_pCompare->AddRef(); - } - - return( NE_FLM_OK); + return( rc); } /**************************************************************************** @@ -3936,8 +3948,7 @@ Desc: ****************************************************************************/ RCODE F_BTreeResultSet::findEntry( FLMBYTE * pucKey, - FLMUINT uiKeyBufLen, - FLMUINT * puiKeyLen, + FLMUINT uiKeyLen, FLMBYTE * pucBuffer, FLMUINT uiBufferLength, FLMUINT * puiReturnLength) @@ -3945,9 +3956,9 @@ RCODE F_BTreeResultSet::findEntry( RCODE rc = NE_FLM_OK; FLMUINT uiLengthRV; - f_assert( uiKeyBufLen <= FLM_MAX_KEY_SIZE); + f_assert( uiKeyLen <= FLM_MAX_KEY_SIZE); - if( RC_BAD( rc = m_pBTree->btLocateEntry( pucKey, uiKeyBufLen, puiKeyLen, + if( RC_BAD( rc = m_pBTree->btLocateEntry( pucKey, uiKeyLen, &uiKeyLen, FLM_EXACT, NULL, &uiLengthRV))) { goto Exit; @@ -3955,7 +3966,7 @@ RCODE F_BTreeResultSet::findEntry( if( pucBuffer) { - if( RC_BAD( rc = m_pBTree->btGetEntry( pucKey, *puiKeyLen, + if( RC_BAD( rc = m_pBTree->btGetEntry( pucKey, uiKeyLen, pucBuffer, uiBufferLength, puiReturnLength))) { goto Exit; @@ -4184,3 +4195,4 @@ Exit: return( rc); } + diff --git a/ftk/src/ftkstrm.cpp b/ftk/src/ftkstrm.cpp index ef8469f..af53997 100644 --- a/ftk/src/ftkstrm.cpp +++ b/ftk/src/ftkstrm.cpp @@ -225,7 +225,7 @@ private: /**************************************************************************** Desc: ****************************************************************************/ -class F_TCPStream : public IF_IStream, public IF_OStream +class F_TCPIOStream : public IF_IOStream { public: @@ -233,13 +233,14 @@ public: using IF_IStream::operator delete; #endif - F_TCPStream( void); + F_TCPIOStream( void); - virtual ~F_TCPStream( void); + virtual ~F_TCPIOStream( void); RCODE openStream( const char * pucHostAddress, FLMUINT uiPort, + FLMUINT uiFlags, FLMUINT uiConnectTimeout = 3, FLMUINT uiDataTimeout = 15); @@ -352,7 +353,6 @@ public: } RCODE FLMAPI openStream( - const char * pszTrustStore, const char * pszHost, FLMUINT uiPort = 443, FLMUINT uiFlags = 0); @@ -812,6 +812,42 @@ Exit: return( rc); } +/***************************************************************************** +Desc: +******************************************************************************/ +RCODE FLMAPI FlmOpenTCPIOStream( + const char * pszHost, + FLMUINT uiPort, + FLMUINT uiFlags, + IF_IOStream ** ppIOStream) +{ + RCODE rc = NE_FLM_OK; + F_TCPIOStream * pIOStream = NULL; + + if( (pIOStream = f_new F_TCPIOStream) == NULL) + { + rc = RC_SET( NE_FLM_MEM); + goto Exit; + } + + if( RC_BAD( rc = pIOStream->openStream( pszHost, uiPort, uiFlags))) + { + goto Exit; + } + + *ppIOStream = pIOStream; + pIOStream = NULL; + +Exit: + + if( pIOStream) + { + pIOStream->Release(); + } + + return( rc); +} + /***************************************************************************** Desc: ******************************************************************************/ @@ -839,7 +875,6 @@ RCODE FLMAPI FlmAllocSSLIOStream( Desc: ******************************************************************************/ RCODE FLMAPI FlmOpenSSLIOStream( - const char * pszTrustStore, const char * pszHost, FLMUINT uiPort, FLMUINT uiFlags, @@ -856,8 +891,7 @@ RCODE FLMAPI FlmOpenSSLIOStream( goto Exit; } - if( RC_BAD( rc = pIOStream->openStream( pszTrustStore, pszHost, - uiPort, uiFlags))) + if( RC_BAD( rc = pIOStream->openStream( pszHost, uiPort, uiFlags))) { goto Exit; } @@ -876,7 +910,6 @@ Exit: #else - F_UNREFERENCED_PARM( pszTrustStore); F_UNREFERENCED_PARM( pszHost); F_UNREFERENCED_PARM( uiPort); F_UNREFERENCED_PARM( uiFlags); @@ -2923,7 +2956,7 @@ RCODE FLMAPI F_UncompressingIStream::closeStream( void) /******************************************************************** Desc: *********************************************************************/ -F_TCPStream::F_TCPStream( void) +F_TCPIOStream::F_TCPIOStream( void) { m_pszIp[ 0] = 0; m_pszName[ 0] = 0; @@ -2946,7 +2979,7 @@ F_TCPStream::F_TCPStream( void) /******************************************************************** Desc: *********************************************************************/ -F_TCPStream::~F_TCPStream( void) +F_TCPIOStream::~F_TCPIOStream( void) { if( m_bConnected) { @@ -2964,9 +2997,10 @@ F_TCPStream::~F_TCPStream( void) /******************************************************************** Desc: Opens a new connection *********************************************************************/ -RCODE F_TCPStream::openStream( +RCODE F_TCPIOStream::openStream( const char * pucHostName, FLMUINT uiPort, + FLMUINT, // uiFlags, FLMUINT uiConnectTimeout, FLMUINT uiDataTimeout) { @@ -3158,7 +3192,7 @@ Exit: /******************************************************************** Desc: Gets information about the local host machine. *********************************************************************/ -RCODE F_TCPStream::getLocalInfo( void) +RCODE F_TCPIOStream::getLocalInfo( void) { RCODE rc = NE_FLM_OK; struct hostent * pHostEnt; @@ -3196,7 +3230,7 @@ Exit: /******************************************************************** Desc: Gets information about the remote machine. *********************************************************************/ -RCODE F_TCPStream::getRemoteInfo( void) +RCODE F_TCPIOStream::getRemoteInfo( void) { RCODE rc = NE_FLM_OK; struct sockaddr_in SockAddrIn; @@ -3237,7 +3271,7 @@ RCODE F_TCPStream::getRemoteInfo( void) /******************************************************************** Desc: Tests for socket data readiness *********************************************************************/ -RCODE F_TCPStream::socketPeek( +RCODE F_TCPIOStream::socketPeek( FLMINT iTimeoutVal, FLMBOOL bPeekRead) { @@ -3297,7 +3331,7 @@ Exit: /******************************************************************** Desc: *********************************************************************/ -RCODE FLMAPI F_TCPStream::write( +RCODE FLMAPI F_TCPIOStream::write( const void * pucBuffer, FLMUINT uiBytesToWrite, FLMUINT * puiBytesWritten) @@ -3316,17 +3350,25 @@ RCODE FLMAPI F_TCPStream::write( Retry: - *puiBytesWritten = 0; + if( puiBytesWritten) + { + *puiBytesWritten = 0; + } + if( RC_OK( rc = socketPeek( m_uiIOTimeout, FALSE))) { iBytesWritten = send( m_iSocket, (char *)pucBuffer, (int)uiBytesToWrite, 0); - switch ( iBytesWritten) + switch( iBytesWritten) { case -1: { - *puiBytesWritten = 0; + if( puiBytesWritten) + { + *puiBytesWritten = 0; + } + rc = RC_SET( NE_FLM_SOCKET_WRITE_FAIL); break; } @@ -3339,7 +3381,11 @@ Retry: default: { - *puiBytesWritten = (FLMUINT)iBytesWritten; + if( puiBytesWritten) + { + *puiBytesWritten = (FLMUINT)iBytesWritten; + } + break; } } @@ -3381,7 +3427,7 @@ Exit: /******************************************************************** Desc: *********************************************************************/ -RCODE FLMAPI F_TCPStream::read( +RCODE FLMAPI F_TCPIOStream::read( void * pucBuffer, FLMUINT uiBytesToWrite, FLMUINT * puiBytesRead) @@ -3441,7 +3487,7 @@ RCODE FLMAPI F_TCPStream::read( Desc: Reads data from the connection - Timeout valkue is zero, no error is generated if timeout occurs. *********************************************************************/ -RCODE F_TCPStream::readNoWait( +RCODE F_TCPIOStream::readNoWait( void * pvBuffer, FLMUINT uiBytesToRead, FLMUINT * puiBytesRead) @@ -3510,7 +3556,7 @@ Exit: Desc: Reads data and does not return until all requested data has been read or a timeout error has been encountered. *********************************************************************/ -RCODE F_TCPStream::readAll( +RCODE F_TCPIOStream::readAll( void * pvBuffer, FLMUINT uiBytesToRead, FLMUINT * puiBytesRead) @@ -3549,7 +3595,7 @@ Exit: /******************************************************************** Desc: Closes any open connections *********************************************************************/ -RCODE FLMAPI F_TCPStream::closeStream( void) +RCODE FLMAPI F_TCPIOStream::closeStream( void) { if( m_iSocket == INVALID_SOCKET) { @@ -3575,7 +3621,6 @@ Desc: ****************************************************************************/ #ifdef FLM_OPENSSL RCODE FLMAPI F_SSLIOStream::openStream( - const char * pszTrustStore, const char * pszHost, FLMUINT uiPort, FLMUINT uiFlags) @@ -3602,14 +3647,15 @@ RCODE FLMAPI F_SSLIOStream::openStream( goto Exit; } - if( pszTrustStore) + // Set the default path for verifying certificates + + if( !SSL_CTX_set_default_verify_paths( m_pContext)) { - if( !SSL_CTX_load_verify_locations( m_pContext, pszTrustStore, NULL)) - { - rc = RC_SET( NE_FLM_CONNECT_FAIL); - goto Exit; - } + rc = RC_SET( NE_FLM_CONNECT_FAIL); + goto Exit; } + + // Configure the BIO if( (m_pBio = BIO_new_ssl_connect( m_pContext)) == NULL) { @@ -3629,6 +3675,8 @@ RCODE FLMAPI F_SSLIOStream::openStream( f_sprintf( szPort, "%u", (unsigned)uiPort); BIO_set_conn_port( m_pBio, szPort); + + // Open the connection if( BIO_do_connect( m_pBio) <= 0) { @@ -3986,16 +4034,13 @@ RCODE FLMAPI FlmReadLine( } } -Exit: - - if( pBuffer->getDataLength()) + if( RC_BAD( rc = pBuffer->appendByte( 0))) { - if( RC_BAD( rc = pBuffer->appendByte( 0))) - { - goto Exit; - } + goto Exit; } +Exit: + return( rc); }