static void jpf_service_op_stop(jpf_service *ps, tp_block *tb) { if (!ps->running) return; ps->running = 0; if (ps->jpf_client) { LOG_I( "Stop pf service." ); client_kill_unref((client*)ps->jpf_client); ps->jpf_client = NULL; } }
void network_client_kill_unref(network_client *nc) { client_kill_unref((client_t*)nc); }
static void jpf_service_op_timer(jpf_service *ps, tp_block *tb) { rtsp_message *rm = NULL; char url[MAX_URL_LEN]; char ip[MAX_IP_LEN]; RTSP_RESULT res; if (!ps->running) return; if (!ps->jpf_client) { if (--ps->ttl > 0) return; ps->ttl = CONNECT_INTERVAL; jpf_service_connect(ps); } if (!ps->jpf_client) { return; } if (rtsp_impl_ts_client_killed(ps->jpf_client)) { LOG_I( "Mds reset connection." ); client_kill_unref((client*)ps->jpf_client); ps->jpf_client = NULL; return; } if (--ps->ttl > 0) return; ps->ttl = ps->psp.ka; jpf_service_resolve_ip(ps->psp.ip, ip); snprintf(url, MAX_URL_LEN, "rtsp://%s:%d/PUID=%s/keepalive=%d/l4proto=%d", ip, ps->psp.port, ps->psp.puid, ps->psp.ka, ps->psp.l4_proto ); res = rtsp_message_new_request(&rm, RTSP_OPTIONS, url); if (res != RTSP_OK || !rm) { LOG_W( "jpf_service_op_timer()->rtsp_message_new_request() failed." ); return; } rtsp_impl_send_message((rtsp_client*)ps->jpf_client, rm); }
static __inline__ void jpf_service_connect(jpf_service *ps) { int32_t sock, err; struct sockaddr_in sin; client *c; tr_server *server; err = unix_resolve_host(&sin, ps->psp.ip, ps->psp.port); if (err) { LOG_W( "jpf_service_connect()->unix_resolve_host() failed, ip:%s.", ps->psp.ip ); goto __conn_err; } sock = unix_sock_bind(L4_TCP, 0, 0, 0); if (sock < 0) { LOG_W( "jpf_service_connect()->unix_sock_bind() failed." ); err = sock; goto __conn_err; } if (connect(sock, (struct sockaddr*)&sin, sizeof(sin)) < 0) { err = -errno; LOG_W( "jpf_service_connect()->connect() failed, err:'%d'.", err ); goto __conn_err; } c = rtsp_impl_ts_client_new(0, (void*)sock); if (!c) { LOG_W( "jpf_service_connect()->rtsp_impl_ts_client_new() failed." ); close(sock); err = -ENOMEM; goto __conn_err; } server = avs_get_server(); if (!server) { LOG_W( "jpf_service_connect()->avs_get_server() failed." ); client_kill_unref((client*)c); err = -EPERM; goto __conn_err; } client_attach(c, server->sched); ps->jpf_client = (rtsp_ts_client*)c; ps->ttl = 0; LOG_I( "Connect MDS '%s:%d' ok.", ps->psp.ip, ps->psp.port ); return; __conn_err: if (ps->psp.exp_notifier) { (*ps->psp.exp_notifier)(ps->psp.user_data, err); } return; }