PyObject * _pyccn_cmd_SignedInfo_obj_from_ccn(PyObject *UNUSED(self), PyObject *py_signed_info) { if (!CCNObject_IsValid(SIGNED_INFO, py_signed_info)) { PyErr_SetString(PyExc_TypeError, "Must pass a CObject containing" " a struct ccn_charbuf*"); return NULL; } return SignedInfo_obj_from_ccn(py_signed_info); }
PyObject * ContentObject_obj_from_ccn(PyObject *py_content_object) { struct ccn_charbuf *content_object; struct ccn_parsed_ContentObject *parsed_content_object; PyObject *py_obj_ContentObject, *py_o; int r; struct ccn_charbuf *signature; PyObject *py_signature; struct ccn_charbuf *signed_info; PyObject *py_signed_info; if (!CCNObject_ReqType(CONTENT_OBJECT, py_content_object)) return NULL; content_object = CCNObject_Get(CONTENT_OBJECT, py_content_object); parsed_content_object = _pyccn_content_object_get_pco(py_content_object); if (!parsed_content_object) return NULL; debug("ContentObject_from_ccn_parsed content_object->length=%zd\n", content_object->length); py_obj_ContentObject = PyObject_CallObject(g_type_ContentObject, NULL); if (!py_obj_ContentObject) return NULL; /* Name */ py_o = Name_obj_from_ccn_parsed(py_content_object); JUMP_IF_NULL(py_o, error); r = PyObject_SetAttrString(py_obj_ContentObject, "name", py_o); Py_DECREF(py_o); JUMP_IF_NEG(r, error); /* Content */ py_o = Content_from_ccn_parsed(content_object, parsed_content_object); JUMP_IF_NULL(py_o, error); r = PyObject_SetAttrString(py_obj_ContentObject, "content", py_o); Py_DECREF(py_o); JUMP_IF_NEG(r, error); /* Signature */ debug("ContentObject_from_ccn_parsed Signature\n"); py_signature = CCNObject_New_charbuf(SIGNATURE, &signature); JUMP_IF_NULL(py_signature, error); r = ccn_charbuf_append(signature, &content_object->buf[parsed_content_object->offset[CCN_PCO_B_Signature]], (size_t) (parsed_content_object->offset[CCN_PCO_E_Signature] - parsed_content_object->offset[CCN_PCO_B_Signature])); if (r < 0) { PyErr_NoMemory(); Py_DECREF(py_signature); goto error; } py_o = Signature_obj_from_ccn(py_signature); Py_DECREF(py_signature); JUMP_IF_NULL(py_o, error); r = PyObject_SetAttrString(py_obj_ContentObject, "signature", py_o); Py_DECREF(py_o); JUMP_IF_NEG(r, error); debug("ContentObject_from_ccn_parsed SignedInfo\n"); py_signed_info = CCNObject_New_charbuf(SIGNED_INFO, &signed_info); JUMP_IF_NULL(py_signed_info, error); r = ccn_charbuf_append(signed_info, &content_object->buf[parsed_content_object->offset[CCN_PCO_B_SignedInfo]], (size_t) (parsed_content_object->offset[CCN_PCO_E_SignedInfo] - parsed_content_object->offset[CCN_PCO_B_SignedInfo])); if (r < 0) { PyErr_NoMemory(); Py_DECREF(py_signed_info); goto error; } py_o = SignedInfo_obj_from_ccn(py_signed_info); Py_DECREF(py_signed_info); JUMP_IF_NULL(py_o, error); r = PyObject_SetAttrString(py_obj_ContentObject, "signedInfo", py_o); Py_DECREF(py_o); JUMP_IF_NEG(r, error); debug("ContentObject_from_ccn_parsed DigestAlgorithm\n"); // TODO... Note this seems to default to nothing in the library...? r = PyObject_SetAttrString(py_obj_ContentObject, "digestAlgorithm", Py_None); JUMP_IF_NEG(r, error); /* Original data */ debug("ContentObject_from_ccn_parsed ccn_data\n"); r = PyObject_SetAttrString(py_obj_ContentObject, "ccn_data", py_content_object); JUMP_IF_NEG(r, error); r = PyObject_SetAttrString(py_obj_ContentObject, "ccn_data_dirty", Py_False); JUMP_IF_NEG(r, error); debug("ContentObject_from_ccn_parsed complete\n"); return py_obj_ContentObject; error: Py_XDECREF(py_obj_ContentObject); return NULL; }