Example #1
0
 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;
 }
Example #2
0
File: tcp.c Project: dancahill/nsp
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;
}
Example #3
0
 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;
 }
Example #4
0
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;
}