<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <meta http-equiv="cache-control" content="no-cache"> <title>Genivia - ISAPI_Server.cpp File Reference</title> <link href="genivia_tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="genivia_content.css" rel="stylesheet" type="text/css"> </head> <body> <div id="top"> <div id="titlearea"> <table height="72px" width="100%" cellspacing="0" cellpadding="0"> <tbody> <tr> <td width="10%"> </td> <td width="175px"><a href="http://www.genivia.com"><img alt="Genivia" src="GeniviaLogo2_trans_noslogan.png"/></a></td> <td class="tab_home"><a href="http://www.genivia.com">Home</a></td> <td class="tab_home"><a href="http://www.genivia.com/docs.html">Documentation</a></td> <td> <div style="float: right; font-size: 18px; font-weight: bold;">ISAPI_Server.cpp File Reference</div> <br> <div style="float: right; font-size: 10px;">updated Mon Feb 22 2016</div> </td> <td width="10%"> </td> </tr> </tbody> </table> </div> <!-- Generated by Doxygen 1.8.10 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="dir_f3929c311f8dcb24e971139386611406.html">mod_gsoap</a></li><li class="navelem"><a class="el" href="dir_a1ff59bcb9d97ab50614c4d0944a92f3.html">gsoap_win</a></li><li class="navelem"><a class="el" href="dir_72636c4f428028044b5709ae8bf3a1d0.html">isapi</a></li><li class="navelem"><a class="el" href="dir_3f50e7ff7c7fca28c20db51ffc305e31.html">gsoap</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#nested-classes">Classes</a> | <a href="#func-members">Functions</a> | <a href="#var-members">Variables</a> </div> <div class="headertitle"> <div class="title">ISAPI_Server.cpp File Reference</div> </div> </div><!--header--> <div class="contents"> <div class="textblock"><code>#include <memory></code><br /> <code>#include <strstream></code><br /> <code>#include <cassert></code><br /> <code>#include "<a class="el" href="_i_s_a_p_i___server_8h.html">ISAPI_Server.h</a>"</code><br /> <code>#include "<a class="el" href="isapistream_8h.html">isapistream.h</a>"</code><br /> <code>#include "<a class="el" href="_i_s_a_p_i___http_context_8h.html">ISAPI_HttpContext.h</a>"</code><br /> <code>#include "<a class="el" href="_i_s_a_p_i___soap_server_factory_8h.html">ISAPI_SoapServerFactory.h</a>"</code><br /> </div><div class="textblock"><div class="dynheader"> Include dependency graph for ISAPI_Server.cpp:</div> <div class="dyncontent"> <div class="center"><img src="_i_s_a_p_i___server_8cpp__incl.png" border="0" usemap="#_i_s_a_p_i___server_8cpp" alt=""/></div> <map name="_i_s_a_p_i___server_8cpp" id="_i_s_a_p_i___server_8cpp"> <area shape="rect" id="node9" href="_i_s_a_p_i___server_8h.html" title="ISAPI_Server.h" alt="" coords="413,83,525,111"/> <area shape="rect" id="node13" href="isapistream_8h.html" title="isapistream.h" alt="" coords="288,83,388,111"/> <area shape="rect" id="node18" href="_i_s_a_p_i___http_context_8h.html" title="ISAPI_HttpContext.h" alt="" coords="549,83,693,111"/> <area shape="rect" id="node35" href="_i_s_a_p_i___soap_server_factory_8h.html" title="ISAPI_SoapServerFactory.h" alt="" coords="718,83,905,111"/> <area shape="rect" id="node23" href="_http_context_8h.html" title="HttpContext.h" alt="" coords="570,161,672,189"/> <area shape="rect" id="node27" href="opsysadjust_8h.html" title="opsysadjust.h" alt="" coords="369,238,471,266"/> <area shape="rect" id="node33" href="casecmpless_8h.html" title="casecmpless.h" alt="" coords="567,238,676,266"/> </map> </div> </div><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_soap_transaction.html">SoapTransaction</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:ab49a0e60cb80c5bdf47e79320d4f98ec"><td class="memItemLeft" align="right" valign="top">static string </td><td class="memItemRight" valign="bottom"><a class="el" href="_i_s_a_p_i___server_8cpp.html#ab49a0e60cb80c5bdf47e79320d4f98ec">MakeDllName</a> (EXTENSION_CONTROL_BLOCK *pECB, const char *pszDllName)</td></tr> <tr class="memdesc:ab49a0e60cb80c5bdf47e79320d4f98ec"><td class="mdescLeft"> </td><td class="mdescRight"><blockquote class="doxtable"> <p>helper function to build full path to dll. </p> </blockquote> <a href="#ab49a0e60cb80c5bdf47e79320d4f98ec">More...</a><br /></td></tr> <tr class="separator:ab49a0e60cb80c5bdf47e79320d4f98ec"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a84e1f4364447614c07e21499d317180c"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="_i_s_a_p_i___server_8cpp.html#a84e1f4364447614c07e21499d317180c">mod_gsoap_plugin_copy</a> (struct soap *soap, struct soap_plugin *dst, struct soap_plugin *src)</td></tr> <tr class="separator:a84e1f4364447614c07e21499d317180c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a1ef19535ea738dff496e8c1ab5e8dd1a"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="_i_s_a_p_i___server_8cpp.html#a1ef19535ea738dff496e8c1ab5e8dd1a">mod_gsoap_delete</a> (struct soap *soap, struct soap_plugin *p)</td></tr> <tr class="separator:a1ef19535ea738dff496e8c1ab5e8dd1a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a782ef475be7f4f84f28f12b8a8eba74b"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="_i_s_a_p_i___server_8cpp.html#a782ef475be7f4f84f28f12b8a8eba74b">mod_gsoap_plugin</a> (struct soap *soap, struct soap_plugin *p, void *arg)</td></tr> <tr class="separator:a782ef475be7f4f84f28f12b8a8eba74b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a006f3d3dbc752514c40c5b6738e26804"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="_i_s_a_p_i___server_8cpp.html#a006f3d3dbc752514c40c5b6738e26804">http_post_header</a> (soap *soap, const char *key, const char *value)</td></tr> <tr class="separator:a006f3d3dbc752514c40c5b6738e26804"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9697f93908abd1649f675004e1be0e4b"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="_i_s_a_p_i___server_8cpp.html#a9697f93908abd1649f675004e1be0e4b">http_response</a> (soap *soap, int soap_error, size_t count)</td></tr> <tr class="separator:a9697f93908abd1649f675004e1be0e4b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a69ffb10053cd101d03083771e8fc7973"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="_i_s_a_p_i___server_8cpp.html#a69ffb10053cd101d03083771e8fc7973">fsend</a> (soap *soap, const char *pBuf, size_t len)</td></tr> <tr class="separator:a69ffb10053cd101d03083771e8fc7973"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a02a01a53b5d4210ac86d61165136868e"><td class="memItemLeft" align="right" valign="top">static size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="_i_s_a_p_i___server_8cpp.html#a02a01a53b5d4210ac86d61165136868e">frecv</a> (soap *soap, char *pBuf, size_t len)</td></tr> <tr class="separator:a02a01a53b5d4210ac86d61165136868e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a35cde619645a84383069ebdc3bd65970"><td class="memItemLeft" align="right" valign="top">static DWORD </td><td class="memItemRight" valign="bottom"><a class="el" href="_i_s_a_p_i___server_8cpp.html#a35cde619645a84383069ebdc3bd65970">serve</a> (const <a class="el" href="classmod__gsoap__interface.html">mod_gsoap_interface</a> *pInterface, <a class="el" href="class_i_s_a_p_i___http_request.html">ISAPI_HttpRequest</a> &req, <a class="el" href="class_http_response.html">HttpResponse</a> res, <a class="el" href="classisapistream.html">isapistream</a> &is)</td></tr> <tr class="separator:a35cde619645a84383069ebdc3bd65970"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a83380956076bb530b434a947659460a4"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="_i_s_a_p_i___server_8cpp.html#a83380956076bb530b434a947659460a4">SendErrorMessage</a> (<a class="el" href="classisapistream.html">isapistream</a> &is, const char *pszError)</td></tr> <tr class="separator:a83380956076bb530b434a947659460a4"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a> Variables</h2></td></tr> <tr class="memitem:a24c1f55fbe64eead6e27e445a6d9cbb4"><td class="memItemLeft" align="right" valign="top">static const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="_i_s_a_p_i___server_8cpp.html#a24c1f55fbe64eead6e27e445a6d9cbb4">GSOAP_ID</a> = "mod_gsoap isapi extension 0.0.2"</td></tr> <tr class="separator:a24c1f55fbe64eead6e27e445a6d9cbb4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:afbe4eb05c0eab7be501956aa7164a48b"><td class="memItemLeft" align="right" valign="top">static const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="_i_s_a_p_i___server_8cpp.html#afbe4eb05c0eab7be501956aa7164a48b">crlf</a> = "\r\n"</td></tr> <tr class="separator:afbe4eb05c0eab7be501956aa7164a48b"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>Implementation of the <a class="el" href="class_i_s_a_p_i___server.html">ISAPI_Server</a> class</p> <dl class="section author"><dt>Author</dt><dd>Christian Aberger Copyright (C) 2001 WebWare (<a href="http://www.webware.at">http://www.webware.at</a>) Load a gosap server dll dynamically (if not already loaded) and serve the request. See <a href="http://www.aberger.at/SOAP">http://www.aberger.at/SOAP</a> for documentation. </dd></dl> </div><h2 class="groupheader">Function Documentation</h2> <a class="anchor" id="a02a01a53b5d4210ac86d61165136868e"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static size_t frecv </td> <td>(</td> <td class="paramtype">soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">char * </td> <td class="paramname"><em>pBuf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>len</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>gsoap function that requests the next piece of data from us </p> </div> </div> <a class="anchor" id="a69ffb10053cd101d03083771e8fc7973"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int fsend </td> <td>(</td> <td class="paramtype">soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pBuf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>len</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>gsoap function to append the data to send to our output buffer </p> </div> </div> <a class="anchor" id="a006f3d3dbc752514c40c5b6738e26804"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int http_post_header </td> <td>(</td> <td class="paramtype">soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>key</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>value</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Emits HTTP key: val header entries. </p><dl class="section return"><dt>Returns</dt><dd>SOAP_OK, or a gSOAP error code. Built-in gSOAP function: http_post_header.</dd></dl> <p>IIS handles most of the headers (Connection etc.) itself. The main thing we need to extract is SOAPAction. </p> </div> </div> <a class="anchor" id="a9697f93908abd1649f675004e1be0e4b"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int http_response </td> <td>(</td> <td class="paramtype">soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>soap_error</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>count</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>set the http - response code from the soap error message. </p> </div> </div> <a class="anchor" id="ab49a0e60cb80c5bdf47e79320d4f98ec"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static string MakeDllName </td> <td>(</td> <td class="paramtype">EXTENSION_CONTROL_BLOCK * </td> <td class="paramname"><em>pECB</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszDllName</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p><blockquote class="doxtable"> <p>helper function to build full path to dll. </p> </blockquote> </p> <p>Given a dllname make a fully qualified path to the dll in the current isapi directory </p><dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pECB</td><td>the Extension Control Block of the Request </td></tr> <tr><td class="paramname">pszDllName</td><td>the unqualified dllname </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="a1ef19535ea738dff496e8c1ab5e8dd1a"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static void mod_gsoap_delete </td> <td>(</td> <td class="paramtype">struct soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct soap_plugin * </td> <td class="paramname"><em>p</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> </div> </div> <a class="anchor" id="a782ef475be7f4f84f28f12b8a8eba74b"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int mod_gsoap_plugin </td> <td>(</td> <td class="paramtype">struct soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct soap_plugin * </td> <td class="paramname"><em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"><em>arg</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> </div> </div> <a class="anchor" id="a84e1f4364447614c07e21499d317180c"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int mod_gsoap_plugin_copy </td> <td>(</td> <td class="paramtype">struct soap * </td> <td class="paramname"><em>soap</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct soap_plugin * </td> <td class="paramname"><em>dst</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct soap_plugin * </td> <td class="paramname"><em>src</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> </div> </div> <a class="anchor" id="a83380956076bb530b434a947659460a4"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static void SendErrorMessage </td> <td>(</td> <td class="paramtype"><a class="el" href="classisapistream.html">isapistream</a> & </td> <td class="paramname"><em>is</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszError</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> </div> </div> <a class="anchor" id="a35cde619645a84383069ebdc3bd65970"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static DWORD serve </td> <td>(</td> <td class="paramtype">const <a class="el" href="classmod__gsoap__interface.html">mod_gsoap_interface</a> * </td> <td class="paramname"><em>pInterface</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="class_i_s_a_p_i___http_request.html">ISAPI_HttpRequest</a> & </td> <td class="paramname"><em>req</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="class_http_response.html">HttpResponse</a> </td> <td class="paramname"><em>res</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classisapistream.html">isapistream</a> & </td> <td class="paramname"><em>is</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> </div> </div> <h2 class="groupheader">Variable Documentation</h2> <a class="anchor" id="afbe4eb05c0eab7be501956aa7164a48b"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">const char* crlf = "\r\n"</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> </div> </div> <a class="anchor" id="a24c1f55fbe64eead6e27e445a6d9cbb4"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">const char* GSOAP_ID = "mod_gsoap isapi extension 0.0.2"</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> </div> </div> </div><!-- contents --> <hr class="footer"> <address class="footer"> Copyright (C) 2016, Robert van Engelen, Genivia Inc., All Rights Reserved. </address> <address class="footer"><small> Converted on Mon Feb 22 2016 20:00:39 by <a target="_blank" href="http://www.doxygen.org/index.html">Doxygen</a> 1.8.10</small></address> <br> <div style="height: 246px; background: #DBDBDB;"> </body> </html>