Crypt-MatrixSSL
view release on metacpan or search on metacpan
matrixssl-1-8-6-open/examples/httpsReflector.c view on Meta::CPAN
sslFreeConnection(&cp);
continue;
} else if (rc == 0) {
goto writeMore;
}
free(response);
/*
If we saw an /again request, loop up and process another pipelined
HTTP request. The /again request is supported in the httpsClient
example code.
*/
if (again) {
continue;
}
/*
Send a closure alert for clean shutdown of remote SSL connection
This is for good form, some implementations just close the socket
*/
sslWriteClosureAlert(cp);
/*
Close the socket and wait for next connection (new session)
*/
socketShutdown(cp->fd);
sslFreeConnection(&cp);
acceptAgain = 1;
}
/*
Close listening socket, free remaining items
*/
if (cp && cp->ssl) {
socketShutdown(cp->fd);
sslFreeConnection(&cp);
}
socketShutdown(listenfd);
matrixSslFreeKeys(keys);
matrixSslClose();
WSACleanup();
promptAndExit:
fprintf(stdout, "\n\nPress return to exit...\n");
getchar();
return 0;
}
#if USE_MEM_CERTS
static int32 getFileBin(char *fileName, unsigned char **bin,
int32 *binLen)
{
FILE *fp;
struct stat fstat;
size_t tmp = 0;
*binLen = 0;
*bin = NULL;
if (fileName == NULL) {
return -1;
}
if ((stat(fileName, &fstat) != 0) || (fp = fopen(fileName, "rb")) == NULL) {
return -7; /* FILE_NOT_FOUND */
}
*bin = malloc(fstat.st_size);
if (*bin == NULL) {
return -8; /* SSL_MEM_ERROR */
}
while (((tmp = fread(*bin + *binLen, sizeof(char), 512, fp)) > 0) &&
(*binLen < fstat.st_size)) {
*binLen += (int32)tmp;
}
fclose(fp);
return 0;
}
#endif
/******************************************************************************/
( run in 0.655 second using v1.01-cache-2.11-cpan-39bf76dae61 )