Hi,
void init_openssl()
{
SSL_load_error_strings();
SSL_library_init();
}
AnsiString s, HEADERS = "GET /search?q=test HTTP/1.1\r\nHost: www.google.com\r\nUser-Agent: OpenSSL\r\n\r\n";
I'm trying to connect to www.google.com on 443 port with SSL but my code shows an error at ssl_write.
This code is written in C++ Builder on Windows.
Everything is good before this point
err = SSL_write(ssl, buf, strlen(buf));
But after that err=-1 and code=1 (means SSL_ERROR_SSL )
What may the problem?
My question also: I have found that maybe I have to use ERR_get_error but this function is in an another dll (libeay32) how will this function connect to the ssl instance?
Thanks for your help
{
SSL_load_error_strings();
SSL_library_init();
}
AnsiString s, HEADERS = "GET /search?q=test HTTP/1.1\r\nHost: www.google.com\r\nUser-Agent: OpenSSL\r\n\r\n";
void TestProc()
{
WORD wVersionRequested;
WSADATA wsaData;
struct sockaddr_in sa;
PSSL_METHOD meth;
u_long iMode = 1;
char buf[1024];
strcpy(buf, HEADERS.c_str());
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) throw Exception("WSAStartup");
init_openssl();
// Create socket
sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP );
memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr("216.58.213.4"); /* Server IP : this google.com */
sa.sin_port = htons(443); /* Server Port number */
err = connect(sd, (struct sockaddr*) &sa, sizeof(sa));
if (err == -1) throw Exception("SOCKET: connect");
err = ioctlsocket(sd, FIONBIO, &iMode);
if (err == -1) throw Exception("SOCKET: set blocking mode");
// Create SSL context
meth = SSLv23_server_method();
if (!meth) throw Exception("SSL: method");
ctx = SSL_CTX_new(meth);
if (!meth) throw Exception("SSL: context");
ssl = SSL_new(ctx);
if (!ssl) throw Exception("SSL: ssl");
SSL_set_fd(ssl, sd);
// Connect
err = SSL_connect(ssl);
if (err == -1) throw Exception("SSL: SSL_connect");
// Send
s = HEADERS;
err = SSL_write(ssl, buf, strlen(buf)); /* error at this point, code = SSL_ERROR_SSL */
code = SSL_get_error(ssl, err);
if (err == -1) throw Exception("SSL: send: "+s);
}
{
WORD wVersionRequested;
WSADATA wsaData;
struct sockaddr_in sa;
PSSL_METHOD meth;
u_long iMode = 1;
char buf[1024];
strcpy(buf, HEADERS.c_str());
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) throw Exception("WSAStartup");
init_openssl();
// Create socket
sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP );
memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr("216.58.213.4"); /* Server IP : this google.com */
sa.sin_port = htons(443); /* Server Port number */
err = connect(sd, (struct sockaddr*) &sa, sizeof(sa));
if (err == -1) throw Exception("SOCKET: connect");
err = ioctlsocket(sd, FIONBIO, &iMode);
if (err == -1) throw Exception("SOCKET: set blocking mode");
// Create SSL context
meth = SSLv23_server_method();
if (!meth) throw Exception("SSL: method");
ctx = SSL_CTX_new(meth);
if (!meth) throw Exception("SSL: context");
ssl = SSL_new(ctx);
if (!ssl) throw Exception("SSL: ssl");
SSL_set_fd(ssl, sd);
// Connect
err = SSL_connect(ssl);
if (err == -1) throw Exception("SSL: SSL_connect");
// Send
s = HEADERS;
err = SSL_write(ssl, buf, strlen(buf)); /* error at this point, code = SSL_ERROR_SSL */
code = SSL_get_error(ssl, err);
if (err == -1) throw Exception("SSL: send: "+s);
}