#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "fcgi_stdio.h"
#include "openjpip.h"
#ifndef QUIT_SIGNAL
#define QUIT_SIGNAL "quitJPIP"
#endif
#ifdef _WIN32
WSADATA initialisation_win32;
#endif
int main(void)
{
server_record_t *server_record;
#ifdef SERVER
char *query_string;
#endif
#ifdef _WIN32
int erreur = WSAStartup(MAKEWORD(2, 2), &initialisation_win32);
if (erreur != 0) {
fprintf(stderr, "Erreur initialisation Winsock error : %d %d\n", erreur,
WSAGetLastError());
} else {
fprintf(stderr, "Initialisation Winsock\n");
}
#endif
server_record = init_JPIPserver(60000, 0);
#ifdef SERVER
while (FCGI_Accept() >= 0)
#else
char query_string[128];
while (fgets(query_string, 128, stdin) && query_string[0] != '\n')
#endif
{
QR_t *qr;
OPJ_BOOL parse_status;
#ifdef SERVER
query_string = getenv("QUERY_STRING");
#endif
if (strcmp(query_string, QUIT_SIGNAL) == 0) {
break;
}
qr = parse_querystring(query_string);
parse_status = process_JPIPrequest(server_record, qr);
#ifndef SERVER
local_log(OPJ_TRUE, OPJ_TRUE, parse_status, OPJ_FALSE, qr, server_record);
#endif
if (parse_status) {
send_responsedata(server_record, qr);
} else {
fprintf(FCGI_stderr, "Error: JPIP request failed\n");
fprintf(FCGI_stdout, "\r\n");
}
end_QRprocess(server_record, &qr);
}
fprintf(FCGI_stderr, "JPIP server terminated by a client request\n");
terminate_JPIPserver(&server_record);
#ifdef _WIN32
if (WSACleanup() != 0) {
fprintf(stderr, "\nError in WSACleanup : %d %d", erreur, WSAGetLastError());
} else {
fprintf(stderr, "\nWSACleanup OK\n");
}
#endif
return 0;
}