blob: ef493d2312d00fb3d6cb19c7d815ab3c496666e6 [file] [log] [blame]
/** Console Application to test the dynamic SOAP server dlls in a simple commandline environment.
* @file ConsoleMain.cpp
It tests the same SOAP server shared libraries that can be later deployed in the Apache server.
to test it do the following: Start this program, open a commandline prompt window,
change to the build output directory and enter.
*/
#include <unistd.h>
#include <signal.h>
#include <iostream>
#include <cassert>
#include <ltdl.h>
#include <stdio.h>
#include <memory.h>
#include "stdsoap2.h"
#include "apache_gsoap.h"
/** the parameter passed to the dll for constructing a server. */
static const char szQueryParameter[] = "HelloWorld";
/** Run a single threaded loop to accept client requests.
*/
void main(const int /*argc*/, const char *argv[]) {
char szSearchPath[1024];
struct soap soap;
int nRet = SOAP_OK;
struct apache_soap_interface Intf;
memset(&Intf, 0, sizeof Intf);
memset(szSearchPath, 0, sizeof szSearchPath);
getcwd(szSearchPath, sizeof szSearchPath);
strcat(szSearchPath, "/../example/calculator");
cout << "path is: '"<< szSearchPath << "'"<< endl;
static const char szLibraryName[] = "libCalculator";
int nOK = lt_dlinit();
if (0 != nOK) {
cerr << "failed to lt_dlinit()" << endl;
exit(1);
}
//set the path where the library can be found:
nOK = lt_dladdsearchdir(szSearchPath);
if (0 != nOK) {
cerr << "failed to set search path for loading library" << endl;
}
cout << "The the search directory for shared libraries is: '" << lt_dlgetsearchpath() << "'" << endl;
lt_dlhandle soaplib = NULL;
void *pfun = NULL; // our entry point
if (0 == nOK) {
soaplib = lt_dlopenext(szLibraryName);
if (NULL == soaplib) {
cerr << "failed to open " << szSearchPath << ", lib "
<< szLibraryName << " last error: " << lt_dlerror() << endl;
nOK = 1;
} else {
cout << "the library " << szLibraryName << " was loaded" << endl;
}
}
if (0 == nOK) {
pfun = (void *)lt_dlsym(soaplib, APACHE_HTTPSERVER_ENTRY_POINT);
if (NULL == pfun) {
cout << "entry point " << APACHE_HTTPSERVER_ENTRY_POINT << " not found" << endl;
nOK = 1;
} else {
cout << "entry point " << APACHE_HTTPSERVER_ENTRY_POINT << " found" << endl;
}
}
if (0 == nOK) {
apache_init_soap_interface_fn pfn = (apache_init_soap_interface_fn)(pfun);
(*pfn)(&Intf);
if (NULL != Intf.fsoap_init) {
(*Intf.fsoap_init)(&soap);
if (NULL != Intf.fsoap_serve) {
int nRet = (*Intf.fsoap_serve)(&soap);
}
//TODO: call cleanup functions.
}
}
if (NULL != soaplib) {
int nClose = lt_dlclose(soaplib);
if (0 != nClose) {
cerr << "failed to unload the soap server" << endl;
}
}
lt_dlexit();
}