*(p++)=1; *(p++)=0;
if (s->ctx->comp_methods == NULL) j=0; else j=sk_num(s->ctx->comp_methods); *(p++)=1+j; for (i=0; i<j; i++) { comp=(SSL_COMP *)sk_value(s->ctx->comp_methods,i); *(p++)=comp->id; } *(p++)=0;
static int ssl3_client_hello(s)SSL *s;	{	unsigned char *buf;	unsigned char *p,*d;	int i;	unsigned long Time,l;	buf=(unsigned char *)s->init_buf->data;	if (s->state == SSL3_ST_CW_CLNT_HELLO_A)		{		if ((s->session == NULL) ||			(s->session->ssl_version != s->version) ||			(s->session->not_resumable))			{			if (!ssl_get_new_session(s,0))				goto err;			}		/* else use the pre-loaded session */		p=s->s3->client_random;		Time=time(NULL);			/* Time */		l2n(Time,p);		RAND_bytes(p,SSL3_RANDOM_SIZE-sizeof(Time));		/* Do the message type and length last */		d=p= &(buf[4]);		*(p++)=s->version>>8;		*(p++)=s->version&0xff;		/* Random stuff */		memcpy(p,s->s3->client_random,SSL3_RANDOM_SIZE);		p+=SSL3_RANDOM_SIZE;		/* Session ID */		if (s->new_session)			i=0;		else			i=s->session->session_id_length;		*(p++)=i;		if (i != 0)			{			memcpy(p,s->session->session_id,i);			p+=i;			}				/* Ciphers supported */		i=ssl_cipher_list_to_bytes(s,SSL_get_ciphers(s),&(p[2]));		if (i == 0)			{			SSLerr(SSL_F_SSL3_CLIENT_HELLO,SSL_R_NO_CIPHERS_AVAILABLE);			goto err;			}		s2n(i,p);		p+=i;		/* hardwire in the NULL compression algorithm. */		/* COMPRESSION */		*(p++)=1;		*(p++)=0;				l=(p-d);		d=buf;		*(d++)=SSL3_MT_CLIENT_HELLO;		l2n3(l,d);		s->state=SSL3_ST_CW_CLNT_HELLO_B;		/* number of bytes to write */		s->init_num=p-buf;		s->init_off=0;		}	/* SSL3_ST_CW_CLNT_HELLO_B */	return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));err:	return(-1);	}