]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Skinny: Avoid message too short for off_hook
authorMathieu Parent <math.parent@gmail.com>
Fri, 21 May 2010 13:35:12 +0000 (15:35 +0200)
committerMathieu Parent <math.parent@gmail.com>
Fri, 21 May 2010 13:36:01 +0000 (15:36 +0200)
Resolve MODSKINNY-1:  FreeSwitch stops working when I use a cisco 7910
phone - FREESWITCH 1.0.6

src/mod/endpoints/mod_skinny/skinny_server.c

index e8106445fe3b27cc0b57bc8ef72292afbfdaca61..ab47d8553b683f055f79c5a6d7324e5e77ef4db1 100644 (file)
@@ -1201,19 +1201,19 @@ switch_status_t skinny_handle_stimulus_message(listener_t *listener, skinny_mess
 
 switch_status_t skinny_handle_off_hook_message(listener_t *listener, skinny_message_t *request)
 {
-       uint32_t line_instance;
+       uint32_t line_instance = 1;
+       uint32_t call_id = 0;
        switch_core_session_t *session = NULL;
        private_t *tech_pvt = NULL;
 
-       skinny_check_data_length(request, sizeof(request->data.off_hook));
-
-       if(request->data.off_hook.line_instance > 0) {
-               line_instance = request->data.off_hook.line_instance;
-       } else {
-               line_instance = 1;
+       if(skinny_check_data_length_soft(request, sizeof(request->data.off_hook))) {
+               if (request->data.off_hook.line_instance > 0) {
+                       line_instance = request->data.off_hook.line_instance;
+               }
+           call_id = request->data.off_hook.call_id;
        }
 
-       session = skinny_profile_find_session(listener->profile, listener, &line_instance, request->data.off_hook.call_id);
+       session = skinny_profile_find_session(listener->profile, listener, &line_instance, call_id);
 
        if(session) { /*answering a call */
                skinny_session_answer(session, listener, line_instance);