您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ BUF_MEM_grow函数代码示例

51自学网 2021-06-01 19:53:48
  C++
这篇教程C++ BUF_MEM_grow函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中BUF_MEM_grow函数的典型用法代码示例。如果您正苦于以下问题:C++ BUF_MEM_grow函数的具体用法?C++ BUF_MEM_grow怎么用?C++ BUF_MEM_grow使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了BUF_MEM_grow函数的28个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: WPACKET_allocate_bytes

int WPACKET_allocate_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes){    /* Internal API, so should not fail */    assert(pkt->subs != NULL && len != 0);    if (pkt->subs == NULL || len == 0)        return 0;    if (pkt->maxsize - pkt->written < len)        return 0;    if (pkt->buf->length - pkt->written < len) {        size_t newlen;        size_t reflen;        reflen = (len > pkt->buf->length) ? len : pkt->buf->length;        if (reflen > SIZE_MAX / 2) {            newlen = SIZE_MAX;        } else {            newlen = reflen * 2;            if (newlen < DEFAULT_BUF_SIZE)                newlen = DEFAULT_BUF_SIZE;        }        if (BUF_MEM_grow(pkt->buf, newlen) == 0)            return 0;    }    *allocbytes = (unsigned char *)pkt->buf->data + pkt->curr;    pkt->written += len;    pkt->curr += len;    return 1;}
开发者ID:kdavis2015,项目名称:openssl,代码行数:32,


示例2: WPACKET_reserve_bytes

int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes){    /* Internal API, so should not fail */    if (!ossl_assert(pkt->subs != NULL && len != 0))        return 0;    if (pkt->maxsize - pkt->written < len)        return 0;    if (pkt->staticbuf == NULL && (pkt->buf->length - pkt->written < len)) {        size_t newlen;        size_t reflen;        reflen = (len > pkt->buf->length) ? len : pkt->buf->length;        if (reflen > SIZE_MAX / 2) {            newlen = SIZE_MAX;        } else {            newlen = reflen * 2;            if (newlen < DEFAULT_BUF_SIZE)                newlen = DEFAULT_BUF_SIZE;        }        if (BUF_MEM_grow(pkt->buf, newlen) == 0)            return 0;    }    if (allocbytes != NULL)        *allocbytes = WPACKET_get_curr(pkt);    return 1;}
开发者ID:Vonage,项目名称:openssl,代码行数:30,


示例3: x509_name_ex_d2i

static intx509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long len,    const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx){	const unsigned char *p = *in, *q;	union {		STACK_OF(STACK_OF_X509_NAME_ENTRY) *s;		ASN1_VALUE *a;	} intname = {NULL};	union {		X509_NAME *x;		ASN1_VALUE *a;	} nm = {NULL};	int i, j, ret;	STACK_OF(X509_NAME_ENTRY) *entries;	X509_NAME_ENTRY *entry;	q = p;	/* Get internal representation of Name */	ret = ASN1_item_ex_d2i(&intname.a, &p, len,	    ASN1_ITEM_rptr(X509_NAME_INTERNAL), tag, aclass, opt, ctx);	if (ret <= 0)		return ret;	if (*val)		x509_name_ex_free(val, NULL);	if (!x509_name_ex_new(&nm.a, NULL))		goto err;	/* We've decoded it: now cache encoding */	if (!BUF_MEM_grow(nm.x->bytes, p - q))		goto err;	memcpy(nm.x->bytes->data, q, p - q);	/* Convert internal representation to X509_NAME structure */	for (i = 0; i < sk_STACK_OF_X509_NAME_ENTRY_num(intname.s); i++) {		entries = sk_STACK_OF_X509_NAME_ENTRY_value(intname.s, i);		for (j = 0; j < sk_X509_NAME_ENTRY_num(entries); j++) {			entry = sk_X509_NAME_ENTRY_value(entries, j);			entry->set = i;			if (!sk_X509_NAME_ENTRY_push(nm.x->entries, entry))				goto err;		}		sk_X509_NAME_ENTRY_free(entries);	}	sk_STACK_OF_X509_NAME_ENTRY_free(intname.s);	ret = x509_name_canon(nm.x);	if (!ret)		goto err;	nm.x->modified = 0;	*val = nm.a;	*in = p;	return ret;err:	if (nm.x != NULL)		X509_NAME_free(nm.x);	ASN1err(ASN1_F_X509_NAME_EX_D2I, ERR_R_NESTED_ASN1_ERROR);	return 0;}
开发者ID:LucaBongiorni,项目名称:nextgen,代码行数:60,


示例4: do_generate

static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)	{	CONF *cnf = NULL;	int len;	long errline;	unsigned char *p;	ASN1_TYPE *atyp = NULL;	if (genconf)		{		cnf = NCONF_new(NULL);		if (!NCONF_load(cnf, genconf, &errline))			goto conferr;		if (!genstr)			genstr = NCONF_get_string(cnf, "default", "asn1");		if (!genstr)			{			BIO_printf(bio, "Can't find 'asn1' in '%s'/n", genconf);			goto err;			}		}	atyp = ASN1_generate_nconf(genstr, cnf);	NCONF_free(cnf);	if (!atyp)		return -1;	len = i2d_ASN1_TYPE(atyp, NULL);	if (len <= 0)		goto err;	if (!BUF_MEM_grow(buf,len))		goto err;	p=(unsigned char *)buf->data;	i2d_ASN1_TYPE(atyp, &p);	ASN1_TYPE_free(atyp);	return len;	conferr:	if (errline > 0)		BIO_printf(bio, "Error on line %ld of config file '%s'/n",							errline, genconf);	else		BIO_printf(bio, "Error loading config file '%s'/n", genconf);	err:	NCONF_free(cnf);	ASN1_TYPE_free(atyp);	return -1;	}
开发者ID:0w,项目名称:moai-dev,代码行数:58,


示例5: iotssl_bm_reserve

voidiotssl_bm_reserve(BUF_MEM *bm){    int oldlen;    oldlen = bm->length;    while (bm->max - bm->length < 4096) {        /* there's also a BUF_MEM_grow_clean() but that actually clears the         * used portion of the buffer */        BUF_MEM_grow(bm, bm->max + 4096);    }    bm->length = oldlen;}
开发者ID:00christian00,项目名称:couchnode,代码行数:12,


示例6: BUF_MEM_create

BUF_MEM *BUF_MEM_create(size_t len){    BUF_MEM *out = BUF_MEM_new();    if (!out)        return NULL;    if (!BUF_MEM_grow(out, len)) {        BUF_MEM_free(out);        return NULL;    }    return out;}
开发者ID:RushOnline,项目名称:openpace,代码行数:14,


示例7: BIO_new

char *base64encode (const void *b64_encode_this, int encode_this_many_bytes){    BIO *b64_bio, *mem_bio;      //Declares two OpenSSL BIOs: a base64 filter and a memory BIO.    BUF_MEM *mem_bio_mem_ptr;    //Pointer to a "memory BIO" structure holding our base64 data.    b64_bio = BIO_new(BIO_f_base64());                      //Initialize our base64 filter BIO.    mem_bio = BIO_new(BIO_s_mem());                           //Initialize our memory sink BIO.    BIO_push(b64_bio, mem_bio);            //Link the BIOs by creating a filter-sink BIO chain.    BIO_set_flags(b64_bio, BIO_FLAGS_BASE64_NO_NL);  //No newlines every 64 characters or less.    BIO_write(b64_bio, b64_encode_this, encode_this_many_bytes); //Records base64 encoded data.    BIO_flush(b64_bio);   //Flush data.  Necessary for b64 encoding, because of pad characters.    BIO_get_mem_ptr(mem_bio, &mem_bio_mem_ptr);  //Store address of mem_bio's memory structure.    BIO_set_close(mem_bio, BIO_NOCLOSE);   //Permit access to mem_ptr after BIOs are destroyed.    BIO_free_all(b64_bio);  //Destroys all BIOs in chain, starting with b64 (i.e. the 1st one).    BUF_MEM_grow(mem_bio_mem_ptr, (*mem_bio_mem_ptr).length + 1);   //Makes space for end null.    (*mem_bio_mem_ptr).data[(*mem_bio_mem_ptr).length] = '/0';  //Adds null-terminator to tail.    return (*mem_bio_mem_ptr).data; //Returns base-64 encoded data. (See: "buf_mem_st" struct).}
开发者ID:yeldars,项目名称:econcrete_swift,代码行数:16,


示例8: do_generate

static int do_generate(char *genstr, const char *genconf, BUF_MEM *buf){    CONF *cnf = NULL;    int len;    unsigned char *p;    ASN1_TYPE *atyp = NULL;    if (genconf) {        if ((cnf = app_load_config(genconf)) == NULL)            goto err;        if (!genstr)            genstr = NCONF_get_string(cnf, "default", "asn1");        if (!genstr) {            BIO_printf(bio_err, "Can't find 'asn1' in '%s'/n", genconf);            goto err;        }    }    atyp = ASN1_generate_nconf(genstr, cnf);    NCONF_free(cnf);    cnf = NULL;    if (!atyp)        return -1;    len = i2d_ASN1_TYPE(atyp, NULL);    if (len <= 0)        goto err;    if (!BUF_MEM_grow(buf, len))        goto err;    p = (unsigned char *)buf->data;    i2d_ASN1_TYPE(atyp, &p);    ASN1_TYPE_free(atyp);    return len; err:    NCONF_free(cnf);    ASN1_TYPE_free(atyp);    return -1;}
开发者ID:Frrank1,项目名称:node,代码行数:45,


示例9: M_ASN1_D2I_vars

X509_NAME *d2i_X509_NAME(X509_NAME **a, unsigned char **pp, long length){    int set=0,i;    int idx=0;    unsigned char *orig;    M_ASN1_D2I_vars(a,X509_NAME *,X509_NAME_new);    orig= *pp;    if (sk_X509_NAME_ENTRY_num(ret->entries) > 0)    {        while (sk_X509_NAME_ENTRY_num(ret->entries) > 0)            X509_NAME_ENTRY_free(                sk_X509_NAME_ENTRY_pop(ret->entries));    }    M_ASN1_D2I_Init();    M_ASN1_D2I_start_sequence();    for (;;)    {        if (M_ASN1_D2I_end_sequence()) break;        M_ASN1_D2I_get_set_type(X509_NAME_ENTRY,ret->entries,                                d2i_X509_NAME_ENTRY,                                X509_NAME_ENTRY_free);        for (; idx < sk_X509_NAME_ENTRY_num(ret->entries); idx++)        {            sk_X509_NAME_ENTRY_value(ret->entries,idx)->set=set;        }        set++;    }    i=(int)(c.p-orig);    if (!BUF_MEM_grow(ret->bytes,i)) goto err;    memcpy(ret->bytes->data,orig,i);    ret->bytes->length=i;    ret->modified=0;    M_ASN1_D2I_Finish(a,X509_NAME_free,ASN1_F_D2I_X509_NAME);}
开发者ID:houzhenggang,项目名称:mt7688_mips_ecos,代码行数:38,


示例10: ssl3_update_handshake_hash

int ssl3_update_handshake_hash(SSL *ssl, const uint8_t *in, size_t in_len) {  /* Depending on the state of the handshake, either the handshake buffer may be   * active, the rolling hash, or both. */  if (ssl->s3->handshake_buffer != NULL) {    size_t new_len = ssl->s3->handshake_buffer->length + in_len;    if (new_len < in_len) {      OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW);      return 0;    }    if (!BUF_MEM_grow(ssl->s3->handshake_buffer, new_len)) {      return 0;    }    memcpy(ssl->s3->handshake_buffer->data + new_len - in_len, in, in_len);  }  if (EVP_MD_CTX_md(&ssl->s3->handshake_hash) != NULL) {    EVP_DigestUpdate(&ssl->s3->handshake_hash, in, in_len);  }  if (EVP_MD_CTX_md(&ssl->s3->handshake_md5) != NULL) {    EVP_DigestUpdate(&ssl->s3->handshake_md5, in, in_len);  }  return 1;}
开发者ID:LiTianjue,项目名称:etls,代码行数:24,


示例11: dtls1_accept

int dtls1_accept(SSL *s)	{	BUF_MEM *buf;	unsigned long Time=(unsigned long)time(NULL);	void (*cb)(const SSL *ssl,int type,int val)=NULL;	unsigned long alg_k;	int ret= -1;	int new_state,state,skip=0;	int listen;#ifndef OPENSSL_NO_SCTP	unsigned char sctpauthkey[64];	char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];#endif	RAND_add(&Time,sizeof(Time),0);	ERR_clear_error();	clear_sys_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;		listen = s->d1->listen;	/* init things to blank */	s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s);	s->d1->listen = listen;#ifndef OPENSSL_NO_SCTP	/* Notify SCTP BIO socket to enter handshake	 * mode and prevent stream identifier other	 * than 0. Will be ignored if no SCTP is used.	 */	BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE, s->in_handshake, NULL);#endif	if (s->cert == NULL)		{		SSLerr(SSL_F_DTLS1_ACCEPT,SSL_R_NO_CERTIFICATE_SET);		return(-1);		}#ifndef OPENSSL_NO_HEARTBEATS	/* If we're awaiting a HeartbeatResponse, pretend we	 * already got and don't await it anymore, because	 * Heartbeats don't make sense during handshakes anyway.	 */	if (s->tlsext_hb_pending)		{		dtls1_stop_timer(s);		s->tlsext_hb_pending = 0;		s->tlsext_hb_seq++;		}#endif	for (;;)		{		state=s->state;		switch (s->state)			{		case SSL_ST_RENEGOTIATE:			s->renegotiate=1;			/* s->state=SSL_ST_ACCEPT; */		case SSL_ST_BEFORE:		case SSL_ST_ACCEPT:		case SSL_ST_BEFORE|SSL_ST_ACCEPT:		case SSL_ST_OK|SSL_ST_ACCEPT:			s->server=1;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00))				{				SSLerr(SSL_F_DTLS1_ACCEPT, ERR_R_INTERNAL_ERROR);				return -1;				}			s->type=SSL_ST_ACCEPT;			if (s->init_buf == NULL)				{				if ((buf=BUF_MEM_new()) == NULL)					{					ret= -1;					goto end;					}				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))					{					ret= -1;					goto end;					}				s->init_buf=buf;				}			if (!ssl3_setup_buffers(s))				{				ret= -1;//.........这里部分代码省略.........
开发者ID:0culus,项目名称:openssl,代码行数:101,


示例12: dtls1_accept

int dtls1_accept(SSL *s)	{	BUF_MEM *buf;	unsigned long l,Time=(unsigned long)time(NULL);	void (*cb)(const SSL *ssl,int type,int val)=NULL;	int ret= -1;	int new_state,state,skip=0;	int listen;	RAND_add(&Time,sizeof(Time),0);	ERR_clear_error();	clear_sys_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;		listen = s->d1->listen;	/* init things to blank */	s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s);	s->d1->listen = listen;	if (s->cert == NULL)		{		SSLerr(SSL_F_DTLS1_ACCEPT,SSL_R_NO_CERTIFICATE_SET);		return(-1);		}	for (;;)		{		state=s->state;		switch (s->state)			{		case SSL_ST_RENEGOTIATE:			s->new_session=1;			/* s->state=SSL_ST_ACCEPT; */		case SSL_ST_BEFORE:		case SSL_ST_ACCEPT:		case SSL_ST_BEFORE|SSL_ST_ACCEPT:		case SSL_ST_OK|SSL_ST_ACCEPT:			s->server=1;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00))				{				SSLerr(SSL_F_DTLS1_ACCEPT, ERR_R_INTERNAL_ERROR);				return -1;				}			s->type=SSL_ST_ACCEPT;			if (s->init_buf == NULL)				{				if ((buf=BUF_MEM_new()) == NULL)					{					ret= -1;					goto end;					}				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))					{					ret= -1;					goto end;					}				s->init_buf=buf;				}			if (!ssl3_setup_buffers(s))				{				ret= -1;				goto end;				}			s->init_num=0;			if (s->state != SSL_ST_RENEGOTIATE)				{				/* Ok, we now need to push on a buffering BIO so that				 * the output is sent in a way that TCP likes :-)				 */				if (!ssl_init_wbio_buffer(s,1)) { ret= -1; goto end; }				ssl3_init_finished_mac(s);				s->state=SSL3_ST_SR_CLNT_HELLO_A;				s->ctx->stats.sess_accept++;				}			else				{				/* s->state == SSL_ST_RENEGOTIATE,				 * we will just send a HelloRequest */				s->ctx->stats.sess_accept_renegotiate++;				s->state=SSL3_ST_SW_HELLO_REQ_A;				}			break;//.........这里部分代码省略.........
开发者ID:millken,项目名称:zhuxianB30,代码行数:101,


示例13: ssl23_accept

int ssl23_accept(SSL *s)	{	BUF_MEM *buf;	unsigned long Time=(unsigned long)time(NULL);	void (*cb)(const SSL *ssl,int type,int val)=NULL;	int ret= -1;	int new_state,state;	RAND_add(&Time,sizeof(Time),0);	ERR_clear_error();	clear_sys_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;		s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); 	for (;;)		{		state=s->state;		switch(s->state)			{		case SSL_ST_BEFORE:		case SSL_ST_ACCEPT:		case SSL_ST_BEFORE|SSL_ST_ACCEPT:		case SSL_ST_OK|SSL_ST_ACCEPT:			s->server=1;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			/* s->version=SSL3_VERSION; */			s->type=SSL_ST_ACCEPT;			if (s->init_buf == NULL)				{				if ((buf=BUF_MEM_new()) == NULL)					{					ret= -1;					goto end;					}				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))					{					BUF_MEM_free(buf);					ret= -1;					goto end;					}				s->init_buf=buf;				}			ssl3_init_finished_mac(s);			s->state=SSL23_ST_SR_CLNT_HELLO_A;			s->ctx->stats.sess_accept++;			s->init_num=0;			break;		case SSL23_ST_SR_CLNT_HELLO_A:		case SSL23_ST_SR_CLNT_HELLO_B:			s->shutdown=0;			ret=ssl23_get_client_hello(s);			if (ret >= 0) cb=NULL;			goto end;			/* break; */		default:			SSLerr(SSL_F_SSL23_ACCEPT,SSL_R_UNKNOWN_STATE);			ret= -1;			goto end;			/* break; */			}		if ((cb != NULL) && (s->state != state))			{			new_state=s->state;			s->state=state;			cb(s,SSL_CB_ACCEPT_LOOP,1);			s->state=new_state;			}		}end:	s->in_handshake--;	if (cb != NULL)		cb(s,SSL_CB_ACCEPT_EXIT,ret);	return(ret);	}
开发者ID:Acidburn0zzz,项目名称:openssl,代码行数:90,


示例14: if

char *X509_NAME_oneline(X509_NAME *a, char *buf, int len){    X509_NAME_ENTRY *ne;    size_t i;    int n, lold, l, l1, l2, num, j, type;    const char *s;    char *p;    unsigned char *q;    BUF_MEM *b = NULL;    static const char hex[17] = "0123456789ABCDEF";    int gs_doit[4];    char tmp_buf[80];    if (buf == NULL) {        if ((b = BUF_MEM_new()) == NULL)            goto err;        if (!BUF_MEM_grow(b, 200))            goto err;        b->data[0] = '/0';        len = 200;    } else if (len <= 0) {        return NULL;    }    if (a == NULL) {        if (b) {            buf = b->data;            OPENSSL_free(b);        }        BUF_strlcpy(buf, "NO X509_NAME", len);        return buf;    }    len--;                      /* space for '/0' */    l = 0;    for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) {        ne = sk_X509_NAME_ENTRY_value(a->entries, i);        n = OBJ_obj2nid(ne->object);        if ((n == NID_undef) || ((s = OBJ_nid2sn(n)) == NULL)) {            i2t_ASN1_OBJECT(tmp_buf, sizeof(tmp_buf), ne->object);            s = tmp_buf;        }        l1 = strlen(s);        type = ne->value->type;        num = ne->value->length;        if (num > NAME_ONELINE_MAX) {            OPENSSL_PUT_ERROR(X509, X509_R_NAME_TOO_LONG);            goto end;        }        q = ne->value->data;        if ((type == V_ASN1_GENERALSTRING) && ((num % 4) == 0)) {            gs_doit[0] = gs_doit[1] = gs_doit[2] = gs_doit[3] = 0;            for (j = 0; j < num; j++)                if (q[j] != 0)                    gs_doit[j & 3] = 1;            if (gs_doit[0] | gs_doit[1] | gs_doit[2])                gs_doit[0] = gs_doit[1] = gs_doit[2] = gs_doit[3] = 1;            else {                gs_doit[0] = gs_doit[1] = gs_doit[2] = 0;                gs_doit[3] = 1;            }        } else            gs_doit[0] = gs_doit[1] = gs_doit[2] = gs_doit[3] = 1;        for (l2 = j = 0; j < num; j++) {            if (!gs_doit[j & 3])                continue;            l2++;            if ((q[j] < ' ') || (q[j] > '~'))                l2 += 3;        }        lold = l;        l += 1 + l1 + 1 + l2;        if (l > NAME_ONELINE_MAX) {            OPENSSL_PUT_ERROR(X509, X509_R_NAME_TOO_LONG);            goto end;        }        if (b != NULL) {            if (!BUF_MEM_grow(b, l + 1))                goto err;            p = &(b->data[lold]);        } else if (l > len) {            break;        } else            p = &(buf[lold]);        *(p++) = '/';        OPENSSL_memcpy(p, s, (unsigned int)l1);        p += l1;        *(p++) = '=';        q = ne->value->data;        for (j = 0; j < num; j++) {            if (!gs_doit[j & 3])                continue;            n = q[j];            if ((n < ' ') || (n > '~')) {//.........这里部分代码省略.........
开发者ID:MateusDeSousa,项目名称:FiqueRico,代码行数:101,


示例15: dtls1_connect

int dtls1_connect(SSL *s)	{	BUF_MEM *buf=NULL;	unsigned long Time=(unsigned long)time(NULL);	void (*cb)(const SSL *ssl,int type,int val)=NULL;	int ret= -1;	int new_state,state,skip=0;#ifndef OPENSSL_NO_SCTP	unsigned char sctpauthkey[64];	char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];#endif	RAND_add(&Time,sizeof(Time),0);	ERR_clear_error();	clear_sys_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;		s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); #ifndef OPENSSL_NO_SCTP	/* Notify SCTP BIO socket to enter handshake	 * mode and prevent stream identifier other	 * than 0. Will be ignored if no SCTP is used.	 */	BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE, s->in_handshake, NULL);#endif#ifndef OPENSSL_NO_HEARTBEATS	/* If we're awaiting a HeartbeatResponse, pretend we	 * already got and don't await it anymore, because	 * Heartbeats don't make sense during handshakes anyway.	 */	if (s->tlsext_hb_pending)		{		dtls1_stop_timer(s);		s->tlsext_hb_pending = 0;		s->tlsext_hb_seq++;		}#endif	for (;;)		{		state=s->state;		switch(s->state)			{		case SSL_ST_RENEGOTIATE:			s->renegotiate=1;			s->state=SSL_ST_CONNECT;			s->ctx->stats.sess_connect_renegotiate++;			/* break */		case SSL_ST_BEFORE:		case SSL_ST_CONNECT:		case SSL_ST_BEFORE|SSL_ST_CONNECT:		case SSL_ST_OK|SSL_ST_CONNECT:			s->server=0;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			if ((s->version & 0xff00 ) != (DTLS1_VERSION & 0xff00) &&			    (s->version & 0xff00 ) != (DTLS1_BAD_VER & 0xff00))				{				SSLerr(SSL_F_DTLS1_CONNECT, ERR_R_INTERNAL_ERROR);				ret = -1;				goto end;				}							/* s->version=SSL3_VERSION; */			s->type=SSL_ST_CONNECT;			if (s->init_buf == NULL)				{				if ((buf=BUF_MEM_new()) == NULL)					{					ret= -1;					goto end;					}				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))					{					ret= -1;					goto end;					}				s->init_buf=buf;				buf=NULL;				}			if (!ssl3_setup_buffers(s)) { ret= -1; goto end; }			/* setup buffing BIO */			if (!ssl_init_wbio_buffer(s,0)) { ret= -1; goto end; }			/* don't push the buffering BIO quite yet */			s->state=SSL3_ST_CW_CLNT_HELLO_A;			s->ctx->stats.sess_connect++;//.........这里部分代码省略.........
开发者ID:benlaurie,项目名称:openssl-old,代码行数:101,


示例16: dtls1_connect

int dtls1_connect(SSL *s)	{	BUF_MEM *buf=NULL;	unsigned long Time=(unsigned long)TINYCLR_SSL_TIME(NULL);	void (*cb)(const SSL *ssl,int type,int val)=NULL;	int ret= -1;	int new_state,state,skip=0;;	RAND_add(&Time,sizeof(Time),0);	ERR_clear_error();	clear_sys_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;		s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); 	for (;;)		{		state=s->state;		switch(s->state)			{		case SSL_ST_RENEGOTIATE:			s->new_session=1;			s->state=SSL_ST_CONNECT;			s->ctx->stats.sess_connect_renegotiate++;			/* break */		case SSL_ST_BEFORE:		case SSL_ST_CONNECT:		case SSL_ST_BEFORE|SSL_ST_CONNECT:		case SSL_ST_OK|SSL_ST_CONNECT:			s->server=0;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			if ((s->version & 0xff00 ) != (DTLS1_VERSION & 0xff00) &&			    (s->version & 0xff00 ) != (DTLS1_BAD_VER & 0xff00))				{				SSLerr(SSL_F_DTLS1_CONNECT, ERR_R_INTERNAL_ERROR);				ret = -1;				goto end;				}							/* s->version=SSL3_VERSION; */			s->type=SSL_ST_CONNECT;			if (s->init_buf == NULL)				{				if ((buf=BUF_MEM_new()) == NULL)					{					ret= -1;					goto end;					}				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))					{					ret= -1;					goto end;					}				s->init_buf=buf;				buf=NULL;				}			if (!ssl3_setup_buffers(s)) { ret= -1; goto end; }			/* setup buffing BIO */			if (!ssl_init_wbio_buffer(s,0)) { ret= -1; goto end; }			/* don't push the buffering BIO quite yet */			s->state=SSL3_ST_CW_CLNT_HELLO_A;			s->ctx->stats.sess_connect++;			s->init_num=0;			/* mark client_random uninitialized */			TINYCLR_SSL_MEMSET(s->s3->client_random,0,sizeof(s->s3->client_random));			s->d1->send_cookie = 0;			s->hit = 0;			break;		case SSL3_ST_CW_CLNT_HELLO_A:		case SSL3_ST_CW_CLNT_HELLO_B:			s->shutdown=0;			/* every DTLS ClientHello resets Finished MAC */			ssl3_init_finished_mac(s);			dtls1_start_timer(s);			ret=dtls1_client_hello(s);			if (ret <= 0) goto end;			if ( s->d1->send_cookie)				{				s->state=SSL3_ST_CW_FLUSH;				s->s3->tmp.next_state=SSL3_ST_CR_SRVR_HELLO_A;				}			else//.........这里部分代码省略.........
开发者ID:AustinWise,项目名称:Netduino-Micro-Framework,代码行数:101,


示例17: MAIN

//.........这里部分代码省略.........            goto end;        }        OBJ_create_objects(in);    }    if (infile == NULL)        BIO_set_fp(in, stdin, BIO_NOCLOSE);    else {        if (BIO_read_filename(in, infile) <= 0) {            perror(infile);            goto end;        }    }    if (derfile) {        if (!(derout = BIO_new_file(derfile, "wb"))) {            BIO_printf(bio_err, "problems opening %s/n", derfile);            ERR_print_errors(bio_err);            goto end;        }    }    if (strictpem) {        if (PEM_read_bio(in, &name, &header, (unsigned char **)&str, &num) !=            1) {            BIO_printf(bio_err, "Error reading PEM file/n");            ERR_print_errors(bio_err);            goto end;        }    } else {        if ((buf = BUF_MEM_new()) == NULL)            goto end;        if (!BUF_MEM_grow(buf, BUFSIZ * 8))            goto end;           /* Pre-allocate :-) */        if (genstr || genconf) {            num = do_generate(bio_err, genstr, genconf, buf);            if (num < 0) {                ERR_print_errors(bio_err);                goto end;            }        }        else {            if (informat == FORMAT_PEM) {                BIO *tmp;                if ((b64 = BIO_new(BIO_f_base64())) == NULL)                    goto end;                BIO_push(b64, in);                tmp = in;                in = b64;                b64 = tmp;            }            num = 0;            for (;;) {                if (!BUF_MEM_grow(buf, (int)num + BUFSIZ))                    goto end;                i = BIO_read(in, &(buf->data[num]), BUFSIZ);                if (i <= 0)                    break;                num += i;            }
开发者ID:Adallom,项目名称:openssl,代码行数:67,


示例18: sizeof

TXT_DB *TXT_DB_read(BIO *in, int num){    TXT_DB *ret = NULL;    int er = 1;    int esc = 0;    long ln = 0;    int i, add, n;    int size = BUFSIZE;    int offset = 0;    char *p, **pp, *f;    BUF_MEM *buf = NULL;    if ((buf = BUF_MEM_new()) == NULL)        goto err;    if (!BUF_MEM_grow(buf, size))        goto err;    if ((ret = (TXT_DB *)OPENSSL_malloc(sizeof(TXT_DB))) == NULL)        goto err;    ret->num_fields = num;    ret->index = NULL;    ret->qual = NULL;    if ((ret->data = sk_new_null()) == NULL)        goto err;    if ((ret->index =         (LHASH **)OPENSSL_malloc(sizeof(LHASH *) * num)) == NULL)        goto err;    if ((ret->qual =         (int (**)(char **))OPENSSL_malloc(sizeof(int (**)(char **)) *                                           num)) == NULL)        goto err;    for (i = 0; i < num; i++) {        ret->index[i] = NULL;        ret->qual[i] = NULL;    }    add = (num + 1) * sizeof(char *);    buf->data[size - 1] = '/0';    offset = 0;    for (;;) {        if (offset != 0) {            size += BUFSIZE;            if (!BUF_MEM_grow_clean(buf, size))                goto err;        }        buf->data[offset] = '/0';        BIO_gets(in, &(buf->data[offset]), size - offset);        ln++;        if (buf->data[offset] == '/0')            break;        if ((offset == 0) && (buf->data[0] == '#'))            continue;        i = strlen(&(buf->data[offset]));        offset += i;        if (buf->data[offset - 1] != '/n')            continue;        else {            buf->data[offset - 1] = '/0'; /* blat the '/n' */            if (!(p = (char *)OPENSSL_malloc(add + offset)))                goto err;            offset = 0;        }        pp = (char **)p;        p += add;        n = 0;        pp[n++] = p;        i = 0;        f = buf->data;        esc = 0;        for (;;) {            if (*f == '/0')                break;            if (*f == '/t') {                if (esc)                    p--;                else {                    *(p++) = '/0';                    f++;                    if (n >= num)                        break;                    pp[n++] = p;                    continue;                }            }            esc = (*f == '//');            *(p++) = *(f++);        }        *(p++) = '/0';        if ((n != num) || (*f != '/0')) {#if !defined(OPENSSL_NO_STDIO) && !defined(OPENSSL_SYS_WIN16) /* temporaty                                                               * fix :-( */            fprintf(stderr,                    "wrong number of fields on line %ld (looking for field %d, got %d, '%s' left)/n",                    ln, num, n, f);#endif            er = 2;            goto err;        }        pp[n] = p;//.........这里部分代码省略.........
开发者ID:GrayKing,项目名称:Leakfix-on-OpenSSL,代码行数:101,


示例19: PEM_read_bio

int PEM_read_bio(BIO *bp, char **name, char **header, unsigned char **data,       long *len)  {  EVP_ENCODE_CTX ctx;  int end=0,i,k,bl=0,hl=0,nohead=0;  char buf[256];  BUF_MEM *nameB;  BUF_MEM *headerB;  BUF_MEM *dataB,*tmpB;    nameB=BUF_MEM_new();  headerB=BUF_MEM_new();  dataB=BUF_MEM_new();  if ((nameB == NULL) || (headerB == NULL) || (dataB == NULL))    {    BUF_MEM_free(nameB);    BUF_MEM_free(headerB);    BUF_MEM_free(dataB);    PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE);    return(0);    }  buf[254]='/0';  for (;;)    {    i=BIO_gets(bp,buf,254);    if (i <= 0)      {      PEMerr(PEM_F_PEM_READ_BIO,PEM_R_NO_START_LINE);      goto err;      }    while ((i >= 0) && (buf[i] <= ' ')) i--;    buf[++i]='/n'; buf[++i]='/0';    if (strncmp(buf,"-----BEGIN ",11) == 0)      {      i=strlen(&(buf[11]));      if (strncmp(&(buf[11+i-6]),"-----/n",6) != 0)        continue;      if (!BUF_MEM_grow(nameB,i+9))        {        PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE);        goto err;        }      memcpy(nameB->data,&(buf[11]),i-6);      nameB->data[i-6]='/0';      break;      }    }  hl=0;  if (!BUF_MEM_grow(headerB,256))    { PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE); goto err; }  headerB->data[0]='/0';  for (;;)    {    i=BIO_gets(bp,buf,254);    if (i <= 0) break;    while ((i >= 0) && (buf[i] <= ' ')) i--;    buf[++i]='/n'; buf[++i]='/0';    if (buf[0] == '/n') break;    if (!BUF_MEM_grow(headerB,hl+i+9))      { PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE); goto err; }    if (strncmp(buf,"-----END ",9) == 0)      {      nohead=1;      break;      }    memcpy(&(headerB->data[hl]),buf,i);    headerB->data[hl+i]='/0';    hl+=i;    }  bl=0;  if (!BUF_MEM_grow(dataB,1024))    { PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE); goto err; }  dataB->data[0]='/0';  if (!nohead)    {    for (;;)      {      i=BIO_gets(bp,buf,254);      if (i <= 0) break;      while ((i >= 0) && (buf[i] <= ' ')) i--;      buf[++i]='/n'; buf[++i]='/0';      if (i != 65) end=1;      if (strncmp(buf,"-----END ",9) == 0)        break;      if (i > 65) break;      if (!BUF_MEM_grow_clean(dataB,i+bl+9))        {        PEMerr(PEM_F_PEM_READ_BIO,ERR_R_MALLOC_FAILURE);        goto err;        }//.........这里部分代码省略.........
开发者ID:yyyyyao,项目名称:Slicer3-lib-mirrors,代码行数:101,


示例20: if

char *X509_NAME_oneline(X509_NAME *a, char *buf, int len){    X509_NAME_ENTRY *ne;    int i;    int n, lold, l, l1, l2, num, j, type;    const char *s;    char *p;    unsigned char *q;    BUF_MEM *b = NULL;    static const char hex[17] = "0123456789ABCDEF";    int gs_doit[4];    char tmp_buf[80];#ifdef CHARSET_EBCDIC    unsigned char ebcdic_buf[1024];#endif    if (buf == NULL) {        if ((b = BUF_MEM_new()) == NULL)            goto err;        if (!BUF_MEM_grow(b, 200))            goto err;        b->data[0] = '/0';        len = 200;    } else if (len == 0) {        return NULL;    }    if (a == NULL) {        if (b) {            buf = b->data;            OPENSSL_free(b);        }        strncpy(buf, "NO X509_NAME", len);        buf[len - 1] = '/0';        return buf;    }    len--;                      /* space for '/0' */    l = 0;    for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) {        ne = sk_X509_NAME_ENTRY_value(a->entries, i);        n = OBJ_obj2nid(ne->object);        if ((n == NID_undef) || ((s = OBJ_nid2sn(n)) == NULL)) {            i2t_ASN1_OBJECT(tmp_buf, sizeof(tmp_buf), ne->object);            s = tmp_buf;        }        l1 = strlen(s);        type = ne->value->type;        num = ne->value->length;        if (num > NAME_ONELINE_MAX) {            X509err(X509_F_X509_NAME_ONELINE, X509_R_NAME_TOO_LONG);            goto end;        }        q = ne->value->data;#ifdef CHARSET_EBCDIC        if (type == V_ASN1_GENERALSTRING ||            type == V_ASN1_VISIBLESTRING ||            type == V_ASN1_PRINTABLESTRING ||            type == V_ASN1_TELETEXSTRING ||            type == V_ASN1_IA5STRING) {            if (num > (int)sizeof(ebcdic_buf))                num = sizeof(ebcdic_buf);            ascii2ebcdic(ebcdic_buf, q, num);            q = ebcdic_buf;        }#endif        if ((type == V_ASN1_GENERALSTRING) && ((num % 4) == 0)) {            gs_doit[0] = gs_doit[1] = gs_doit[2] = gs_doit[3] = 0;            for (j = 0; j < num; j++)                if (q[j] != 0)                    gs_doit[j & 3] = 1;            if (gs_doit[0] | gs_doit[1] | gs_doit[2])                gs_doit[0] = gs_doit[1] = gs_doit[2] = gs_doit[3] = 1;            else {                gs_doit[0] = gs_doit[1] = gs_doit[2] = 0;                gs_doit[3] = 1;            }        } else            gs_doit[0] = gs_doit[1] = gs_doit[2] = gs_doit[3] = 1;        for (l2 = j = 0; j < num; j++) {            if (!gs_doit[j & 3])                continue;            l2++;#ifndef CHARSET_EBCDIC            if ((q[j] < ' ') || (q[j] > '~'))                l2 += 3;#else            if ((os_toascii[q[j]] < os_toascii[' ']) ||                (os_toascii[q[j]] > os_toascii['~']))                l2 += 3;#endif        }        lold = l;        l += 1 + l1 + 1 + l2;        if (l > NAME_ONELINE_MAX) {            X509err(X509_F_X509_NAME_ONELINE, X509_R_NAME_TOO_LONG);//.........这里部分代码省略.........
开发者ID:1234-,项目名称:openssl,代码行数:101,


示例21: def_load_bio

static int def_load_bio(CONF *conf, BIO *in, long *line){/* The macro BUFSIZE conflicts with a system macro in VxWorks */#define CONFBUFSIZE     512    int bufnum = 0, i, ii;    BUF_MEM *buff = NULL;    char *s, *p, *end;    int again;    long eline = 0;    char btmp[DECIMAL_SIZE(eline) + 1];    CONF_VALUE *v = NULL, *tv;    CONF_VALUE *sv = NULL;    char *section = NULL, *buf;    char *start, *psection, *pname;    void *h = (void *)(conf->data);    STACK_OF(BIO) *biosk = NULL;#ifndef OPENSSL_NO_POSIX_IO    char *dirpath = NULL;    OPENSSL_DIR_CTX *dirctx = NULL;#endif    if ((buff = BUF_MEM_new()) == NULL) {        CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_BUF_LIB);        goto err;    }    section = OPENSSL_strdup("default");    if (section == NULL) {        CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE);        goto err;    }    if (_CONF_new_data(conf) == 0) {        CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE);        goto err;    }    sv = _CONF_new_section(conf, section);    if (sv == NULL) {        CONFerr(CONF_F_DEF_LOAD_BIO, CONF_R_UNABLE_TO_CREATE_NEW_SECTION);        goto err;    }    bufnum = 0;    again = 0;    for (;;) {        if (!BUF_MEM_grow(buff, bufnum + CONFBUFSIZE)) {            CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_BUF_LIB);            goto err;        }        p = &(buff->data[bufnum]);        *p = '/0'; read_retry:        BIO_gets(in, p, CONFBUFSIZE - 1);        p[CONFBUFSIZE - 1] = '/0';        ii = i = strlen(p);        if (i == 0 && !again) {            /* the currently processed BIO is at EOF */            BIO *parent;#ifndef OPENSSL_NO_POSIX_IO            /* continue processing with the next file from directory */            if (dirctx != NULL) {                BIO *next;                if ((next = get_next_file(dirpath, &dirctx)) != NULL) {                    BIO_vfree(in);                    in = next;                    goto read_retry;                } else {                    OPENSSL_free(dirpath);                    dirpath = NULL;                }            }#endif            /* no more files in directory, continue with processing parent */            if ((parent = sk_BIO_pop(biosk)) == NULL) {                /* everything processed get out of the loop */                break;            } else {                BIO_vfree(in);                in = parent;                goto read_retry;            }        }        again = 0;        while (i > 0) {            if ((p[i - 1] != '/r') && (p[i - 1] != '/n'))                break;            else                i--;        }        /*         * we removed some trailing stuff so there is a new line on the end.         */        if (ii && i == ii)            again = 1;          /* long line */        else {            p[i] = '/0';            eline++;            /* another input line *///.........这里部分代码省略.........
开发者ID:FreeBSDFoundation,项目名称:freebsd,代码行数:101,


示例22: ssl2_connect

int ssl2_connect(SSL *s)	{	unsigned long l=(unsigned long)time(NULL);	BUF_MEM *buf=NULL;	int ret= -1;	void (*cb)(const SSL *ssl,int type,int val)=NULL;	int new_state,state;	RAND_add(&l,sizeof(l),0);	ERR_clear_error();	clear_sys_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;	/* init things to blank */	s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s);	for (;;)		{		state=s->state;		switch (s->state)			{		case SSL_ST_BEFORE:		case SSL_ST_CONNECT:		case SSL_ST_BEFORE|SSL_ST_CONNECT:		case SSL_ST_OK|SSL_ST_CONNECT:			s->server=0;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			s->version=SSL2_VERSION;			s->type=SSL_ST_CONNECT;			buf=s->init_buf;			if ((buf == NULL) && ((buf=BUF_MEM_new()) == NULL))				{				ret= -1;				goto end;				}			if (!BUF_MEM_grow(buf,				SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER))				{				if (buf == s->init_buf)					buf=NULL;				ret= -1;				goto end;				}			s->init_buf=buf;			buf=NULL;			s->init_num=0;			s->state=SSL2_ST_SEND_CLIENT_HELLO_A;			s->ctx->stats.sess_connect++;			s->handshake_func=ssl2_connect;			BREAK;		case SSL2_ST_SEND_CLIENT_HELLO_A:		case SSL2_ST_SEND_CLIENT_HELLO_B:			s->shutdown=0;			ret=client_hello(s);			if (ret <= 0) goto end;			s->init_num=0;			s->state=SSL2_ST_GET_SERVER_HELLO_A;			BREAK;				case SSL2_ST_GET_SERVER_HELLO_A:		case SSL2_ST_GET_SERVER_HELLO_B:			ret=get_server_hello(s);			if (ret <= 0) goto end;			s->init_num=0;			if (!s->hit) /* new session */				{				s->state=SSL2_ST_SEND_CLIENT_MASTER_KEY_A;				BREAK; 				}			else				{				s->state=SSL2_ST_CLIENT_START_ENCRYPTION;				break;				}			case SSL2_ST_SEND_CLIENT_MASTER_KEY_A:		case SSL2_ST_SEND_CLIENT_MASTER_KEY_B:			ret=client_master_key(s);			if (ret <= 0) goto end;			s->init_num=0;			s->state=SSL2_ST_CLIENT_START_ENCRYPTION;			break;		case SSL2_ST_CLIENT_START_ENCRYPTION:			/* Ok, we now have all the stuff needed to			 * start encrypting, so lets fire it up :-) */			if (!ssl2_enc_init(s,1))				{				ret= -1;				goto end;//.........这里部分代码省略.........
开发者ID:321543223,项目名称:kbengine,代码行数:101,


示例23: str_copy

static int str_copy(CONF *conf, char *section, char **pto, char *from){    int q, r, rr = 0, to = 0, len = 0;    char *s, *e, *rp, *p, *rrp, *np, *cp, v;    BUF_MEM *buf;    if ((buf = BUF_MEM_new()) == NULL)        return 0;    len = strlen(from) + 1;    if (!BUF_MEM_grow(buf, len))        goto err;    for (;;) {        if (IS_QUOTE(conf, *from)) {            q = *from;            from++;            while (!IS_EOF(conf, *from) && (*from != q)) {                if (IS_ESC(conf, *from)) {                    from++;                    if (IS_EOF(conf, *from))                        break;                }                buf->data[to++] = *(from++);            }            if (*from == q)                from++;        } else if (IS_DQUOTE(conf, *from)) {            q = *from;            from++;            while (!IS_EOF(conf, *from)) {                if (*from == q) {                    if (*(from + 1) == q) {                        from++;                    } else {                        break;                    }                }                buf->data[to++] = *(from++);            }            if (*from == q)                from++;        } else if (IS_ESC(conf, *from)) {            from++;            v = *(from++);            if (IS_EOF(conf, v))                break;            else if (v == 'r')                v = '/r';            else if (v == 'n')                v = '/n';            else if (v == 'b')                v = '/b';            else if (v == 't')                v = '/t';            buf->data[to++] = v;        } else if (IS_EOF(conf, *from))            break;        else if (*from == '$') {            size_t newsize;            /* try to expand it */            rrp = NULL;            s = &(from[1]);            if (*s == '{')                q = '}';            else if (*s == '(')                q = ')';            else                q = 0;            if (q)                s++;            cp = section;            e = np = s;            while (IS_ALNUM(conf, *e))                e++;            if ((e[0] == ':') && (e[1] == ':')) {                cp = np;                rrp = e;                rr = *e;                *rrp = '/0';                e += 2;                np = e;                while (IS_ALNUM(conf, *e))                    e++;            }            r = *e;            *e = '/0';            rp = e;            if (q) {                if (r != q) {                    CONFerr(CONF_F_STR_COPY, CONF_R_NO_CLOSE_BRACE);                    goto err;                }                e++;            }            /*-             * So at this point we have             * np which is the start of the name string which is//.........这里部分代码省略.........
开发者ID:FreeBSDFoundation,项目名称:freebsd,代码行数:101,


示例24: dtls1_connect

int dtls1_connect(SSL *s) {  BUF_MEM *buf = NULL;  void (*cb)(const SSL *ssl, int type, int value) = NULL;  int ret = -1;  int new_state, state, skip = 0;  assert(s->handshake_func == dtls1_connect);  assert(!s->server);  assert(SSL_IS_DTLS(s));  ERR_clear_error();  ERR_clear_system_error();  if (s->info_callback != NULL) {    cb = s->info_callback;  } else if (s->ctx->info_callback != NULL) {    cb = s->ctx->info_callback;  }  s->in_handshake++;  for (;;) {    state = s->state;    switch (s->state) {      case SSL_ST_CONNECT:        if (cb != NULL) {          cb(s, SSL_CB_HANDSHAKE_START, 1);        }        if (s->init_buf == NULL) {          buf = BUF_MEM_new();          if (buf == NULL ||              !BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {            ret = -1;            goto end;          }          s->init_buf = buf;          buf = NULL;        }        if (!ssl_init_wbio_buffer(s, 0)) {          ret = -1;          goto end;        }        /* don't push the buffering BIO quite yet */        s->state = SSL3_ST_CW_CLNT_HELLO_A;        s->init_num = 0;        s->d1->send_cookie = 0;        s->hit = 0;        break;      case SSL3_ST_CW_CLNT_HELLO_A:      case SSL3_ST_CW_CLNT_HELLO_B:        s->shutdown = 0;        dtls1_start_timer(s);        ret = ssl3_send_client_hello(s);        if (ret <= 0) {          goto end;        }        if (s->d1->send_cookie) {          s->state = SSL3_ST_CW_FLUSH;          s->s3->tmp.next_state = SSL3_ST_CR_SRVR_HELLO_A;        } else {          s->state = DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A;        }        s->init_num = 0;        /* turn on buffering for the next lot of output */        if (s->bbio != s->wbio) {          s->wbio = BIO_push(s->bbio, s->wbio);        }        break;      case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:      case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:        ret = dtls1_get_hello_verify(s);        if (ret <= 0) {          goto end;        }        if (s->d1->send_cookie) {          /* start again, with a cookie */          dtls1_stop_timer(s);          s->state = SSL3_ST_CW_CLNT_HELLO_A;        } else {          s->state = SSL3_ST_CR_SRVR_HELLO_A;        }        s->init_num = 0;        break;      case SSL3_ST_CR_SRVR_HELLO_A:      case SSL3_ST_CR_SRVR_HELLO_B:        ret = ssl3_get_server_hello(s);        if (ret <= 0) {          goto end;        }//.........这里部分代码省略.........
开发者ID:aaapei,项目名称:libquic,代码行数:101,


示例25: MAIN

//.........这里部分代码省略.........#endif	if (oidfile != NULL)		{		if (BIO_read_filename(in,oidfile) <= 0)			{			BIO_printf(bio_err,"problems opening %s/n",oidfile);			ERR_print_errors(bio_err);			goto end;			}		OBJ_create_objects(in);		}	if (infile == NULL)		BIO_set_fp(in,stdin,BIO_NOCLOSE);	else		{		if (BIO_read_filename(in,infile) <= 0)			{			perror(infile);			goto end;			}		}	if (derfile) {		if(!(derout = BIO_new_file(derfile, "wb"))) {			BIO_printf(bio_err,"problems opening %s/n",derfile);			ERR_print_errors(bio_err);			goto end;		}	}	if ((buf=BUF_MEM_new()) == NULL) goto end;	if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */	if (informat == FORMAT_PEM)		{		BIO *tmp;		if ((b64=BIO_new(BIO_f_base64())) == NULL)			goto end;		BIO_push(b64,in);		tmp=in;		in=b64;		b64=tmp;		}	num=0;	for (;;)		{		if (!BUF_MEM_grow(buf,(int)num+BUFSIZ)) goto end;		i=BIO_read(in,&(buf->data[num]),BUFSIZ);		if (i <= 0) break;		num+=i;		}	str=buf->data;	/* If any structs to parse go through in sequence */	if (sk_num(osk))		{		tmpbuf=(unsigned char *)str;		tmplen=num;		for (i=0; i<sk_num(osk); i++)			{			ASN1_TYPE *atmp;
开发者ID:aosm,项目名称:OpenSSL096,代码行数:67,


示例26: DTLSv1_listen

int DTLSv1_listen(SSL *s, BIO_ADDR *client){    int next, n, ret = 0, clearpkt = 0;    unsigned char cookie[DTLS1_COOKIE_LENGTH];    unsigned char seq[SEQ_NUM_SIZE];    const unsigned char *data;    unsigned char *p, *buf;    unsigned long reclen, fragoff, fraglen, msglen;    unsigned int rectype, versmajor, msgseq, msgtype, clientvers, cookielen;    BIO *rbio, *wbio;    BUF_MEM *bufm;    BIO_ADDR *tmpclient = NULL;    PACKET pkt, msgpkt, msgpayload, session, cookiepkt;    /* Ensure there is no state left over from a previous invocation */    if (!SSL_clear(s))        return -1;    ERR_clear_error();    rbio = SSL_get_rbio(s);    wbio = SSL_get_wbio(s);    if (!rbio || !wbio) {        SSLerr(SSL_F_DTLSV1_LISTEN, SSL_R_BIO_NOT_SET);        return -1;    }    /*     * We only peek at incoming ClientHello's until we're sure we are going to     * to respond with a HelloVerifyRequest. If its a ClientHello with a valid     * cookie then we leave it in the BIO for accept to handle.     */    BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_PEEK_MODE, 1, NULL);    /*     * Note: This check deliberately excludes DTLS1_BAD_VER because that version     * requires the MAC to be calculated *including* the first ClientHello     * (without the cookie). Since DTLSv1_listen is stateless that cannot be     * supported. DTLS1_BAD_VER must use cookies in a stateful manner (e.g. via     * SSL_accept)     */    if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00)) {        SSLerr(SSL_F_DTLSV1_LISTEN, SSL_R_UNSUPPORTED_SSL_VERSION);        return -1;    }    if (s->init_buf == NULL) {        if ((bufm = BUF_MEM_new()) == NULL) {            SSLerr(SSL_F_DTLSV1_LISTEN, ERR_R_MALLOC_FAILURE);            return -1;        }        if (!BUF_MEM_grow(bufm, SSL3_RT_MAX_PLAIN_LENGTH)) {            BUF_MEM_free(bufm);            SSLerr(SSL_F_DTLSV1_LISTEN, ERR_R_MALLOC_FAILURE);            return -1;        }        s->init_buf = bufm;    }    buf = (unsigned char *)s->init_buf->data;    do {        /* Get a packet */        clear_sys_error();        /*         * Technically a ClientHello could be SSL3_RT_MAX_PLAIN_LENGTH         * + DTLS1_RT_HEADER_LENGTH bytes long. Normally init_buf does not store         * the record header as well, but we do here. We've set up init_buf to         * be the standard size for simplicity. In practice we shouldn't ever         * receive a ClientHello as long as this. If we do it will get dropped         * in the record length check below.         */        n = BIO_read(rbio, buf, SSL3_RT_MAX_PLAIN_LENGTH);        if (n <= 0) {            if (BIO_should_retry(rbio)) {                /* Non-blocking IO */                goto end;            }            return -1;        }        /* If we hit any problems we need to clear this packet from the BIO */        clearpkt = 1;        if (!PACKET_buf_init(&pkt, buf, n)) {            SSLerr(SSL_F_DTLSV1_LISTEN, ERR_R_INTERNAL_ERROR);            return -1;        }        /*         * Parse the received record. If there are any problems with it we just         * dump it - with no alert. RFC6347 says this "Unlike TLS, DTLS is         * resilient in the face of invalid records (e.g., invalid formatting,         * length, MAC, etc.).  In general, invalid records SHOULD be silently         * discarded, thus preserving the association; however, an error MAY be         * logged for diagnostic purposes."         *///.........这里部分代码省略.........
开发者ID:canmor-lam,项目名称:libsg,代码行数:101,


示例27: ssl23_connect

int ssl23_connect(SSL *s)	{	BUF_MEM *buf=NULL;	unsigned long Time=(unsigned long)time(NULL);	void (*cb)(const SSL *ssl,int type,int val)=NULL;	int ret= -1;	int new_state,state;	RAND_add(&Time,sizeof(Time),0);	ERR_clear_error();	clear_sys_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;		s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); 	for (;;)		{		state=s->state;		switch(s->state)			{		case SSL_ST_BEFORE:		case SSL_ST_CONNECT:		case SSL_ST_BEFORE|SSL_ST_CONNECT:		case SSL_ST_OK|SSL_ST_CONNECT:			if (s->session != NULL)				{				SSLerr(SSL_F_SSL23_CONNECT,SSL_R_SSL23_DOING_SESSION_ID_REUSE);				ret= -1;				goto end;				}			s->server=0;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			/* s->version=TLS1_VERSION; */			s->type=SSL_ST_CONNECT;			if (s->init_buf == NULL)				{				if ((buf=BUF_MEM_new()) == NULL)					{					ret= -1;					goto end;					}				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))					{					ret= -1;					goto end;					}				s->init_buf=buf;				buf=NULL;				}			if (!ssl3_setup_buffers(s)) { ret= -1; goto end; }			ssl3_init_finished_mac(s);			s->state=SSL23_ST_CW_CLNT_HELLO_A;			s->ctx->stats.sess_connect++;			s->init_num=0;			break;		case SSL23_ST_CW_CLNT_HELLO_A:		case SSL23_ST_CW_CLNT_HELLO_B:			s->shutdown=0;			ret=ssl23_client_hello(s);			if (ret <= 0) goto end;			s->state=SSL23_ST_CR_SRVR_HELLO_A;			s->init_num=0;			break;		case SSL23_ST_CR_SRVR_HELLO_A:		case SSL23_ST_CR_SRVR_HELLO_B:			ret=ssl23_get_server_hello(s);			if (ret >= 0) cb=NULL;			goto end;			/* break; */		default:			SSLerr(SSL_F_SSL23_CONNECT,SSL_R_UNKNOWN_STATE);			ret= -1;			goto end;			/* break; */			}		if (s->debug) { (void)BIO_flush(s->wbio); }		if ((cb != NULL) && (s->state != state))			{			new_state=s->state;			s->state=state;			cb(s,SSL_CB_CONNECT_LOOP,1);//.........这里部分代码省略.........
开发者ID:venkatarajasekhar,项目名称:Qt,代码行数:101,


示例28: dtls1_accept

int dtls1_accept(SSL *s) {  BUF_MEM *buf = NULL;  void (*cb)(const SSL *ssl, int type, int value) = NULL;  uint32_t alg_a;  int ret = -1;  int new_state, state, skip = 0;  assert(s->handshake_func == dtls1_accept);  assert(s->server);  assert(SSL_IS_DTLS(s));  ERR_clear_error();  ERR_clear_system_error();  if (s->info_callback != NULL) {    cb = s->info_callback;  } else if (s->ctx->info_callback != NULL) {    cb = s->ctx->info_callback;  }  s->in_handshake++;  for (;;) {    state = s->state;    switch (s->state) {      case SSL_ST_ACCEPT:        if (cb != NULL) {          cb(s, SSL_CB_HANDSHAKE_START, 1);        }        if (s->init_buf == NULL) {          buf = BUF_MEM_new();          if (buf == NULL || !BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {            ret = -1;            goto end;          }          s->init_buf = buf;          buf = NULL;        }        s->init_num = 0;        if (!ssl_init_wbio_buffer(s, 1)) {          ret = -1;          goto end;        }        if (!ssl3_init_handshake_buffer(s)) {          OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);          ret = -1;          goto end;        }        s->state = SSL3_ST_SR_CLNT_HELLO_A;        break;      case SSL3_ST_SR_CLNT_HELLO_A:      case SSL3_ST_SR_CLNT_HELLO_B:      case SSL3_ST_SR_CLNT_HELLO_C:      case SSL3_ST_SR_CLNT_HELLO_D:        s->shutdown = 0;        ret = ssl3_get_client_hello(s);        if (ret <= 0) {          goto end;        }        dtls1_stop_timer(s);        s->state = SSL3_ST_SW_SRVR_HELLO_A;        s->init_num = 0;        break;      case SSL3_ST_SW_SRVR_HELLO_A:      case SSL3_ST_SW_SRVR_HELLO_B:        dtls1_start_timer(s);        ret = ssl3_send_server_hello(s);        if (ret <= 0) {          goto end;        }        if (s->hit) {          if (s->tlsext_ticket_expected) {            s->state = SSL3_ST_SW_SESSION_TICKET_A;          } else {            s->state = SSL3_ST_SW_CHANGE_A;          }        } else {          s->state = SSL3_ST_SW_CERT_A;        }        s->init_num = 0;        break;      case SSL3_ST_SW_CERT_A:      case SSL3_ST_SW_CERT_B:        if (ssl_cipher_has_server_public_key(s->s3->tmp.new_cipher)) {          dtls1_start_timer(s);          ret = ssl3_send_server_certificate(s);          if (ret <= 0) {            goto end;          }          if (s->s3->tmp.certificate_status_expected) {//.........这里部分代码省略.........
开发者ID:Crawping,项目名称:chromium_extract,代码行数:101,



注:本文中的BUF_MEM_grow函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ BUF_MEM_grow_clean函数代码示例
C++ BUFPUTSL函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。