void WindowEventDispatcher::deregisterWindow(Window* window) { assert(window != nullptr); GLFWwindow* glfwWindow = window->internalWindow(); if (!glfwWindow) return; glfwSetWindowRefreshCallback(glfwWindow, nullptr); glfwSetKeyCallback(glfwWindow, nullptr); glfwSetCharCallback(glfwWindow, nullptr); glfwSetMouseButtonCallback(glfwWindow, nullptr); glfwSetCursorPosCallback(glfwWindow, nullptr); glfwSetCursorEnterCallback(glfwWindow, nullptr); glfwSetScrollCallback(glfwWindow, nullptr); glfwSetWindowSizeCallback(glfwWindow, nullptr); glfwSetFramebufferSizeCallback(glfwWindow, nullptr); glfwSetWindowFocusCallback(glfwWindow, nullptr); glfwSetWindowPosCallback(glfwWindow, nullptr); glfwSetWindowIconifyCallback(glfwWindow, nullptr); glfwSetWindowCloseCallback(glfwWindow, nullptr); removeTimers(window); }
void SessionTimer::updateTimer(AmSession* s, const AmSipReply& reply) { if (!session_timer_conf.getEnableSessionTimer()) return; // only update timer on positive reply if ((reply.code < 200) || (reply.code >= 300)) return; // determine session interval string sess_expires_hdr = getHeader(reply.hdrs, "Session-Expires"); if (sess_expires_hdr.empty()) sess_expires_hdr = getHeader(reply.hdrs, "x"); // compact form session_interval = session_timer_conf.getSessionExpires(); session_refresher = refresh_local; session_refresher_role = UAC; if (!sess_expires_hdr.empty()) { //session_interval = get_session_interval_from(req); unsigned int sess_i_tmp = 0; if (str2i(strip_header_params(sess_expires_hdr), sess_i_tmp)) { WARN("error while parsing Session-Expires header value '%s'\n", strip_header_params(sess_expires_hdr).c_str()); // exception? } else { // this is forbidden by rfc, but to be sure against 'rogue' proxy/uas if (sess_i_tmp < session_timer_conf.getMinimumTimer()) { session_interval = session_timer_conf.getMinimumTimer(); } else { session_interval = sess_i_tmp; } } if (get_header_param(sess_expires_hdr, "refresher") == "uas") { session_refresher = refresh_remote; session_refresher_role = UAS; } } removeTimers(s); setTimers(s); }
void SessionTimer::updateTimer(AmSession* s, const AmSipRequest& req) { if((req.method == "INVITE")||(req.method == "UPDATE")){ remote_timer_aware = key_in_list(getHeader(req.hdrs, SIP_HDR_SUPPORTED),"timer"); // determine session interval string sess_expires_hdr = getHeader(req.hdrs, "Session-Expires", "x"); //session_interval = get_session_interval_from(req); if (!sess_expires_hdr.empty()) { if (str2i(strip_header_params(sess_expires_hdr), session_interval)) { WARN("error while parsing Session-Expires header value '%s'\n", strip_header_params(sess_expires_hdr).c_str()); // exception? session_interval = session_timer_conf.getSessionExpires(); } } else { session_interval = session_timer_conf.getSessionExpires(); } // get Min-SE unsigned int i_minse = session_timer_conf.getMinimumTimer(); string min_se_hdr = getHeader(req.hdrs, "Min-SE"); if (!min_se_hdr.empty()) { if (str2i(strip_header_params(min_se_hdr), i_minse)) { WARN("error while parsing Min-SE header value '%s'\n", strip_header_params(min_se_hdr).c_str()); // exception? } } // calculate actual se unsigned int min = session_timer_conf.getMinimumTimer(); if (i_minse > min) min = i_minse; if ((session_timer_conf.getSessionExpires() < min)|| (session_interval<min)) { session_interval = min; } else { if (session_timer_conf.getSessionExpires() < session_interval) session_interval = session_timer_conf.getSessionExpires(); } // determine session refresher -- cf rfc4028 Table 2 // only if the remote party supports timer and asks // to be refresher we will let the remote party do it. // if remote supports timer and does not specify, // could also be refresher=uac if ((remote_timer_aware) && (!sess_expires_hdr.empty()) && (get_header_param(sess_expires_hdr, "refresher") == "uac")) { DBG("session refresher will be remote UAC.\n"); session_refresher = refresh_remote; session_refresher_role = UAC; } else { DBG("session refresher will be local UAS.\n"); session_refresher = refresh_local; session_refresher_role = UAS; } removeTimers(s); setTimers(s); } else if (req.method == "BYE") { // remove all timers? removeTimers(s); } }