static int sel_sn(str* res, select_t* s, sip_msg_t* msg) { int local; switch(s->params[s->n - 2].v.i) { case CERT_PEER: local = 0; break; case CERT_LOCAL: local = 1; break; default: BUG("Could not determine certificate\n"); return -1; } return get_sn(res, NULL, local, msg); }
//================================================================ // EFUSE area //================================================================ static int secure_gain_sn(void) // from EFUSE { char buf[128]; char *pTemp=&(psn->factory_id[0]); int ret; if(!get_sn(buf, FROM_KERNEL)){ memcpy(pTemp, buf, CONFIG_EFUSE_SN_DATA_SIZE); psn->status = 0; ret=0; } else{ memset(pTemp, 0, CONFIG_EFUSE_SN_DATA_SIZE); psn->status = -1; ret = -1; } return ret; }
static int pv_sn(sip_msg_t* msg, pv_param_t* param, pv_value_t* res) { int local; if (param->pvn.u.isname.name.n & PV_CERT_PEER) { local = 0; } else if (param->pvn.u.isname.name.n & PV_CERT_LOCAL) { local = 1; } else { BUG("could not determine certificate\n"); return pv_get_null(msg, param, res); } if (get_sn(&res->rs, &res->ri, local, msg) < 0) { return pv_get_null(msg, param, res); } res->flags = PV_VAL_STR | PV_VAL_INT; return 0; }