Ejemplo n.º 1
0
static RefNode *
newCommonRef(JNIEnv *env, jobject ref) 
{
    RefNode *node;
    jint slot;

    node = createNode(env, ref);

    /*
     * Add to reference hashtable 
     */
    slot = hashRef(ref);
    node->nextByRef = objectsByRef[slot];
    node->refSlot = slot;
    objectsByRef[slot] = node;

    /*
     * Add to id hashtable 
     */
    slot = hashID((jlong)node->seqNum);
    node->nextByID = objectsByID[slot];
    objectsByID[slot] = node;

    return node;
}
Ejemplo n.º 2
0
void BitcoinP2P::processReject(unique_ptr<Payload> payload)
{
   if (payload->type() != Payload_reject)
   {
      LOGERR << "processReject: expected payload_reject type, got " <<
         payload->typeStr() << " instead";
      return;
   }

   shared_ptr<Payload> payload_sptr(move(payload));
   auto payloadReject = dynamic_pointer_cast<Payload_Reject>(payload_sptr);

   if (payloadReject->rejectType() == Payload_tx)
   {
      auto& txHash = payloadReject->getExtra();
      BinaryDataRef hashRef(&txHash[0], txHash.size());

      //let's check if we have callbacks registered for this tx hash
      {
         auto gettxcallbackmap = getTxCallbackMap_.get();
         auto callbackIter = gettxcallbackmap->find(hashRef);
         if (callbackIter != gettxcallbackmap->end())
         {
            callbackIter->second->setStatus(false);
            callbackIter->second->setMessage(payloadReject->getReasonStr());
            auto prom = callbackIter->second->getPromise();
            prom->set_value(payload_sptr);
         }
      }
   }
}
Ejemplo n.º 3
0
/*
 * Returns the node which contains the common reference for the 
 * given object. The passed reference should not be a weak reference
 * managed in the object hash table (i.e. returned by commonRef_idToRef)
 * because no sequence number checking is done.
 */
static RefNode *
findNodeByRef(JNIEnv *env, jobject ref) 
{
    RefNode *node;
    jint slot = hashRef(ref);

    node = objectsByRef[slot];

    while (node != NULL) {
        if (isSameObject(env, ref, node->ref)) {
            break;
        }
        node = node->nextByRef;
    }

    return node;
}