bsc_api: Remove the lchan from the USSD code...

This commit is contained in:
Holger Hans Peter Freyther 2010-06-17 17:35:57 +08:00
parent 3f122bed1e
commit d42c3f25a6
5 changed files with 25 additions and 23 deletions

View File

@ -6,6 +6,8 @@
#define MAX_LEN_USSD_STRING 31
struct gsm_subscriber_connection;
struct ussd_request {
char text[MAX_LEN_USSD_STRING + 1];
u_int8_t transaction_id;
@ -14,9 +16,11 @@ struct ussd_request {
int gsm0480_decode_ussd_request(const struct msgb *msg,
struct ussd_request *request);
int gsm0480_send_ussd_response(const struct msgb *in_msg, const char* response_text,
const struct ussd_request *req);
int gsm0480_send_ussd_reject(const struct msgb *msg,
const struct ussd_request *request);
int gsm0480_send_ussd_response(struct gsm_subscriber_connection *conn,
const struct msgb *in_msg, const char* response_text,
const struct ussd_request *req);
int gsm0480_send_ussd_reject(struct gsm_subscriber_connection *conn,
const struct msgb *msg,
const struct ussd_request *request);
#endif

View File

@ -5,6 +5,6 @@
#include <osmocore/msgb.h>
int handle_rcv_ussd(struct msgb *msg);
int handle_rcv_ussd(struct gsm_subscriber_connection *conn, struct msgb *msg);
#endif

View File

@ -3113,7 +3113,7 @@ int gsm0408_dispatch(struct gsm_subscriber_connection *conn, struct msgb *msg)
"GSM 04.08 discriminator 0x%02x\n", pdisc);
break;
case GSM48_PDISC_NC_SS:
rc = handle_rcv_ussd(msg);
rc = handle_rcv_ussd(conn, msg);
break;
default:
LOGP(DRLL, LOGL_NOTICE, "Unknown "

View File

@ -246,8 +246,9 @@ static int parse_process_uss_req(u_int8_t *uss_req_data, u_int8_t length,
}
/* Send response to a mobile-originated ProcessUnstructuredSS-Request */
int gsm0480_send_ussd_response(const struct msgb *in_msg, const char *response_text,
const struct ussd_request *req)
int gsm0480_send_ussd_response(struct gsm_subscriber_connection *conn,
const struct msgb *in_msg, const char *response_text,
const struct ussd_request *req)
{
struct msgb *msg = gsm48_msgb_alloc();
struct gsm48_hdr *gh;
@ -258,8 +259,6 @@ int gsm0480_send_ussd_response(const struct msgb *in_msg, const char *response_t
if (((strlen(response_text) * 7) % 8) != 0)
response_len += 1;
msg->lchan = in_msg->lchan;
/* First put the payload text into the message */
ptr8 = msgb_put(msg, response_len);
gsm_7bit_encode(ptr8, response_text);
@ -295,17 +294,16 @@ int gsm0480_send_ussd_response(const struct msgb *in_msg, const char *response_t
| (1<<7); /* TI direction = 1 */
gh->msg_type = GSM0480_MTYPE_RELEASE_COMPLETE;
return gsm0808_submit_dtap(&msg->lchan->conn, msg, 0);
return gsm0808_submit_dtap(conn, msg, 0);
}
int gsm0480_send_ussd_reject(const struct msgb *in_msg,
const struct ussd_request *req)
int gsm0480_send_ussd_reject(struct gsm_subscriber_connection *conn,
const struct msgb *in_msg,
const struct ussd_request *req)
{
struct msgb *msg = gsm48_msgb_alloc();
struct gsm48_hdr *gh;
msg->lchan = in_msg->lchan;
/* First insert the problem code */
msgb_push_TLV1(msg, GSM_0480_PROBLEM_CODE_TAG_GENERAL,
GSM_0480_GEN_PROB_CODE_UNRECOGNISED);
@ -325,5 +323,5 @@ int gsm0480_send_ussd_reject(const struct msgb *in_msg,
gh->proto_discr |= req->transaction_id | (1<<7); /* TI direction = 1 */
gh->msg_type = GSM0480_MTYPE_RELEASE_COMPLETE;
return gsm0808_submit_dtap(&msg->lchan->conn, msg, 0);
return gsm0808_submit_dtap(conn, msg, 0);
}

View File

@ -38,11 +38,11 @@
const char USSD_TEXT_OWN_NUMBER[] = "*#100#";
/* Forward declarations of network-specific handler functions */
static int send_own_number(const struct msgb *msg, const struct ussd_request *req);
static int send_own_number(struct gsm_subscriber_connection *conn, const struct msgb *msg, const struct ussd_request *req);
/* Entrypoint - handler function common to all mobile-originated USSDs */
int handle_rcv_ussd(struct msgb *msg)
int handle_rcv_ussd(struct gsm_subscriber_connection *conn, struct msgb *msg)
{
struct ussd_request req;
@ -52,20 +52,20 @@ int handle_rcv_ussd(struct msgb *msg)
if (strstr(USSD_TEXT_OWN_NUMBER, req.text) != NULL) {
DEBUGP(DMM, "USSD: Own number requested\n");
return send_own_number(msg, &req);
return send_own_number(conn, msg, &req);
} else {
DEBUGP(DMM, "Unhandled USSD %s\n", req.text);
return gsm0480_send_ussd_reject(msg, &req);
return gsm0480_send_ussd_reject(conn, msg, &req);
}
}
/* A network-specific handler function */
static int send_own_number(const struct msgb *msg, const struct ussd_request *req)
static int send_own_number(struct gsm_subscriber_connection *conn, const struct msgb *msg, const struct ussd_request *req)
{
char *own_number = msg->lchan->conn.subscr->extension;
char *own_number = conn->subscr->extension;
char response_string[GSM_EXTENSION_LENGTH + 20];
/* Need trailing CR as EOT character */
snprintf(response_string, sizeof(response_string), "Your extension is %s\r", own_number);
return gsm0480_send_ussd_response(msg, response_string, req);
return gsm0480_send_ussd_response(conn, msg, response_string, req);
}