Fixed build issues.
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@1040 0109f412-320b-0410-ab79-c3e0c5ffbbe6
This commit is contained in:
@@ -614,6 +614,7 @@
|
||||
|
||||
#define FLM_HTTP_STATUS_CONTINUE 100
|
||||
#define FLM_HTTP_STATUS_SWITCHING_PROTOCOLS 101
|
||||
#define FLM_HTTP_STATUS_PROCESSING 102
|
||||
#define FLM_HTTP_STATUS_OK 200
|
||||
#define FLM_HTTP_STATUS_CREATED 201
|
||||
#define FLM_HTTP_STATUS_ACCEPTED 202
|
||||
@@ -621,6 +622,7 @@
|
||||
#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_MULTI_STATUS 207
|
||||
#define FLM_HTTP_STATUS_MULTIPLE_CHOICES 300
|
||||
#define FLM_HTTP_STATUS_MOVED_PERMANENTLY 301
|
||||
#define FLM_HTTP_STATUS_FOUND 302
|
||||
@@ -652,6 +654,9 @@
|
||||
#define FLM_HTTP_STATUS_SERVICE_UNAVAILABLE 503
|
||||
#define FLM_HTTP_STATUS_GATEWAY_TIMEOUT 504
|
||||
#define FLM_HTTP_STATUS_VERSION_NOT_SUPPORTED 505
|
||||
|
||||
const char * FLMAPI FlmGetHTTPStatusString(
|
||||
FLMUINT uiStatusCode);
|
||||
|
||||
/****************************************************************************
|
||||
Desc: Return code functions and macros
|
||||
@@ -1551,7 +1556,7 @@
|
||||
RCODE FLMAPI FlmReadFully(
|
||||
IF_IStream * pIStream,
|
||||
F_DynaBuf * pDynaBuf);
|
||||
|
||||
|
||||
RCODE FLMAPI FlmReadLine(
|
||||
IF_IStream * pIStream,
|
||||
F_DynaBuf * pBuffer);
|
||||
@@ -1676,8 +1681,6 @@
|
||||
FLMUINT uiCount,
|
||||
FLMUINT * puiBytesRead) = 0;
|
||||
|
||||
virtual RCODE FLMAPI closeStream( void) = 0;
|
||||
|
||||
virtual void FLMAPI setIOTimeout(
|
||||
FLMUINT uiSeconds) = 0;
|
||||
};
|
||||
@@ -1703,8 +1706,6 @@
|
||||
FLMUINT * puiBytesWritten = NULL) = 0;
|
||||
|
||||
virtual const char * FLMAPI getPeerCertificateText( void) = 0;
|
||||
|
||||
virtual RCODE FLMAPI closeStream( void) = 0;
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
@@ -1720,12 +1721,18 @@
|
||||
|
||||
flminterface IF_HTTPHeader : public F_Object
|
||||
{
|
||||
virtual RCODE FLMAPI readRequestHeader(
|
||||
IF_IStream * pIStream) = 0;
|
||||
|
||||
virtual RCODE FLMAPI readResponseHeader(
|
||||
IF_IStream * pIStream) = 0;
|
||||
|
||||
virtual RCODE FLMAPI writeRequestHeader(
|
||||
IF_OStream * pOStream) = 0;
|
||||
|
||||
virtual RCODE FLMAPI writeResponseHeader(
|
||||
IF_OStream * pOStream) = 0;
|
||||
|
||||
virtual RCODE FLMAPI getHeaderValue(
|
||||
const char * pszTag,
|
||||
F_DynaBuf * pBuffer) = 0;
|
||||
@@ -1744,9 +1751,14 @@
|
||||
|
||||
virtual FLMUINT FLMAPI getStatusCode( void) = 0;
|
||||
|
||||
virtual RCODE FLMAPI setRequestURL(
|
||||
const char * pszRequestURL) = 0;
|
||||
virtual RCODE FLMAPI setStatusCode(
|
||||
FLMUINT uiStatusCode) = 0;
|
||||
|
||||
virtual RCODE FLMAPI setRequestURI(
|
||||
const char * pszRequestURI) = 0;
|
||||
|
||||
const char * FLMAPI getRequestURI( void);
|
||||
|
||||
virtual RCODE FLMAPI setMethod(
|
||||
eHttpMethod httpMethod) = 0;
|
||||
|
||||
@@ -3502,8 +3514,12 @@
|
||||
Desc: String constants
|
||||
****************************************************************************/
|
||||
|
||||
#define FLM_HTTP_CONTENT_LENGTH ((const char *) "Content-Length")
|
||||
#define FLM_HTTP_USER_AGENT ((const char *) "User-Agent")
|
||||
#define FLM_HTTP_CONTENT_LENGTH_TAG ((const char *) "Content-Length")
|
||||
#define FLM_HTTP_CONTENT_TYPE_TAG ((const char *) "Content-Type")
|
||||
|
||||
#define FLM_HTTP_USER_AGENT_STR ((const char *) "User-Agent")
|
||||
|
||||
#define FLM_MIME_TYPE_TEXT_XML_STR ((const char *) "text/xml")
|
||||
|
||||
/****************************************************************************
|
||||
Desc: Endian macros
|
||||
|
||||
@@ -76,7 +76,7 @@ public:
|
||||
F_HTTPHeader()
|
||||
{
|
||||
m_pResultSet = NULL;
|
||||
m_pszRequestURL = NULL;
|
||||
m_pszRequestURI = NULL;
|
||||
resetHeader();
|
||||
}
|
||||
|
||||
@@ -85,12 +85,18 @@ public:
|
||||
resetHeader();
|
||||
}
|
||||
|
||||
RCODE FLMAPI readRequestHeader(
|
||||
IF_IStream * pIStream);
|
||||
|
||||
RCODE FLMAPI readResponseHeader(
|
||||
IF_IStream * pIStream);
|
||||
|
||||
RCODE FLMAPI writeRequestHeader(
|
||||
IF_OStream * pOStream);
|
||||
|
||||
RCODE FLMAPI writeResponseHeader(
|
||||
IF_OStream * pOStream);
|
||||
|
||||
RCODE FLMAPI getHeaderValue(
|
||||
const char * pszTag,
|
||||
F_DynaBuf * pBuffer);
|
||||
@@ -114,8 +120,13 @@ public:
|
||||
|
||||
FLMUINT FLMAPI getStatusCode( void);
|
||||
|
||||
RCODE FLMAPI setRequestURL(
|
||||
const char * pszRequestURL);
|
||||
RCODE FLMAPI setStatusCode(
|
||||
FLMUINT uiStatusCode);
|
||||
|
||||
RCODE FLMAPI setRequestURI(
|
||||
const char * pszRequestURI);
|
||||
|
||||
const char * FLMAPI getRequestURI( void);
|
||||
|
||||
void FLMAPI resetHeader( void);
|
||||
|
||||
@@ -123,11 +134,17 @@ private:
|
||||
|
||||
RCODE allocResultSet( void);
|
||||
|
||||
RCODE readHeaderTaggedValues(
|
||||
IF_IStream * pIStream);
|
||||
|
||||
RCODE writeHeaderTaggedValues(
|
||||
IF_OStream * pOStream);
|
||||
|
||||
IF_BTreeResultSet * m_pResultSet;
|
||||
FLMUINT m_uiStatusCode;
|
||||
FLMUINT m_uiContentLength;
|
||||
eHttpMethod m_httpMethod;
|
||||
char * m_pszRequestURL;
|
||||
char * m_pszRequestURI;
|
||||
char m_szHttpVersion[ 32];
|
||||
};
|
||||
|
||||
@@ -179,24 +196,16 @@ Exit:
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
RCODE FLMAPI F_HTTPHeader::readResponseHeader(
|
||||
RCODE F_HTTPHeader::readHeaderTaggedValues(
|
||||
IF_IStream * pIStream)
|
||||
{
|
||||
RCODE rc = NE_FLM_OK;
|
||||
F_DynaBuf lineBuf;
|
||||
F_DynaBuf tokenBuf;
|
||||
FLMUINT uiLineCount = 0;
|
||||
const char * pszLine;
|
||||
const char * pszTagEnd;
|
||||
const char * pszTagValue;
|
||||
|
||||
resetHeader();
|
||||
|
||||
if( RC_BAD( rc = allocResultSet()))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
for( ;;)
|
||||
{
|
||||
if( RC_BAD( rc = FlmReadLine( pIStream, &lineBuf)))
|
||||
@@ -210,12 +219,6 @@ RCODE FLMAPI F_HTTPHeader::readResponseHeader(
|
||||
}
|
||||
else if( (pszTagEnd = f_strstr( pszLine, ":")) != NULL)
|
||||
{
|
||||
if( !uiLineCount)
|
||||
{
|
||||
rc = RC_SET_AND_ASSERT( NE_FLM_BAD_HTTP_HEADER);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
pszTagValue = pszTagEnd + 1;
|
||||
|
||||
while( *pszTagValue && *pszTagValue == ASCII_SPACE)
|
||||
@@ -231,88 +234,6 @@ RCODE FLMAPI F_HTTPHeader::readResponseHeader(
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const char * pszTmp = pszLine;
|
||||
|
||||
// Verify the preamble
|
||||
|
||||
if( f_strncmp( pszTmp, "HTTP", 4) != 0)
|
||||
{
|
||||
rc = RC_SET_AND_ASSERT( NE_FLM_BAD_HTTP_HEADER);
|
||||
goto Exit;
|
||||
}
|
||||
pszTmp += 4;
|
||||
|
||||
if( *pszTmp != ASCII_SLASH)
|
||||
{
|
||||
rc = RC_SET( NE_FLM_BAD_HTTP_HEADER);
|
||||
goto Exit;
|
||||
}
|
||||
pszTmp++;
|
||||
|
||||
// Get the protocol version
|
||||
|
||||
tokenBuf.truncateData( 0);
|
||||
while( *pszTmp && *pszTmp != ASCII_SPACE)
|
||||
{
|
||||
if( RC_BAD( rc = tokenBuf.appendByte( *pszTmp)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
tokenBuf.appendByte( 0);
|
||||
|
||||
// Skip the space
|
||||
|
||||
if( *pszTmp)
|
||||
{
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
// Get the status code
|
||||
|
||||
tokenBuf.truncateData( 0);
|
||||
while( *pszTmp && *pszTmp != ASCII_SPACE)
|
||||
{
|
||||
if( RC_BAD( rc = tokenBuf.appendByte( *pszTmp)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
tokenBuf.appendByte( 0);
|
||||
m_uiStatusCode = f_atoud( (const char *)tokenBuf.getBufferPtr());
|
||||
|
||||
// Skip the space
|
||||
|
||||
if( *pszTmp)
|
||||
{
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
// Get the status message
|
||||
|
||||
tokenBuf.truncateData( 0);
|
||||
while( *pszTmp)
|
||||
{
|
||||
if( RC_BAD( rc = tokenBuf.appendByte( *pszTmp)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
tokenBuf.appendByte( 0);
|
||||
uiLineCount++;
|
||||
}
|
||||
|
||||
if( !uiLineCount)
|
||||
{
|
||||
rc = RC_SET( NE_FLM_BAD_HTTP_HEADER);
|
||||
goto Exit;
|
||||
@@ -324,6 +245,238 @@ Exit:
|
||||
return( rc);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
RCODE FLMAPI F_HTTPHeader::readResponseHeader(
|
||||
IF_IStream * pIStream)
|
||||
{
|
||||
RCODE rc = NE_FLM_OK;
|
||||
F_DynaBuf lineBuf;
|
||||
F_DynaBuf tokenBuf;
|
||||
const char * pszTmp;
|
||||
|
||||
resetHeader();
|
||||
|
||||
if( RC_BAD( rc = allocResultSet()))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// Read the preamble
|
||||
|
||||
if( RC_BAD( rc = FlmReadLine( pIStream, &lineBuf)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
pszTmp = (const char *)lineBuf.getBufferPtr();
|
||||
|
||||
// Verify the preamble
|
||||
|
||||
if( f_strncmp( pszTmp, "HTTP", 4) != 0)
|
||||
{
|
||||
rc = RC_SET( NE_FLM_BAD_HTTP_HEADER);
|
||||
goto Exit;
|
||||
}
|
||||
pszTmp += 4;
|
||||
|
||||
if( *pszTmp != ASCII_SLASH)
|
||||
{
|
||||
rc = RC_SET( NE_FLM_BAD_HTTP_HEADER);
|
||||
goto Exit;
|
||||
}
|
||||
pszTmp++;
|
||||
|
||||
// Get the protocol version
|
||||
|
||||
tokenBuf.truncateData( 0);
|
||||
while( *pszTmp && *pszTmp != ASCII_SPACE)
|
||||
{
|
||||
if( RC_BAD( rc = tokenBuf.appendByte( *pszTmp)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
tokenBuf.appendByte( 0);
|
||||
|
||||
// Skip the space
|
||||
|
||||
if( *pszTmp)
|
||||
{
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
// Get the status code
|
||||
|
||||
tokenBuf.truncateData( 0);
|
||||
while( *pszTmp && *pszTmp != ASCII_SPACE)
|
||||
{
|
||||
if( RC_BAD( rc = tokenBuf.appendByte( *pszTmp)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
tokenBuf.appendByte( 0);
|
||||
m_uiStatusCode = f_atoud( (const char *)tokenBuf.getBufferPtr());
|
||||
|
||||
// Skip the space
|
||||
|
||||
if( *pszTmp)
|
||||
{
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
// Get the status message
|
||||
|
||||
tokenBuf.truncateData( 0);
|
||||
while( *pszTmp)
|
||||
{
|
||||
if( RC_BAD( rc = tokenBuf.appendByte( *pszTmp)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
tokenBuf.appendByte( 0);
|
||||
|
||||
// Read the tag values
|
||||
|
||||
if( RC_BAD( rc = readHeaderTaggedValues( pIStream)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( rc);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
RCODE FLMAPI F_HTTPHeader::readRequestHeader(
|
||||
IF_IStream * pIStream)
|
||||
{
|
||||
RCODE rc = NE_FLM_OK;
|
||||
F_DynaBuf lineBuf;
|
||||
F_DynaBuf tokenBuf;
|
||||
const char * pszTmp;
|
||||
|
||||
resetHeader();
|
||||
|
||||
if( RC_BAD( rc = allocResultSet()))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// Read the preamble
|
||||
|
||||
if( RC_BAD( rc = FlmReadLine( pIStream, &lineBuf)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
pszTmp = (const char *)lineBuf.getBufferPtr();
|
||||
|
||||
|
||||
if( f_strncmp( pszTmp, "GET ", 4) == 0)
|
||||
{
|
||||
m_httpMethod = METHOD_GET;
|
||||
pszTmp += 4;
|
||||
}
|
||||
else if( f_strncmp( pszTmp, "PUT ", 4) == 0)
|
||||
{
|
||||
m_httpMethod = METHOD_PUT;
|
||||
pszTmp += 4;
|
||||
}
|
||||
else if( f_strncmp( pszTmp, "POST ", 5) == 0)
|
||||
{
|
||||
m_httpMethod = METHOD_POST;
|
||||
pszTmp += 5;
|
||||
}
|
||||
else
|
||||
{
|
||||
rc = RC_SET( NE_FLM_BAD_HTTP_HEADER);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// Get the request URI
|
||||
|
||||
tokenBuf.truncateData( 0);
|
||||
while( *pszTmp && *pszTmp != ASCII_SPACE)
|
||||
{
|
||||
if( RC_BAD( rc = tokenBuf.appendByte( *pszTmp)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
tokenBuf.appendByte( 0);
|
||||
|
||||
if( RC_BAD( rc = setRequestURI( (const char *)tokenBuf.getBufferPtr())))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// Skip the space
|
||||
|
||||
if( *pszTmp)
|
||||
{
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
// Get the protocol version
|
||||
|
||||
if( f_strncmp( pszTmp, "HTTP", 4) != 0)
|
||||
{
|
||||
rc = RC_SET( NE_FLM_BAD_HTTP_HEADER);
|
||||
goto Exit;
|
||||
}
|
||||
pszTmp += 4;
|
||||
|
||||
if( *pszTmp != ASCII_SLASH)
|
||||
{
|
||||
rc = RC_SET( NE_FLM_BAD_HTTP_HEADER);
|
||||
goto Exit;
|
||||
}
|
||||
pszTmp++;
|
||||
|
||||
tokenBuf.truncateData( 0);
|
||||
while( *pszTmp && *pszTmp != ASCII_SPACE)
|
||||
{
|
||||
if( RC_BAD( rc = tokenBuf.appendByte( *pszTmp)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
pszTmp++;
|
||||
}
|
||||
|
||||
tokenBuf.appendByte( 0);
|
||||
|
||||
// Read the tag values
|
||||
|
||||
if( RC_BAD( rc = readHeaderTaggedValues( pIStream)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( rc);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
@@ -468,6 +621,16 @@ FLMUINT FLMAPI F_HTTPHeader::getStatusCode( void)
|
||||
return( m_uiStatusCode);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
RCODE FLMAPI F_HTTPHeader::setStatusCode(
|
||||
FLMUINT uiStatusCode)
|
||||
{
|
||||
m_uiStatusCode = uiStatusCode;
|
||||
return( NE_FLM_OK);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
@@ -497,9 +660,9 @@ void FLMAPI F_HTTPHeader::resetHeader( void)
|
||||
m_pResultSet = NULL;
|
||||
}
|
||||
|
||||
if( m_pszRequestURL)
|
||||
if( m_pszRequestURI)
|
||||
{
|
||||
f_free( &m_pszRequestURL);
|
||||
f_free( &m_pszRequestURI);
|
||||
}
|
||||
|
||||
m_uiStatusCode = 0;
|
||||
@@ -511,23 +674,23 @@ void FLMAPI F_HTTPHeader::resetHeader( void)
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
RCODE FLMAPI F_HTTPHeader::setRequestURL(
|
||||
const char * pszRequestURL)
|
||||
RCODE FLMAPI F_HTTPHeader::setRequestURI(
|
||||
const char * pszRequestURI)
|
||||
{
|
||||
RCODE rc = NE_FLM_OK;
|
||||
FLMUINT uiStrLen = f_strlen( pszRequestURL);
|
||||
FLMUINT uiStrLen = f_strlen( pszRequestURI);
|
||||
|
||||
if( m_pszRequestURL)
|
||||
if( m_pszRequestURI)
|
||||
{
|
||||
f_free( &m_pszRequestURL);
|
||||
f_free( &m_pszRequestURI);
|
||||
}
|
||||
|
||||
if( RC_BAD( rc = f_alloc( uiStrLen + 1, &m_pszRequestURL)))
|
||||
if( RC_BAD( rc = f_alloc( uiStrLen + 1, &m_pszRequestURI)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
f_memcpy( m_pszRequestURL, pszRequestURL, uiStrLen + 1);
|
||||
f_memcpy( m_pszRequestURI, pszRequestURI, uiStrLen + 1);
|
||||
|
||||
Exit:
|
||||
|
||||
@@ -541,13 +704,8 @@ RCODE FLMAPI F_HTTPHeader::writeRequestHeader(
|
||||
IF_OStream * pOStream)
|
||||
{
|
||||
RCODE rc = NE_FLM_OK;
|
||||
FLMBYTE ucTag[ FLM_MAX_KEY_SIZE];
|
||||
FLMBYTE ucValue[ 512];
|
||||
FLMUINT uiTagLength;
|
||||
FLMUINT uiValueLength;
|
||||
FLMUINT uiFieldCount;
|
||||
|
||||
if( !m_pszRequestURL)
|
||||
if( !m_pszRequestURI)
|
||||
{
|
||||
rc = RC_SET( NE_FLM_BAD_HTTP_HEADER);
|
||||
goto Exit;
|
||||
@@ -570,58 +728,14 @@ RCODE FLMAPI F_HTTPHeader::writeRequestHeader(
|
||||
break;
|
||||
}
|
||||
|
||||
f_printf( pOStream, "%s ", m_pszRequestURL);
|
||||
f_printf( pOStream, "%s ", m_pszRequestURI);
|
||||
f_printf( pOStream, "HTTP/%s\r\n", m_szHttpVersion);
|
||||
|
||||
// Output the header fields
|
||||
|
||||
if( m_pResultSet)
|
||||
if( RC_BAD( rc = writeHeaderTaggedValues( pOStream)))
|
||||
{
|
||||
uiTagLength = 0;
|
||||
uiFieldCount = 0;
|
||||
|
||||
for( ;;)
|
||||
{
|
||||
if( !uiFieldCount)
|
||||
{
|
||||
rc = m_pResultSet->getFirst( ucTag, sizeof( ucTag),
|
||||
&uiTagLength, NULL, 0, &uiValueLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
rc = m_pResultSet->getNext( ucTag, sizeof( ucTag),
|
||||
&uiTagLength, NULL, 0, &uiValueLength);
|
||||
}
|
||||
|
||||
if( RC_BAD( rc))
|
||||
{
|
||||
if( rc == NE_FLM_EOF_HIT)
|
||||
{
|
||||
rc = NE_FLM_OK;
|
||||
break;
|
||||
}
|
||||
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if( uiValueLength >= sizeof( ucValue))
|
||||
{
|
||||
rc = RC_SET( NE_FLM_BAD_HTTP_HEADER);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if( RC_BAD( rc = m_pResultSet->getCurrent( ucTag, uiTagLength,
|
||||
ucValue, uiValueLength, NULL)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
ucTag[ uiTagLength] = 0;
|
||||
ucValue[ uiValueLength] = 0;
|
||||
|
||||
f_printf( pOStream, "%s: %s\r\n", ucTag, ucValue);
|
||||
uiFieldCount++;
|
||||
}
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// Terminate
|
||||
@@ -633,3 +747,288 @@ Exit:
|
||||
return( rc);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
RCODE FLMAPI F_HTTPHeader::writeResponseHeader(
|
||||
IF_OStream * pOStream)
|
||||
{
|
||||
RCODE rc = NE_FLM_OK;
|
||||
|
||||
// Output the preamble and status
|
||||
|
||||
f_printf( pOStream, "HTTP/%s ", m_szHttpVersion);
|
||||
f_printf( pOStream, "%u ", (unsigned)m_uiStatusCode);
|
||||
f_printf( pOStream, "%s\r\n", FlmGetHTTPStatusString( m_uiStatusCode));
|
||||
|
||||
// Output the header fields
|
||||
|
||||
if( RC_BAD( rc = writeHeaderTaggedValues( pOStream)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// Terminate
|
||||
|
||||
f_printf( pOStream, "\r\n");
|
||||
|
||||
Exit:
|
||||
|
||||
return( rc);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
RCODE F_HTTPHeader::writeHeaderTaggedValues(
|
||||
IF_OStream * pOStream)
|
||||
{
|
||||
RCODE rc = NE_FLM_OK;
|
||||
FLMBYTE ucTag[ FLM_MAX_KEY_SIZE];
|
||||
FLMBYTE ucValue[ 512];
|
||||
FLMUINT uiTagLength;
|
||||
FLMUINT uiValueLength;
|
||||
FLMUINT uiFieldCount;
|
||||
|
||||
if( !m_pResultSet)
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
uiTagLength = 0;
|
||||
uiFieldCount = 0;
|
||||
|
||||
for( ;;)
|
||||
{
|
||||
if( !uiFieldCount)
|
||||
{
|
||||
rc = m_pResultSet->getFirst( ucTag, sizeof( ucTag),
|
||||
&uiTagLength, NULL, 0, &uiValueLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
rc = m_pResultSet->getNext( ucTag, sizeof( ucTag),
|
||||
&uiTagLength, NULL, 0, &uiValueLength);
|
||||
}
|
||||
|
||||
if( RC_BAD( rc))
|
||||
{
|
||||
if( rc == NE_FLM_EOF_HIT)
|
||||
{
|
||||
rc = NE_FLM_OK;
|
||||
break;
|
||||
}
|
||||
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if( uiValueLength >= sizeof( ucValue))
|
||||
{
|
||||
rc = RC_SET( NE_FLM_BAD_HTTP_HEADER);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if( RC_BAD( rc = m_pResultSet->getCurrent( ucTag, uiTagLength,
|
||||
ucValue, uiValueLength, NULL)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
ucTag[ uiTagLength] = 0;
|
||||
ucValue[ uiValueLength] = 0;
|
||||
|
||||
f_printf( pOStream, "%s: %s\r\n", ucTag, ucValue);
|
||||
uiFieldCount++;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return( rc);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
const char * FLMAPI FlmGetHTTPStatusString(
|
||||
FLMUINT uiStatusCode)
|
||||
{
|
||||
const char * pszStatusCode;
|
||||
|
||||
switch( uiStatusCode)
|
||||
{
|
||||
case FLM_HTTP_STATUS_CONTINUE:
|
||||
pszStatusCode = "Continue";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_SWITCHING_PROTOCOLS:
|
||||
pszStatusCode = "Switching Protocols";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_PROCESSING:
|
||||
pszStatusCode = "Processing";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_OK:
|
||||
pszStatusCode = "OK";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_CREATED:
|
||||
pszStatusCode = "Created";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_ACCEPTED:
|
||||
pszStatusCode = "Accepted";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_NON_AUTH_INFO:
|
||||
pszStatusCode = "Non-Authoritative Information";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_NO_CONTENT:
|
||||
pszStatusCode = "No Content";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_RESET_CONTENT:
|
||||
pszStatusCode = "Reset Content";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_PARTIAL_CONTENT:
|
||||
pszStatusCode = "Partial Content";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_MULTI_STATUS:
|
||||
pszStatusCode = "Multi-Status";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_MULTIPLE_CHOICES:
|
||||
pszStatusCode = "Multiple Choices";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_MOVED_PERMANENTLY:
|
||||
pszStatusCode = "Moved Permanently";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_FOUND:
|
||||
pszStatusCode = "Found";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_SEE_OTHER:
|
||||
pszStatusCode = "See Other";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_NOT_MODIFIED:
|
||||
pszStatusCode = "Not Modified";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_USE_PROXY:
|
||||
pszStatusCode = "Use Proxy";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_TEMPORARY_REDIRECT:
|
||||
pszStatusCode = "Temporary Redirect";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_BAD_REQUEST:
|
||||
pszStatusCode = "Bad Request";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_UNAUTHORIZED:
|
||||
pszStatusCode = "Unauthorized";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_PAYMENT_REQUIRED:
|
||||
pszStatusCode = "Payment Required";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_FORBIDDEN:
|
||||
pszStatusCode = "Forbidden";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_NOT_FOUND:
|
||||
pszStatusCode = "Not Found";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_METHOD_NOT_ALLOWED:
|
||||
pszStatusCode = "Method Not Allowed";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_NOT_ACCEPTABLE:
|
||||
pszStatusCode = "Not Acceptable";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_PROXY_AUTH_REQUIRED:
|
||||
pszStatusCode = "Proxy Authentication Required";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_REQUEST_TIMEOUT:
|
||||
pszStatusCode = "Request Timeout";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_CONFLICT:
|
||||
pszStatusCode = "Conflict";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_GONE:
|
||||
pszStatusCode = "Gone";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_LENGTH_REQUIRED:
|
||||
pszStatusCode = "Length Required";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_PRECONDITION_FAILED:
|
||||
pszStatusCode = "Precondition Failed";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_ENTITY_TOO_LARGE:
|
||||
pszStatusCode = "Request Entity Too Large";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_URI_TOO_LONG:
|
||||
pszStatusCode = "Request-URI Too Long";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE:
|
||||
pszStatusCode = "Unsupported Media Type";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_RANGE_NOT_SATISFIABLE:
|
||||
pszStatusCode = "Requested Range Not Satisfiable";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_EXPECTATION_FAILED:
|
||||
pszStatusCode = "Expectation Failed";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_INTERNAL_SERVER_ERROR:
|
||||
pszStatusCode = "Internal Server Error";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_NOT_IMPLEMENTED:
|
||||
pszStatusCode = "Not Implemented";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_BAD_GATEWAY:
|
||||
pszStatusCode = "Bad Gateway";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_SERVICE_UNAVAILABLE:
|
||||
pszStatusCode = "Service Unavailable";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_GATEWAY_TIMEOUT:
|
||||
pszStatusCode = "Gateway Timeout";
|
||||
break;
|
||||
|
||||
case FLM_HTTP_STATUS_VERSION_NOT_SUPPORTED:
|
||||
pszStatusCode = "HTTP Version Not Supported";
|
||||
break;
|
||||
|
||||
default:
|
||||
pszStatusCode = "Undefined Error";
|
||||
break;
|
||||
}
|
||||
|
||||
return( pszStatusCode);
|
||||
}
|
||||
|
||||
|
||||
@@ -83,13 +83,13 @@ public:
|
||||
|
||||
virtual ~F_TCPIOStream( void);
|
||||
|
||||
RCODE openStream(
|
||||
RCODE FLMAPI openStream(
|
||||
const char * pucHostAddress,
|
||||
FLMUINT uiPort,
|
||||
FLMUINT uiFlags,
|
||||
FLMUINT uiConnectTimeout);
|
||||
|
||||
RCODE openStream(
|
||||
RCODE FLMAPI openStream(
|
||||
int iSocket,
|
||||
FLMUINT uiFlags);
|
||||
|
||||
@@ -103,48 +103,48 @@ public:
|
||||
FLMUINT uiBytesToWrite,
|
||||
FLMUINT * puiBytesWritten);
|
||||
|
||||
FINLINE RCODE socketPeekWrite(
|
||||
FINLINE RCODE FLMAPI socketPeekWrite(
|
||||
FLMUINT uiTimeOut)
|
||||
{
|
||||
return( f_socketPeek( m_iSocket, uiTimeOut, FALSE));
|
||||
}
|
||||
|
||||
FINLINE RCODE f_socketPeekRead(
|
||||
FINLINE RCODE FLMAPI f_socketPeekRead(
|
||||
FLMUINT uiTimeOut)
|
||||
{
|
||||
return( f_socketPeek( m_iSocket, uiTimeOut, TRUE));
|
||||
};
|
||||
|
||||
FINLINE const char * getLocalHostName( void)
|
||||
FINLINE const char * FLMAPI getLocalHostName( void)
|
||||
{
|
||||
getLocalInfo();
|
||||
return( (const char *)m_pszName);
|
||||
};
|
||||
|
||||
FINLINE const char * getLocalHostAddress( void)
|
||||
FINLINE const char * FLMAPI getLocalHostAddress( void)
|
||||
{
|
||||
getLocalInfo();
|
||||
return( (const char *)m_pszIp);
|
||||
};
|
||||
|
||||
FINLINE const char * getPeerHostName( void)
|
||||
FINLINE const char * FLMAPI getPeerHostName( void)
|
||||
{
|
||||
getRemoteInfo();
|
||||
return( (const char *)m_pszPeerName);
|
||||
};
|
||||
|
||||
FINLINE const char * getPeerHostAddress( void)
|
||||
FINLINE const char * FLMAPI getPeerHostAddress( void)
|
||||
{
|
||||
getRemoteInfo();
|
||||
return( (const char *)m_pszPeerIp);
|
||||
};
|
||||
|
||||
RCODE readNoWait(
|
||||
RCODE FLMAPI readNoWait(
|
||||
void * pvBuffer,
|
||||
FLMUINT uiCount,
|
||||
FLMUINT * puiReadRead);
|
||||
|
||||
RCODE readAll(
|
||||
RCODE FLMAPI readAll(
|
||||
void * pvBuffer,
|
||||
FLMUINT uiCount,
|
||||
FLMUINT * puiBytesRead);
|
||||
|
||||
Reference in New Issue
Block a user