- pthread_mutex_unlock(&MasterCritter);
- sprintf(str_session, "%d", TheSession->session_id);
- f = fork();
- if (f > 0)
- TheSession->webcit_pid = f;
-
- fflush(stdout);
- fflush(stdin);
- if (f == 0) {
-
- /* Hook stdio to the ends of the pipe we're using */
- dup2(TheSession->inpipe[0], 0);
- dup2(TheSession->outpipe[1], 1);
-
- /* Close the ends of the pipes that we're not using */
- close(TheSession->inpipe[1]);
- close(TheSession->outpipe[0]);
-
- /* Close the HTTP socket in this pid; don't need it */
- close(sock);
-
- /* Run the actual WebCit session */
- execlp("./webcit", "webcit", str_session, defaulthost,
- defaultport, browser_host, browser, NULL);
-
- /* Simple page to display if exec fails */
- printf("HTTP/1.0 404 WebCit Failure\n\n");
- printf("Server: %s\n", SERVER);
- printf("X-WebCit-Session: close\n");
- printf("Content-type: text/html\n");
- printf("Content-length: 76\n");
- printf("\n");
- printf("<HTML><HEAD><TITLE>Error</TITLE></HEAD><BODY>\n");
- printf("execlp() failed: %s</BODY></HTML>\n", strerror(errno));
- exit(0);
- } else {
- /* Close the ends of the pipes that we're not using */
- close(TheSession->inpipe[0]);
- close(TheSession->outpipe[1]);
- }
- }
- /*
- * Send the request to the appropriate session...
- */
- TheSession->lastreq = time(NULL);
- printf(" Writing %d lines of command\n", num_lines);
- printf("%s\n", &req[0][0]);
- for (a = 0; a < num_lines; ++a) {
- write(TheSession->inpipe[1], &req[a][0], strlen(&req[a][0]));
- write(TheSession->inpipe[1], "\n", 1);
- }
- printf(" Writing %d bytes of content\n", ContentLength);
- while (ContentLength > 0) {
- a = ContentLength;
- if (a > sizeof buf)
- a = sizeof buf;
- if (!client_read(sock, buf, a))
- goto end;
- if (write(TheSession->inpipe[1], buf, a) != a)
- goto end;
- ContentLength -= a;