/*****

static web server over PPP and/or ethernet.
This demonstrates the new multiple-interface functionality.

Once connected via PPP (serial port C by default), the server will
print outs it's IP address on STDIO.  The static ethernet address is
also printed out.

You can then access the static page from either of the addresses
printed out at the start of execution.

If you #define MODEM_STUFF, then you may need to change the
send/expect sequence at the beginning of the program

********/

#define TCPCONFIG		4		// 4 = ethernet + serial PPP.

// PPP/networking debugging options
//#define PPP_VERBOSE
//#define PPP_DEBUG
//#define NET_DEBUG
//#define NET_VERBOSE

// Define the following to include modem control if e.g. you are dialling
// an ISP.  Otherwise, if you have a dedicated serial link to a PC, and no
// modem, you should not define this.
//#define MODEM_STUFF

//Macros for standard login procedure. You may still need to alter expected strings below
//Don't forget the carriage returns '\r'
#define DIALUP_DIALSTRING "ATDT5558000\r"
#define DIALUP_NAME "name\r"
#define DIALUP_PASSWORD "password\r"



#define CINBUFSIZE 31
#define COUTBUFSIZE 31

#define PPP_RTSPORT PBDR
#define PPP_RTSSHADOW PBDRShadow
#define PPP_RTSPIN 7
#define PPP_CTSPORT PBDR
#define PPP_CTSPIN 0

//#define TW_TO 0		//eliminate 2MSL delay
#define HTTP_MAXSERVERS 2
#define MAX_TCP_SOCKET_BUFFERS 2

#memmap xmem
#use "dcrtcp.lib"
#ifdef MODEM_STUFF
	#use "modem.lib"
#endif
#use "http.lib"


#define TIMEZONE        -8

#define LCP_TIMEOUT 5000



//#define FRAGSUPPORT		//make sure FRAGSUPPORT is on

/*
 *  ximport is a Dynamic C language feature that takes the binary image
 *  of a file, places it in extended memory on the controller, and
 *  associates a symbol with the physical address on the controller of
 *  the image.
 *
 */

#ximport "samples/tcpip/http/pages/static.html"    index_html
#ximport "samples/tcpip/http/pages/rabbit1.gif"    rabbit1_gif

/*
 *  http_types gives the HTTP server hints about handling incoming
 *  requests.  The server compares the extension of the incoming
 *  request with the http_types list and returns the second field
 *  as the Content-Type field.  The third field defines a custom
 *  function to handle that mime type.
 *
 *  You can get a list of mime types from Netscape's browser in:
 *
 *  Edit->Preferences->Navigator->Applications
 *
 */

/* the default mime type for '/' must be first */
const HttpType http_types[] =
{
   { ".html", "text/html", NULL},
   { ".gif", "image/gif", NULL}
};

/*
 *  http_flashspec assocates the file image we brought in with ximport
 *  and associates it with its name on the webserver.  In this example
 *  the file "samples/http/pages/static.html" will be sent to the 
 *  client when they request either "http://yoururl.com/" or
 *  "http://yoururl.com/index.html"
 *
 */

const HttpSpec http_flashspec[] = 
{
   { HTTPSPEC_FILE,  "/",              index_html,    NULL, 0, NULL, NULL},
   { HTTPSPEC_FILE,  "/index.html",    index_html,    NULL, 0, NULL, NULL},
   { HTTPSPEC_FILE,  "/rabbit1.gif",   rabbit1_gif,   NULL, 0, NULL, NULL},
};


void main()
{
	auto unsigned long t;
	auto char buffer[100];
	auto word i;

	debug_on = 1;

#ifdef MODEM_STUFF
	if(ModemOpen(PPP_SPEED) == 0)
	{
		printf("No modem detected\n");
		exit(-1);
	}
	if(ModemInit())
	{
		printf("Modem Initialized\n");
	}
	else
	{
		printf("Could not init modem\n");
		exit(-1);
	}

	ModemSend(DIALUP_DIALSTRING);
	if(ModemExpect("ONNECT", 30000) == 0)
	{
		printf("Expected 'CONNECT'\n");
		exit(-1);
		
	}

	if(ModemExpect("ogin:", 10000) == 0)
	{
		printf("Expected 'Login:'\n");
		exit(-1);
	}
	ModemSend(DIALUP_NAME);
	if(ModemExpect("word:", 2000) == 0)
	{
		printf("Expected Password\n");
		exit(-1);
	}
	ModemSend(DIALUP_PASSWORD);		//secret password, erase later
	if(ModemExpect("PPP", 5000) == 0)
	{
		printf("Didn't get PPP session\n");
		exit(-1);
	}	
	ModemClose();
#endif
	
	sock_init();

#ifdef MODEM_STUFF
	PPPflowcontrolOn();
#endif

	//PPPnegotiateIP(inet_addr("10.1.10.1"), inet_addr("10.1.10.2"));
	//PPPsetAuthenticator("name", "password");
	//PPPsetAuthenticatee("mageeol", "blah");

	ip_print_ifs();
	router_printall();

	http_init();

/*
 *  tcp_reserveport causes the web server to maintain pending requests
 * whenever there is not a listen socket available
 *
 */

   tcp_reserveport(80);

/*
 *  http_handler needs to be called to handle the active http servers.
 */
   
   while (1) {
      http_handler();
   }

}

