Question: Convert these two codes from C to JAVA: Client code: #include #include #include #include #include #include #include #include #include #include #define FAIL -1 int OpenConnection(const

Convert these two codes from C to JAVA:

Client code:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define FAIL -1

int OpenConnection(const char *hostname, int port)

{

int sd;

struct hostent *host;

struct sockaddr_in addr;

if ( (host = gethostbyname(hostname)) == NULL )

{

perror(hostname);

abort();

}

sd = socket(PF_INET, SOCK_STREAM, 0);

bzero(&addr, sizeof(addr));

addr.sin_family = AF_INET;

addr.sin_port = htons(port);

addr.sin_addr.s_addr = *(long*)(host->h_addr);

if ( connect(sd, (struct sockaddr*)&addr, sizeof(addr)) != 0 )

{

close(sd);

perror(hostname);

abort();

}

return sd;

}

SSL_CTX* InitCTX(void)

{

SSL_METHOD *method;

SSL_CTX *ctx;

OpenSSL_add_all_algorithms(); /* Load cryptos, et.al. */

SSL_load_error_strings(); /* Bring in and register error messages */

method = TLSv1_2_client_method(); /* Create new client-method instance */

ctx = SSL_CTX_new(method); /* Create new context */

if ( ctx == NULL )

{

ERR_print_errors_fp(stderr);

abort();

}

return ctx;

}

void ShowCerts(SSL* ssl)

{

X509 *cert;

char *line;

cert = SSL_get_peer_certificate(ssl); /* get the server's certificate */

if ( cert != NULL )

{

printf("Server certificates: ");

line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);

printf("Subject: %s ", line);

free(line); /* free the malloc'ed string */

line = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0);

printf("Issuer: %s ", line);

free(line); /* free the malloc'ed string */

X509_free(cert); /* free the malloc'ed certificate copy */

}

else

printf("Info: No client certificates configured. ");

}

int main(int count, char *strings[])

{

SSL_CTX *ctx;

int server;

SSL *ssl;

char buf[1024];

char acClientRequest[1024] = {0};

int bytes;

char *hostname, *portnum;

if ( count != 3 )

{

printf("usage: %s ", strings[0]);

exit(0);

}

SSL_library_init();

hostname=strings[1];

portnum=strings[2];

ctx = InitCTX();

server = OpenConnection(hostname, atoi(portnum));

ssl = SSL_new(ctx); /* create new SSL connection state */

SSL_set_fd(ssl, server); /* attach the socket descriptor */

if ( SSL_connect(ssl) == FAIL ) /* perform the connection */

ERR_print_errors_fp(stderr);

else

{

char acUsername[16] = {0};

char acPassword[16] = {0};

const char *cpRequestMessage = "\

%s\

%s\

<\Body>";

printf("Enter the User Name : ");

scanf("%s",acUsername);

printf(" Enter the Password : ");

scanf("%s",acPassword);

sprintf(acClientRequest, cpRequestMessage, acUsername,acPassword); /* construct reply */

printf(" Connected with %s encryption ", SSL_get_cipher(ssl));

ShowCerts(ssl); /* get any certs */

SSL_write(ssl,acClientRequest, strlen(acClientRequest)); /* encrypt & send message */

bytes = SSL_read(ssl, buf, sizeof(buf)); /* get reply & decrypt */

buf[bytes] = 0;

printf("Received: \"%s\" ", buf);

SSL_free(ssl); /* release connection state */

}

close(server); /* close socket */

SSL_CTX_free(ctx); /* release context */

return 0;

}

Server code:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include "openssl/ssl.h"

#include "openssl/err.h"

#define FAIL -1

// Create the SSL socket and intialize the socket address structure

int OpenListener(int port)

{

int sd;

struct sockaddr_in addr;

sd = socket(PF_INET, SOCK_STREAM, 0);

bzero(&addr, sizeof(addr));

addr.sin_family = AF_INET;

addr.sin_port = htons(port);

addr.sin_addr.s_addr = INADDR_ANY;

if (bind(sd, (struct sockaddr*)&addr, sizeof(addr)) != 0 )

{

perror("can't bind port");

abort();

}

if ( listen(sd, 10) != 0 )

{

perror("Can't configure listening port");

abort();

}

return sd;

}

int isRoot()

{

if (getuid() != 0)

{

return 0;

}

else

{

return 1;

}

}

SSL_CTX* InitServerCTX(void)

{

SSL_METHOD *method;

SSL_CTX *ctx;

OpenSSL_add_all_algorithms(); /* load & register all cryptos, etc. */

SSL_load_error_strings(); /* load all error messages */

method = TLSv1_2_server_method(); /* create new server-method instance */

ctx = SSL_CTX_new(method); /* create new context from method */

if ( ctx == NULL )

{

ERR_print_errors_fp(stderr);

abort();

}

return ctx;

}

void LoadCertificates(SSL_CTX* ctx, char* CertFile, char* KeyFile)

{

/* set the local certificate from CertFile */

if ( SSL_CTX_use_certificate_file(ctx, CertFile, SSL_FILETYPE_PEM) <= 0 )

{

ERR_print_errors_fp(stderr);

abort();

}

/* set the private key from KeyFile (may be the same as CertFile) */

if ( SSL_CTX_use_PrivateKey_file(ctx, KeyFile, SSL_FILETYPE_PEM) <= 0 )

{

ERR_print_errors_fp(stderr);

abort();

}

/* verify private key */

if ( !SSL_CTX_check_private_key(ctx) )

{

fprintf(stderr, "Private key does not match the public certificate ");

abort();

}

}

void ShowCerts(SSL* ssl)

{

X509 *cert;

char *line;

cert = SSL_get_peer_certificate(ssl); /* Get certificates (if available) */

if ( cert != NULL )

{

printf("Server certificates: ");

line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);

printf("Subject: %s ", line);

free(line);

line = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0);

printf("Issuer: %s ", line);

free(line);

X509_free(cert);

}

else

printf("No certificates. ");

}

void Servlet(SSL* ssl) /* Serve the connection -- threadable */

{

char buf[1024] = {0};

int sd, bytes;

const char* ServerResponse="<\Body>\

aticleworld.com\

1.5\

Embedede and c\c++<\BlogType>\

amlendra\

<\Body>";

const char *cpValidMessage = "\

aticle\

123\

<\Body>";

if ( SSL_accept(ssl) == FAIL ) /* do SSL-protocol accept */

ERR_print_errors_fp(stderr);

else

{

ShowCerts(ssl); /* get any certificates */

bytes = SSL_read(ssl, buf, sizeof(buf)); /* get request */

buf[bytes] = '\0';

printf("Client msg: \"%s\" ", buf);

if ( bytes > 0 )

{

if(strcmp(cpValidMessage,buf) == 0)

{

SSL_write(ssl, ServerResponse, strlen(ServerResponse)); /* send reply */

}

else

{

SSL_write(ssl, "Invalid Message", strlen("Invalid Message")); /* send reply */

}

}

else

{

ERR_print_errors_fp(stderr);

}

}

sd = SSL_get_fd(ssl); /* get socket connection */

SSL_free(ssl); /* release SSL state */

close(sd); /* close connection */

}

int main(int count, char *Argc[])

{

SSL_CTX *ctx;

int server;

char *portnum;

//Only root user have the permsion to run the server

if(!isRoot())

{

printf("This program must be run as root/sudo user!!");

exit(0);

}

if ( count != 2 )

{

printf("Usage: %s ", Argc[0]);

exit(0);

}

// Initialize the SSL library

SSL_library_init();

portnum = Argc[1];

ctx = InitServerCTX(); /* initialize SSL */

LoadCertificates(ctx, "mycert.pem", "mycert.pem"); /* load certs */

server = OpenListener(atoi(portnum)); /* create server socket */

while (1)

{

struct sockaddr_in addr;

socklen_t len = sizeof(addr);

SSL *ssl;

int client = accept(server, (struct sockaddr*)&addr, &len); /* accept connection as usual */

printf("Connection: %s:%d ",inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));

ssl = SSL_new(ctx); /* get new SSL state with context */

SSL_set_fd(ssl, client); /* set connection socket to SSL state */

Servlet(ssl); /* service connection */

}

close(server); /* close server socket */

SSL_CTX_free(ctx); /* release context */

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!