mod_gsmopen: add AT+COPS support to get operator name.
For now expose the info in gsmopen_dump and events.
This commit is contained in:
parent
fffb4e8f77
commit
d5f9de4fa3
|
@ -449,6 +449,8 @@ struct private_object {
|
|||
int requesting_imei;
|
||||
char imsi[128];
|
||||
int requesting_imsi;
|
||||
char operator_name[128];
|
||||
int requesting_operator_name;
|
||||
int network_creg_not_supported;
|
||||
char creg[128];
|
||||
|
||||
|
|
|
@ -358,6 +358,15 @@ int gsmopen_serial_config_AT(private_t *tech_pvt)
|
|||
if (res) {
|
||||
DEBUGA_GSMOPEN("AT+CSQ failed\n", GSMOPEN_P_LOG);
|
||||
}
|
||||
|
||||
/* operator name */
|
||||
tech_pvt->requesting_operator_name = 1;
|
||||
res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+COPS?");
|
||||
tech_pvt->requesting_operator_name = 0;
|
||||
if (res) {
|
||||
DEBUGA_GSMOPEN("AT+COPS? failed\n", GSMOPEN_P_LOG);
|
||||
}
|
||||
|
||||
/* IMEI */
|
||||
tech_pvt->requesting_imei = 1;
|
||||
res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+GSN");
|
||||
|
@ -1006,6 +1015,23 @@ int gsmopen_serial_read_AT(private_t *tech_pvt, int look_for_ack, int timeout_us
|
|||
|
||||
}
|
||||
|
||||
if ((strncmp(tech_pvt->line_array.result[i], "+COPS:", 6) == 0)) {
|
||||
int mode, format, rat, err;
|
||||
char oper[128] = "";
|
||||
mode = format = rat = err = 0;
|
||||
|
||||
err = sscanf(&tech_pvt->line_array.result[i][6], "%d,%d,%*[\"]%[^\"]%*[\"],%d", &mode, &format, &oper, &rat);
|
||||
if (err < 3) {
|
||||
DEBUGA_GSMOPEN("|%s| is not formatted as: |+COPS: xx,yy,ssss,nn|\n", GSMOPEN_P_LOG, tech_pvt->line_array.result[i]);
|
||||
} else if (option_debug > 1) {
|
||||
DEBUGA_GSMOPEN("|%s| +COPS: : Mode %d, Format %d, Operator %s, Rat %d\n", GSMOPEN_P_LOG, tech_pvt->line_array.result[i], mode, format, oper, rat);
|
||||
}
|
||||
|
||||
/* if we are requesting the operator name, copy it over */
|
||||
if (tech_pvt->requesting_operator_name)
|
||||
strncpy(tech_pvt->operator_name, oper, sizeof(tech_pvt->operator_name));
|
||||
}
|
||||
|
||||
if ((strncmp(tech_pvt->line_array.result[i], "+CMGW:", 6) == 0)) {
|
||||
int err;
|
||||
|
||||
|
|
|
@ -2422,6 +2422,7 @@ SWITCH_STANDARD_API(gsmopen_dump_function)
|
|||
stream->write_function(stream, "got_signal = %s\n", value);
|
||||
snprintf(value, sizeof(value) - 1, "%d", tech_pvt->running);
|
||||
stream->write_function(stream, "running = %s\n", value);
|
||||
stream->write_function(stream, "operator = %s\n", tech_pvt->operator_name);
|
||||
stream->write_function(stream, "imei = %s\n", tech_pvt->imei);
|
||||
stream->write_function(stream, "imsi = %s\n", tech_pvt->imsi);
|
||||
snprintf(value, sizeof(value) - 1, "%d", tech_pvt->controldev_dead);
|
||||
|
@ -2480,6 +2481,7 @@ SWITCH_STANDARD_API(gsmopen_dump_function)
|
|||
stream->write_function(stream, "got_signal = %s\n", value);
|
||||
snprintf(value, sizeof(value) - 1, "%d", tech_pvt->running);
|
||||
stream->write_function(stream, "running = %s\n", value);
|
||||
stream->write_function(stream, "operator = %s\n", tech_pvt->operator_name);
|
||||
stream->write_function(stream, "imei = %s\n", tech_pvt->imei);
|
||||
stream->write_function(stream, "imsi = %s\n", tech_pvt->imsi);
|
||||
snprintf(value, sizeof(value) - 1, "%d", tech_pvt->controldev_dead);
|
||||
|
@ -2809,6 +2811,7 @@ int dump_event_full(private_t *tech_pvt, int is_alarm, int alarm_code, const cha
|
|||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "got_signal", value);
|
||||
snprintf(value, sizeof(value) - 1, "%d", tech_pvt->running);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "running", value);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "operator", tech_pvt->operator_name);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "imei", tech_pvt->imei);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "imsi", tech_pvt->imsi);
|
||||
snprintf(value, sizeof(value) - 1, "%d", tech_pvt->controldev_dead);
|
||||
|
|
Loading…
Reference in New Issue