Re: [PATCH 11/18] isimodem: gprs-context updates wgmodem2.5

2011-02-18 Thread Aki Niemi
Hi,

2011/2/15 Andreas Westin andreas.wes...@stericsson.com:
 From: Jessica Nilsson jessica.j.nils...@stericsson.com

 ---
  drivers/isimodem/gprs-context.c |   95 +-
  1 files changed, 62 insertions(+), 33 deletions(-)

 diff --git a/drivers/isimodem/gprs-context.c b/drivers/isimodem/gprs-context.c
 index 6d579d8..f458fcc 100644
 --- a/drivers/isimodem/gprs-context.c
 +++ b/drivers/isimodem/gprs-context.c
 @@ -347,32 +347,52 @@ static void send_context_authenticate(GIsiClient 
 *client, void *opaque)
        struct context_data *cd = opaque;
        size_t username_len = strlen(cd-username);
        size_t password_len = strlen(cd-password);
 +       size_t sb_user_info_len = (3 + username_len + 3)  ~3;
 +       size_t fill_sb_user_info_count =
 +                       sb_user_info_len - (3 + username_len);
 +       uint8_t *fill_sb_user_info_data =
 +                       g_try_malloc0(fill_sb_user_info_count);
 +       size_t sb_password_info_len = (3 + password_len + 3)  ~3;
 +       size_t fill_sb_password_info_count =
 +                       sb_user_info_len - (3 + password_len);

This should be sb_password_info_len, no?

 +       uint8_t *fill_sb_password_info_data =
 +                       g_try_malloc0(fill_sb_password_info_count);

There's no reason to allocate the padding from heap. (Especially if
they're never freed.)

I applied this patch, but fixed the above issues afterwards. Please
check that it's still doing the right thing.

Cheers,
Aki
___
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono


[PATCH 11/18] isimodem: gprs-context updates wgmodem2.5

2011-02-15 Thread Andreas Westin
From: Jessica Nilsson jessica.j.nils...@stericsson.com

---
 drivers/isimodem/gprs-context.c |   95 +-
 1 files changed, 62 insertions(+), 33 deletions(-)

diff --git a/drivers/isimodem/gprs-context.c b/drivers/isimodem/gprs-context.c
index 6d579d8..f458fcc 100644
--- a/drivers/isimodem/gprs-context.c
+++ b/drivers/isimodem/gprs-context.c
@@ -347,32 +347,52 @@ static void send_context_authenticate(GIsiClient *client, 
void *opaque)
struct context_data *cd = opaque;
size_t username_len = strlen(cd-username);
size_t password_len = strlen(cd-password);
+   size_t sb_user_info_len = (3 + username_len + 3)  ~3;
+   size_t fill_sb_user_info_count =
+   sb_user_info_len - (3 + username_len);
+   uint8_t *fill_sb_user_info_data =
+   g_try_malloc0(fill_sb_user_info_count);
+   size_t sb_password_info_len = (3 + password_len + 3)  ~3;
+   size_t fill_sb_password_info_count =
+   sb_user_info_len - (3 + password_len);
+   uint8_t *fill_sb_password_info_data =
+   g_try_malloc0(fill_sb_password_info_count);
 
const unsigned char top[] = {
GPDS_CONTEXT_AUTH_REQ,
cd-handle,
2,  /* sub blocks */
GPDS_USER_NAME_INFO,
-   3 + username_len + 3,
+   sb_user_info_len,
username_len,
/* Username goes here */
};
 
const unsigned char bottom[] = {
GPDS_PASSWORD_INFO,
-   3 + password_len + 3,
+   sb_password_info_len,
password_len,
/* Password goes here */
};
 
-   const struct iovec iov[4] = {
-   { (uint8_t *) top, sizeof(top) },
+   const struct iovec iov[6] = {
+   { (uint8_t *)top, sizeof(top) },
{ cd-username, username_len },
-   { (uint8_t *) bottom, sizeof(bottom) },
+   { fill_sb_user_info_data, fill_sb_user_info_count },
+   { (uint8_t *)bottom, sizeof(bottom) },
{ cd-password, password_len },
+   { fill_sb_password_info_data, fill_sb_password_info_count},
};
 
-   if (!g_isi_client_vsend(client, iov, 4, context_auth_cb, cd, NULL))
+   if (fill_sb_user_info_data == NULL
+fill_sb_user_info_count  0)
+   gprs_up_fail(cd);
+
+   if (fill_sb_password_info_data == NULL
+fill_sb_password_info_count  0)
+   gprs_up_fail(cd);
+
+   if (!g_isi_client_vsend(client, iov, 6, context_auth_cb, cd, NULL))
gprs_up_fail(cd);
 }
 
@@ -393,34 +413,43 @@ static void link_conf_cb(const GIsiMessage *msg, void 
*opaque)
 {
struct context_data *cd = opaque;
size_t apn_len = strlen(cd-apn);
+   size_t sb_apn_info_len = (3 + apn_len + 3)  ~3;
+   size_t fill_count = sb_apn_info_len - (3 + apn_len);
+   uint8_t *fill_data = g_try_malloc0(fill_count);
+
+   if (fill_data == NULL  fill_count  0)
+   return gprs_up_fail(cd);
+
+   if (check_resp(msg, GPDS_LL_CONFIGURE_RESP, 2, cd, gprs_up_fail)) {
+
+   const unsigned char msg[] = {
+   GPDS_CONTEXT_CONFIGURE_REQ,
+   cd-handle, /* context ID */
+   cd-type,   /* PDP type */
+   GPDS_CONT_TYPE_NORMAL,
+   cd-handle, /* primary context ID */
+   0x00,   /* filler */
+   2,  /* sub blocks */
+   GPDS_DNS_ADDRESS_REQ_INFO,
+   4,  /* subblock length */
+   0, 0,   /* padding */
+   GPDS_APN_INFO,
+   sb_apn_info_len,
+   apn_len,
+   };
+
+   const struct iovec iov[3] = {
+   { (uint8_t *)msg, sizeof(msg) },
+   { cd-apn, apn_len },
+   { fill_data, fill_count}
+   };
+
+   if (!g_isi_client_vsend_with_timeout(cd-client, iov, 3,
+   GPDS_TIMEOUT, context_conf_cb, cd, NULL))
+   return gprs_up_fail(cd);
+   } else
+   return gprs_up_fail(cd);
 
-   const unsigned char req[] = {
-   GPDS_CONTEXT_CONFIGURE_REQ,
-   cd-handle, /* context ID */
-   cd-type,   /* PDP type */
-   GPDS_CONT_TYPE_NORMAL,
-   cd-handle, /* primary context ID */
-   0x00,   /* filler */
-   2,  /* sub blocks */
-   GPDS_DNS_ADDRESS_REQ_INFO,
-   4,  /* subblock length */
-   0, 0,   /* padding */
-