static void beacon_moon_bounce_timer_callback( void* ccvp ) { cloneclient_t *cc = (cloneclient_t*)ccvp; char* sought_uuid = cc->unacknowledged_beacon_uuid; BackgroundTimer_remove( beacon_moon_bounce_timerID ); beacon_moon_bounce_timerID = 0; time_t tt = time(0); GHashTableIter iter; gpointer key, value; g_hash_table_iter_init (&iter, peers); while (g_hash_table_iter_next (&iter, &key, &value)) { beacon_announce_t* ba = (beacon_announce_t*)value; if( !strcmp( ba->uuid, sought_uuid )) { printf("it took %d seconds to get a beacon back from the server\n", (int)(tt - cc->unacknowledged_beacon_sendTime) ); strcpy( cc->unacknowledged_beacon_uuid, "" ); cc->unacknowledged_beacon_sendTime = 0; return; } } LogError( _("Collab: A beacon has not been received from the server")); LogError( _("Collab: Please ensure that UDP port 5670 is not firewalled.")); }
void collabclient_free( void** ccvp ) { #ifdef BUILD_COLLAB cloneclient_t* cc = (cloneclient_t*)*ccvp; if( !cc ) return; if( cc->magic_number != MAGIC_VALUE ) { fprintf(stderr,"collabclient_free() called on an invalid client object!\n"); return; } cc->magic_number = MAGIC_VALUE + 1; { int fd = 0; size_t fdsz = sizeof(fd); int rc = zmq_getsockopt( cc->subscriber, ZMQ_FD, &fd, &fdsz ); GDrawRemoveReadFD( 0, fd, cc ); } zsocket_destroy( cc->ctx, cc->snapshot ); zsocket_destroy( cc->ctx, cc->subscriber ); zsocket_destroy( cc->ctx, cc->publisher ); BackgroundTimer_remove( cc->roundTripTimer ); FontView* fv = FontViewFind( FontViewFind_byCollabPtr, cc ); if( fv ) { fv->b.collabClient = 0; } zhash_destroy (&cc->kvmap); free(cc->address); free(cc); *ccvp = 0; #endif }