SSL* SSLManager::connect(int fd) { SSL* ssl = _secure(fd); int ret = _ssl_connect(ssl); if (ret != 1) _handleSSLError(SSL_get_error(ssl, ret)); return ssl; }
static int tcp_conn(nsp_state *N, TCP_SOCKET *sock, const struct sockaddr_in *serv_addr, socklen_t addrlen, short int use_ssl) { struct sockaddr_in host; struct sockaddr_in peer; socklen_t fromlen; int rc; rc = connect(sock->socket, (struct sockaddr *)serv_addr, addrlen); #ifdef HAVE_SSL if ((rc == 0) && (use_ssl)) { rc = _ssl_connect(N, sock); sock->use_ssl = 1; } #endif if (rc < 0) { sock->LocalPort = 0; sock->RemotePort = 0; return -1; } fromlen = sizeof(host); getsockname(sock->socket, (struct sockaddr *)&host, &fromlen); nc_strncpy(sock->LocalAddr, inet_ntoa(host.sin_addr), sizeof(sock->LocalAddr) - 1); sock->LocalPort = ntohs(host.sin_port); fromlen = sizeof(peer); getpeername(sock->socket, (struct sockaddr *)&peer, &fromlen); nc_strncpy(sock->RemoteAddr, inet_ntoa(peer.sin_addr), sizeof(sock->RemoteAddr) - 1); sock->RemotePort = ntohs(peer.sin_port); return rc; }
SSL* SSLManager::connect(int fd) { SSL* ssl = _secure(fd); ScopeGuard guard = MakeGuard(::SSL_free, ssl); int ret = _ssl_connect(ssl); if (ret != 1) _handleSSLError(SSL_get_error(ssl, ret)); guard.Dismiss(); return ssl; }
int32_t ghttp_client_init(struct s_client *cl) { int32_t handle; char *str = NULL; if(cl->reader->r_port == 0) { cl->reader->r_port = cl->reader->ghttp_use_ssl ? 443 : 80; } str = strstr(cl->reader->device, "."); if(!str) { char host[128]; cs_strncpy(host, cl->reader->device, sizeof(cl->reader->device)); snprintf(cl->reader->device, sizeof(cl->reader->device), "%s.appspot.com", host); } cs_log("%s: init google cache client %s:%d (fd=%d)", cl->reader->label, cl->reader->device, cl->reader->r_port, cl->udp_fd); if(cl->udp_fd) { network_tcp_connection_close(cl->reader, "re-init"); } handle = network_tcp_connection_open(cl->reader); if(handle < 0) { return -1; } cl->reader->tcp_connected = 2; cl->reader->card_status = CARD_INSERTED; cl->reader->last_g = cl->reader->last_s = time((time_t *)0); cl->pfd = cl->udp_fd; if(!cl->ghttp) { if(!cs_malloc(&(cl->ghttp), sizeof(s_ghttp))) { return -1; } memset(cl->ghttp, 0, sizeof(s_ghttp)); ((s_ghttp *)cl->ghttp)->post_contexts = ll_create("post contexts"); ((s_ghttp *)cl->ghttp)->ecm_q = ll_create("ecm queue"); } else { ll_clear(((s_ghttp *)cl->ghttp)->ecm_q); } if(cl->reader->ghttp_use_ssl) { #ifndef WITH_SSL cs_log("%s: use_ssl set but no ssl support available, aborting...", cl->reader->label); return -1; #endif #ifdef WITH_SSL if(ghttp_ssl_context == NULL) { return -1; } if(_ssl_connect(cl, handle)) { cl->crypted = 1; } else { network_tcp_connection_close(cl->reader, "ssl failed"); return -1; } #endif } return 0; }