You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by pr...@apache.org on 2005/10/11 16:23:40 UTC

svn commit: r312890 - /webservices/axis/trunk/c/src/transport/axis3/HTTPTransport.cpp

Author: prestonf
Date: Tue Oct 11 07:23:36 2005
New Revision: 312890

URL: http://svn.apache.org/viewcvs?rev=312890&view=rev
Log:
Reopened AXISCPP-827

Modified:
    webservices/axis/trunk/c/src/transport/axis3/HTTPTransport.cpp

Modified: webservices/axis/trunk/c/src/transport/axis3/HTTPTransport.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/transport/axis3/HTTPTransport.cpp?rev=312890&r1=312889&r2=312890&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/transport/axis3/HTTPTransport.cpp (original)
+++ webservices/axis/trunk/c/src/transport/axis3/HTTPTransport.cpp Tue Oct 11 07:23:36 2005
@@ -487,132 +487,129 @@
 //   eSOAPMessageIsNotChunked - The message is read until the number of message
 //                              bytes read equals the HTTP header content
 //                              length value.
-	if (m_iBytesLeft == 0)
+	switch( m_GetBytesState)
 	{
-		switch( m_GetBytesState)
+		case eWaitingForHTTPHeader:
 		{
-			case eWaitingForHTTPHeader:
-				{
 		// Wait for a HTTP header to be located on the input stream.
-					do
-					{
+			do
+			{
 		// From the input stream, wait for a 'valid' HTTP header.
-						readHTTPHeader();
+				readHTTPHeader();
 
 		// From the header,extract such things as chunking, message length, etc.
-						processHTTPHeader();
+				processHTTPHeader();
 
-					} while( m_iResponseHTTPStatusCode == 100);
+			} while( m_iResponseHTTPStatusCode == 100);
 
 		// Check that the HTTP status code is valid.
-					checkHTTPStatusCode();
+			checkHTTPStatusCode();
 
 		// Done with HTTP headers, get SOAP message.
-					int iHTTPStart = m_strReceived.find( ASCII_S_HTTP);
-					int iHTTPEnd = m_strReceived.find( ASCII_S_CRLFCRLF, iHTTPStart);
+			int iHTTPStart = m_strReceived.find( ASCII_S_HTTP);
+			int iHTTPEnd = m_strReceived.find( ASCII_S_CRLFCRLF, iHTTPStart);
 
-					m_strReceived = m_strReceived.substr( iHTTPEnd + strlen( ASCII_S_CRLFCRLF));
+			m_strReceived = m_strReceived.substr( iHTTPEnd + strlen( ASCII_S_CRLFCRLF));
 
-					m_iBytesLeft = m_strReceived.length();
+			m_iBytesLeft = m_strReceived.length();
 
 		// This bit of code should not be necessary, but just in case...
-					if( m_GetBytesState == eWaitingForHTTPHeader)
-					{
-						break;
-					}
-				}
+			if( m_GetBytesState == eWaitingForHTTPHeader)
+			{
+				break;
+			}
+		}
 
 		// At this point it is assumed that m_strReceived contains the block of
 		// unprocessed data.  m_iBytesLeft is the length of text/data in m_strReceived
 		// is a 'char *' type copy of the m_strReceived string.
 		// NB: It is assumed that all of these variables ARE in sync at this point.
-			case eSOAPMessageIsChunked:
+		case eSOAPMessageIsChunked:
+			{
+				if( m_GetBytesState == eSOAPMessageIsChunked)
 				{
-					if( m_GetBytesState == eSOAPMessageIsChunked)
+					if( m_iBytesLeft == 0)
 					{
-						if( m_iBytesLeft == 0)
-						{
-							getNextDataPacket( "No data available for next chunk size.");
-						}
+						getNextDataPacket( "No data available for next chunk size.");
+					}
 
-						m_iContentLength = getChunkSize();
+					m_iContentLength = getChunkSize();
 
 		// If the chunk size is larger than the available data, then read in more data
 		// until all of the chunk has been read.
-						while( m_iContentLength > m_iBytesLeft)
-						{
-							getNextDataPacket( "No data available for next chunk.");
-						}
+					while( m_iContentLength > m_iBytesLeft)
+					{
+						getNextDataPacket( "No data available for next chunk.");
+					}
 
 		// If data read is longer than chunk size, then copy the extra data to a
 		// temporary variable and process data just belonging to this chunk.
-						if( m_iBytesLeft > m_iContentLength)
-						{
-							nextChunk = m_strReceived.substr( m_iContentLength + strlen( ASCII_S_CRLF));
-							m_strReceived = m_strReceived.substr( 0, m_iContentLength);
-							m_iBytesLeft = m_iContentLength;
+					if( m_iBytesLeft > m_iContentLength)
+					{
+						nextChunk = m_strReceived.substr( m_iContentLength + strlen( ASCII_S_CRLF));
+						m_strReceived = m_strReceived.substr( 0, m_iContentLength);
+						m_iBytesLeft = m_iContentLength;
 
 		// Check to see if the next chunk size is zero.  If it is then change the state.
-							if( peekChunkLength( nextChunk) == 0)
-							{
-								m_GetBytesState = eWaitingForHTTPHeader;
-							}
-						}
-						else
+						if( peekChunkLength( nextChunk) == 0)
 						{
-							nextChunk = "";
+							m_GetBytesState = eWaitingForHTTPHeader;
 						}
+					}
+					else
+					{
+						nextChunk = "";
+					}
 
 		// Now have at least chunk size worth of data.  The chunk may contain Mime data
 		// (this depends on information in the HTTP header).  If Mime data is expected,
 		// process it first.
-						if( m_bMimeTrue)
-						{
-							processRootMimeBody();
-
-							m_iBytesLeft = m_strReceived.length();
-						}
+					if( m_bMimeTrue)
+					{
+						processRootMimeBody();
 
-						break;
+						m_iBytesLeft = m_strReceived.length();
 					}
+
+					break;
 				}
+			}
 
-			case eSOAPMessageIsNotChunked:
-				{
+		case eSOAPMessageIsNotChunked:
+		{
 		// Check that there is more message to read.
-					if( m_iContentLength > 0)
-					{
-						getNextDataPacket( "No data available for message.");
+			if( m_iContentLength > 0)
+			{
+				getNextDataPacket( "No data available for message.");
 
 		// Check for Mime header
-						if( m_bMimeTrue)
-						{
-							processRootMimeBody();
+				if( m_bMimeTrue)
+				{
+					processRootMimeBody();
 
-							m_iBytesLeft = m_strReceived.length();
-						}
+					m_iBytesLeft = m_strReceived.length();
+				}
 
 		// Subtract message length (so far) from expcted content length.
-						m_iContentLength -= m_iBytesLeft;
+				m_iContentLength -= m_iBytesLeft;
 
 		// If all of the message has been received, then reset the process state.
-						if( m_iContentLength <= 0)
-						{
-							m_GetBytesState = eWaitingForHTTPHeader;
-						}
-					}
-					else
-					{
+				if( m_iContentLength <= 0)
+				{
+					m_GetBytesState = eWaitingForHTTPHeader;
+				}
+			}
+			else
+			{
+
 		// Reset the process state.
-						m_GetBytesState = eWaitingForHTTPHeader;
-					}
+				m_GetBytesState = eWaitingForHTTPHeader;
+			}
 
-					break;
-				}
+		break;
 		}
 	}
 
-
 // Copy as much of the message to the parser buffer as possible.
 	if( copyDataToParserBuffer( pcBuffer, piSize, m_iBytesLeft))
 	{
@@ -1687,7 +1684,7 @@
 		}
 		else
 		{
-			m_strReceived = "";
+			m_strReceived.clear();
 		}
 
 		bTransportInProgress = true;