Exemple #1
0
static inline avp_t *avp_dup(avp_t *avp)
{
	avp_value_t val;
	avp_name_t name;
	str *s;
	
	if (avp) {
		get_avp_val(avp, &val);
		if (avp->flags & AVP_NAME_STR) {
			s = get_avp_name(avp);
			if (s) name.s = *s;
			else {
				name.s.s = NULL;
				name.s.len = 0;
			}
		}
		else name.n = avp->id;
		return create_avp(avp->flags, name, val);
	}
	return NULL;
}
Exemple #2
0
static pana_avp_list_t paa_avplist_create(pana_session_t * pacs, uint32_t AVP, ...) {
    va_list ap;
    pana_avp_codes_t reqAVP = AVP;
    pana_avp_t * tmp_avp = NULL;
    paa_ctx_t * ctx = NULL;
    pana_avp_list_t tmpavplist = NULL;
    uint8_t * tmpval = NULL;
    
    if (!pacs) {
        return NULL;
    }
    ctx=pacs->ctx;
    if(!ctx) {
        return NULL;
    }
    
    va_start(ap,AVP);
    do {
        switch (reqAVP & 0xffff) {
        
        case PAVP_NONCE:
            if (pacs->sa == NULL) {
                break;
            }
            if (os_get_random(pacs->sa->PaC_nonce,
                    sizeof(pacs->sa->PaC_nonce)) < 0) {
                DEBUG("Nonce couldn't be generated");
            }
            dbg_hexdump(MSG_SEC, "Generated Nonce contents", 
                    pacs->sa->PaC_nonce, sizeof(pacs->sa->PaC_nonce));

            tmp_avp = create_avp(PAVP_NONCE, FAVP_FLAG_CLEARED, 0,
                    pacs->sa->PaC_nonce, sizeof(pacs->sa->PaC_nonce));
            tmpavplist = avp_list_insert(tmpavplist, avp_node_create(tmp_avp));
            break;
            
        case PAVP_EAP_PAYLOAD:
            if (ctx->eap_resp_payload == NULL) {
                break;
            }
            tmp_avp = create_avp(PAVP_EAP_PAYLOAD, FAVP_FLAG_CLEARED, 0,
                    bytebuff_data(ctx->eap_resp_payload),
                    ctx->eap_resp_payload->used);
            tmpavplist = avp_list_insert(tmpavplist, avp_node_create(tmp_avp));
            break;
            
        case PAVP_RESULT_CODE:
            tmpval = szalloc(uint32_t);
            buff_insert_be32(tmpval, (reqAVP >> 16) & 0xffff);
            tmp_avp = create_avp(PAVP_RESULT_CODE, FAVP_FLAG_CLEARED, 0,
                    tmpval, sizeof(uint32_t));
            tmpavplist = avp_list_insert(tmpavplist, avp_node_create(tmp_avp));
            break;
        }
        
        reqAVP = va_arg(ap, pana_avp_codes_t);
    } while (reqAVP != PAVP_NULL);

    va_end(ap);
    
    return tmpavplist;
}