[Home]

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-0600Date Closed:2012-02-09 16:34:45.000-0600
Priority:MajorRegression?
Status:Closed/CompleteComponents:Applications/app_queue
Versions:Frequency of
Occurrence
Constant
Related
Issues:
Environment:Asterisk 1.6.2.20, 16.2.22, 1.8Attachments:
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.