[ http://issues.apache.org/jira/browse/AXISCPP-822?page=all ]
     
nadir amra closed AXISCPP-822:
------------------------------

    Fix Version: 1.6 Alpha
     Resolution: Fixed

> Possible improvements to the HTTPTransport::getHTTPHeaders() and the 
> HTTPTransport::flushOutput() methods  - HTTPTransport.cpp file
> -----------------------------------------------------------------------------------------------------------------------------------
>
>          Key: AXISCPP-822
>          URL: http://issues.apache.org/jira/browse/AXISCPP-822
>      Project: Axis-C++
>         Type: Improvement
>   Components: Transport (axis3)
>     Versions: current (nightly)
>     Reporter: Denis Linine
>     Assignee: nadir amra
>     Priority: Trivial
>      Fix For: 1.6 Alpha

>
> Hello,
> HTTPTransport::flushOutput()  could be written like this (some current code 
> is commented out):
> AXIS_TRANSPORT_STATUS HTTPTransport::flushOutput() throw (AxisException, 
> HTTPTransportException)
> {
>     // In preperation for sending the message, calculate the size of the 
> message
>     // by using the string length method.
>     // NB: This calculation may not necessarily be correct when dealing with 
> SSL
>     //     messages as the length of the encoded message is not necessarily 
> the
>     //         same as the length of the uncoded message.
>     
>       // char buff[8]; // theoretically, a 8-char-long buffer can be too 
> small even for 32 bit systems
>       char buff[24]; 
>       //sprintf( buff, "%d", m_strBytesToSend.length ());
>     //this->setTransportProperty ("Content-Length", buff);
>       
>       // two lines above can be replaced like this (ultoa should work faster 
> than sprintf): 
>       setTransportProperty ("Content-Length", ultoa(m_strBytesToSend.length 
> (), buff, 10));
>     // The header is now complete.  The message header and message can now be
>     // transmitted.
>       // utf8Buf will leak if an exception is thrown, catching different 
> types of exceptions just to rethrow them is excessive
>       
> //    try
> //    {
> //#ifndef __OS400__
> //            *m_pActiveChannel << this->getHTTPHeaders ();
> //            *m_pActiveChannel << this->m_strBytesToSend.c_str ();
> //#else               
> //        const char *buf = this->getHTTPHeaders ();
> //        char *utf8Buf = toUTF8((char *)buf, strlen(buf)+1);
> //            *m_pActiveChannel << utf8Buf;
> //        free(utf8Buf);
> //        buf     = this->m_strBytesToSend.c_str();
> //        utf8Buf = toUTF8((char *)buf, strlen(buf)+1);
> //            *m_pActiveChannel << utf8Buf;
> //        free(utf8Buf);
> //#endif
> //    }
> //    catch( HTTPTransportException & e)
> //    {
> //            throw;
> //    }
> //    catch( AxisException & e)
> //    {
> //            throw;
> //    }
> //    catch(...)
> //    {
> //            throw;
> //    }
>       char *utf8Buf = NULL;
>       try
>       {
> #ifndef __OS400__
>               *m_pActiveChannel << getHTTPHeaders ();
>               *m_pActiveChannel << m_strBytesToSend.c_str ();
> #else         
>         const char *buf = this->getHTTPHeaders ();
>         utf8Buf = toUTF8((char *)buf, strlen(buf)+1);
>               *m_pActiveChannel << utf8Buf;
>         free(utf8Buf);
>         utf8Buf = NULL;
>               // 5 lines above could probably be rewritten like this:
>               // getHTTPHeaders();
>               // utf8Buf = toUTF8(m_strHeaderBytesToSend.c_str(), 
> m_strHeaderBytesToSend.length()+1); // eliminate strlen; is 
> const_cast<char*>(m_strBytesToSend.c_str()) necessary (what type of the 
> toUTF8 first parameter)?
>               // free(utf8Buf);
>               // utf8Buf = NULL;
>         buf     = m_strBytesToSend.c_str(); 
>         utf8Buf = toUTF8(m_strBytesToSend.c_str(), 
> m_strBytesToSend.length()+1); // eliminate strlen; is 
> const_cast<char*>(m_strBytesToSend.c_str()) necessary (what type of the 
> toUTF8 first parameter)?
>               *m_pActiveChannel << utf8Buf;
>         free(utf8Buf);
>               utf8Buf = NULL;
> #endif
>       }
>       catch(...)
>       {
>               free(utf8Buf);
>               // might be one should empty strings?
>               // m_strBytesToSend.clear();
>               // m_strHeaderBytesToSend.clear();
>               throw;
>       }
>       // m_strHeaderBytesToSend seem to be used only by this function.
>       // Is it not possible to make them local variables for flushOutput() 
> and pass 
>     // Empty the bytes to send string.
>       //m_strBytesToSend = "";
>       //m_strHeaderBytesToSend = "";
>       m_strBytesToSend.clear(); // ?
>       m_strHeaderBytesToSend.clear(); // ?
>       return TRANSPORT_FINISHED;
> }
> The first lines of the HTTPTransport::getHTTPHeaders():
> const char * HTTPTransport::getHTTPHeaders()
> {
>     URL &                     url = m_pActiveChannel->getURLObject();
>     unsigned short    uiPort = url.getPort();
>     char                      buff[8];
>     m_strHeaderBytesToSend = m_strHTTPMethod + " ";
>     if (m_bUseProxy)
>         m_strHeaderBytesToSend += std::string (url.getURL ()) + " ";
>     else
>               m_strHeaderBytesToSend += std::string (url.getResource ()) + " 
> ";
>     m_strHeaderBytesToSend += m_strHTTPProtocol + "\r\n";
>       if (m_bUseProxy)
>         m_strHeaderBytesToSend += std::string ("Host: ") + m_strProxyHost;
>     else
>               m_strHeaderBytesToSend += std::string ("Host: ") + 
> url.getHostName ();
>       
>     if (m_bUseProxy)
>         uiPort = m_uiProxyPort;
>        
>       sprintf (buff, "%u", uiPort);
>     m_strHeaderBytesToSend += ":";
>     m_strHeaderBytesToSend += buff;
>     m_strHeaderBytesToSend += "\r\n";
> could probably be rewritten this way (eliminate creation of temporary 
> strings, eliminate excessive if/else):
> const char * HTTPTransport::getHTTPHeaders()
> {
>     URL &                     url = m_pActiveChannel->getURLObject();
>     unsigned short    uiPort;
>       // char buff[8]; // theoretically, a 8-char-long buffer can be too 
> small even for 32 bit systems
>       char buff[32]; 
>     m_strHeaderBytesToSend = m_strHTTPMethod + " ";
>     if (m_bUseProxy)
>       {
>               m_strHeaderBytesToSend += url.getURL ();
>               m_strHeaderBytesToSend += " ";
>               m_strHeaderBytesToSend += m_strHTTPProtocol;
>               m_strHeaderBytesToSend += "\r\nHost: ";
>               m_strHeaderBytesToSend += m_strProxyHost;
>               uiPort = m_uiProxyPort;
>       }
>     else
>       {
>               m_strHeaderBytesToSend += url.getResource ();
>               m_strHeaderBytesToSend += " ";
>               m_strHeaderBytesToSend += m_strHTTPProtocol;
>               m_strHeaderBytesToSend += "\r\nHost: ";
>               m_strHeaderBytesToSend +=  url.getHostName ();
>               uiPort = url.getPort();
>       }       
>       sprintf(buff, ":%u\r\n", uiPort);
>     m_strHeaderBytesToSend += buff;
> Note please that this code was nether tested nor even compiled

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to