安全配置是一种依据安全级别区分不同Open Connectivity Foundation(OCF)设备的方法,涉及不同垂直领域设备对安全等级的要求及设备自身的类型。安全配置资源(SP)是OCF设备用来存储设备支持的安全配置以及当前使用配置的存储单元。OCF安全规范在14.8.2.2节定义了安全配置资源及其属性,OCF目前支持四种安全配置类型:sp-baseline-v0、sp-black-v0、sp-blue-v0、sp-purple-v0。在IoTivity中,security/oc_sp.h文件定义了oc_sec_sp_t结构表示安全配置资源,并声明了一系列接口,主要阐述这些结构与接口。安全配置结构定义于《OCF Security Specification》Table 56与Table 57,IoTivity通过oc_sec_sp_t结构实现SP的表示。supported_profiles与current_profile属性是oc_sp_types_t枚举类型的实例,代表OCF定义的四种安全配置。security/oc_sp.c文件中定义了与四种安全配置相对应的唯一标识符(OID)。安全配置管理接口在security/oc_sp.h中声明,用于操作SP结构。这些接口在security/oc_sp.c中实现,每个设备拥有专属的SP资源,管理由一个全局数组实现。SP资源与设备相关联,sp表示当前设备的安全配置资源,sp_mfg_default表示制造商提供的默认安全配置资源。初始化与销毁SP资源的oc_sec_sp_init函数为每个设备的安全配置资源和制造商默认配置资源分配空间,并将默认安全配置资源设置为sp-baseline-v0。oc_sec_sp_free函数用于销毁所有设备的SP资源与制造商默认配置资源。oc_sec_sp_default函数将指定设备的安全配置资源设置为默认值,即制造商提供的默认安全配置资源。oc_sec_get_sp函数获取指定设备的安全配置资源。编码与解码过程涉及oc_sp_types_t类型与对应OID字符串之间的转换。sp_to_string与string_to_sp函数分别实现此功能。oc_sec_encode_sp函数编码指定设备的安全配置资源为CBOR结构,编码过程依据是否需要存储CBOR,以及“oic.if.baseline”等请求条件而定。oc_sec_decode_sp函数将CBOR结构解码到指定设备的安全配置资源中,首先判断当前设备状态,若为RFNOP状态则不允许更新SP资源,否则遍历CBOR结构,处理字符串与字符串数组类型属性。安全配置资源的默认URI为/oic/sec/sp,支持“oic.if.baseline”与“oic.if.rw”接口,支持RETREVE与UPDATE方法。在IoTivity中,get_sp与post_sp函数分别用于处理RETREVE与UPDATE请求。get_sp函数直接调用oc_sec_encode_sp函数将SP资源编码为CBOR负载,并发送应答。post_sp函数使用oc_sec_decode_sp函数解码POST请求负载,并根据解码情况确定应答码。