aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorallen <allen@1faa4e14-9dd3-4be0-9f0e-ffe519881164>2000-09-21 09:05:21 +0000
committerallen <allen@1faa4e14-9dd3-4be0-9f0e-ffe519881164>2000-09-21 09:05:21 +0000
commitdb8e32396434e839819e65add9747f4038b7bcbf (patch)
tree1f34563226bd56ce6b3c938a977c863f6a2a2019 /src
parent07b6471179a5937d345bbabd23a2b2dd4ef6da0c (diff)
Added new default header
HTTP_ContentHeader takes an additional string arguement to contribute something to the header git-svn-id: http://svn.cactuscode.org/arrangements/CactusConnect/HTTPD/trunk@71 1faa4e14-9dd3-4be0-9f0e-ffe519881164
Diffstat (limited to 'src')
-rw-r--r--src/Content.c126
-rw-r--r--src/Groups.c6
-rw-r--r--src/Headers.c74
-rw-r--r--src/http_Content.h4
4 files changed, 152 insertions, 58 deletions
diff --git a/src/Content.c b/src/Content.c
index e9378fe..591e44d 100644
--- a/src/Content.c
+++ b/src/Content.c
@@ -94,7 +94,7 @@ int HTTPi_RegisterGroupsPages(void);
********************* Local Data *****************************
********************************************************************/
-static struct httpLink *ContentLinks = NULL;
+struct httpLink *ContentLinks = NULL;
#define USER_LENGTH 255
@@ -302,7 +302,7 @@ static int MainPage(cGH *cctkGH, httpRequest *request, void *data)
HTTP_Write(request, message, strlen(message));
/* Write out the main header part */
- HTTP_ContentHeader(1,4096,message);
+ HTTP_ContentHeader(cctkGH, 1, 4096, message,NULL);
HTTP_Write(request, message, strlen(message));
strcpy(message, "<center><h1>Simulation Home Page</h1></center>");
@@ -487,7 +487,7 @@ static int MainPage(cGH *cctkGH, httpRequest *request, void *data)
/* Write out the footer part. */
- HTTP_ContentFooter(0,4096,message);
+ HTTP_ContentFooter(cctkGH, 0, 4096, message);
retval = HTTP_Write(request, message, strlen(message));
/* retval = HTTP_Write(request, base_page, strlen(base_page)); */
@@ -579,7 +579,7 @@ static int MainParameterPage(cGH *cctkGH, httpRequest *request, void *data)
strcpy(message,"<HTML>\n");
HTTP_Write(request, message, strlen(message));
- HTTP_ContentHeader(0,4098,message);
+ HTTP_ContentHeader(cctkGH,0,4098,message,NULL);
HTTP_Write(request, message, strlen(message));
strcpy(message, "<center>");
@@ -619,10 +619,10 @@ static int MainParameterPage(cGH *cctkGH, httpRequest *request, void *data)
strcpy(message,"</table></center>");
HTTP_Write(request, message, strlen(message));
-
+
/* Write out the footer part. */
- HTTP_ContentFooter(0,4098,message);
+ HTTP_ContentFooter(cctkGH, 0, 4098, message);
retval = HTTP_Write(request, message, strlen(message));
return retval;
@@ -657,8 +657,10 @@ static const char *notauthorized_page =
static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data)
{
int retval=0;
+ int i;
char message[4098];
- const char *thorn;
+ char menu[4098];
+ const char *thorn, *menuthorn;
int first;
const cParamData *pData;
char *value;
@@ -768,7 +770,24 @@ static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data)
sprintf(message,
"<HTML><HEAD><TITLE>Cactus Parameters Request : %s</TITLE></HEAD>\n", thorn);
- HTTP_ContentHeader(0,4098,message);
+ HTTP_Write(request, message, strlen(message));
+
+ if (CCTK_NumCompiledThorns()>0)
+ {
+ strcpy(menu,"<dt><b>Parameters:</b>\n");
+ }
+ /* Menu for this page */
+ for (i = 0; i < CCTK_NumCompiledThorns (); i++)
+ {
+ menuthorn = CCTK_CompiledThorn (i);
+ if (CCTK_IsThornActive (menuthorn))
+ {
+ sprintf(menu,
+ "%s <dt> <A HREF=\"/Parameters/%s/\">%s</A>\n",
+ menu,menuthorn, menuthorn);
+ }
+ }
+ HTTP_ContentHeader(cctkGH,0,4098,message,menu);
strcat(message,"<BODY>");
HTTP_Write(request, message, strlen(message));
@@ -817,51 +836,77 @@ static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data)
value = CCTK_ParameterValString (pData->name, pData->thorn);
if(value)
{
- if (pData->steerable == CCTK_STEERABLE_ALWAYS && !readonly)
- {
+ if (pData->steerable == CCTK_STEERABLE_ALWAYS)
+ {
if (nsteerable == 0)
{
- strcat(message,"<h2>Steerable Parameters</h2>"
- "<table cellpadding=5 cellspacing=5>");
+ strcat(message,"<h2>Steerable Parameters</h2>");
+ if (readonly)
+ {
+ strcat(message,"<p><i>The following parameters are steerable, "
+ "but you do not have authorisation to change them. "
+ "To change parameters you must first register on the "
+ "<a href=\"/control.html\">Simulation Control Page</a>."
+ "</i></p>");
+ }
+ strcat(message,"<table cellpadding=5 cellspacing=5>");
}
nsteerable++;
- if (pData->type == PARAMETER_BOOLEAN)
+ if (!readonly)
{
- param_bool = *((CCTK_INT *)CCTK_ParameterGet(pData->name,thorn,&param_type));
- sprintf(message,
- "%s<TR><TD align=left valign=center>%s</TD>"
- "<TD align=left valign=center>"
- "Yes <INPUT type=\"radio\" name=\"%s\" %s value=\"1\">"
- "&nbsp; No <INPUT type=\"radio\" name=\"%s\" %s value=\"0\">"
- "</TD><TD><SMALL>%s (%s)</SMALL></TR>\n",
- message,pData->name,pData->name,
- param_bool ? "checked" : "", pData->name,
- param_bool ? "" : "checked",pData->description,pData->defval);
+ if (pData->type == PARAMETER_BOOLEAN)
+ {
+ param_bool =
+ *((CCTK_INT *)CCTK_ParameterGet(pData->name,thorn,&param_type));
+ sprintf(message,
+ "%s<TR><TD align=left valign=center>%s</TD>"
+ "<TD align=left valign=center>"
+ "Yes <INPUT type=\"radio\" name=\"%s\" %s value=\"1\">"
+ "&nbsp; No <INPUT type=\"radio\" name=\"%s\" %s value=\"0\">"
+ "</TD><TD><SMALL>%s (%s)</SMALL></TR>\n",
+ message,pData->name,pData->name,
+ param_bool ? "checked" : "", pData->name,
+ param_bool ? "" : "checked",pData->description,pData->defval);
+ }
+ else
+ {
+ sprintf(message,
+ "%s<TR><TD align=left valign=center>%s</TD>"
+ "<TD align=left valign=center>"
+ "<INPUT TYPE=TEXT NAME=\"%s\" VALUE=\"%s\">"
+ "</TD><TD><SMALL>%s (%s)</SMALL></TR>\n",
+ message, pData->name, pData->name,
+ value, pData->description,pData->defval);
+ }
}
else
{
sprintf(message,
"%s<TR><TD align=left valign=center>%s</TD>"
- "<TD align=left valign=center>"
- "<INPUT TYPE=TEXT NAME=\"%s\" VALUE=\"%s\">"
- "</TD><TD><SMALL>%s (%s)</SMALL></TR>\n",
+ "<TD align=left valign=center>%s</TD><TD>"
+ "<SMALL>%s (%s)</SMALL></TR>\n",
message, pData->name, pData->name,
value, pData->description,pData->defval);
}
- }
+ }
free (value);
}
HTTP_Write(request, message, strlen(message));
}
+ printf("nsteerable is %d\n",nsteerable);
if (nsteerable>0)
{
strcpy(message, "</TABLE>\n");
- HTTP_Write(request, message, strlen(message));
}
+ else
+ {
+ strcpy(message, "<p>This thorn has no steerable parameters.</p>\n");
+ }
+ HTTP_Write(request, message, strlen(message));
if(!readonly && nsteerable>0)
{
@@ -914,8 +959,12 @@ static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data)
if (nfixed>0)
{
strcpy(message, "</TABLE>\n");
- HTTP_Write(request, message, strlen(message));
}
+ else
+ {
+ strcpy(message, "<p>This thorn has no fixed parameters.</p>\n");
+ }
+ HTTP_Write(request, message, strlen(message));
}
@@ -925,7 +974,7 @@ static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data)
/* Write out the footer part. */
- HTTP_ContentFooter(0,4098,message);
+ HTTP_ContentFooter(cctkGH, 0, 4098, message);
retval = HTTP_Write(request, message, strlen(message));
} /* n_arguments > 0 */
@@ -1073,7 +1122,8 @@ static int ControlPage(cGH *cctkGH, httpRequest *request, void *data)
strcpy(message, "<HTML><HEAD><TITLE>Cactus Control and Status Page</TITLE>\n");
HTTP_Write(request, message, strlen(message));
- HTTP_ContentHeader(0,4098,message);
+ HTTP_ContentHeader(cctkGH, 0,4098,message,NULL);
+
strcat(message, "<center><h1>Control and Status Page</h1></center>");
HTTP_Write(request, message, strlen(message));
@@ -1171,7 +1221,7 @@ static int ControlPage(cGH *cctkGH, httpRequest *request, void *data)
/* Write out the footer part. */
- HTTP_ContentFooter(0,4098,message);
+ HTTP_ContentFooter(cctkGH, 0, 4098, message);
retval = HTTP_Write(request, message, strlen(message));
}
else
@@ -1408,7 +1458,7 @@ static int ControlTerminationPage(cGH *cctkGH, httpRequest *request)
HTTP_Write(request, message, strlen(message));
/* Write out the main header part */
- HTTP_ContentHeader(1,4098,message);
+ HTTP_ContentHeader(cctkGH,1,4098,message,NULL);
HTTP_Write(request, message, strlen(message));
strcpy(message, "<center><h1>Simulation Home Page</h1></center>");
@@ -1547,7 +1597,7 @@ static int ControlTerminationPage(cGH *cctkGH, httpRequest *request)
/* Write out the footer part. */
- HTTP_ContentFooter(0,4098,message);
+ HTTP_ContentFooter(cctkGH,0,4098,message);
retval = HTTP_Write(request, message, strlen(message));
/* retval = HTTP_Write(request, base_page, strlen(base_page)); */
@@ -1619,7 +1669,7 @@ static int AboutPage(cGH *cctkGH, httpRequest *request, void *data)
/* Start the page */
strcpy(message, "<HTML><HEAD><TITLE>About Cactus Server</TITLE></HEAD>\n");
- HTTP_ContentHeader(0,4098,message);
+ HTTP_ContentHeader(cctkGH,0,4098,message,NULL);
strcat(message,"<BODY>");
HTTP_Write(request, message, strlen(message));
@@ -1652,7 +1702,7 @@ static int AboutPage(cGH *cctkGH, httpRequest *request, void *data)
/* Write out the footer part. */
- HTTP_ContentFooter(0,4098,message);
+ HTTP_ContentFooter(cctkGH,0,4098,message);
retval = HTTP_Write(request, message, strlen(message));
return retval;
@@ -1704,7 +1754,7 @@ static int CookieTestPage(cGH *cctkGH, httpRequest *request, void *data)
strcpy(message, "<HTML><HEAD><TITLE>Cookie Test</TITLE>\n");
HTTP_Write(request, message, strlen(message));
- HTTP_ContentHeader(0,4098,message);
+ HTTP_ContentHeader(cctkGH,0,4098,message,NULL);
HTTP_Write(request, message, strlen(message));
strcat(message, "<center><h1>Cookie Test</h1></center>");
@@ -1733,7 +1783,7 @@ static int CookieTestPage(cGH *cctkGH, httpRequest *request, void *data)
/* Write out the footer part. */
- HTTP_ContentFooter(0,4098,message);
+ HTTP_ContentFooter(cctkGH,0,4098,message);
retval = HTTP_Write(request, message, strlen(message));
return retval;
diff --git a/src/Groups.c b/src/Groups.c
index 7a27ef8..8d40112 100644
--- a/src/Groups.c
+++ b/src/Groups.c
@@ -116,7 +116,7 @@ static int GroupsPage(cGH *cctkGH, httpRequest *request, void *data)
/* HTTP_Write out the header part. */
- HTTP_ContentHeader(0,strlen(message),message);
+ HTTP_ContentHeader(cctkGH,0,strlen(message),message,NULL);
retval = HTTP_Write(request, message, strlen(message));
@@ -225,12 +225,12 @@ static int GroupsPage(cGH *cctkGH, httpRequest *request, void *data)
*/
}
- strcpy(message,"</TABLE></FORM></center>/n");
+ strcpy(message,"</TABLE></FORM></center>\n");
HTTP_Write(request, message, strlen(message));
/* Write out the footer part. */
- HTTP_ContentFooter(0,strlen(message),message);
+ HTTP_ContentFooter(cctkGH,0,strlen(message),message);
retval = HTTP_Write(request, message, strlen(message));
return retval;
diff --git a/src/Headers.c b/src/Headers.c
index 038b568..9c16211 100644
--- a/src/Headers.c
+++ b/src/Headers.c
@@ -21,6 +21,17 @@ CCTK_FILEVERSION(DevThorns_httpd_Headers_c)
********************* Local Data Types ***********************
********************************************************************/
+extern struct httpLink *ContentLinks;
+
+struct httpLink
+{
+ struct httpLink *next;
+ char *URL;
+ char *name;
+ char *description;
+ int flags;
+};
+
/********************************************************************
********************* Local Routine Prototypes *********************
********************************************************************/
@@ -80,13 +91,29 @@ static const char *cactus_footer =
@endhistory
@@*/
-int HTTP_ContentHeader(int choice, int len, char *header)
+int HTTP_ContentHeader(cGH *GH, int choice, int len, char *header, char *menu)
{
char title[TITLE_ARRAY_SIZE];
char currentdate[50];
char currenttime[50];
+ char quicklinks[524];
+ struct httpLink *link;
int titlelen,datelen,timelen;
+
+ if(ContentLinks)
+ {
+ strcpy(quicklinks,"<dl><dt><b>Options:</b>");
+ for(link = ContentLinks; link; link=link->next)
+ {
+ sprintf(quicklinks,
+ "%s<dt> <A HREF=\"%s\">%s</a></dt>\n",
+ quicklinks, link->URL, link->name);
+
+ }
+
+ sprintf(quicklinks,"%s</dl>\n",quicklinks);
+ }
if (choice == 0)
{
@@ -99,18 +126,36 @@ int HTTP_ContentHeader(int choice, int len, char *header)
sprintf( header,
"</HEAD>\n<BODY BGCOLOR=\"#FFFFFF\" link=\"#1B831D\" "
"vlink=\"#768000\" alink=\"#00FF00\">\n"
- "<table width=100%% border=0>\n<tr>\n<td align=left>\n");
- strcat(header,"<font color=#1B831D><small>\n");
- strncat(header, title, titlelen*sizeof(char));
- strcat(header,"<br>");
- strncat(header, currentdate, datelen*sizeof(char));
- strcat(header, " ");
- strncat(header, currenttime, timelen*sizeof(char));
- strcat(header, "</small></font>\n");
- strcat(header, "</td>\n<td align=right valign=top>\n"
- "<A HREF=\"/\">Master Run Page</A>\n"
- "</td>\n</tr>\n</table>\n<center>\n<table width=70%% border=0>\n"
- "<tr>\n<td>\n");
+ "<center>\n<table cellpadding=10 width=100%% border=0>\n"
+ "<tr>\n<td bgcolor=#E5FFA2 valign=top align=left width=20%%>\n");
+ strcat(header, "<A HREF=\"/\">Master Run Page</A>\n");
+ sprintf(header,"%s\n"
+ "<small><dl>"
+ "<dt><b>Environment:</b>"
+ "<dt>Time: %s"
+ "<dt>Date: %s"
+ "</dl></small>",
+ header,currenttime,currentdate);
+ sprintf(header,"%s <small><dl><dt><b>Simulation:</b>"
+ "<dt><i>%s</i>"
+ "<dt>Iteration: %d"
+ "<dt>Physical time: %4.2f"
+ "</dl>"
+ ,header,title,GH->cctk_iteration,GH->cctk_time);
+ if (ContentLinks)
+ {
+ strcat(header,quicklinks);
+ }
+ strcat(header,"</small>");
+
+ if (menu)
+ {
+ strcat(header,"<dt><small>");
+ strcat(header,menu);
+ strcat(header,"</dt></small>");
+ }
+
+ strcat(header,"</td><td valign=top>\n");
}
else
{
@@ -135,11 +180,10 @@ int HTTP_ContentHeader(int choice, int len, char *header)
@endhistory
@@*/
-int HTTP_ContentFooter(int choice, int len, char *footer)
+int HTTP_ContentFooter(cGH *GH, int choice, int len, char *footer)
{
strcpy(footer,cactus_footer);
return strlen(footer);
}
-
diff --git a/src/http_Content.h b/src/http_Content.h
index cf995b5..c79b7a8 100644
--- a/src/http_Content.h
+++ b/src/http_Content.h
@@ -26,8 +26,8 @@ int HTTP_ContentLink(const char *URL,
int HTTP_ContentSendFromFile(httpRequest *request,
int filedes);
-void HTTP_ContentHeader(int choice, int len, char *header);
-void HTTP_ContentFooter(int choice, int len, char *footer);
+int HTTP_ContentHeader(cGH *cctkGH, int choice, int len, char *mess, char *menu);
+int HTTP_ContentFooter(cGH *cctkGH, int choice, int len, char *mess);
#ifdef __cplusplus
}