void PeerSet::peerHas (Peer::ref ptr) { boost::recursive_mutex::scoped_lock sl (mLock); if (!mPeers.insert (std::make_pair (ptr->getPeerId (), 0)).second) return; newPeer (ptr); }
bool PeerSet::insert (Peer::ptr const& ptr) { ScopedLockType sl (mLock); if (!mPeers.insert (std::make_pair (ptr->id (), 0)).second) return false; newPeer (ptr); return true; }
bool PeerSet::peerHas (Peer::ref ptr) { ScopedLockType sl (mLock, __FILE__, __LINE__); if (!mPeers.insert (std::make_pair (ptr->getPeerId (), 0)).second) return false; newPeer (ptr); return true; }
/* * Class: com_zerotier_sdk_Node * Method: peers * Signature: (J)[Lcom/zerotier/sdk/Peer; */ JNIEXPORT jobjectArray JNICALL Java_com_zerotier_sdk_Node_peers( JNIEnv *env, jobject obj, jlong id) { uint64_t nodeId = (uint64_t) id; ZT_Node *node = findNode(nodeId); if(node == NULL) { // cannot find valid node. We should never get here. return 0; } ZT_PeerList *peerList = ZT_Node_peers(node); if(peerList == NULL) { LOGE("ZT_Node_peers returned NULL"); return NULL; } int peerCount = peerList->peerCount * 100; LOGV("Ensure Local Capacity: %d", peerCount); if(env->EnsureLocalCapacity(peerCount)) { LOGE("EnsureLocalCapacity failed!!"); ZT_Node_freeQueryResult(node, peerList); return NULL; } jclass peerClass = lookup.findClass("com/zerotier/sdk/Peer"); if(env->ExceptionCheck() || peerClass == NULL) { LOGE("Error finding Peer class"); ZT_Node_freeQueryResult(node, peerList); return NULL; } jobjectArray peerArrayObj = env->NewObjectArray( peerList->peerCount, peerClass, NULL); if(env->ExceptionCheck() || peerArrayObj == NULL) { LOGE("Error creating Peer[] array"); ZT_Node_freeQueryResult(node, peerList); return NULL; } for(unsigned int i = 0; i < peerList->peerCount; ++i) { jobject peerObj = newPeer(env, peerList->peers[i]); env->SetObjectArrayElement(peerArrayObj, i, peerObj); if(env->ExceptionCheck()) { LOGE("Error assigning Peer object to array"); break; } } ZT_Node_freeQueryResult(node, peerList); peerList = NULL; return peerArrayObj; }