return 0;
}
+/**
+ *
+ */
+static void
+cccam_no_services(void *cc)
+{
+ cccam_unset_busy((cccam_t *)cc);
+}
+
/**
*
*/
cccam->cc_send_ecm = cccam_send_ecm;
cccam->cc_send_emm = cccam_send_emm;
cccam->cc_keepalive = cccam_send_ka;
+ cccam->cc_no_services = cccam_no_services;
return (caclient_t *)cccam;
}
* cc_mutex is held
*/
static void
-cc_service_destroy0(th_descrambler_t *td)
+cc_service_destroy0(cclient_t *cc, th_descrambler_t *td)
{
cc_service_t *ct = (cc_service_t *)td;
int i;
free(ct->td_nicename);
free(ct);
+
+ if (LIST_EMPTY(&cc->cc_services) && cc->cc_no_services)
+ cc->cc_no_services(cc);
}
/**
cclient_t *cc = ct->cs_client;
pthread_mutex_lock(&cc->cc_mutex);
- cc_service_destroy0(td);
+ cc_service_destroy0(cc, td);
pthread_mutex_unlock(&cc->cc_mutex);
}
if (st) break;
}
if (!pcard) {
- if (ct) cc_service_destroy0((th_descrambler_t*)ct);
+ if (ct) cc_service_destroy0(cc, (th_descrambler_t*)ct);
goto end;
}
if (ct) {
cc_card_data_t *pcard, const uint8_t *data, int len);
void (*cc_send_emm)(void *cc, cc_service_t *ct, cc_card_data_t *pcard,
uint32_t provid, const uint8_t *data, int len);
+ void (*cc_no_services)(void *cc);
/* Connection */
int cc_fd;