Summary: | ASTERISK-19306: Invalid parameters in rt_handle_member (app_queue.c: create_queue_member: No location at interface '') | ||
Reporter: | Kirill Apanovich (soloma) | Labels: | |
Date Opened: | 2012-02-07 14:20:58.000-0600 | Date Closed: | 2012-02-09 16:34:45.000-0600 |
Priority: | Major | Regression? | |
Status: | Closed/Complete | Components: | Applications/app_queue |
Versions: | Frequency of Occurrence | Constant | |
Related Issues: | |||
Environment: | Asterisk 1.6.2.20, 16.2.22, 1.8 | Attachments: | |
Description: | There are an invalid parameters matched in app_queue.c in find_queue_by_name_rt() and update_realtime_members() functions. rt_handle_member_record(q, interface, ast_variable_retrieve(member_config, interface, "uniqueid"), S_OR(ast_variable_retrieve(member_config, interface, "membername"), interface), ast_variable_retrieve(member_config, interface, "penalty"), ast_variable_retrieve(member_config, interface, "paused"), S_OR(ast_variable_retrieve(member_config, interface, "state_interface"), interface)); You have to got an error app_queue.c: create_queue_member: No location at interface '' I'm not familiar with C as good as i want, but i think that correct code would be like this rt_handle_member_record(q, S_OR(ast_variable_retrieve(member_config, interface, "interface"), interface), ast_variable_retrieve(member_config, interface, "uniqueid"), S_OR(ast_variable_retrieve(member_config, interface, "membername"), interface), ast_variable_retrieve(member_config, interface, "penalty"), ast_variable_retrieve(member_config, interface, "paused"), S_OR(ast_variable_retrieve(member_config, interface, "state_interface"), interface)); or this rt_handle_member_record(q, ast_variable_retrieve(member_config, interface, "interface"), ast_variable_retrieve(member_config, interface, "uniqueid"), S_OR(ast_variable_retrieve(member_config, interface, "membername"), ast_variable_retrieve(member_config, interface, "interface")), ast_variable_retrieve(member_config, interface, "penalty"), ast_variable_retrieve(member_config, interface, "paused"), S_OR(ast_variable_retrieve(member_config, interface, "state_interface"), ast_variable_retrieve(member_config, interface, "interface"))); I got stable version with first way. | ||
Comments: | By: Matt Jordan (mjordan) 2012-02-09 16:34:45.537-0600 This appears to be a configuration problem - interface should never be an empty string when returned from ast_category_browse. Likewise, there is no variable named "interface", so ast_variable_retrieve shouldn't be returning anything. By: Kirill Apanovich (soloma) 2012-02-10 01:35:33.389-0600 For example: my table ast_queue_member UNIQUEID MEMBERNAME QUEUE_NAME INTERFACE PENALTY PAUSED STATE_INTERFACE 1 2711 78550 1 SIP/78550 1 0 SIP/78550 2 66061 78560 2 SIP/78560 1 0 SIP/78560 3 66061 78560 3 SIP/78560 1 0 SIP/78560 Second variable in rt_handle_member_record is inerface, but it is empty. You have to retrieve interface string from a DB. As i understand function ast_variable_retrieve retrieve asterisk variable. When you add realtime member there are no interface variable for queue memeber in asterisk. So you'll get empty string. |