Click here to Skip to main content
15,881,882 members
Articles / Desktop Programming / MFC

The Ultimate Toolbox Home Page

Rate me:
Please Sign up or sign in to vote.
4.97/5 (141 votes)
25 Aug 2007CPOL13 min read 3.2M   91.4K   476  
The Ultimate Toolbox is now Open Source
// ==========================================================================
// 					Class Implementation : CHelloScript
// ==========================================================================

// Source file : helloscp.cpp

// Source : Dundas Software
// 
// This sample implements a simple write back script.  This type of script
// requires that the onGet and onPost functions be defined.  These are the
// only functions that needed to be defined for this script.                          
// //////////////////////////////////////////////////////////////////////////

#include "stdafx.h"		// standard MFC include
#include "helloscp.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CWinApp theApp;     // dummy app



CHelloScript::CHelloScript()
	{
	}


CHelloScript::~CHelloScript()
	{
	}

// This function is only so that you will see something when you debug
// this demo from within DevStudio or on a command line.
void CHelloScript::OnRunCommandLine(int argc, char** argv)
	{

    _tprintf(_T("This program is designed to be run from the HTTP Service\n"));
    _tprintf(_T("Running it from the command line does nothing interesting\n"));

	int index = 1;
	while(index < argc)
		{
		_tprintf(_T("Command line Parameter %d : %s\n"), index, argv[index]);
		index++;
		}

	}
// This member function is used whenever the client makes a request
// for information from the server.

// This is virtual function which must be defined in any derived class
// One must override these functions because each implementation 
// will be different.  
void CHelloScript::OnGet(LPCTSTR pszParam)
	{	
	UNREFERENCED_PARAMETER(pszParam);

	// Tell the client that it will be receiving HTML formatted text
	_tprintf(_T("Content-type: text/HTML\n"));
	_tprintf(_T("\n<HTML><BODY background=\"../../dundas.gif\">"));
    
    LPCTSTR pszAction = GetPathInfo();
    if (_tcsicmp(pszAction, _T("/report")) == 0)
		{
		// When called by a get this script will return information
		// about the server, client and connection.
		// These functions can be used internally for processing of 
		
		_tprintf(_T("<P>GetPathInfo() = %s</P>\n"), GetPathInfo());
		_tprintf(_T("<P>GetScriptName() = %s</P>\n"), GetScriptName());
		_tprintf(_T("<P>GetRemoteAddress() = %s</P>\n"), GetRemoteAddress());
		_tprintf(_T("<P>GetServerName() = %s</P>\n"), GetServerName());
		_tprintf(_T("<P>GetServerProtocol() = %s</P>\n"), GetServerProtocol());
		_tprintf(_T("<P>GetServerSoftware() = %s</P>\n"), GetServerSoftware());
		_tprintf(_T("<P>GetServerPort() = %i</P>\n"), GetServerPort());
		_tprintf(_T("<P>GetClientInfo(ACCEPT) = %s</P>\n"), GetClientInfo(_T("ACCEPT")));
		_tprintf(_T("<P>GetClientInfo(USER_AGENT) = %s</P>\n"), GetClientInfo(_T("USER_AGENT")));
		_tprintf(_T("<P>GetClientInfo(REFERER) = %s</P>\n"), GetClientInfo(_T("REFERER")));
		_tprintf(_T("<center><img src=\"../../contact.bmp\"></center>"));
		}
	else
		{
    	_tprintf(_T("This is not a valid parameter :\n"));
		_tprintf(_T("<P> %s\n"), pszAction);
		}

	_tprintf(_T("</BODY>\n</HTML>\n"));
	}

void CHelloScript::OnPost(LPCTSTR pszType, LPCTSTR pszData)
	{
	// The client needs to know what type of file it is receiving
	// This statement tells it that.
	// _tprintf is used to simply print the text to the stdout port. 
	_tprintf(_T("Content-type: text/HTML\n\n"));
    _tprintf(_T("<HTML><BODY background=\"../dundas.gif\">"));

    if (_tcscmp(pszType, _T("application/x-www-form-urlencoded")) != 0)
	    {
	    _tprintf(_T("This is not a valid Post parameter\n"));
		_tprintf(_T("</BODY>\n</HTML>\n"));
		return;
    	}

	LPTSTR pszResult = NULL;

	// CGI converts certain characters like spaces, slashes into other
	// characters. They need to be returned to their initial characters.
	// The UUDecode function takes care of this.
	UUDecode(pszData, pszResult);


    // Check for the required fields.  If they do not exist then
	// write back an error message to the client
    CString sSubject, sDescription, sFileName, sEMail;
    if (!Extract(sSubject, pszResult, 0, _T("Subject")) ||
        !Extract(sDescription, pszResult, 1, _T("Descr")) ||
        !Extract(sFileName, pszResult, 2, _T("Filename")) ||
        !Extract(sEMail, pszResult, 3, _T("MailAddr")))
	    {
        _tprintf(_T("Data is corrupt, please try again\n"));
		_tprintf(_T("</BODY>\n</HTML>\n"));
        return;
    	}
	// The following if statements test the required fields for 
	// information.  If they are empty then an error message is 
	// written back to the client.
    if (sFileName.IsEmpty())
    	{	
        _tprintf(_T("The Filename is empty, please try again\n"));
        _tprintf(_T("<P> <A HREF=\"/cgidemo.htm\">Try again</A>\n"));
		_tprintf(_T("</BODY>\n</HTML>\n"));

		if (pszResult != NULL)
			delete[] pszResult;

        return;
    	}

    if (sEMail.IsEmpty())
    	{	
        _tprintf(_T("Your Mail address is empty, please try again\n"));
        _tprintf(_T("<P> <A HREF=\"/cgidemo.htm\">Try again</A>\n"));
		_tprintf(_T("</BODY>\n</HTML>\n"));

		if (pszResult != NULL)
			delete[] pszResult;
        
		return;
    	}

    		
	if (pszResult != NULL)
		delete[] pszResult;

	// The following _tprintf calls send a message back to the client.
	// If the source of the document is viewed in the cients browser
	// it does not appear to be layed out nicely.  However it is readable.
	// The printing of new line (\n) on its own causes the document to be 
	// restarted.
    _tprintf(_T("<P>Your message has been received\n"));
	_tprintf(_T("<P>Hello %s\n"), sEMail);
	_tprintf(_T("<P>The subject you entered is '%s'\n"), sSubject);
    _tprintf(_T("<P>The description you entered is '%s'\n"), sDescription);
	_tprintf(_T("<P>And here is the filename you entered '%s'\n"), sFileName);
    _tprintf(_T("<P> <A HREF=\"/default.htm\">Back to Home Page</A>\n"));
	_tprintf(_T("<P> <strong>This is just a demonstration of a write back script.<strong><br>"));
	_tprintf(_T("<center><img src=\"../contact.bmp\"></center>"));
	_tprintf(_T("<P></BODY>\n</HTML>\n"));
	}

int main(int argc, char *argv[])
	{
  
    CHelloScript script;
	
    return script.DoMain(argc, argv);
	}


By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Canada Canada
In January 2005, David Cunningham and Chris Maunder created TheUltimateToolbox.com, a new group dedicated to the continued development, support and growth of Dundas Software’s award winning line of MFC, C++ and ActiveX control products.

Ultimate Grid for MFC, Ultimate Toolbox for MFC, and Ultimate TCP/IP have been stalwarts of C++/MFC development for a decade. Thousands of developers have used these products to speed their time to market, improve the quality of their finished products, and enhance the reliability and flexibility of their software.
This is a Organisation

476 members

Comments and Discussions