bool SSLClient::connection(const string& host, const int& port) { if(host=="localhost") { return connectionUnresolv(host, port); } struct sockaddr_in *remote; int tmpres; char *ip; sockfd = create_tcp_socket(); ip = get_ip((char*)host.c_str()); fprintf(stderr, "IP is %s\n", ip); remote = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in *)); remote->sin_family = AF_INET; tmpres = inet_pton(AF_INET, ip, (void *)(&(remote->sin_addr.s_addr))); if( tmpres < 0) { perror("Can't set remote->sin_addr.s_addr"); return false; } else if(tmpres == 0) { fprintf(stderr, "%s is not a valid IP address\n", ip); return false; } remote->sin_port = htons(port); if(connect(sockfd, (struct sockaddr *)remote, sizeof(struct sockaddr)) < 0){ perror("Could not connect"); connected = false; } else { connected = true; } free(remote); free(ip); /* Build our SSL context*/ init(); /* Connect the SSL socket */ ssl=SSL_new(ctx); sbio=BIO_new_socket(sockfd,BIO_CLOSE); SSL_set_bio(ssl,sbio,sbio); io=BIO_new(BIO_f_buffer()); ssl_bio=BIO_new(BIO_f_ssl()); BIO_set_ssl(ssl_bio,ssl,BIO_NOCLOSE); BIO_push(io,ssl_bio); if(SSL_connect(ssl)<=0) { logger << "SSL connect error"; return false; } ERR_clear_error(); connected = true; return true; }
bool Client::connection(string host,int port) { if(host=="localhost") { return connectionUnresolv(host, port); } struct sockaddr_in *remote; int tmpres; char *ip; sockfd = create_tcp_socket(); ip = get_ip((char*)host.c_str()); fprintf(stderr, "IP is %s\n", ip); remote = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in *)); remote->sin_family = AF_INET; tmpres = inet_pton(AF_INET, ip, (void *)(&(remote->sin_addr.s_addr))); if( tmpres < 0) { perror("Can't set remote->sin_addr.s_addr"); return false; } else if(tmpres == 0) { fprintf(stderr, "%s is not a valid IP address\n", ip); return false; } remote->sin_port = htons(port); if(connect(sockfd, (struct sockaddr *)remote, sizeof(struct sockaddr)) < 0){ perror("Could not connect"); connected = false; } else { connected = true; } free(remote); free(ip); return connected; }