Note that there are some explanatory texts on larger screens.

plurals
  1. POwhat is the meaning of error: dereferencing pointer to incomplete type
    text
    copied!<p>Here is my program:</p> <pre><code>//SSL-Server-Client-Linkage-Broker.c #include &lt;errno.h&gt; #include &lt;unistd.h&gt; #include &lt;malloc.h&gt; #include &lt;string.h&gt; #include &lt;asm/stat.h&gt; #include &lt;linux/fs.h&gt; #include &lt;linux/sched.h&gt; #include &lt;arpa/inet.h&gt; #include &lt;sys/socket.h&gt; #include &lt;sys/types.h&gt; #include &lt;netinet/in.h&gt; #include &lt;resolv.h&gt; #include "openssl/ssl.h" #include "openssl/err.h" #define FAIL -1 int OpenConnection(const char *hostnamen, int portn) //for software house { int sd; struct hostent *host; struct sockaddr_in addr; if ( (host = gethostbyname(hostnamen)) == NULL ) { perror(hostnamen); abort(); } sd = socket(PF_INET, SOCK_STREAM, 0); bzero(&amp;addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(portn); addr.sin_addr.s_addr = *(long*)(host-&gt;h_addr); if ( connect(sd, (struct sockaddr*)&amp;addr, sizeof(addr)) != 0 ) { close(sd); perror(hostnamen); abort(); } return sd; } SSL_CTX* InitServerCTX(void) { SSL_METHOD *method; SSL_CTX *ctx; OpenSSL_add_all_algorithms(); /* load &amp; register all cryptos, etc. */ SSL_load_error_strings(); /* load all error messages */ method = SSLv2_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; } int OpenListener(int port) { int sd; struct sockaddr_in addr; sd = socket(PF_INET, SOCK_STREAM, 0); bzero(&amp;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*)&amp;addr, sizeof(addr)) != 0 ) { perror("can't bind port"); abort(); } if ( listen(sd, 10) != 0 ) { perror("Can't configure listening port"); abort(); } return sd; } 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) &lt;= 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) &lt;= 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\n"); 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:\n"); line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0); printf("Subject: %s\n", line); free(line); line = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0); printf("Issuer: %s\n", line); free(line); X509_free(cert); } else printf("No certificates.\n"); } char Servlet(SSL* ssl) /* Serve the connection -- threadable */ { char buf[1024]; char bufnew[1024]; char reply[1024]; int sd, bytes; const char* echo="Message received"; 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 */ if ( bytes &gt; 0 ) { buf[bytes] = 0; printf("Client msg: %s\n", buf); strcpy (bufnew,buf); sprintf(reply, echo, buf); /* construct reply */ SSL_write(ssl, reply, strlen(reply)); /* send reply */ return bufnew; /* storing that in buffer for sending it to software house */ } else ERR_print_errors_fp(stderr); } sd = SSL_get_fd(ssl); /* get socket connection */ SSL_free(ssl); /* release SSL state */ close(sd); /* close connection */ } SSL_CTX* InitCTX(void) { SSL_METHOD *method; SSL_CTX *ctxn; OpenSSL_add_all_algorithms(); /* Load cryptos, et.al. */ SSL_load_error_strings(); /* Bring in and register error messages */ method = SSLv2_client_method(); /* Create new client-method instance */ ctxn = SSL_CTX_new(method); /* Create new context */ if ( ctxn == NULL ) { ERR_print_errors_fp(stderr); abort(); } return ctxn; } int main(int count, char *strings[]) { SSL_CTX *ctx; int server; char *portnum; int servern; char bufnew[1024]; int bytes; char *hostnamen, *portnumn; if ( count != 2 ) { printf("Usage: %s &lt;portnum&gt;\n", strings[0]); exit(0); } SSL_library_init(); portnum = strings[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*)&amp;addr, &amp;len); /* accept connection as usual */ printf("Connection: %s:%d\n",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 */ /* ----------------------------- End of programmer/linkage broker connection ----------------------------------*/ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Start of linkage broker/software house connection ~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ SSL_CTX *ctxn; SSL *ssln; if ( count != 3 ) { printf("usage: %s &lt;hostnamen&gt; &lt;portnumn&gt;\n", strings[0]); exit(0); } SSL_library_init(); hostnamen = strings[1]; portnumn = strings[2]; ctxn = InitCTX(); server = OpenConnection(hostnamen, atoi(portnumn)); ssln = SSL_new(ctxn); // create new SSL connection state SSL_set_fd(ssln, server); // attach the socket descriptor if ( SSL_connect(ssln) == FAIL ) //perform the connection ERR_print_errors_fp(stderr); else { char *msg = bufnew; printf("Connected with %s encryption\n", SSL_get_cipher(ssln)); ShowCerts(ssln); // get any certs SSL_write(ssln, msg, strlen(msg)); // encrypt &amp; send message bytes = SSL_read(ssln, bufnew, sizeof(bufnew)); // get reply &amp; decrypt bufnew[bytes] = 0; printf("Received: \"%s\"\n", bufnew); SSL_free(ssln); // release connection state } close(server); // close socket SSL_CTX_free(ctxn); // release context return 0; } </code></pre> <p>when compiling it gives error in line</p> <pre><code>addr.sin_addr.s_addr = *(long*)(host-&gt;h_addr); </code></pre> <p>I tried to look hostent structure but couldn't find any solution.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload