Ejemplo n.º 1
0
/**
 * Imitate Interest::get(InterestLite& interestLite).
 * @param interest The Python Interest object to get from.
 * @param interestLite The InterestLite to update.
 * @param pool1 This calls pool1.reset to store a temporary value which must
 * remain valid while interestLite is used.
 * @param pool2 This calls pool2.reset to store a temporary value which must
 * remain valid while interestLite is used.
 */
static void
toInterestLite
  (PyObject* interest, InterestLite& interestLite, PyObjectRef& pool1,
   PyObjectRef& pool2)
{
  PyObjectRef name(PyObject_CallMethodObjArgs(interest, str.getName, NULL));
  toNameLite(name, interestLite.getName());

  // If the value is None, PyInt_AsLong returns -1 as desired.
  interestLite.setMinSuffixComponents
    ((int)toLongByMethod(interest, str.getMinSuffixComponents));
  interestLite.setMaxSuffixComponents
    ((int)toLongByMethod(interest, str.getMaxSuffixComponents));

  PyObjectRef keyLocator(PyObject_CallMethodObjArgs(interest, str.getKeyLocator, NULL));
  toKeyLocatorLite(keyLocator, interestLite.getKeyLocator());

  PyObjectRef exclude(PyObject_CallMethodObjArgs(interest, str.getExclude, NULL));
  toExcludeLite(exclude, interestLite.getExclude());

  interestLite.setChildSelector
    ((int)toLongByMethod(interest, str.getChildSelector));
  interestLite.setMustBeFresh(toBoolByMethod(interest, str.getMustBeFresh));
  interestLite.setInterestLifetimeMilliseconds
    (toDoubleByMethod(interest, str.getInterestLifetimeMilliseconds));
  interestLite.setNonce(toBlobLiteByMethod(interest, str.getNonce));
  interestLite.setApplicationParameters(toBlobLiteByMethod(interest, str.getApplicationParameters));

  PyObjectRef forwardingHint
    (PyObject_CallMethodObjArgs(interest, str.getForwardingHint, NULL));
  if (toLongByMethod(forwardingHint, str.size) > 0) {
    // InterestLite only stores the encoded delegation set. Cache the wire
    // encoding in pool2 long enough to encode the Interest.
    // TODO: Support the wireFormat param.
    // TODO: Catch exceptions from wireEncode.
    pool2.reset(PyObject_CallMethodObjArgs
      (forwardingHint, str.wireEncode, NULL));
    PyObjectRef forwardingHintWireEncodingArray
      (PyObject_GetAttr(pool2, str._array));
    interestLite.setForwardingHintWireEncoding
      (toBlobLiteFromArray(forwardingHintWireEncodingArray));
  }
  else
    interestLite.setForwardingHintWireEncoding(BlobLite());

  // TODO: Support the wireFormat param.
  // TODO: Catch exceptions from getLinkWireEncoding.
  pool1.reset(PyObject_CallMethodObjArgs(interest, str.getLinkWireEncoding, NULL));
  PyObjectRef linkWireEncodingArray(PyObject_GetAttr(pool1, str._array));
  if (linkWireEncodingArray.obj == Py_None)
    interestLite.setLinkWireEncoding(BlobLite());
  else
    interestLite.setLinkWireEncoding(toBlobLiteFromArray(linkWireEncodingArray));
  interestLite.setSelectedDelegationIndex
    ((int)toLongByMethod(interest, str.getSelectedDelegationIndex));
}
Ejemplo n.º 2
0
/**
 * Imitate Interest::get(InterestLite& interestLite).
 * @param interest The Python Interest object to get from.
 * @param interestLite The InterestLite to update.
 * @param pool1 This calls pool1.reset to store a temporary value which must
 * remain valid while interestLite is used.
 */
static void
toInterestLite
  (PyObject* interest, InterestLite& interestLite, PyObjectRef& pool1)
{
  PyObjectRef name(PyObject_CallMethodObjArgs(interest, str.getName, NULL));
  toNameLite(name, interestLite.getName());

  // If the value is None, PyInt_AsLong returns -1 as desired.
  interestLite.setMinSuffixComponents
    ((int)toLongByMethod(interest, str.getMinSuffixComponents));
  interestLite.setMaxSuffixComponents
    ((int)toLongByMethod(interest, str.getMaxSuffixComponents));

  PyObjectRef keyLocator(PyObject_CallMethodObjArgs(interest, str.getKeyLocator, NULL));
  toKeyLocatorLite(keyLocator, interestLite.getKeyLocator());

  PyObjectRef exclude(PyObject_CallMethodObjArgs(interest, str.getExclude, NULL));
  toExcludeLite(exclude, interestLite.getExclude());

  interestLite.setChildSelector
    ((int)toLongByMethod(interest, str.getChildSelector));
  interestLite.setMustBeFresh(toBoolByMethod(interest, str.getMustBeFresh));
  interestLite.setInterestLifetimeMilliseconds
    (toDoubleByMethod(interest, str.getInterestLifetimeMilliseconds));

  // TODO: Support the wireFormat param.
  // TODO: Catch exceptions from getLinkWireEncoding.
  pool1.reset(PyObject_CallMethodObjArgs(interest, str.getLinkWireEncoding, NULL));
  PyObjectRef linkWireEncodingArray(PyObject_GetAttr(pool1, str._array));
  if (linkWireEncodingArray.obj == Py_None)
    interestLite.setLinkWireEncoding(BlobLite());
  else
    interestLite.setLinkWireEncoding(toBlobLiteFromArray(linkWireEncodingArray));
  interestLite.setSelectedDelegationIndex
    ((int)toLongByMethod(interest, str.getSelectedDelegationIndex));
}