extern "C" jstring JNICALL Java_com_iped_ipcam_gui_UdtTools_monitorSocket(JNIEnv *env, jobject thiz, jstring camId) { if (first) { LOGI("### UdtTools monitor_init!"); first = 0; monitor_init(0); } freeSocket(); LOGI("### start monitorSocke"); char* idTmp = jstringToChar(env,camId); id = idTmp; socket1 = monitor_socket_fusion(idTmp); while (1) { if(socket1 == NULL) { return env->NewStringUTF("fusion error"); } LOGI("### wait to connection."); stun_sleep_ms(100); if (socket_fusion_is_usable(socket1) || socket_fusion_is_done(socket1)) { break; } } if (socket_fusion_is_usable(socket1)) { LOGI("### connection success. %p", socket1); return getOK(env); } LOGI("### connection faliled."); return getError(env,socket1); }
//video thread interrupt free socket1 extern "C" void JNICALL Java_com_iped_ipcam_gui_UdtTools_exit(JNIEnv *env, jobject thiz) { freeSocket(); if(id) { free(id); id = NULL; } }
static void clientSocketDisconnected(void *subject, const char *event, void *data, va_list args) { LineServerClient *client = data; LineServer *server = client->server; Socket *client_socket = subject; disableSocketPolling(client_socket); detachEventListener(client_socket, "read", server, &clientSocketRead); detachEventListener(client_socket, "disconnect", server, &clientSocketDisconnected); freeSocket(client_socket); destroyLineServerClient(client); server->open_connections--; if (server->state == RPC_SERVER_STATE_STOPPED) { tryFreeServer(server); } }
/** * A GFunc to free an IRC proxy client. Note that this doesn't remove the IRC proxy client from its parent proxy's client list * * @param client_p a pointer to the IRC proxy client to free * @param quitmsg_p a quit message to send to the disconnecting client */ static void freeIrcProxyClient(void *client_p, void *quitmsg_p) { IrcProxyClient *client = client_p; char *quitmsg = quitmsg_p; if(client->socket->connected && quitmsg != NULL) { // Send quit message proxyClientIrcSend(client, "QUIT :%s", quitmsg); } triggerEvent(client->proxy, "client_disconnected", client); detachEventListener(client, "line", NULL, &listener_clientLine); detachEventListener(client->socket, "read", NULL, &listener_clientRead); detachEventListener(client->socket, "disconnect", NULL, &listener_clientDisconnect); g_hash_table_remove(clients, client->socket); // remove ourselves from the irc proxy client sockets table freeSocket(client->socket); // free the socket g_string_free(client->ibuffer, true); // free the input buffer free(client); // actually free the client }
static void destroyLineServer(LineServer *server) { freeSocket(server->socket); free(server); }